Rev 1242 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
keybfsz=4
ssSpc=1;32
csEnt=2;13
ssEnt=3;13
;CS+3=4
;CS+4=5
;CS+2=6
;CS+1=7
;CS+5=8
;CS+8=9
;CS+6=10
;CS+7=11
;CS+0=12
;Ent=13
;SS+CS=14
;CS+9=15
csSpc=16;32
;Ext+key=CS+key
KEYB
;╨┤╨╗╤П autosav ╨╕ ╨╝╨╛╤А╨│╨░╨╜╨╕╤П ovr
;LD HL,(23672)
;INC HL
;LD (23672),HL
KBoff
NOP ;/ret
;╤Б╨║╨░╨╜╨╕╤А╨╛╨▓╨░╤В╤М ╨║╨╗╨░╨▓╨╕╨░╤В╤Г╤А╤Г
LD HL,OLDSCAN
LD BC,#FEFE
KEYBSC LD D,(HL)
IN A,(C)
LD (HL),A
INC HL
LD (HL),D ;╤Б╤В╨░╤А╤Л╨╣ ╤Б╨║╨░╨╜
INC HL
RLC B
jr C,KEYBSC
;╨▓╤А╨╡╨╝╤П CS ╨╕ SS
tss=$+1
tcs=$+2
LD BC,0
;╨╡╤Б╨╗╨╕ ╨╜╨░╨╢╨░╤В CS+SS, ╤В╨╛ OK (╤Г CS ╨║╨╛╨┤ 14)
;╨╡╤Б╨╗╨╕ ╨╜╨░╨╢╨░╤В ╤В╨╛╨╗╤М╨║╨╛ CS, ╤В╨╛ ╤Б╨╜╨╕╨╝╨░╨╡╨╝ ╨╡╨│╨╛ ╨╕╨╖ ╨╝╨░╤В╤А╨╕╤Ж╤Л
;SS ╤Б╨╜╨╕╨╝╨░╨╡╨╝ ╤Б ╨╝╨░╤В╤А╨╕╤Ж╤Л ╨▓╤Б╨╡╨│╨┤╨░
XOR A
LD HL,OLDSCAN+14
BIT 1,(HL) ;ss
SET 1,(HL) ;╤Б╨╜╨╕╨╝╨░╨╡╨╝ ss
jr NZ,freess ;ss ╨╛╤В╨╢╨░╤В
INC C
jr NZ,okss ;max=255
DEC C
JR okss
freess LD C,A ;=0
okss
LD HL,OLDSCAN
BIT 0,(HL) ;cs
jr NZ,freecs ;cs ╨╛╤В╨╢╨░╤В
INC C
DEC C
jr NZ,$+3 ;ss ╨╜╨░╨╢╨░╤В => EXT
INC (HL) ;╤Б╨╜╨╕╨╝╨░╨╡╨╝ cs, ╨║╨╛╨│╨┤╨░ ╨╜╨╡╤В ss
INC B
jr NZ,okcs ;max=255
DJNZ okcs ;DEC B:JR ╨▓╤Б╨╡╨│╨┤╨░
freecs LD B,A ;=0
okcs
LD (tss),BC
;╨Т╨б╨Х ╤Б╨╛╨▒╤Л╤В╨╕╤П ╨┐╨╕╤И╨╡╨╝ ╨▓ ╨▒╤Г╤Д╨╡╤А (╤З╤В╨╛╨▒╤Л ╨╜╨╡ ╤В╨╡╤А╤П╤В╤М ╨╛╨┤╨╜╨╛╨▓╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╡)
LD DE,#00D8
LD C,32
KEYBX LD HL,OLDSCAN+15
RRC C
LD B,8
KEYBX1 LD A,(HL) ;╨▒╤Л╨╗╨╛ ╨╛╤В╨╢╨░╤В╨╛=1
;CPL ;0
DEC HL
;OR (HL) ;╨╜╨░╨╢╨░╤В╨╛=0
XOR (HL)
AND C
;JNZ KEYBX1N
jr Z,KEYBX1N
LD A,(HL)
AND C ;Z=╨╜╨░╨╢╨░╤В╨╕╨╡
PUSH BC
PUSH HL
LD BC,(tss)
;E=#D8..#FF
;╨┐╤А╨╡╨▒╤А╨░╨╖╨╛╨▓╨░╤В╤М ╤Б╨║╨░╨╜-╨║╨╛╨┤ E ╨▓ ╨║╨╛╨┤ ╨║╨╗╨░╨▓╨╕╤И╨╕ D
LD D,0
jr Z,KBpress ;Z=╨╜╨░╨╢╨░╤В╨╕╨╡
LD HL,TCURKEYS-#D8
ADD HL,DE
LD D,(HL) ;╨┐╨╛╨┤ ╨║╨░╨║╨╕╨╝ ╨║╨╛╨┤╨╛╨╝ ╨▒╤Л╨╗╨░ ╨╜╨░╨╢╨░╤В╨░ ╤Н╤В╨░ ╨║╨╗╨░╨▓╨╕╤И╨░
SET 7,D ;╨┐╤А╨╕╨╖╨╜╨░╨║ ╨╛╤В╨╢╨░╤В╨╕╤П ╨▓ ╨║╨╛╨┤╨╡ ╨║╨╗╨░╨▓╨╕╤И╨╕
XOR A
LD (KBcode),A ;╨▓╤Л╨║╨╗. ╨░╨▓╤В╨╛╨┐╨╛╨▓╤В╨╛╤А
JR KBpressQ
KBpress
LD HL,TPLAINKEYS-#D8
XOR A
CP C
jr Z,$+5
LD HL,TSSKEYS-#D8
CP B
jr Z,$+5
LD HL,TCSKEYS-#D8 ;ex#=cs#
ADD HL,DE
LD A,(HL) ;╨║╨╛╨┤ ╨║╨╗╨░╨▓╨╕╤И╨╕
LD HL,TCURKEYS-#D8
ADD HL,DE
LD (HL),A ;╨┤╨╗╤П ╨╛╤В╨╢╨░╤В╨╕╤П - ╨┐╨╛╨┤ ╨║╨░╨║╨╕╨╝ ╨║╨╛╨┤╨╛╨╝ ╨╜╨░╨╢╨░╤В╨░ ╨║╨╗╨░╨▓╨╕╤И╨░
LD D,A
LD (KBcode),A
LD (KBbc),BC
LD A,15
LD (KBtime),A
KBpressQ
CALL PUTKEY
KBpressQQ
POP HL
POP BC
KEYBX1N
INC E
DEC HL
DJNZ KEYBX1
jr NZ,KEYBX
;INC D
;DEC D
;RET NZ ;╤З╤В╨╛-╤В╨╛ ╨╕╨╖╨╝╨╡╨╜╨╕╨╗╨╛╤Б╤М - ╨╜╨╡╤В ╨░╨▓╤В╨╛╨┐╨╛╨▓╤В╨╛╤А╨░
LD HL,OLDSCAN
LD A,-1
LD B,8
AND (HL) ;"╤З╤В╨╛-╤В╨╛ ╨╜╨░╨╢╨░╤В╨╛" (SS ╤Б╨╜╤П╤В ╤Б ╨╝╨░╤В╤А╨╕╤Ж╤Л, "CS"=EXT)
INC HL,HL
DJNZ $-3
CPL
AND 31
RET Z ;╨╜╨╕╤З╨╡╨│╨╛ ╨╜╨╡ ╨╜╨░╨╢╨░╤В╨╛
;╨╜╨░╨╢╨░╤В╨░ ╤Б╤В╨░╤А╨░╤П(?) ╨║╨╜╨╛╨┐╨║╨░
KBtime=$+1
LD A,15
DEC A
jr Z,YEpKEYauto ;╨░╨▓╤В╨╛╨┐╨╛╨▓╤В╨╛╤А (╤Б╤В╨░╤А╤Л╨╡ D,B,C)
;╨░╨▓╤В╨╛╨┐╨╛╨▓╤В╨╛╤А╤Г ╨╜╨╡ ╨▓╤А╨╡╨╝╤П
LD (KBtime),A ;╨┐╨╛╤Б╤В╨╡╨┐╨╡╨╜╨╜╨╛ ╤Г╨▒╨░╨▓╨╗╤П╨╡╨╝ ╨┤╨╛ 1
;╨╕ ╨┐╨╛╤Б╨╗╨╡ 1 ╨▒╨╛╨╗╤М╤И╨╡ ╨╜╨╡ ╨┐╨╛╨┐╨░╨┤╨╡╨╝ ╨╜╨░ ╤Г╨▒╨░╨▓╨╗╨╡╨╜╨╕╨╡
;╨░ ╤Б╤А╨░╨╖╤Г ╨╜╨░ ╨┐╨╛╨▓╤В╨╛╤А
RET
YEpKEYauto
KBbc=$+1
LD BC,0
KBcode=$+1
LD D,0
PUTKEY
LD HL,(GKEYADR);KEYBUFF ;╨░╨┤╤А╨╡╤Б ╨║╨╛╨╜╤Ж╨░ ╤Б╨┐╨╕╤Б╨║╨░
LD A,D
OR A
RET Z ;╨╜╨╡╤В ╤Б╨╛╨▒╤Л╤В╨╕╤П
CP 32
jr NC,YEpNUPR
;╨╜╨╡ ╤Б╨║╨╗╨░╨┤╨╕╤А╨╛╨▓╨░╤В╤М ╨░╨▓╤В╨╛╨┐╨╛╨▓╤В╨╛╤А cs3, cs4, cs9, cs0!
;╨▓╨╛╨╛╨▒╤Й╨╡ ╤Г╨┐╤А╨░╨▓╨╗╤П╤О╤Й╨╕╨╡ ╨║╨╗╨░╨▓╨╕╤И╨╕
DEC HL,HL,HL
CP (HL)
RET Z ;╨╡╤Й╨╡ ╤Б╤В╨░╤А╤Г╤О ╨║╨╛╨┐╨╕╤О ╨╜╨╡ ╨╖╨░╨▒╤А╨░╨╗╨╕!
INC HL,HL,HL
YEpNUPR
;╨╡╤Б╤В╤М ╨╗╨╕ ╨╝╨╡╤Б╤В╨╛ ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡?
LD A,L
CP KEYBUFFEND&0xff
RET Z ;╨╜╨╡╤В ╨╝╨╡╤Б╤В╨░!
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
INC HL
LD (HL),0 ;╨╝╨░╤А╨║╨╡╤А ╨║╨╛╨╜╤Ж╨░ ╤Б╨┐╨╕╤Б╨║╨░
LD (GKEYADR),HL
;IFN sobyt
; LD HL,(SOBYTS)
; INC HL
; LD (SOBYTS),HL
;ENDIF
;SET 5,(IY+1)
;ld a,1
;ld (keyreceived),a
RET
keyscan_getkey
;╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В A,B<->C,╨╜╨╕╤З╨╡╨│╨╛ ╨╜╨╡ ╨┐╨╛╤А╤В╨╕╤В
;Z=no keys
PUSH HL
LD HL,KBoff
LD (HL),201 ;╨╖╨░╨┐╤А╨╡╤В ╨╛╨┐╤А╨╛╤Б╨░ ╨║╨╗╨░╨▓╤Л
;╨╡╤Б╨╗╨╕ ╨╖╨░╨┐╤А╨╡╤В ╨╜╨░ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╡ ╨▒╤Г╤Д╨╡╤А╨░, ╤В╨╛ ╨╝╨╛╨╢╨╜╨╛ ╨┐╨╛╤В╨╡╤А╤П╤В╤М ╤Б╨╛╨▒╤Л╤В╨╕╨╡ ;TODO ╤Ж╨╕╨║╨╗╨╕╤З╨╡╤Б╨║╤Г╤О ╨╛╤З╨╡╤А╨╡╨┤╤М
LD HL,KEYBUFF
LD A,(HL)
OR A
jr Z,GETKpop ;no keys in buff
LD A,(HL)
PUSH DE
LD D,H
ld E,L
INC HL
LD B,(HL);╨▓ ╨╛╨▒╤А.╨┐╨╛╤А╤П╨┤╨║╨╡ ╨┤╨╗╤П ╤Б╨╛╨▓╨╝╨╡╤Б╤В╨╕╨╝╨╛╤Б╤В╨╕
INC HL
LD C,(HL)
INC HL
PUSH BC
LD BC,+(keybfsz-1)*3
LDIR
ex de,hl
LD (HL),B
LD HL,(GKEYADR)
DEC HL,HL,HL
LD (GKEYADR),HL
; PUSH AF
;LD A,L
;CP KEYBUFF
;jr Z,$+6
;SET 5,(IY+1)
; POP AF
;CALL RECAP
INC B ;NZ
POP BC
POP DE
GETKpop
LD HL,KBoff
LD (HL),0
POP HL
;LD (23560),A
RET
TCURKEYS
;╤В╨░╨▒╨╗╨╕╤Ж╨░ ╨┤╨╗╤П ╨╛╤В╨╢╨░╤В╨╕╤П - ╨║╨╡╨╝ ╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨║╨░╨╢╨┤╨░╤П ╨║╨╗╨╡╤В╨║╨░ ╨╝╨░╤В╤А╨╕╤Ж╤Л
;╤В.╨╡. ╨┐╨╛╨┤ ╨║╨░╨║╨╕╨╝ ╨║╨╛╨┤╨╛╨╝ ╨╛╨╜╨░ ╨╜╨░╨╢╨░╤В╨░
DS 40
TPLAINKEYS
;a-la #205
;#205: "BHY6..." (39 ╨▒╨░╨╣╤В, SS=#E)
db 0x30,0x23,0x15,7,6,0x14,0x22,0x2f ;DB "BHY65TGV"
db 0x31,0x24,0x16,8,5,0x13,0x21,0x2e ;DB "NJU74RFC"
db 0x32,0x25,0x17,9,4,0x12,0x20,0x2d ;DB "MKI83EDX"
db 0x00,0x26,0x18,10,2,0x11,0x1f,0x2c ;DB 0,"LO91WSZ"
db 0x39,0x1c,0x19,0x0b,2,0x10,0x1e ;DB 32,13,"P01QA",0
TCSKEYS
;a-la #205
DB "bhy",0x50,0x4b,"tgv"
DB "nju",0x48,5,"rfc"
DB "mki",0x4d,4,"edx"
DB 0,"lo",15,6,"wsz"
DB csSpc,csEnt,"p",12,7,"qa",14
TSSKEYS
;a-la #205
DB "*^[&%>}/"
DB ",-]'$<{?"
DB ".+",ssI,"(#",ssE,'\\',"`"
DB 0,"=;)@",ssW,"|:"
DB ssSpc,ssEnt,34,"_!",ssQ,"~"
;CS+SS ╨╕╤Й╨╡╤В╤Б╤П ╨▓ TCSKEYS
;╨╖╨░ 3 ╨▒╨░╨╣╤В╨░ ╨┤╨╛ KEYBUFF ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▒╤Л╤В╤М ╤Б╨╕╨╝╨▓>=32
KEYBUFF
DS 3*keybfsz ;key,tss,tcs
KEYBUFFEND
DB 0 ;╨║╨╛╨╜╨╡╤Ж ╤Б╨░╨╝╨╛╨│╨╛ ╨▒╤Г╤Д╨╡╤А╨░ (╨┐╨╛╤Б╨╗╨╡ ╨║╨╜╨╛╨┐╨║╨╕ ╨║╨╗╨░╨┤╤Г╤В 0)
OLDSCAN
DS 16,-1;╨╛╤В CS.. ╨┤╨╛ Spc..
;╨╜╨╛╨▓╨░╤П,╤Б╤В╨░╤А╨░╤П,╨╜╨╛╨▓╨░╤П,...