Estex-DSS/DOS/KEYB.ASM
2023-08-11 04:54:30 +10:00

1004 lines
20 KiB
NASM
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <20> ç¨­ ¥âáï á 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. <20>®«ãç¨âì á®áâ®ï­¨¥ ª« ¢¨ âãàë.
; ‚®§¢à é ¥â á®áâ®ï­¨¥ ª« ¢¨ âãàë ­  ¤ ­­ë© ¬®¬¥­â.
; „ ­­ë¥ ¡¥àãâáï ­¥ ¨§ ¡ãä¥à  ª« ¢¨ âãàë (ª ª ¢ ®áâ «ì­ëå äã­ªæ¨ïå),
;   ­¥¯®á।á⢥­­® ¨§ १ã«ìâ â®¢ ¯®á«¥¤­¥£® ᪠­¨à®¢ ­¨ï ª« ¢¨ âãàë.
;
; ¢å®¤: ­¥â
; ¢ë室: 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
;/////////////////////////////////////////////////////////////////////
;
; <20> ç «ì­ ï ¨­¨æ¨ «¨§ æ¨ï „Ž‘
;
;/////////////////////////////////////////////////////////////////////
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. <20>®«ãç¨âì á®áâ®ï­¨¥ §¢ãª®¢ëå ¯¥à¥¬¥­­ëå
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 ¡ ©â)
; <20>®à¬ «ì­ ï à áª« ¤ª 
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
;
; <20> áª« ¤ª  á 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
;
; <20> áª« ¤ª  á ¢ª«. 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
;
; <20> áª« ¤ª  á ¢ª«. 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
;
; <20>®à¬ «ì­ ï à áª« ¤ª 
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
;
; <20> áª« ¤ª  á Shift
T0C83: db "ð",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8
db 9,"‰","","“","Š","…","<22>","ƒ","˜","™","‡","•","š",0
db "”","","","€","<22>","<22>","Ž","","„","†","<22>",0Dh,0
db "Ÿ","—","","Œ","ˆ","","œ","<22>","ž",",",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
;
; <20> áª« ¤ª  á ¢ª«. CapsLock
T0CDD: db "ð",1Bh,"1","2","3","4","5","6","7","8","9","0","-","=",8
db 9,"‰","","“","Š","…","<22>","ƒ","˜","™","‡","•","š",0
db "”","","","€","<22>","<22>","Ž","","„","†","<22>",0Dh,0
db "Ÿ","—","","Œ","ˆ","","œ","<22>","ž",".",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
;
; <20> áª« ¤ª  á ¢ª«. 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