Login

Subversion Repositories NedoOS

Rev

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..
               ;╨╜╨╛╨▓╨░╤П,╤Б╤В╨░╤А╨░╤П,╨╜╨╛╨▓╨░╤П,...