File-Manager/MOD0/KEYBDRV.ASM
2025-04-04 00:37:36 +10:00

650 lines
11 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.

; Œ¥âª¨ T0600 ¨ A0900 ¢ëà ¢­¨¢ îâáï ­  £à ­¨æã xx00h!
;
; RST 20h. „à ©¢¥à ª« ¢¨ âãàë
KeybDrv:or a ; a=0 ¨­¨æ. ª« ¢ã
jp z,init_keyb
dec a ; a=1 ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
jr z,func_35
dec a ; a=2 ®¯à®á ¡¥§ ®¦¨¤ ­¨ï
jr z,func_31
;dec a ; a=3 â¥áâ ­ ¦ â¨ï ª« ¢¨è¨ (NZ-¤ , Z-­¥â)
jr func_33
;ret
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #31. ޝà®á ª« ¢¨ âãàë ¡¥§ ®¦¨¤ ­¨ï.
;
; ¢ë室: A=ª®¤ ᨬ¢®« 
; D=᪥­-ª®¤, …=ª®¤ ᨬ¢®« 
; B=¡¨âë Ctrl,Alt,Shift
; Z - ­¥â ª« ¢¨è
;/////////////////////////////////////////////////////////////////////
func_31:;ld hl,D0641
;ld a,(D0640)
;cp (hl)
;ret z ; ­¥â ª« ¢¨è¨
call A06FC
ld a,e
ret
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #33. <20>®«ãç¨âì á®áâ®ï­¨¥ ª« ¢¨ âãàë.
; ‚®§¢à é ¥â á®áâ®ï­¨¥ ª« ¢¨ âãàë ­  ¤ ­­ë© ¬®¬¥­â.
;
; ¢ë室: Z - ­¥â ᨬ¢®«®¢ ¢ ¡ãä¥à¥
; B=¡¨âë Ctrl,Alt,Shift
;/////////////////////////////////////////////////////////////////////
func_33:ld hl,D0641
ld a,(D0640)
cp (hl)
ld bc,(D0642) ; ä« £¨ ª« ¢ë
ld a,0
ret z ; z - ­¥ ­ ¦ â 
dec a ; nz - ­ ¦ â 
ret
;/////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #35. Žç¨áâ¨âì ¡ãä¥à ª« ¢¨ âãàë
;/////////////////////////////////////////////////////////////////////
func_35:ld a,(D0641)
ld (D0640),a
ret
ds 0100h-$ ; ¢ë஢­¨âì ­  £à ­¨æã xx00h
; à ¡. ï祩ª¨ ª« ¢ë
T0600: ds 64
;
D0640: db 0 ; ⥪.  ¤à¥á ª®­æ  ª®«ìæ. ¡ãä¥à ?
D0641: db 0 ;  ¤à¥á ­ ç «  ª®«ìæ. ¡ãä¥à ?
; ä« £¨ ª« ¢ë
D0642: db 2
db 0
db 0
db 3
;
D0646: dw 0
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) ; ¯®àâ áâ âãá 
bit 0,a ; 0-bit, ¡ ©â ¯à¨è¥« ?
ret z ; ­¥â
ld a,1
ld (KeyPres+1),a ; ¤à ©¢¥à ¬ë誨
in a,(18h)
cp 0F0h ; ª« ¢¨è  ®â¦ â  ?
jr z,A0730 ; ¤ 
cp 0E0h
jr z,A072A ;7bit
cp 0E1h ; Pause
jr z,A0736 ;5bit
bit 6,(ix+2)
jr nz,A07B3
ld l,a
call A0990
call A0892
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
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
;call A06DD ; á®åà. de,bc ¢ ª®«ìæ. ¡ãä¥à¥ ª« ¢ë
;ret ; ­¥ ®¯â¨¬¨§¨âì
A07B3: res 6,(ix+2)
ld l,a
call A0990
call A0837
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-© ¡¨â (Ins)
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
;db 0,0;
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)
ret
;
A0889: cp 34h
;jr nz,A0891
ret nz
res 6,(ix+1)
ret
;A0891: ret
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
set 7,(ix+1)
ret
;
A08D0: cp 34h
;jr nz,A08D8
ret nz
set 6,(ix+1)
ret
;A08D8: ret
A0990: bit 7,(ix+2)
jr z,A09B0
cp 11h
ld l,39h
ret z
cp 14h
ld l,3Ah
ret z
cp 5Ah
ld l,4Eh
ret z
cp 4Ah
ld l,4Ah
ret z
cp 7Ch
ld l,47h
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
bit 0,(ix+0)
ld bc,T0B75
jr nz,A09DE
ld bc,T0AC1
A09DE: ld h,0
add hl,bc
ld e,(hl)
ret
;
A09E3: ld bc,T0B1B
bit 0,(ix+0)
jr z,A09EF
ld bc,T0BCF
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
jr nz,A0A16
ld bc,T0C29
A0A16: ld h,0
add hl,bc
ld e,(hl)
ret
;
A0A1B: ld bc,T0C83
bit 0,(ix+0)
jr z,A0A27
ld bc,T0D37
A0A27: ld h,0
add hl,bc
ld e,(hl)
set 7,d
ret
ds 0400h-$ ; ¢ë஢­¨âì ­  £à ­¨æã xx00h
; „®«¦­® ­ ç¨­ âìáï á £à ­¨æë 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
; ’ ¡«¨æ  ª®¤®¢ ª« ¢¨è (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
;
;
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 "|",0,0
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
;
;
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 '\',0,0
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
;
;
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 "|",0,0
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 '\',0,0
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
;
;
T0C83: db "ð",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8
db 9,"‰","","“","Š","…","<22>","ƒ","˜","™","‡","•","š",0
db "”","","","€","<22>","<22>","Ž","","„","†","<22>",0Dh,0
db "Ÿ","—","","Œ","ˆ","","œ","<22>","ž",",",0
db "|",0,0
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
;
;
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 '\',0,0
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
;
;
T0D37: db "ñ",1Bh,"!",'"',"#","$",":",",",".",";","?","%","_","+",8
db 9,"©","æ","ã","ª","¥","­","£","è","é","§","å","ê",0
db "ä","ë","¢"," ","¯","à","®","«","¤","¦","í",0Dh,0
db "ï","ç","á","¬","¨","â","ì","¡","î",",",0
db "|",0,0
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
;-------------------------------------------------
; ˆ­¨æ. LPT-¯®à⮢ ¤«ï ª« ¢ë
;-------------------------------------------------
init_keyb:
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
; ‡¢ãª.
; ¢å®¤: 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