Радио-86РК/Радио 09-90/Экранный генератор BEST/Таблица 4
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: А. СОРОКИН |
Таблица 4 SCRN: EQU 077C2 ;адрес левого верхнего угла экр. Подпрограмма адресации курсора - POST ;Входные данные: ;D - Y координата Е - X координата ;Выходные данные: нет POST: PUSH H ;ЗАПОМНИТЬ ЗНАЧЕНИЕ HL LXI H, PST+2 ;HL <- АДРЕС ЗАПИСИ КООРД. MOV A, D ; ЗАПИСАТЬ КООРДИНАТУ ADI 20Н ;Y В СООТВЕТСТВИИ С ФОР- MOV H, A ;МАТОМ ДИРЕКТИВЫ МОНИТОРА. INX H ;АДРЕС ЗАПИСИ СЛЕД. КООРД. MOV А,Е ;ЗАПИСЬ КООРДИНАТЫ X adi гон MOV H,A LXI H,PST ; ЗАПУСК ДИРЕКТИВЫ МОНИТОРА CALL OF818H ;ВЫВОДА СООБЩЕНИЯ НА ЭКРАН. POP H ;ВОССТАНОВИТЬ ЗНАЧЕНИЕ HL RET PST: DB 1BH, 59Н, О, О, О ;ПОДПРОГРАММА ПЕРЕМЕЩЕНИЯ ОКНА ЭКРАНА С ЗАДАННЫМ РАЗМЕРОМ - SDVIG ;ВХОДНЫЕ ДАННЫЕ: ; ХВ, YB - КООРДИНАТЫ X, Y ВЕРХНЕГО ЛЕВОГО УГЛА ОКНА. ; XN,YN - КООРДИНАТЫ X, Y НИЖНЕГО ПРАВОГО УГЛА ОКНА. ; Н(ТОР),М(ТОР*11 - КООРДИНАТЫ X,Y ВЕРХНЕГО ЛЕВОГО УГЛА КОПИИ ОКНА. ; Н(ВОТТ),М(ВОТТ+1) - КООРДИНАТЫ X, Y НИЖНЕГО ПРАВОГО УГЛА КОПИИ ОКНА. ;ВЫХОДНЫЕ ДАННЫЕ: НЕТ. ;ИСПОЛЬЗУЕМЫЕ ПОДПРОГРАММЫ: HLM. INSTAL. ADR ;ДЛЯ ПЕРЕСЫЛКИ ОКНА ТЕКСТА , НЕ СТИРАЯ ПОД СОБОЙ ИЗОБРАЖЕНИЕ ЭКРАНА. ПОЛЬЗУЮТСЯ АЛГОРИТМОМ: MVI A, OFFH STA PERES+1 CALL PERES L: .... ;ВВОД ДАННЫХ ДЛЯ ПОДПРОГРАММЫ CALL SDVIG XRA A STA PERES+1 CALL PERES JMP L ;-AYS- 11.09.89 SDVIG: PUSH D ;ЗАПОМНИТЬ DE LHLD XN ;B HL КООРД. НИЖН. ЛЕВОГО УГЛА CALL ADR ;ВЫЧИСЛИТЬ АДРЕС ПО КООРД. XCHG ;И В DE LHLD BOTT ;В HL КООРД. НИЖН. ЛЕВОГО УГЛА CALL ADR ; ОБРАЗА ОКНА И ВЫЧИСЛИТЬ АДРЕС CALL HLM1 ;ЕСЛИ АДРЕСА НЕ ПЕРЕКРЫВАЮТСЯ. JM FORTH ;TO КОПИРОВАТЬ С НАЧАЛА. ; -- . -- -КОПИРОВАНИЕ ОКНА С КОНЦА. MVI A, OFFH ;В KOD ПРИЗНАК КОПИРОВАНИЯ С STA KOD ; КОНЦА И ВЫПОЛНИТЬ ПОДПРОГР. CALL INSTAL ;ЗАГРУЗКИ НАЧАЛЬНЫХ ЗНАЧЕНИИ. XCHG ;ПЕРЕД ПЕРЕСЫЛКОЙ ОКНА: LY: PUSH H ;HL-АДР. ОКНА. DE-АДР. КОПИИ PUSH D ; ЗАПОМНИМ АДРЕСА LDA KOD ;B В - КОЛИЧЕСТВО СТРОК MOV С, А ;В С - ДЛИНА СТРОКИ LX: MOV А, И ;ПЕРЕСЫЛАЕМ НАЧИНАЯ СО СТАР- STAX D ;ШЕГО АДРЕСА К МЛАДШЕМУ ВО DCX D ; ИЗБЕЖАНИЯ ПОТЕРИ DCX H ;ДАННЫХ. DCR С ; ВЫПОЛНЯТЬ, ПОКА НЕ КОНЧИЛАСЬ JP LX ; СТРОКА. DCR В ;ЕСЛИ ПЕРЕСЛАЛИ ПОСЛЕДИ. JM KON ; СТОКУ, ТО НА КОНЕЦ. POP H ;ВЫЧИСЛИМ АДРЕС НОВОЙ СТРОКИ CALL HLM ;OKHA И ЗАПОМНИМ ЕГО. SHLD ADRK ; ВЫЧИСЛИМ АДРЕС НОВОЙ СТРОКИ POP Н ; КОПИИ ОКНА И CALL HLM ;РАЗМЕСТИМ ПОЛУЧЕННЫЕ XCHG ;АДРЕСА В LHLD ADRK ; РЕГИСТРАХ. XCHG ;ДАЛЕЕ ПЕРЕСЫЛКА СТРОК. JMP LY ;--------КОПИРОВАНИЕ ОКНА С НАЧАЛА. FORTH: XRA A ;B KOD ПРИЗНАК КОПИРОВАНИЯ С STA KOD ;НАЧАЛА И ВЫПОЛНИТЬ ПОДПРОГР. CALL INSTAL ;ЗАГРУЗКИ НАЧАЛЬНЫХ ЗНАЧЕНИИ. PUSH H ;ПЕРЕД ПЕРЕСЫЛКОЙ ОКНА: LHLD XB ;HL-АДР. ОКНА CALL ADR ;DE-АДР. КОПИИ POP D ; LYF: PUSH H ;ЗАПОМНИМ PUSH D ; АДРЕСА LDA KOD ;B В - КОЛИЧЕСТВО СТРОК MOV С, A ;B С - ДЛИНА СТРОКИ LXF: MOV A, M ; ПЕРЕСЫЛАЕМ НАЧИНАЯ STAX D ;C МЛАДШЕГО INX D ;АДРЕСА К INX H ; СТАРШЕМУ. DCR С ;ВЫПОЛНЯТЬ, ПОКА НЕ КОНЧИЛАСЬ JP LXF ;cTPOKA*. DCR В ;ЕСЛИ ПЕРЕСЛАЛИ ПОСЛЕДИ. JM КОN ;СТОКУ. ТО НА КОНЕЦ. POP H ;УВЕЛИЧИТЬ АДРЕСА LXI D, 78 ;OKHA И DAD D ;КОПИЙ НА 76. SHLD ADRK ; POP H ; РАЗМЕСТИМ DAD D ; ПОЛУЧЕННЫЕ XCHG ; АДРЕС А LHLD ADRK ;B XCHG ; РЕГИСТРАХ. JMP LYF ;ДАЛЕЕ ПЕРЕСЫЛКА СТРОК. KON: POP D ;СНИМАЕМ СО СТЕКА POP D ; АДРЕС POP D ; ВОЗВРАТА. RET ; ПОДПРОГРАММА ВЫЧИСЛЕНИЯ HL=HL-DE i HLM: LXI D, 78 ;В DE ДЛИНУ СТРОКИ = 78 HLM1: MOV A,L ;HLM1 - ТОЧКА ВХОЛА SUB Е ;ДЛЯ ВЫЧИСЛЕНИЯ MOV L,A ;ПРОИЗВОЛЬНЫХ HL И DE. MOV A, H ; SBB D ; MOV H, A ; RET ; ПОДПРОГРАММА ЗАГРУЗКИ НАЧАЛЬНЫХ ЗНАЧЕНИИ i INSTAL: LHLD BOTT ;В HL - НАЧАЛЬНЫЕ LDA KOD ; КООРДИНАТЫ ПЕРЕСЫЛКИ ORA A ;B ОКНЕ. ( ОПРЕДЕЛЯЕМ ПО JNZ INS1 ; ПРИЗНАКУ КОПИРОВАНИЯ ) LHLD TOP ; INS1: CALL ADR ;ВЫЧИСЛЯЕМ АДРЕС КООРДИНАТ. LDA XB ;ВЫЧИСЛЯЕМ MOV B, A ; КОЛИЧЕСТВО LDA XN ;СТРОК В SUB В ;OKHE И ПОМЕШАЕМ STA KOD ;B РЕГИСТР В. LDA YB ;ВЫЧИСЛЯЕМ MOV B, A ; КОЛИЧЕСТВО LDA YN ; СТРОК В SUB В ;OKHE И ПОМЕШАЕМ MOV В, A ;B РЕГИСТР В. RET ; _ __ _______ ;ПОДПРОГРАММА ВЫЧИСЛЕНИЯ АДРЕСА, В ЭКРАННОЙ ОБЛАСТИ, СООТБЕТСТВУШЕГО КООРДИНАТАМ. ;ВХОДНЫЕ ДАННЫЕ: ; Н - Y КООРДИНАТА L - X КООРДИНАТА ;ВЫХОДНЫЕ ДАННЫЕ: HL - АДРЕС ADR: PUSH D ;ЗАПОМНИТЬ PUSH В ;РЕГИСТРЫ MOV С, L ;ВС КООРДИНАТУ X MOV А, Н ;В А КООРДИНАТУ Y LXI D, 78 ;В DE ДЛИНУ СТРОКИ LXI H, 0 ;ВЫЧИСЛЕНИЕ S1: ORA А ;АДРЕСА ПО JZ PROD ;ФОРМУЛЕ: RAR ;АДРЕС:78"Y JNC 32 DAD D S2: xchg DAD H ; XCHG ; JMP S1 PROD: XCHG ; LXI H, SCRN ; ЗАГРУЗИТЬ АДРЕС DAD D ; КООРДИНАТ О. 0. MVI В, О ; СЛОЖИТЬ С АДРЕСОМ НАЧАЛА DAD В ;И ПРИБАВИТЬ X POP В ; ВОССТАНОВИТЬ POP О ;РЕГИСТРЫ. RET ;ПОДПРОГРАММА ПЕРЕСЫЛКИ ЭКРАНА ;ВХОДНЫЕ ДАННЫЕ: ПО МРЕСУ PERES+1 ЗАСЛАТЬ: ; OFFH ЭКРАН --> ПАМЯТЬ ООН ЭКРАН <-- ПАМЯТЬ ;ВЫХОДНЫЕ ДАННЫЕ: НЕТ feres: mvi а,0 LXI H, 08D61H ;HL - АДРЕС ПЕРЕСЫЛКИ ЭКРАНА LXI D, SCRN ;DE - АДРЕС ЭКРАНА LXI В,1950 ;ВС - РАЗМЕР ЭКРАНА ANA A JZ ТЗ ;ОБМЕНЯТЬ АДРЕСА, ЕСЛИ ; XCHG ;ПЕРЕСЫЛКА В ПАМЯТЬ. ТЗ: MOV А, Н ;ПИК/1 STAX D ;ПЕРЕСЫЛКИ. INX Н INX D DCX В MOV А, В ORA С JNZ ТЗ RET KOD: DS 1 ХВ: DS 1 УВ: ds 1 XN: DS 1 УN: DS 1 top: ds 1 BOOT: ds 1