Ну вот, жизненный цикл макетки подошел к завершению. Свои задачи она выполнила и теперь ей на смену должна прийти другая, более сложная.
Вот простейший "монитор", который я для нее написал. Работает он через последовательный порт. Его основная функция - загрузка файлов через терминал в ОЗУ и запуск программ с адреса 8000h. Кроме того имеются подпрограммы ввода и вывода. Ввод с использованием прерываний и аппаратным управлением потоком.
Схема контроллера простейшая, включение компонентов типовое - КР580ВМ80, КР580ГФ24 с кварцем 22.1184 Мгц, КР580ВК28(38), В качестве ПЗУ используется AT28C64, начинается с адреса 0000h, ОЗУ статика КР537РУ10 2кб с адреса 8000h. "Дешифратор адреса" выполнен на ЛА3, тактовая частота процессора 2.4576 МГц подается и на тактовый вход КР580ВВ51. Поделенные на 16 при помощи ИЕ5 тактовые импульсы подаются на /TxC /RxC ВВ51, обеспечивая скорость порта 2400 и 9600.Код:include "8085.inc" ;----RST 0--------------------------------------------------------------------------------------------------------- di lxi sp,ramtop jmp init nop ;----RST 1---Разрешение передачи /RTS вкл----------------------------------------------------- mvi a,rxe+txen+dtr+rts out cusart ret nop nop nop ;----RST 2---Вывод строки [HL] в терминал--------------------------------------------------- strout: mov a,m ; загрузка символа ana a ; проверка конца сообщения rz rst 3 ; вывод символа inx h jmp strout ; к следующему символу ;----RST 3--Вывод символа в терминал--------------------------------------------------------- chout: push psw sym1: in cusart ; загрузка слова состояния ani txrdy+dsr ; проверочная маска cpi txrdy+dsr ; проверка готовности передатчика jnz sym1 ; если не готов то sym1 pop psw out dusart ; вывод в порт ret nop nop ;----RST 5--Вывод HEX в терминал--------------------------------------------------------------- hexout: push psw rrc rrc rrc rrc call nibout pop psw call nibout ret nop nop nop ;----RST 7--Обработчик прерываний УСАПП------------------------------------------------ int: push psw mvi a,rxe+txen+dtr out cusart ; /RTS выкл in dusart ; чтение из порта sta lastch ; сохранение символа в переменной pop psw ei ret ;------Главный цикл-------------------------------------------------------------------------------------- loop: hlt ; ожидание lda lastch ; последний принятый символ rst 3 ; вывод символа cpi 6Ch ; если "L" jz sload ; то переход к загрузке cpi 67h ; если "G" jz goto ; запуск программы в озу rst 1 ; /RTS вкл jmp loop ;------Загрузка через порт-------------------------------------------------------------------------- sload: lxi h,loadstr ; адрес строки rst 2 ; вывод строки lxi h,ramp ; загрузка указателя rst 1 ; /RTS вкл sload1: hlt lda lastch ; загружаем байт в аккумулятор mov m,a ; записываем в память inx h ; HL+1 rst 3 ; вывод символа rst 1 ; /RTS вкл jmp sload1 ; цикл загрузки ;------Запуск программы с адреса 8000h--------------------------------------------------- goto: lxi h,gotostr ; адрес строки rst 2 ; вывод строки rst 1 ; /RTS вкл call 8000h lxi h,endstr ; адрес строки rst 2 ; вывод строки rst 1 ; /RTS вкл ret ;------Инициализация----------------------------------------------------------------------------------- init: call initusart lxi h,introstr ; адрес строки rst 2 ; вывод строки ei jmp loop ;---Установка ВВ51 в исходное состояние----------------------------------------------- initusart: xra a out cusart out cusart out cusart mvi a,ir ; Сброс out cusart mvi a,s2400 out cusart ; Установка режима порта rst 1 ; /RTS вкл ret ;----печать HEX младшего полубайта---------------------------------------------------- nibout: ani 0Fh cpi 0Ah jm nib1 adi 7 nib1: adi 30h rst 3 ; вывод символа ret ;-------------------------------------Данные---------------------------------------------------------------- introstr: db 0dh,'Monitor nano:',0dh,00h loadstr: db 0dh,'Loading:',0dh,00h gotostr: db 0dh,'Go 8000h',0dh,00h endstr: db 0dh,'End program.',0dh,00h ;--------------------Константы и указатели-------------------------------------------------------- ramtop= 087DFh ; Верхушка свободной памяти ramp= 08000h ; Начало оперативной памяти lastch= 087E1h ; Редактируемый символ ;---Адреса регистров УСАПП---------------------------------------------------------------------- dusart= 00h ; регистр данных cusart= 01h ; регистр команд ;---Режимы УСАПП-------------------------------------------------------------------------------------- s9600= 04Eh ;9600_8_no_1 s2400= 04Fh ;2400_8_no_1 ;---Команды УСАПП------------------------------------------------------------------------------------ txen= 01h ; Передатчик включен dtr= 02h ; Устройство готово rxe= 04h ; Приемник включен sbrk= 08h ; Прерывание передачи er= 10h ; Сброс ошибок приема rts= 20h ; Передача разрешена ir= 40h ; Программный сброс eh= 80h ; Режим Hunt ;---Регистр состояния УСАПП----------------------------------------------------------------------- txrdy= 01h ; Передатчик готов rxrdy= 02h ; Приемник готов txe= 04h ; Передача закончена pe= 08h ; Ошибка четности oe= 10h ; Ошибка переполнения fe= 20h ; Ошибка формата syndet= 40h ; Синхросимвол найден dsr= 80h ; Передатчик терминала готов




Ответить с цитированием