; Начинается с 0600h. Внутри идет выравнивание на границу 0900h. ; ; Также включает код "Init_DOS". ; ; раб. ячейки клавы T0600: ds 64 ; 40h (не менять размер, идет AND 3Fh) ; D0640: db 0 ; тек. адрес конца кольц. буфера? D0641: db 0 ; адрес начала кольц. буфера? ; флаги клавы D0642: db 2 db 0 db 0 db 3 ; D0646: dw 0 ;///////////////////////////////////////////////////////////////////// ; Функция #30. Ожидание нажатия клавиатуры (без эха). ; ; вход: нет ; выход: A=код символа ; D=скен-код ; Е=код символа ; B=биты Ctrl,Alt,Shift ; C=др.служ.клавиши ;///////////////////////////////////////////////////////////////////// Func_30:ld hl,D0641 ld a,(D0640) cp (hl) jr z,Func_30 ; нет клавиши call A06FC ld a,e and a ret ;///////////////////////////////////////////////////////////////////// ; Функция #31. Опрос клавиатуры без ожидания. ; ; вход: нет ; выход: A=код символа ; D=скен-код ; Е=код символа ; B=биты Ctrl,Alt,Shift ; C=др.служ.клавиши ; "Z" - нет клавиш ;///////////////////////////////////////////////////////////////////// Func_31:ld hl,D0641 ld a,(D0640) cp (hl) ret z ; нет клавиши call A06FC ld a,e ret ;///////////////////////////////////////////////////////////////////// ; Функция #32. Ожидание нажатия клавиатуры (с эхом). ; ; вход: нет ; выход: A=код символа ; D=скен-код ; Е=код символа ; B=биты Ctrl,Alt,Shift ; C=др.служ.клавиши ;///////////////////////////////////////////////////////////////////// Func_32: call focus_to_inpline ; вкл. курсор call Func_31 ; опрос клавы без ожидания jr z,$-3 push de push bc push af call cursor_off ; выкл. курсор pop af or a ; добавил call nz,Func_5B ; вывод "a" на экран pop bc pop de ld a,e and a ret ;///////////////////////////////////////////////////////////////////// ; Функция #33. Получить состояние клавиатуры. ; Возвращает состояние клавиатуры на данный момент. ; Данные берутся не из буфера клавиатуры (как в остальных функциях), ; а непосредственно из результатов последнего сканирования клавиатуры. ; ; вход: нет ; выход: A=0 - нет символов в буфере ; B=биты Ctrl,Alt,Shift ; C=др.служ.клавиши ;///////////////////////////////////////////////////////////////////// Func_33:ld hl,D0641 ld a,(D0640) cp (hl) ld bc,(D0642) ; флаги клавы ld a,0 ret z ; нет клавиши dec a ret ;///////////////////////////////////////////////////////////////////// ; Функция #37. Опрос буфера клавиатуры. ; Возвращаемые регистры, как и в функции 30h (WAITKEY). ; Информация о нажатии остается в буфере. ; ; вход: нет ; выход: A=код символа ; D=скен-код ; Е=код символа ; B=биты Ctrl,Alt,Shift ; C=др.служ.клавиши ; "Z" - нет символов в буфере ;///////////////////////////////////////////////////////////////////// Func_37:ld hl,D0641 ld a,(D0640) cp (hl) ret z ; нет клавиши ld l,(hl) ld h,T0600 / 256 ; 06h ст. байт адреса ld e,(hl) inc l ld d,(hl) inc l ld b,(hl) inc l ld c,(hl) ld a,e ret ;///////////////////////////////////////////////////////////////////// ; Функция #35. Очистить буфер клавиатуры и выполнить функцию. ; ; вход: B=номер функции 30h, 31h, 32h, 33h ; выход: В зависимости от указанной функции в регистре B. ;///////////////////////////////////////////////////////////////////// Func_35:ld a,(D0641) ; адрес начала кольц.буфера ld (D0640),a ; тек. адрес в кольц. буфере ; ld a,30h-1 cp b jr c,A06D1 ld a,EINVFNC ; код "неверный номер функции" scf ret ; A06D1: ld a,35h ; номер функции cp b jr nc,A06DA ld a,EINVFNC ; код "неверный номер функции" scf ret ; A06DA: ld c,b rst 10h ret A06DD: ld hl,D0640 ld a,(D0641) sub 4 and 3Fh ; ограничить адрес конца кольц. буфера cp (hl) jr z,A0716 ; бип, конец кольц. буфера ld a,(hl) inc (hl) ; ячейка D0640 inc (hl) inc (hl) inc (hl) res 6,(hl) ; значение 40h -> 00h (сбр. конец кольц. буфера?) ld l,a ld h,T0600 / 256 ; 06h ст. байт адреса ld (hl),e inc l ld (hl),d inc l ld (hl),b inc l ld (hl),c ret A06FC: ld hl,D0641 ld a,(D0640) cp (hl) ret z ; нет клавиши ld a,(hl) inc (hl) inc (hl) inc (hl) inc (hl) res 6,(hl) ; значение 40h -> 00h (сбр. конец кольц. буфера?) ld l,a ld h,T0600 / 256 ; 06h ст. байт адреса ld e,(hl) inc l ld d,(hl) inc l ld b,(hl) inc l ld c,(hl) ret ; бип A0716: ex af,af' bit 0,(ix+3) jr z,A0728 exx ld de,230 ; задержка внутр. цикла ld hl,50 ; задержка внеш. цикла call beep ; звук exx A0728: ex af,af' ret A072A: set 7,(ix+2) jr A0740 A0730: set 6,(ix+2) ; уст. бит "отжата" jr A0740 A0736: set 5,(ix+2) jr A0740 ; сканирование клавы keyb_scan: ld ix,D0642 ; флаги клавы A0740: in a,(19h) ; порт статуса rra ; 0-bit, очередной байт пришел ? ret nc ; нет in a,(18h) cp 0F0h ; клавиша отжата ? jr z,A0730 ; да, уст. 6 bit cp 0E0h ; признак "Upgrade Code" у Антона jr z,A072A ; уст. 7 bit (расш. скен-код) cp 0E1h ; Pause jr z,A0736 ; уст. 5 bit ; ld l,a bit 6,(ix+2) ; отжата клавиша ? jr nz,A07B3 ; да, на сброс битов регистра "B" (ix+1) call A0990 call A0892 ; уст. биты регистра "B" (ix+1) res 7,(ix+2) ; сбр. бит "расш. скен-код" ? res 5,(ix+2) ; сбр. бит паузы ret z ; не сохранять код, биты устанавливались call A09B4 ; ld hl,1C00h ; Caps Lock and a sbc hl,de call z,A07C8 ld hl,0B800h ; Space + Ctrl, Alt and a sbc hl,de call z,A07D1 ; перекл. бита Rus/Lat ld hl,5000h ; Ins and a sbc hl,de call z,A07EF ld hl,4900h ; Num Lock and a sbc hl,de call z,A07F8 ; инв. 3-й бит (бит Num Lock) ld hl,0C900h ; Pause или Num Lock+80h (Num Lock+Ctrl/Atl/Shift) and a sbc hl,de call z,A0801 ld hl,4800h ; Scroll Lock and a sbc hl,de call z,A081E ; инв. 2-й бит (бит Scroll Lock) ld hl,0CF00h ; Del+80h (с Shift) and a sbc hl,de call z,reboot_system ; тест на Ctrl+Alt ld bc,(D0642) ; флаги клавы jp A06DD ;## сохр. de,bc в кольц. буфере клавы ;jp TSR; ;ret ; не оптимизить A07B3: res 6,(ix+2) ; сбр. бит "клавиша отжата" call A0990 call A0837 ; сбр. биты регистра "B" (ix+1) res 7,(ix+2) ; сбр. бит "расш. скен-код" ? ld h,0 ld (D0646),hl ret A07C8: ld a,(ix+0) xor 1 ld (ix+0),a ret A07D1: bit 5,(ix+1) ; бит Ctrl ? ret z ; нет ld a,(ix+0) xor 80h ; 7-й бит (1=Rus,0=Lat) ld (ix+0),a bit 1,(ix+3) ret z exx ld de,190 ; задержка внутр. цикла ld hl,20 ; задержка внеш. цикла call beep ; звук exx ret A07EF: ld a,(ix+0) xor 2 ; 1-й бит ld (ix+0),a ret A07F8: ld a,(ix+0) xor 8 ; 3-й бит ld (ix+0),a ret ; Pause или Num Lock + Ctrl, Atl, Shift A0801: bit 5,(ix+1) ; бит Ctrl ? ret z ; нет ; pop hl ; ?? ld a,(ix+0) xor 40h ; 6-й бит ld (ix+0),a bit 6,(ix+0) ret z ei A0815: halt bit 6,(ix+0) jr nz,A0815 di ret A081E: ld a,(ix+0) xor 4 ld (ix+0),a ret ; клавиша Del reboot_system: ;bit 5,(ix+1) ; бит Ctrl ;ret z ;bit 4,(ix+1) ; бит Alt ;ret z ld c,00110000b ; биты Ctrl+Alt ld a,(ix+1) and c cp c ret nz ; софтовый ребут xor a ld bc,01FDh rst 08h ret ;------------------------------------------------- ; Сбросить биты регистра "B" (ix+1) ;------------------------------------------------- A0837: ld a,l cp 37h jr nz,A084A res 2,(ix+1) bit 0,(ix+1) ret nz res 4,(ix+1) ret ; A084A: cp 39h jr nz,A085C res 0,(ix+1) bit 2,(ix+1) ret nz res 4,(ix+1) ret ; A085C: cp 36h jr nz,A086E res 3,(ix+1) bit 1,(ix+1) ret nz res 5,(ix+1) ret ; A086E: cp 3Ah jr nz,A0880 res 1,(ix+1) bit 3,(ix+1) ret nz res 5,(ix+1) ret ; A0880: cp 29h jr nz,A0889 res 7,(ix+1) ; сбр. бит LShift ret ; A0889: cp 34h ret nz res 6,(ix+1) ; сбр. бит RShift ret ;------------------------------------------------- ; Установить биты регистра "B" (ix+1) ;------------------------------------------------- A0892: ld a,l cp 37h jr nz,A08A0 set 2,(ix+1) set 4,(ix+1) ret ; A08A0: cp 39h jr nz,A08AD set 0,(ix+1) set 4,(ix+1) ret ; A08AD: cp 36h jr nz,A08BA set 3,(ix+1) set 5,(ix+1) ret ; A08BA: cp 3Ah jr nz,A08C7 set 1,(ix+1) set 5,(ix+1) ret ; A08C7: cp 29h jr nz,A08D0 ;-- поставил (фикс глюка PrintScreen) ; при нажатии PrnScrn, клава выдает двойной код: LShift и PrnScrn bit 7,(ix+2) ; был расш. скен-код (#E0) ? jr z,$+4 ; нет (Ctrl,Alt,Shift не нажаты) xor a ; флаг "Z" (не сохр. код #29 LShift) ret ;-- set 7,(ix+1) ; уст. бит LShift ret ; A08D0: cp 34h ret nz set 6,(ix+1) ; уст. бит RShift ret ;///////////////////////////////////////////////////////////////////// ; ; Начальная инициализация ДОС ; ;///////////////////////////////////////////////////////////////////// Init_DOS: di call init_keyb_ports ; иниц. LPT-портов для клавы call A10D1 ; иниц. ?? портов + lpt-портов клавы ld c,0 ; иниц. мышки rst 30h ld a,(mode_screen) ; тек. режим экрана ld c,81h ; инфа о смене режима (для мышки) rst 30h call scan_all_devices ; определить все девайсы в системе ei ; уст. вектор на функцию #00 ld de,Func_00 ; адрес функции "номер версии ДОС" ld hl,T0200 ; таблица мл. разрядов адресов ld (hl),e ; сохр. мл.разряд inc h ; 0300h ld (hl),d ; сохр. ст.разряд ; ld bc,03C2h ; выделить 3 банки памяти ;ld bc,04C2h ; выделить 4 банки памяти rst 08h ld hl,list_dos_pages ; 16 байт, номера банок расширения ДОС ld c,a ; дескр. блока ld b,-1 A00DF: inc b push bc ; b=номер страницы в блоке push hl ld a,c ; дескр. блока ld c,0C4h ; получить физ. номер стр. блока rst 08h pop hl pop bc ld (hl),a ; сохр. номер банки inc hl jr nc,A00DF ; call setup_znak ; настр. знакоген. курсора ld b,-1 ; иниц. буфера окружения ? call Func_46 ; системная окружения jp Func_00 ; функция "номер версии ДОС" ;ds 0900h - $ ; выровнить на границу xx00h L0900 equ $+100h AND 0FF00h ds L0900 - $ ; Должно начинаться точно с xx00h! (не стал фиксить (для скорости)). ; Скен-коды клавиш, 144 байта. A0900: db 0,43h,0,3Fh,3Dh,3Bh,3Ch,46h db 0,44h,42h,40h,3Eh,0Fh,0,0 db 0 db 37h,29h,0 db 36h,10h,2,0 db 0,0,2Ah,1Eh,1Dh,11h,3,0 db 0,2Ch,2Bh,1Fh,12h,5,4,0 db 0,38h,2Dh,20h,14h,13h,6,0 db 0,2Fh,2Eh,22h,21h,15h,7,0 db 0 ;A0939: db 0 ;A093A: db 30h,23h,16h,8,9,0,0,31h db 24h,17h,18h,0Bh,0Ah ;A0947: db 0,0,32h ;A094A: db 33h,25h,26h,19h ;A094E: db 0Ch,0,0,0,27h,0,1Ah,0Dh db 0,0,1Ch,34h db 28h,1Bh,0,35h db 0,0,0,0,0,0,0,0 db 0Eh,0,0,51h,0,54h,57h,0 db 0,0,50h,4Fh,52h,55h,56h,58h db 1,49h,45h,4Dh,53h,4Ch db 4Bh,59h db 48h,0,0,0,0,41h,0,0 db 0,0,0,0,0,0,0,0 db 0,0 A0990: bit 7,(ix+2) ; бит "расш. скен-код" ? jr z,A09B0 cp 11h ; Alt (левый/правый) ld l,39h ; RAlt ret z cp 14h ; Ctrl (левый/правый) ld l,3Ah ; RCtrl ret z cp 5Ah ; Enter ld l,4Eh ; enter ret z cp 4Ah ; / ld l,a;4Ah ; / ret z cp 7Ch ; "*" в доп.поле, PrintScreen ld l,47h ; PrintScreen ret z ld l,a A09B0: ld h,A0900 / 256 ; 09h ст. байт адреса ld l,(hl) ; загрузить скен-код ret A09B4: ld d,l ld e,0 bit 7,(ix+0) jp nz,A09F6 ld a,(ix+1) and 0C0h jr nz,A09E3 set 7,d bit 4,(ix+1) ret nz bit 5,(ix+1) ret nz ld d,l ld bc,T0B75 ; Lat-раскладка с вкл. CapsLock bit 0,(ix+0) jr nz,A09DE ld bc,T0AC1 ; нормальная Lat-раскладка A09DE: ld h,0 add hl,bc ld e,(hl) ret ; A09E3: ld bc,T0B1B ; Lat-раскладка с Shift bit 0,(ix+0) jr z,A09EF ld bc,T0BCF ; Lat-раскладка с вкл. CapsLock + Shift A09EF: ld h,0 add hl,bc ld e,(hl) set 7,d ret ; ; A09F6: ld a,(ix+1) and 0C0h jr nz,A0A1B set 7,d bit 4,(ix+1) ret nz bit 5,(ix+1) ret nz ld d,l bit 0,(ix+0) ld bc,T0CDD ; Rus-раскладка с вкл. CapsLock jr nz,A0A16 ld bc,T0C29 ; нормальная Rus-раскладка A0A16: ld h,0 add hl,bc ld e,(hl) ret ; A0A1B: ld bc,T0C83 ; Rus-раскладка с Shift bit 0,(ix+0) jr z,A0A27 ld bc,T0D37 ; Rus-раскладка с вкл. CapsLock + Shift A0A27: ld h,0 add hl,bc ld e,(hl) set 7,d ret ;///////////////////////////////////////////////////////////////////// ; Функция #36. Управление настройками клавиатуры. ; ; вход: B=номер подфункции (0,1,2) ; выход: В зависимости от указанной функции в регистре B. ;///////////////////////////////////////////////////////////////////// Func_36:inc b dec b jr z,A0A49 ; уст. раскладку клавиатуры dec b jr z,A0A3F ; получить состояние звуковых переменных dec b jr z,A0A44 ; уст. состояние звуковых переменных ld a,EUNOPER ; код "невозможная операция" scf ret ;B=1. Получить состояние звуковых переменных A0A3F: ld a,(D0003) and a ret ;B=2. Установить состояние звуковых переменных ; A=значение переменной ; D0 - сигнал переполнения буфера клавиатуры ; D1 - сигнал переключения на альтернативную раскладку клавиатуры A0A44: ld (D0003),a and a ret ;B=0. Установить раскладку клавиатуры ; A=номер раскладки ; 0 - normal ; 1 - shift ; 2 - caps lock ; 3 - caps lock + shift ; 4 - normal (альтернативная клав.) ; 5 - shift (альтернативная клав.) ; 6 - caps lock (альтернативная клав.) ; 7 - caps lock + shift (альтернативная клав.) A0A49: ld bc,T0B1B - T0AC1 ; 90 размер раскладки в Таблице кодов клавиш bit 7,a jr nz,A0A87 ld de,T0AC1 ; нормальная Lat-раскладка or a jr z,A0A83 ld de,T0B1B ; Lat-раскладка с Shift dec a jr z,A0A83 ld de,T0B75 ; Lat-раскладка с вкл. CapsLock dec a jr z,A0A83 ld de,T0BCF ; Lat-раскладка с вкл. CapsLock + Shift dec a jr z,A0A83 ld de,T0C29 ; нормальная Rus-раскладка dec a jr z,A0A83 ld de,T0C83 ; Rus-раскладка с Shift dec a jr z,A0A83 ld de,T0CDD ; Rus-раскладка с вкл. CapsLock dec a jr z,A0A83 ld de,T0D37 ; Rus-раскладка с вкл. CapsLock + Shift dec a jr z,A0A83 xor a ; код scf ret ; A0A83: ldir xor a ret ; A0A87: res 7,a ld de,T0AC1 ; нормальная Lat-раскладка or a jr z,A0ABC ld de,T0B1B ; Lat-раскладка с Shift dec a jr z,A0ABC ld de,T0B75 ; Lat-раскладка с вкл. CapsLock dec a jr z,A0ABC ld de,T0BCF ; Lat-раскладка с вкл. CapsLock + Shift dec a jr z,A0ABC ld de,T0C29 ; нормальная Rus-раскладка dec a jr z,A0ABC ld de,T0C83 ; Rus-раскладка с Shift dec a jr z,A0ABC ld de,T0CDD ; Rus-раскладка с вкл. CapsLock dec a jr z,A0ABC ld de,T0D37 ; Rus-раскладка с вкл. CapsLock + Shift dec a jr z,A0ABC xor a scf ret ; A0ABC: ex de,hl ldir xor a ret ; Таблица кодов клавиш (8 раскладок по 90 байт) ; Нормальная раскладка T0AC1: db "`",1Bh,"1","2","3","4","5","6","7","8","9","0","-","=",8 db 9,"q","w","e","r","t","y","u","i","o","p","[","]" db 0 ; CapsLock db "a","s","d","f","g","h","j","k","l",";","'",0Dh db 0 ; Left Shift db "z","x","c","v","b","n","m",",",".","/" db 0 ; Right Shift db '\' db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с Shift T0B1B: db "~",1Bh,"!","@","#","$","%","^","&","*","(",")","_","+",8 db 9,"Q","W","E","R","T","Y","U","I","O","P","{","}" db 0 ; CapsLock db "A","S","D","F","G","H","J","K","L",":",'"',0Dh db 0 ; Left Shift db "Z","X","C","V","B","N","M","<",">","?" db 0 ; Right Shift db "|" db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с вкл. CapsLock T0B75: db "`",1Bh,"1","2","3","4","5","6","7","8","9","0","-","=",8 db 9,"Q","W","E","R","T","Y","U","I","O","P","[","]",0 db "A","S","D","F","G","H","J","K","L",";","'",0Dh,0 db "Z","X","C","V","B","N","M",",",".","/",0 db '\' db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с вкл. CapsLock + Shift T0BCF: db "~",1Bh,"!","@","#","$","%","^","&","*","(",")","_","+",8 db 9,"q","w","e","r","t","y","u","i","o","p","{","}",0 db "a","s","d","f","g","h","j","k","l",":",'"',0Dh,0 db "z","x","c","v","b","n","m","<",">","?",0 db "|" db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Нормальная раскладка T0C29: db "ё",1Bh,"1","2","3","4","5","6","7","8","9","0","-","=",8 db 9,"й","ц","у","к","е","н","г","ш","щ","з","х","ъ",0 db "ф","ы","в","а","п","р","о","л","д","ж","э",0Dh,0 db "я","ч","с","м","и","т","ь","б","ю",".",0 db '\' db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с Shift T0C83: db "Ё",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8 db 9,"Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ",0 db "Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э",0Dh,0 db "Я","Ч","С","М","И","Т","Ь","Б","Ю",",",0 db "|" db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с вкл. CapsLock T0CDD: db "Ё",1Bh,"1","2","3","4","5","6","7","8","9","0","-","=",8 db 9,"Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ",0 db "Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э",0Dh,0 db "Я","Ч","С","М","И","Т","Ь","Б","Ю",".",0 db '\' db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 ; NumLock db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; ; Раскладка с вкл. CapsLock + Shift T0D37: db "ё",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8 db 9,"й","ц","у","к","е","н","г","ш","щ","з","х","ъ",0 db "ф","ы","в","а","п","р","о","л","д","ж","э",0Dh,0 db "я","ч","с","м","и","т","ь","б","ю",",",0 db "|" db 0 ; Ctrl db 0 ; Alt db 20h ; Space db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; доп. поле db 0 db "/","*","-","+",0Dh db 0,0,0,0,0,0,0,0,0,0,0 ; Звук. ; вход: hl=задержка внеш. цикла ; de=задержка внутр. цикла beep: ld a,10h out (0FEh),a ; порт ld b,d ld c,e dec bc ld a,b or c jr nz,$-3 ld a,0 out (0FEh),a ; порт ld b,d ld c,e dec bc ld a,b or c jr nz,$-3 dec hl ld a,h or l jr nz,beep ret ;------------------------------------------------- ; Иниц. LPT-портов для клавы ;------------------------------------------------- init_keyb_ports: ld a,0 out (19h),a ld a,1 out (19h),a ld a,0 out (19h),a ld a,3 out (19h),a ld a,0C1h out (19h),a ld a,4 out (19h),a ld a,7 out (19h),a ld a,5 out (19h),a ld a,62h out (19h),a ret ;PR: push ix ; push hl ; push de ; push af ; push hl; ; ld c,8Eh ; rst 08h ; ld (_pr+1),de ; ld de,1500h ; ld c,84h ; rst 08h ; pop hl; ; ;ld a,l ; call HEX1 ;_pr: ld de,0 ; ld c,84h ; rst 08h ; call newline ; pop af ; pop de ; pop hl ; pop ix ; ret ;HEXHL: ld a,h ; push hl ; call HEX1 ; pop hl ; ld a,l ;HEX1: push af ; rra ; rra ; rra ; rra ; call HEX2 ; pop af ;HEX2: and 0Fh ; add a,90h ; daa ; adc a,40h ; daa ;symb: jp Func_5B ; вывод символа на экран ;newline:ld a,0Ah ; call Func_5B ; ld a,0Dh ; jp Func_5B