Первая пользовательская программа для EPS-103
Следующим логическим шагом в попытке модифицировать EPS-103 является написание короткой программы, которую можно было бы запустить в устройстве. Конечно, мы не начнем с перезаписи оригинальной прошивки. На этом этапе мы просто опробуем весь процесс разработки программы на чем-нибудь простом. Учебники по программированию обычно начинаются с «Hello world». Придерживаемся традиции и напишем программу, которая будет выводить эту надпись на дисплей при включении EPS-103.
Выбрать язык программирования, как правило, просто. Из-за размера EPROM и RAM это будет ассемблер. Забудьте о C или любом более высоком языке программирования. Даже с включенными оптимизациями их код всегда будет длиннее. Другой причиной использования ассемблера является тот факт, что исходная прошивка все еще имеет свои данные в оперативной памяти, которые мы не должны повредить. Поэтому необходимо иметь полный контроль над написанной программой.
Это означает, что нам нужно знать ассемблер 8085. Это не означает, что нам нужно запомнить все инструкции. Но некоторая документация, безусловно, была бы полезна. Вы можете найти намного больше в Интернете. К сожалению, процессор 8085 сильно устарел с сегодняшней точки зрения, и информации о нем сохранилось немного. Вот почему я подготовил несколько основных документов, которые помогут вам начать работу. Вы можете найти их в общем файле SDK8085.zip. К моему удивлению, мы все еще можем найти онлайн-симулятор 8085 сегодня. По мере прохождения программы вы увидите, как отдельные инструкции влияют на содержимое регистров.
Для написания программы будет достаточно любого текстового редактора. Важно только, чтобы редактор не добавлял к написанному тексту никаких собственных тегов. Мне нравится использовать PSPad. Использование интегрированной среды разработки оставим на потом.
И пора приступать к написанию исходного текста. Конечно меня вдохновила оригинальная прошивка. Самое главное — установить стек на правильный адрес в оперативной памяти. Это гарантирует, что инструкции, использующие стек, не перезапишут другую часть памяти. Вот почему мы начнем с этого. Кроме того, я предполагаю, что некоторые из вас будут проводить эти эксперименты с прикрепленным моторным блоком ЭПР-203. Поэтому на следующем шаге необходимо инициализировать схему 8255А и установить на выходе ПК значение 0. Это означает отключение двигателей. Затем мы можем инициализировать дисплей и отправить на него надпись. Мы завершаем выполнение программы бесконечным циклом. Или инструкции HLT. На ассемблере такая программа может выглядеть так:
; Hello world
jmp Start
.ORG 0040h
.dseg
mystring .text "Hello world"
.cseg
Start: lxi sp, 4700h ; Set Stack Address
mvi a, 82h ; CW
sta 5803h ; 8255A Write Control Word
xra a
sta 5802h ; 0 -> PortC: stop motors
mvi a, 0Ch ; LCD Command: Display on, cursor off
call sub_1B70 ; Command -> LCD
lxi h, mystring ; Address of text
mvi b, 0Bh ; Number of characters
Loc01: mov a, m
call sub_1B77 ; Character -> LCD
inx h ; Address of next characters
dcr b ; Decrement counter
jnz Loc01
Stop: jmp Stop ; Neverending loop
hlt ; For sure
; Write 1 byte command
sub_1B70: call sub_1B7E ; Wait for LCD ready
sta 4802h ; Write command byte
ret
; Write 1 byte data
sub_1B77: call sub_1B7E ; Wait for LCD ready
sta 4803h ; Write data byte
ret
; Wait for LCD ready
sub_1B7E: push psw
loc_1B7F: lda 4800h ; Read LCD status
ani 80h ; Test bit 7: 0 = ready
jnz loc_1B7F ; if not, repeat
pop psw
ret
.END
Сохраняем текст в файле *.asm в любом из наших рабочих каталогов. Следующим шагом будет перевод исходного текста в машинный код. Обычно это делается через объектный файл *.obj. Целевой машинный код также может быть в формате *.bin. Программа, которая сделает эту работу за нас, называется компилятором/компоновщиком. Я использовал программу tasm.exe. В файле tasm32.zip вы найдете две таблицы набора инструкций и документацию. Добавьте программу в рабочий каталог. Его можно запустить в командной строке Windows, включая Win10. Фактический перевод выполняется с помощью команды:
TASM.EXE -t85 -b Test01.asm Test01.bin
Указанные параметры означают:
- -t85: использует таблицу инструкций процессора 8085 из файла TASM85.TAB
- -b: создает чистый двоичный код машинного кода
- Test01.asm: имя исходного текстового файла
- Test01.bin: имя выходного файла машинного кода
Чтобы начать перевод, нужно открыть окно командной строки и перейти в нашу рабочую директорию с компилятором и исходным текстом. Чтобы упростить себе работу, я написал простой файл для запуска Run.cmd. Благодаря этому мне не нужно запускать окно командной строки вручную. Файл находится в рабочей директории и в первой строке написана команда для перевода. Во второй строке я набрал cmd /k
, из-за чего окно командной строки не закрывается. Поэтому после завершения перевода я могу прочитать любые сообщения об ошибках. Итак, у меня есть эти файлы в моем рабочем каталоге:
- Run.cmd
- TASM.EXE
- TASM85.TAB
- Test01.asm
Полученный двоичный файл загружается программатором в стертую память EPROM. И это все. Когда вы захотите внести какие-либо изменения в программную часть прошивки, в вашем распоряжении уже есть основные необходимые инструменты. Вы можете скачать все описанные здесь файлы одним пакетом SDK8085.zip.