; Монитор для РАДИО-86РК ; Реализация 2 Октябрь 1993 года ;####################################################### ; Значения адресов ввода-вывода ; Адреса переменных для работы и значения констант ;####################################################### ; PORTU: .equ 80H ;Порт управления PORTA: .equ 82H ;Порт А PORTB: .equ 83H ;Порт В PORTC: .equ 81H ;Порт С PMAG: .equ 1 ;Магнитофон ввод-вывод PICK: .equ 40H ;Последовательный порт - управление PICD: .equ 41H ;Последовательный порт - данные PBEL: .equ 4 ;Вывод на динамик PRTA: .equ 0007H ;Для клавиатуры PRTB: .equ 0006H ;но не ППИ, а просто PRTC: .equ 0005H ;регистры данных CADR: .equ 0F700H ;Адрес начала рабочей области Монитора CZNM: .equ CADR+2 CMSK: .equ CZNM+2 REA: .equ CMSK+1 RF3: .equ REA+1 REB: .equ RF3+3 RED: .equ REB+2 RAC: .equ RED+2 STEK: .equ CADR+0FFH;Стек Монитора WKEN: .equ CADR+5FH ;Верхняя граница рабочей области R0C: .equ CADR+14H R97: .equ R0C+2 ADRRG: .equ R97+2 R56: .equ ADRRG+4 ;Ячейка для хранения стека R0B: .equ R56+2 R91: .equ CADR+23H R92: .equ R91+2 AOTLG: .equ R91+3 ;Отладочный режим Адрес п/п обработки R68: .equ AOTLG+1 ;3 вводимый параметр R67: .equ R68+2 ;2 вводимый параметр R66: .equ R67+2 ;1 вводимый параметр R7A: .equ R66+2 RB3: .equ R7A+1 MREAD: .equ R7A+2 ;Константы магнитофона RA7: .equ MREAD+1 MXMEM: .equ MREAD+2 ;Адрес верхней границы ОЗУ WORK: .equ MXMEM+2 CWRK: .equ WORK+2 ARESM: .equ CWRK+1 R7B: .equ ARESM+1 MSIZE: .equ 0DFFFH ;Размер ОЗУ CONST: .equ 1B29H ;Константы для записи и чтения на магнитофон RASHI: .equ 0B800H R73: .equ 0F8F1H R93: .equ 0030H R95: .equ 0031H CRTDA: .equ 0C000H CRTRK: .equ 0C001H DMARK: .equ 0E008H DMAA2: .equ 0E004H BELL1: .equ 5D7CH ;Константа длительности и высоты тона сигнала E1STR: .equ 0E8C0H E2STR: .equ 0E900H ESIZE: .equ 0640H EMAX: .equ 0EFFFH ;Верний адрес экранного ОЗУ ESI2: .equ 0801H ;Размер экранного ОЗУ RDE: .equ 0308H RDF: .equ 0FFC0H RE0: .equ 0040H RE2: .equ 0FA00H RE3: .equ 0040H RED4: .equ 0FFC0H RE6: .equ 0600H RE8: .equ 0008H RF1: .equ 5003H R01: .equ 0302H R0A: .equ 0A616H ; ;Стартовый адрес начала Монитора ; .org 0F800H ;############################### ; ; Основной БЛОК ПОДПРОГРАММ ; JMP MON ;Переход на Монитор JMP CI ;Подпрограмма ввода с консоли JMP MI ;Подпрограмма ввода с магнитофона JMP CO ;Подпрограмма вывода на консоль символа JMP MO ;Подпрограмма вывода на магнитофон JMP CO ;Подпрограмма вывода на консоль СИМВОЛА JMP STS ;Подпрограмма проверки состояния ввода с консоли JMP OHX ;Подпрограмма вывода на консоль 16 значения JMP CON ;Подпрограмма вывода на консоль сообщения JMP SCO ;Подпрограмма опроса кода нажатой клавиши JMP CRS ;Подпрограмма запроса положения курсора на экране JMP ADR ;Подпрограмма запроса байта с экрана JMP BMI ;Подпрограмма ввода блока с магнитофона JMP BMO ;Подпрограмма вывода блока на магнитофон JMP CBL ;Подпрограмма подсчета контроьной суммы JMP PSK ;Подпрограмма запуска отображения JMP MSI ;Подпрограмма получения адреса ОЗУ JMP WSI ;Подпрограмма записи адреса ОЗУ ;################################################################ ; Основной цикл ;################################################################ MON: XRA A LXI SP,STEK ;Указатель стека LXI H,CADR ;Начало рабочей области ОЗУ LXI D,WKEN ;конец рабочей области ОЗУ MVI C,00H CALL FILL ;Обнуление рабочей области LXI H,STEK SHLD R56 ;Сохранение области стека LXI H,MSG CALL CON ;Вывод заставки Монитора LXI H,MSIZE SHLD MXMEM ;Верхняя граница ОЗУ LXI H,CONST ;Константы для работы с магнитофоном SHLD MREAD MVI A,0C3H ;Команда JMP STA AOTLG ;для отладочного режима ; ;Основной цикл обработки введенных директив ; MON1: LXI SP,STEK ;Указатель стека на место LXI H,APRMT ; CALL CON ;Вывести промптер на экран OUT PRTC ; CALL R60 ; LXI H,MON1 ;Адрес входа для возврата в Монитор PUSH H ; LXI H,ARESM ; MOV A,M ; CPI 'X' ; JZ XREG ;Вывод содержимого регистров и их изменение CPI '' ;55H JZ RASHI ; PUSH PSW ; CALL R65 ;ПОЛУЧЕНИЕ АДРЕСОВ ДЛЯ ПОДПРОГРАММ LHLD R66 ;АДРЕС начала области MOV C,L ; MOV B,H ; LHLD R67 ;АДРЕС конца области XCHG ; LHLD R68 ;АДРЕС начала новой области POP PSW ; CPI 'D' ;44H JZ DUMP ;Вывод содержимого памяти на экран CPI 'C' ;43H JZ CMPR ;Сравнение областей памяти CPI 'F' ;46H JZ FILL ;Заполнение области памяти константой CPI 'S' ;53H JZ SEAH ;Изменение содержимого ячейки ОЗУ CPI 'T' ;54H JZ TRNS ;Перемещение облати ОЗУ CPI 'M' ;4DH JZ MDFA ; CPI 'G' ;47H JZ GO ;Запуск программы на выполнение CPI 'I' ;49H JZ MMI ;Ввод данных с магнитофона CPI 'O' ;4FH JZ MMO ;Вывод данных на магнитофон CPI 'L' ;4CH JZ LDMP ;Вывод содержимого ОЗУ в символьном виде CPI 'R' ;52H JZ RPZY ;Считать данные из ПЗУ CPI 'W' ;57H JZ PROG ;Программировать ПЗУ JMP MON1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма удаления символа ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ DLSM: MVI A,33H CMP L JZ R73 PUSH H LXI H,ADLSM CALL CON POP H DCX H JMP R75 ; ; ; R60: LXI H,ARESM MVI B,0 R75: CALL CI ;Символ с консоли CPI 08H ;Клавиша стрелка влево JZ DLSM ;Подпрограмма удаления символа CPI 7FH ;Клавиша забой JZ DLSM CNZ MCOK ;Подпрограмма MOV M,A CPI 0DH ;Клавиша BK JZ PCR ;Подпрограмма перехода на новую строку CPI 2EH ; JZ MON1 ;Переход на Монитор MVI B,0FFH MVI A,52H CMP L JZ R79 INX H JMP R75 PCR: MOV A,B RAL LXI D,ARESM MVI B,00H RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Подпрограмма вывода сообщения на экран ; Адрес сообщения в регистре HL ; Сообщение должно заканчиваться 0 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CON: MOV A,M ANA A RZ CALL MCOK ;Подпрограмма вывода INX H JMP CON ;********************************************** ;Подпрограмма ввода адресов для функции ;********************************************** R65: LXI H,R68 ;Адрес области вводимых данных LXI D,R7A ;Конечный адрес области MVI C,00H CALL FILL ;Заполнение 0 области ОЗУ LXI D,R7B ; CALL R7C SHLD R68 SHLD R67 RC MVI A,0FFH STA R7A CALL R7C SHLD R67 RC CALL R7C SHLD R66 RC JMP R79 ;********************************************* ;Подпрограмма ввода одного 16 адреса ;********************************************* R7C: LXI H,0 R7F: LDAX D INX D CPI 0DH JZ R7E CPI 2CH RZ CPI 20H JZ R7F SUI 30H JM R79 CPI 0AH JM R80 CPI 11H JM R79 CPI 17H JP R79 SUI 07H R80: MOV C,A DAD H DAD H DAD H DAD H JC R79 DAD B JMP R7F R7E: STC RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма сравнения адресов ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ HIL: MOV A,H CMP D RNZ MOV A,L CMP E RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Подпрограмма измененя адресов ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ INC0: CALL CTRLC INC: CALL HIL JNZ INC2 INC1: INX SP INX SP RET INC2: INX H RET ; ; ; CTRLC: CALL SCO CPI 03H RNZ CALL PSK JMP R79 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма вывода BK и LF ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MCRLF: PUSH H LXI H,ACRLF CALL CON POP H RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограммы вывода из ОЗУ в HEX формате ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MM16: MOV A,M MO16: PUSH B CALL OHX MVI A,20H CALL MCOK POP B RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Дамр памяти ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ DUMP: CALL MOHL DMP1: CALL MM16 CALL INC0 MOV A,L ANI 0FH JZ DUMP JMP DMP1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Сравнение областей памяти ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CMPR: LDAX B CMP M JZ CMP1 CALL MOHL CALL MM16 LDAX B CALL MO16 CMP1: INX B CALL INC0 JMP CMPR ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Заполнение области памяти константой ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ FILL: MOV M,C CALL INC JMP FILL ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Поиск эталона в области ОЗУ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ SEAH: MOV A,C CMP M CZ MOHL CALL INC0 JMP SEAH ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Перемещение области ОЗУ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ TRNS: MOV A,M STAX B INX B CALL INC JMP TRNS ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Вывод области ОЗУ в символьном виде ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ LDMP: CALL MOHL LDM1: MOV A,M ORA A JM LDM2 CPI 20H JNC LDM3 LDM2: MVI A,2EH LDM3: CALL MCOK CALL INC0 MOV A,L ANI 0FH JZ LDMP JMP LDM1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Изменение содержимо ячейки ОЗУ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MDFA: CALL MOHL CALL MM16 PUSH H CALL R60 POP H JNC MDF1 PUSH H CALL R7C MOV A,L POP H MOV M,A MDF1: INX H JMP MDFA ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Запуск и отладка программ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ GO: CALL HIL JZ GO1 XCHG SHLD R91 MOV A,M STA R92 MVI M,0F7H MVI A,0C3H STA R93 LXI H,R94 SHLD R95 GO1: LXI SP,ADRRG POP B POP D POP H POP PSW SPHL LHLD R97 JMP AOTLG ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Расположение курсора на экране ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CRS: LHLD CZNM RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Запрос байта с экрана ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ADR: PUSH H LHLD CADR MOV A,M POP H RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Ввод информации с магнитофона ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MMI: LDA R7A ORA A JZ MMI1 MOV A,E STA MREAD MMI1: CALL BMI CALL MOHL XCHG CALL MOHL XCHG PUSH B CALL CBL MOV H,B MOV L,C CALL MOHL POP D CALL HIL RZ XCHG CALL MOHL R79: MVI A,3FH CALL MCOK JMP MON1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Ввод блока данных с магнитофона ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BMI: MVI A,0FFH CALL MIAD1 PUSH H DAD B XCHG CALL MIAD POP H DAD B XCHG PUSH H CALL MIBL MVI A,0FFH CALL MIAD1 POP H ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Запуск отображения на экране ;для совместимости с РАДИО-86РК ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ PSK: RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Чтение адресов на МЛ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MIAD: MVI A,08H MIAD1: CALL MI MOV B,A MVI A,08H CALL MI MOV C,A RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Чтение блока данных с МЛ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MIBL: MVI A,8H CALL MI MOV M,A CALL INC JMP MIBL ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Контрольная сумма блока ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CBL: LXI B,0 BL1: MOV A,M ADD C MOV C,A PUSH PSW CALL HIL JZ INC1 POP PSW MOV A,B ADC M MOV B,A CALL INC JMP BL1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Вывод информации на магнитофон ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MMO: MOV A,C ORA A JZ MMO1 STA RA7 MMO1: PUSH H CALL CBL POP H CALL MOHL XCHG CALL MOHL XCHG PUSH H MOV H,B MOV L,C CALL MOHL POP H ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Вывод блока на магнитофон ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BMO: PUSH B LXI B,0 BMO1: CALL MO DCR B XTHL XTHL JNZ BMO1 MVI C,0E6H CALL MO CALL MOAD XCHG CALL MOAD XCHG CALL MOBL LXI H,0 CALL MOAD MVI C,0E6H CALL MO POP H CALL MOAD JMP MON1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Вывод адреса записи ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MOHL: PUSH B CALL MCRLF MOV A,H CALL OHX MOV A,L CALL MO16 POP B RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Запись блока информации ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MOBL: MOV C,M CALL MO CALL INC JMP MOBL ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Запись регистра HL ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MOAD: MOV C,H CALL MO MOV C,L JMP MO ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Ввод байта с магнитофона ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MI: PUSH H PUSH B PUSH D MOV D,A MI1: LXI H,0 DAD SP LXI SP,0 SHLD RAC MVI C,00H IN PMAG ANI 01H MOV E,A MI2: POP PSW MOV A,C ANI 7FH RLC MOV C,A MVI H,00H MI3: DCR H JZ MI10 POP PSW IN PMAG ANI 01H CMP E JZ MI3 ORA C MOV C,A DCR D LDA MREAD JNZ MI4 SUI 12H MI4: MOV B,A MI5: POP PSW DCR B JNZ MI5 INR D IN PMAG ANI 01H MOV E,A MOV A,D ORA A JP MI8 MOV A,C CPI 0E6H JNZ MI6 XRA A STA RB3 JMP MI7 MI6: CPI 19H JNZ MI2 MVI A,0FFH STA RB3 MI7: MVI D,09H MI8: DCR D JNZ MI2 LHLD RAC SPHL LDA RB3 XRA C POP D POP B POP H RET MI10: LHLD RAC SPHL CALL PSK MOV A,D ORA A JP R79 CALL CTRLC JMP MI1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Вывод байта на магнитофон ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MO: PUSH H PUSH B PUSH D PUSH PSW LXI H,0 DAD SP LXI SP,0 MVI D,8H MO1: POP PSW MOV A,C RLC MOV C,A MVI A,1 XRA C OUT PMAG LDA RA7 MOV B,A MO2: POP PSW DCR B JNZ MO2 MVI A,0 XRA C OUT PMAG DCR D LDA RA7 JNZ MO3 SUI 0EH MO3: MOV B,A MO4: POP PSW DCR B JNZ MO4 INR D DCR D JNZ MO1 SPHL POP PSW POP D POP B POP H RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Вывод на консоль 16 значения ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ OHX: PUSH PSW RRC RRC RRC RRC CALL OHX1 POP PSW OHX1: ANI 0FH CPI 0AH JM OHX2 ADI 07H OHX2: ADI 30H ; ; ; MCOK: MOV C,A ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Вывод на консоль символа ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CO: PUSH PSW PUSH B PUSH D PUSH H CALL STS LXI H,ECO PUSH H LHLD CZNM XCHG CALL CO11 LDA CMSK DCR A JM CWSM JZ CYSM JPO C1KO MOV A,C SUI 20H MOV C,A C2KO: DCR C JM COEN PUSH B CALL CKPR POP B JMP C2KO COEN: XRA A CEN1: STA CMSK RET ; ; ; CWSM: MOV A,C ANI 7FH MOV C,A CPI 1FH JZ CCLR CPI 0CH JZ CHOM CPI 0DH JZ COCR CPI 0AH JZ COLF CPI 08H JZ CKPL CPI 18H JZ CKPR CPI 19H JZ CKPH CPI 1AH JZ CKLO CPI 1BH JZ CESC CPI 07H JNZ COTB LXI B,BELL1 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма вывода сигнала ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ SGN: MVI A,2 OUT PBEL MOV A,B RD1:DCR A JNZ RD1 XRA A OUT PBEL MOV A,B RD2: DCR A JNZ RD2 DCR C JNZ SGN RET ; ; ; COTB: MOV M,C CALL CKPR MOV A,D CPI 03H RNZ MOV A,E CPI 08H RNZ CALL CKPH ; COLF: MOV A,D CPI 1BH JNZ CKLO PUSH H PUSH D LXI H,E1STR LXI D,E2STR LXI B,ESIZE ROLL: LDAX D MOV M,A INX H INX D DCX B MOV A,C ORA B JNZ ROLL POP D POP H RET ; CYSM: MOV A,C CPI 59H JNZ COEN CALL CHOM MVI A,02H JMP CEN1 ; C1KO: MOV A,C SUI 20H MOV C,A C1K1: DCR C MVI A,04H JM CEN1 PUSH B CALL CKLO POP B JMP C1K1 ; ; ECO: SHLD CADR XCHG SHLD CZNM XCHG LXI B,0F801H DAD B MVI M,0FFH POP H POP D POP B POP PSW RET ; ; CO11: LHLD CADR PUSH B LXI B,0F801H DAD B MVI M,0 POP B LHLD CADR RET ; ;############################################### ;Обработка ESC последовательностей ;############################################### CESC: MVI A,01H JMP CEN1 ;############################################### ; Очистка экрана ;############################################### CCLR: LXI H,EMAX LXI D,1000H CCL1: XRA A MOV M,A DCX H DCX D MOV A,E ORA D JNZ CCL1 ;################################################ ; Установка HOME ;################################################ CHOM: LXI D,RDE LXI H,E1STR RET ;############################################### ;Курсор вправо ;############################################### CKPR: MOV A,E INX H INR E CPI 47H RNZ MVI E,08H LXI B,RDF DAD B ;############################################### ;Курсор вниз ;############################################### CKLO: MOV A,D CPI 1BH LXI B,RE0 JNZ CKL1 MVI D,2 LXI B,RE2 CKL1: INR D DAD B RET ;############################################### ; Курсор влево ;############################################### CKPL: MOV A,E DCX H DCR E CPI 08H RNZ MVI E,47H LXI B,RE3 DAD B ;############################################### ; Курсор вверх ;############################################### CKPH: MOV A,D CPI 03H LXI B,RED4 JNZ CKP1 MVI D,1CH LXI B,RE6 CKP1: DCR D DAD B RET ;################################################ ; Подпрограмма возврат каретки ;################################################ COCR: MOV A,L SUB E JNC CCR1 DCR H CCR1: MOV L,A MVI E,08H LXI B,RE8 DAD B RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма состояния клавиатуры ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ STS: IN PRTC ANI 1H JZ ST1 LDA REA ORA A RNZ ST1: PUSH H LHLD REB CALL SCO CMP L MOV L,A JZ ST5 ST2: MVI A,01H STA RED MVI H,15H ST3: XRA A ST4: SHLD REB POP H STA REA RET ST5: DCR H JNZ ST3 INR A JZ ST4 INR A JZ ST7 PUSH B LXI B,RF1 CALL SGN POP B LDA RED MVI H,0E0H DCR A STA RED JZ ST6 MVI H,40H ST6: MVI A,0FFH JMP ST4 ST7: IN PRTC ANI 1 JZ ST7 LDA RF3 CMA STA RF3 JMP ST2 ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма ввода с консоли ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CI: CALL STS ORA A JZ CI XRA A STA REA LDA REB RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Подпрограмма опроса кода нажатой клавиши ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ SCO: IN PRTC ANI 1H JNZ SC1 MVI A,0FEH RET SC1: XRA A OUT PRTA OUT PRTC IN PRTB INR A JNZ SC2 DCR A RET SC2: PUSH H MVI L,01H MVI H,07H SC3: MOV A,L RRC MOV L,A CMA OUT PRTA IN PRTB CMA ORA A JNZ SC5 DCR H JP SC3 SC4: MVI A,0FFH POP H RET SC5: MVI L,20H SC6: IN PRTB CMA ORA A JZ SC4 DCR L JNZ SC6 MVI L,07H SC7: DCR L RLC JNC SC7 MOV A,H MOV H,L MOV L,A CPI 07H JZ SC9 PUSH B MOV B,A INR B XRA A ME1: DCR B JZ ME2 ADI 7 JMP ME1 ME2: ADD H POP B ADI 31H CPI 60H JNZ SCA MVI A,20H POP H RET TBL: .db 18H .db 08H .db 19H .db 1AH .db 0DH .db 1FH .db 0CH SC9: MOV A,H LXI H,TBL SCB: ADD L MOV L,A INX H MOV A,M POP H RET SCA: MOV L,A IN PRTC MOV H,A ANI 2H JNZ SCC MOV A,L CPI 40H JM SCD ANI 1FH POP H RET SCC: LDA RF3 ORA A JZ SCE MOV A,L CPI 40H JM SCE ORI 20H MOV L,A SCE: MOV A,H ANI 4H JNZ SCD MOV A,L CPI 40H JM SCF MOV A,L XRI 20H POP H RET SCF: MOV A,L ANI 2FH MOV L,A SCD: MOV A,L CPI 40H POP H RP PUSH H MOV L,A ANI 0FH CPI 0CH MOV A,L JM SC0 XRI 10H SC0: POP H RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; Полчить верхний адрес ОЗУ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ MSI: LHLD MXMEM RET ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;Установить верхний адрес ОЗУ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ WSI: SHLD MXMEM RET ;************************************************ ;Сообщения для вывода ;************************************************ MSG: .db 1FH .text "radio-99dm\000" APRMT: .db 0DH .db 0AH .db 0EH .db 00H ACRLF: .db 0DH .db 0AH .db 18H .db 18H .db 00H R0D: .text "\n\rPC-\n\rHL-\n\rBC-\n\rDE-\n\rSP-\n\rAF-" .db 19H .db 19H .db 19H .db 19H .db 19H .db 19H .db 00H ADLSM: .db 08H .byte ' ' .db 08H .db 00H R94: SHLD R0A PUSH PSW POP H SHLD R0B POP H DCX H SHLD R0C LXI H,0 DAD SP LXI SP,R0B PUSH H PUSH D PUSH B LHLD R0C LXI SP,STEK CALL MOHL XCHG LHLD R91 CALL HIL JNZ MON1 LDA R92 MOV M,A JMP MON1 XREG: LXI H,R0D CALL CON LXI H,R0C MVI B,06H R0F: MOV E,M INX H MOV D,M PUSH B PUSH H XCHG CALL MOHL CALL R60 JNC R0E CALL R7C POP D PUSH D XCHG MOV M,D DCX H MOV M,E R0E: POP H POP B DCR B INX H JNZ R0F RET ;************************************************ ; Подпрограмма чтения ПЗУ ;************************************************ RPZY: MVI A,82H OUT PORTU MVI A,60H OUT PORTC LOOP: MOV A,C OUT PORTB MOV A,B ORI 60H OUT PORTC IN PORTA MOV M,A CALL HIL INX H INX B JNZ LOOP RET ;************************************************* ;Программирование ПЗУ ;************************************************* PROG: PUSH H PUSH D PUSH B MVI A,10H STA WORK M0: POP B POP D POP H PUSH H PUSH D PUSH B MVI A,82H OUT PORTU MVI A,60H OUT PORTC M1: MOV A,C OUT PORTB MOV A,B ORI 60H OUT PORTC IN PORTA CMP M MVI A,0FFH STA CWRK JNZ M01A CALL HIL INX B INX H JNZ M1 MVI A,1 STA WORK XRA A STA CWRK M01A: MVI A,0CH STA WORK+1 MVI A,0A0H OUT PORTC MVI A,80H OUT PORTU SL2: POP B POP D POP H PUSH H PUSH D PUSH B M2: MOV A,C OUT PORTB MOV A,B ORI 0A0H OUT PORTC MOV A,M OUT PORTA MOV A,B ORI 98H OUT PORTC MVI A,80H MM1:DCR A JNZ MM1 MOV A,B ORI 0A0H OUT PORTC CALL HIL INX H INX B JNZ M2 LDA WORK+1 DCR A STA WORK+1 JNZ SL2 LDA WORK DCR A STA WORK JNZ M0 LDA CWRK POP B POP D POP H ORA A JNZ DUMP RET .end