Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Это пример пользовательской светодиодной программы, написанной на ассемблере Z80 для компьютера z80-mbc2.
Я сделал это упражнение по тестированию и доработке, это моя первая программа Z80 за более чем 35 лет.
Наслаждаться
Запасы
Компьютер z80-mbc2
Копия Z80ASM от SLR Systems Rel. 1.32, загружаемый из многих архивов cp / m
В качестве редактора я использовал ZDE16, так как он уже был в загрузочном образе CP / M для z80-mbc2.
Шаг 1. Установите Z80asm на свой Z80-mbc2
Я предполагаю, что вы знакомы с инструментами, которые у вас есть для Z80-MBC2, а именно с любой версией cpmtools, которую вы используете. Вот шаги, если вы используете версии командной строки:
- Загрузите файлы z80asm.com и z80asm.doc (необязательно) в каталог где-нибудь на вашем компьютере.
- Вставьте SD-карту в тот же компьютер, я предполагаю, что ниже она отображается как диск E: ниже.
- Я поместил ассемблер на свой CP / M диск A, для cp / m 2.2 это будет образ диска DS0N00. DSK
- Команда: cpmcp -f z80mbc2-d0 e: DS0N00. DSK z80asm.com 0: скопирует файл z80asm.com в образ
- Команда cpmcp -f z80mbc2-d0 e: DS0N00. DSK z80asm.doc 0: скопирует документацию на диск (необязательно)
При загрузке cp / m 2.2 на вашем z80-mbc теперь у вас должны быть z80asm.com и z80asm.doc (необязательно) на диске A
Шаг 2: Скопируйте исходный код себе Z80-mbc2
Подключитесь к z80-mbc с помощью терминальной программы
Я предлагаю вам использовать незаполненный диск для сохранения исходного кода, например f: чтобы выбрать этот тип диска:
F:
через несколько секунд вы увидите приглашение F:.
теперь используйте программу zde16 на диске A для редактирования пустого файла:
а: zde16 myled.z80
Это создаст файл с именем myled.z80 на диске F:, обратите внимание: для работы z80asm в имени требуется.z80.
Теперь скопируйте и вставьте приведенный ниже код, в зависимости от скорости вашего терминала и т. Д. Вам, возможно, придется копировать и вставлять небольшие участки. Или введите его! вернуть ощущение 1980-х.
;
; Протестируйте пользовательский светодиод и пользовательский ключ; BDOS equ 05h; cp / m точка входа BDOS USRLED equ 0; код операции для управления пользовательским светодиодом USRKEY equ 80h; код операции для управления пользовательским переключателем DPORT equ 0; порт данных ввода / вывода CPORT equ 1; вывод командного порта; org 0100h; ld (estack), sp; сохранить существующую информацию для возврата в cp / m ld sp, stack; ld hl, msg; hello message call _puts lp: ld a, 1; turn on = 1 call led call delay; delay and wait for key (s) jr nz, finish; ненулевое значение означает, что клавиша / переключатель нажата xor a; a = 0 вызов светодиод задержки вызова; задержка или ожидание клавиши / переключателя jr z, lp; если ноль, нет клавиши / переключателя, перейти снова; finish: xor a; была нажата клавиша или переключатель, так что сделано call led ld hl, bye; say bye call _puts; display msg HL = ld sp, (estack); original stack ret; return to cp / m; led: push af; сохранить значение светодиода 0 или 1 ld a, USRLED out (CPORT), a; optcode отправлен pop af out (DPORT), a; данные отправлены ret;; Цикл задержки, который проверяет нажатие клавиши на терминале или задержку пользовательской клавиши: ld bc, 00e00h; примерно 1/2 с 8 МГц CPU, чистое предположение loop2: dec bc; подсчитывать нажатие на цикл bc; сохранять регистры при вызове BDOS push de ld c, 6; необработанный ввод-вывод BDOS проверяет, нажата ли клавиша ld e, 0ffh call BDOS pop de; получить наши значения обратно из стека pop bc или a; проверить, нажата ли клавиша на терминале ret nz; yes return (также сохраняет установленный флаг nz) ld a, USRKEY; Теперь проверьте выход ключа пользователя (CPORT), a; порт команды в a, (DPORT); ключ чтения и a, 1; интересует только бит 0 ret nz; возврат, если пользовательская клавиша нажата ld a, b; или bc = 0 или c jr nz, loop2; счет не завершен, перейти снова x или a; установить флаг z в 0 ret; вернуть ни одной нажатой клавиши, конец задержки; _puts: push bc; сохранить наши регистры, готовые для вызовов bdos push de nxt: ld a, (hl); получить char или a; проверить, 0, конец сообщения jr z, готово; да, готово ld e, a; настроить вызов BDOS для печати char ld c, 2 push hl; сохранить текстовый указатель call BDOS; распечатать его pop hl inc hl; next char jr nxt; продолжить работу done: pop de; завершено восстановление regs pop bc ret; и return; msg db 'User LED test, любая клавиша для выхода' db 0ah, 0dh, 0 bye db 'Exit' db 0ah, 0dh, 0 estack dw 0 ds 256 - 2 stack: dw 0
Сохраните файл с помощью ESC x. См. Руководство по использованию ZDE16 для получения дополнительной информации, это немного похоже на wordstar для большинства операций редактирования, за исключением того, что параметры Ctrl-K отличаются.
Шаг 3: скомпилируйте и запустите программу
Когда у вас есть исходный код на машине.
Тип:
F>
F> a: z80asm myled / a Z80ASM Авторские права (C) 1983-86, SLR Systems Rel. 1.32 MYLED / A Конец файла Pass 1 0 Обнаружены ошибки. 406 абсолютных байтов. Обнаружено 16 символов.
Это будет искать файл myled.z80 и создавать двоичный файл (.com), это то, что означает параметр / a.
Дополнительную информацию см. В файле z80asm.doc.
Чтобы запустить программу, введите:
F> мылед
Пользовательский тест светодиода, любая клавиша для выхода Exit F>
Для выхода нажмите либо пользовательскую кнопку, либо клавишу на терминале.
Выполнено.