794 lines
22 KiB
NASM
794 lines
22 KiB
NASM
|
||
;
|
||
_mInfoALIGN 256,0 ; ¢ëà ¢¨¢ ¨¥ ¤à¥á #XX00
|
||
SBUF: BLOCK 64,0
|
||
|
||
HEAD: DB 0
|
||
HOST: DB 0
|
||
|
||
;
|
||
K_LOCK EQU $-KEYFLAG
|
||
LANG_L EQU 7
|
||
PAUSE_L EQU 6
|
||
RES5_L EQU 5
|
||
RES4_L EQU 4
|
||
NUM_L EQU 3
|
||
SCRL_L EQU 2
|
||
INS_L EQU 1
|
||
CAPS_L EQU 0
|
||
KEYFLAG: DB 2 ;D0-Key Pressed
|
||
;
|
||
K_SHIFT EQU $-KEYFLAG
|
||
L_SHIFT EQU 7
|
||
R_SHIFT EQU 6
|
||
X_CTRL EQU 5
|
||
X_ALT EQU 4
|
||
L_CTRL EQU 3
|
||
L_ALT EQU 2
|
||
R_CTRL EQU 1
|
||
R_ALT EQU 0
|
||
KEYCTRL: DB 0
|
||
;
|
||
KEYFLG EQU $-KEYFLAG
|
||
FLAG_E0 EQU 7
|
||
FLAG_F0 EQU 6
|
||
FLAG_E1 EQU 5
|
||
FLAG_04 EQU 4
|
||
FLAG_03 EQU 3
|
||
FLAG_02 EQU 2
|
||
FLAG_01 EQU 1
|
||
FLAG_00 EQU 0
|
||
DB 0
|
||
;
|
||
SOUND_K EQU $-KEYFLAG
|
||
FLAG_S7 EQU 7
|
||
FLAG_S6 EQU 6
|
||
FLAG_S5 EQU 5
|
||
FLAG_S4 EQU 4
|
||
FLAG_S3 EQU 3
|
||
FLAG_S2 EQU 2
|
||
SF_ALT EQU 1
|
||
SF_BUFF EQU 0
|
||
DB 3
|
||
;
|
||
;UNCODE: DW 0000
|
||
;
|
||
|
||
; D15 - LShift
|
||
; D14 - RShift
|
||
; D13 - CTRL
|
||
; D12 - ALT
|
||
; D11 - LCTRL
|
||
; D10 - LALT
|
||
; D9 - RCTRL
|
||
; D8 - RALT
|
||
; D7 - Language Lock
|
||
; D6 - Reserved
|
||
; D5 - Reserved
|
||
; D4 - Reserved
|
||
; D3 - Num Lock
|
||
; D2 - Scroll Lock
|
||
; D1 - Insert Lock
|
||
; D0 - Caps Lock
|
||
|
||
; D15 - Keystroke
|
||
; D14
|
||
; D13 \
|
||
; D12 \
|
||
; D11 -- Position code (0...5Ah)
|
||
; D10 /
|
||
; D9 /
|
||
; D8
|
||
; D7..D0 - ASCII code
|
||
|
||
WAITKEY:
|
||
LD HL,HOST
|
||
LD A,(HEAD)
|
||
CP (HL)
|
||
JR Z,WAITKEY
|
||
CALL GETSYM
|
||
LD A,E
|
||
AND A
|
||
RET
|
||
|
||
SCANKEY:
|
||
LD HL,HOST
|
||
LD A,(HEAD)
|
||
CP (HL)
|
||
RET Z
|
||
CALL GETSYM
|
||
LD A,E
|
||
RET
|
||
|
||
CTRLKEY:
|
||
LD HL,HOST
|
||
LD A,(HEAD)
|
||
CP (HL)
|
||
LD BC,(KEYFLAG)
|
||
LD A,#00
|
||
RET Z
|
||
DEC A
|
||
RET
|
||
|
||
PUTSYM: LD HL,HEAD
|
||
LD A,(HOST)
|
||
SUB 4
|
||
AND #3F
|
||
CP (HL)
|
||
JR Z,FULL_BF
|
||
LD A,(HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
RES 6,(HL)
|
||
LD L,A
|
||
LD H,high SBUF
|
||
LD (HL),E
|
||
INC L
|
||
LD (HL),D
|
||
INC L
|
||
LD (HL),B
|
||
INC L
|
||
LD (HL),C
|
||
RET
|
||
|
||
GETSYM: LD HL,HOST
|
||
LD A,(HEAD)
|
||
CP (HL)
|
||
RET Z
|
||
LD A,(HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
INC (HL)
|
||
RES 6,(HL)
|
||
LD L,A
|
||
LD H,high SBUF
|
||
LD E,(HL)
|
||
INC L
|
||
LD D,(HL)
|
||
INC L
|
||
LD B,(HL)
|
||
INC L
|
||
LD C,(HL)
|
||
RET
|
||
|
||
FULL_BF:
|
||
EX AF,AF'
|
||
BIT SF_BUFF,(IX+SOUND_K)
|
||
JR Z,.FBF
|
||
EXX
|
||
LD DE,230
|
||
LD HL,50
|
||
CALL BEEP
|
||
EXX
|
||
.FBF: EX AF,AF'
|
||
RET
|
||
|
||
KEYSCAN:
|
||
LD IX,KEYFLAG
|
||
RESCANN:
|
||
IN A,(Z84.SIO.Ch_A.Ctrl)
|
||
AND 1
|
||
RET Z
|
||
;[x] 18/02/2024 ¯à®¢¥àª ¯¥à¥¯®«¥¨¥ ¡ãä¥à
|
||
; A = 1
|
||
; reg 1
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
IN A,(Z84.SIO.Ch_A.Ctrl)
|
||
AND %0010'0000 ; check receiver overrun error
|
||
JP NZ,Receiver_Overrun
|
||
;
|
||
IN A,(Z84.SIO.Ch_A.Data)
|
||
CP #F0
|
||
JR Z,F0_KEY
|
||
CP #E0
|
||
JR Z,E0_KEY
|
||
;
|
||
CP #E1
|
||
IF USE_E1_SCANCODE
|
||
JR Z,E1_KEY
|
||
ELSE
|
||
JR Z,RESCANN
|
||
ENDIF
|
||
;
|
||
BIT FLAG_F0,(IX+KEYFLG)
|
||
JR NZ,UN_KEY
|
||
;
|
||
LD L,A
|
||
CALL XLAT
|
||
CALL SHIFTS
|
||
RES FLAG_E0,(IX+KEYFLG)
|
||
IF USE_E1_SCANCODE
|
||
RES FLAG_E1,(IX+KEYFLG)
|
||
ENDIF
|
||
;
|
||
;[x] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
|
||
JR Z,RESCANN ;IT'S SHIFT KEY
|
||
; RET Z ;IT'S SHIFT KEY
|
||
;
|
||
CALL INPCODE ;L - AT POS. CODE
|
||
;PUTCODE
|
||
LD HL,#1C00 ;Caps Lock
|
||
AND A
|
||
SBC HL,DE
|
||
CALL Z,CAPS_X
|
||
|
||
; !TODO ¢¥àãâì àãá᪨©? € § 祬?
|
||
; LD HL,#B800 ;Ctrl + Space
|
||
; AND A
|
||
; SBC HL,DE
|
||
; CALL Z,RUS_X
|
||
|
||
LD HL,#5000 ;Insert
|
||
AND A
|
||
SBC HL,DE
|
||
CALL Z,INS_X
|
||
LD HL,#4900 ;Num Lock
|
||
AND A
|
||
SBC HL,DE
|
||
CALL Z,NUM_X
|
||
LD HL,#C900 ;Pause Lock
|
||
AND A
|
||
SBC HL,DE
|
||
CALL Z,PAUSE_X
|
||
LD HL,#4800 ;Scroll Lock
|
||
AND A
|
||
SBC HL,DE
|
||
CALL Z,SCL_X
|
||
;-----------------------; !!!!! à¥á¥â ¯® Š€„
|
||
; LD HL,#CF00 ; ; Ctrl + Alt + Del
|
||
; AND A ;
|
||
; SBC HL,DE ;
|
||
; CALL Z,RST_X ;
|
||
;-----------------------;
|
||
LD BC,(KEYFLAG)
|
||
CALL PUTSYM
|
||
JP RESCANN
|
||
|
||
E0_KEY: SET FLAG_E0,(IX+KEYFLG)
|
||
JR RESCANN
|
||
|
||
F0_KEY: SET FLAG_F0,(IX+KEYFLG)
|
||
JR RESCANN
|
||
|
||
IF USE_E1_SCANCODE
|
||
E1_KEY: SET FLAG_E1,(IX+KEYFLG)
|
||
JR RESCANN
|
||
ENDIF
|
||
|
||
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
|
||
LD L,A
|
||
CALL XLAT
|
||
CALL UNSHIFT
|
||
RES FLAG_E0,(IX+KEYFLG)
|
||
;LD H,0
|
||
;LD (UNCODE),HL
|
||
RET
|
||
|
||
CAPS_X: LD A,(KEYFLAG)
|
||
XOR 1<<CAPS_L
|
||
LD (KEYFLAG),A
|
||
RET
|
||
|
||
INS_X: LD A,(KEYFLAG)
|
||
XOR 1<<INS_L
|
||
LD (KEYFLAG),A
|
||
RET
|
||
|
||
NUM_X: LD A,(KEYFLAG)
|
||
XOR 1<<NUM_L
|
||
LD (KEYFLAG),A
|
||
RET
|
||
|
||
PAUSE_X:
|
||
BIT X_CTRL,(IX+K_SHIFT)
|
||
RET Z
|
||
POP HL
|
||
LD A,(KEYFLAG)
|
||
XOR 1<<PAUSE_L
|
||
LD (KEYFLAG),A
|
||
AND 1<<PAUSE_L
|
||
RET Z
|
||
EI
|
||
.loop: HALT
|
||
BIT PAUSE_L,(IX+K_LOCK)
|
||
JR NZ,.loop
|
||
DI
|
||
RET
|
||
|
||
SCL_X: LD A,(KEYFLAG)
|
||
XOR 1<<SCRL_L
|
||
LD (KEYFLAG),A
|
||
RET
|
||
|
||
;///////////////////////////////////////////////////////////////////////
|
||
;///////////////////////////////////////////////////////////////////////
|
||
; !TODO £«ïãâì, ¬®¦¥â ¯à¨£®¤¨âáï
|
||
;ECHOKEY: CALL SCANKEY
|
||
; JR Z,ECHOKEY
|
||
; PUSH DE
|
||
; PUSH BC
|
||
; CALL PUTCHAR
|
||
; POP BC
|
||
; POP DE
|
||
; LD A,E
|
||
; AND A
|
||
; RET
|
||
|
||
; !TODO £«ïãâì, ¬®¦¥â ¯à¨£®¤¨âáï
|
||
; TESTKEY:
|
||
; LD HL,HOST
|
||
; LD A,(HEAD)
|
||
; CP (HL)
|
||
; RET Z
|
||
; LD L,(HL)
|
||
; LD H,high SBUF
|
||
; LD E,(HL)
|
||
; INC L
|
||
; LD D,(HL)
|
||
; INC L
|
||
; LD B,(HL)
|
||
; INC L
|
||
; LD C,(HL)
|
||
; LD A,E
|
||
; RET
|
||
|
||
; !TODO £«ïãâì, ¬®¦¥â ¯à¨£®¤¨âáï
|
||
; K_CLEAR:
|
||
; LD A,(HOST)
|
||
; LD (HEAD),A
|
||
; LD A,#2F
|
||
; CP B
|
||
; JR C,.K_C2
|
||
; LD A,1
|
||
; SCF
|
||
; RET
|
||
; .K_C2: LD A,#35
|
||
; CP B
|
||
; JR NC,.K_C3
|
||
; LD A,1
|
||
; SCF
|
||
; RET
|
||
; .K_C3: LD C,B
|
||
; RST #10
|
||
; RET
|
||
|
||
; !TODO ¢¥àãâì àãá᪨©? € § 祬?
|
||
;RUS_X BIT X_CTRL,(IX+K_SHIFT)
|
||
; RET Z
|
||
; LD A,(IX+K_LOCK)
|
||
; XOR #80
|
||
; LD (IX+K_LOCK),A
|
||
; BIT SF_ALT,(IX+SOUND_K)
|
||
; RET Z
|
||
; EXX
|
||
; LD DE,190
|
||
; LD HL,20
|
||
; CALL BEEP
|
||
; EXX
|
||
; RET
|
||
|
||
;---------------------------- ;!!!!! à¥á¥â ¯® Š€„
|
||
; RST_X:
|
||
; BIT X_CTRL,(IX+K_SHIFT)
|
||
; RET Z
|
||
; BIT X_ALT,(IX+K_SHIFT)
|
||
; RET Z
|
||
; XOR A
|
||
; LD BC,#02FD
|
||
; RST_to_BIOS
|
||
; RET
|
||
;----------------------------
|
||
;///////////////////////////////////////////////////////////////////////
|
||
;///////////////////////////////////////////////////////////////////////
|
||
|
||
;
|
||
;;
|
||
UNSHIFT:
|
||
LD A,L
|
||
CP #37 ;L ALT
|
||
JR Z,.L_ALT
|
||
CP #39 ;R ALT
|
||
JR Z,.R_ALT
|
||
CP #36 ;L CTRL
|
||
JR Z,.L_CTRL
|
||
CP #3A ;R CTRL
|
||
JR Z,.R_CTRL
|
||
CP #29 ;L SHIFT
|
||
JR Z,.L_SHIFT
|
||
CP #34 ;R SHIFT
|
||
RET NZ
|
||
;.R_SHIFT:
|
||
RES R_SHIFT,(IX+K_SHIFT)
|
||
RET
|
||
.L_ALT:
|
||
RES L_ALT,(IX+K_SHIFT)
|
||
BIT R_ALT,(IX+K_SHIFT)
|
||
RET NZ
|
||
RES X_ALT,(IX+K_SHIFT)
|
||
RET
|
||
.R_ALT:
|
||
RES R_ALT,(IX+K_SHIFT)
|
||
BIT L_ALT,(IX+K_SHIFT)
|
||
RET NZ
|
||
RES X_ALT,(IX+K_SHIFT)
|
||
RET
|
||
.L_CTRL:
|
||
RES L_CTRL,(IX+K_SHIFT)
|
||
BIT R_CTRL,(IX+K_SHIFT)
|
||
RET NZ
|
||
RES X_CTRL,(IX+K_SHIFT)
|
||
RET
|
||
.R_CTRL:
|
||
RES R_CTRL,(IX+K_SHIFT)
|
||
BIT L_CTRL,(IX+K_SHIFT)
|
||
RET NZ
|
||
RES X_CTRL,(IX+K_SHIFT)
|
||
RET
|
||
.L_SHIFT:
|
||
RES L_SHIFT,(IX+K_SHIFT)
|
||
RET
|
||
;;
|
||
SHIFTS:
|
||
LD A,L
|
||
CP #37 ;L ALT
|
||
JR Z,.L_ALT
|
||
CP #39 ;R ALT
|
||
JR Z,.R_ALT
|
||
CP #36 ;L CTRL
|
||
JR Z,.L_CTRL
|
||
CP #3A ;R CTRL
|
||
JR Z,.R_CTRL
|
||
CP #29 ;L SHIFT
|
||
JR Z,.L_SHIFT
|
||
CP #34 ;R SHIFT
|
||
RET NZ
|
||
;R SHIFT:
|
||
SET R_SHIFT,(IX+K_SHIFT)
|
||
RET
|
||
.L_ALT:
|
||
SET L_ALT,(IX+K_SHIFT)
|
||
SET X_ALT,(IX+K_SHIFT)
|
||
RET
|
||
.R_ALT:
|
||
SET R_ALT,(IX+K_SHIFT)
|
||
SET X_ALT,(IX+K_SHIFT)
|
||
RET
|
||
.L_CTRL:
|
||
SET L_CTRL,(IX+K_SHIFT)
|
||
SET X_CTRL,(IX+K_SHIFT)
|
||
RET
|
||
.R_CTRL:
|
||
SET R_CTRL,(IX+K_SHIFT)
|
||
SET X_CTRL,(IX+K_SHIFT)
|
||
RET
|
||
.L_SHIFT:
|
||
SET L_SHIFT,(IX+K_SHIFT)
|
||
RET
|
||
;;
|
||
;
|
||
|
||
;Standart ASCII tables
|
||
NORMTAB:
|
||
DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||
DB Tab,"q","w","e","r","t","y","u","i","o","p","[","]"
|
||
DB Cps,"a","s","d","f","g","h","j","k","l",";","'",Ent
|
||
DB #00,"z","x","c","v","b","n","m",#2C,".","/",#00,#5C ;"\"
|
||
DB #00,#00,Spc,#00,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
SHIFTAB:
|
||
DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","{","}"
|
||
DB Cps,"A","S","D","F","G","H","J","K","L",":",#22,Ent
|
||
DB #00,"Z","X","C","V","B","N","M","<",">","?",#00,"|"
|
||
DB #00,#00,Spc,#00,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
CAPSTAB:
|
||
DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||
DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent
|
||
DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C ;"\"
|
||
DB #00,#00,Spc,#00,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
SHF2TAB:
|
||
DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||
DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}"
|
||
DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent
|
||
DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|"
|
||
DB #00,#00,Spc,#00,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
|
||
///////////////////////////////////////////////////////////////////////
|
||
; _mInfoALIGN 256,0 ; ¡¥§ ¢ëà ¢¨¢ ¨ï
|
||
XLAT_T:
|
||
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||
DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
|
||
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
|
||
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
|
||
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
|
||
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
|
||
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
|
||
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
|
||
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
|
||
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
|
||
XLAT_T.Size EQU $-XLAT_T
|
||
///////////////////////////////////////////////////////////////////////
|
||
|
||
|
||
XLAT: BIT FLAG_E0,(IX+KEYFLG)
|
||
JR Z,.W_O_E0
|
||
CP #11 ; Right ALT
|
||
LD L,#39
|
||
RET Z
|
||
|
||
CP #14 ; Right CTRL
|
||
LD L,#3A
|
||
RET Z
|
||
|
||
CP #5A ; enter
|
||
LD L,#4E
|
||
RET Z
|
||
|
||
CP #4A ; /
|
||
LD L,#4A
|
||
RET Z
|
||
|
||
CP #7C ; * - Print Screen
|
||
LD L,#47
|
||
RET Z
|
||
|
||
LD L,A
|
||
.W_O_E0:
|
||
; â ¡«¨æ á ¢ëà ¢¨¢ ¨¥¬ 256
|
||
; LD H,high XLAT_T
|
||
; LD L,(HL)
|
||
;
|
||
; ¡¥§ ¢ëà ¢¨¢ ¨ï
|
||
; [x] 31/03/2024 ¨á¯à ¢«¥ ¡ £ á ¢ë室®¬ § £à ¨æë â ¡«¨æë XLAT_T
|
||
CP XLAT_T.Size
|
||
LD L,0
|
||
RET NC
|
||
;
|
||
LD HL,XLAT_T
|
||
ADD A,L
|
||
LD L,A
|
||
JR NC,.no_inc
|
||
INC H
|
||
.no_inc:
|
||
LD L,(HL)
|
||
RET
|
||
RET
|
||
|
||
; !TODO ¯®á¬®âà¥âì
|
||
;INPCODE:
|
||
; BIT 1,(IX+1) ;00110000
|
||
; JR NZ,FN_KEY ;LRCAcaRP
|
||
|
||
INPCODE: LD D,L
|
||
LD E,0
|
||
; !TODO ¢¥àãâì àãá᪨©? € § 祬?
|
||
; BIT LANG_L,(IX+K_LOCK)
|
||
; JP NZ,RUSCODE
|
||
LD A,(KEYCTRL)
|
||
AND 1<<L_SHIFT | 1<<R_SHIFT
|
||
JR NZ,.SHIFT
|
||
SET 7,D
|
||
BIT X_ALT,(IX+K_SHIFT)
|
||
RET NZ
|
||
BIT X_CTRL,(IX+K_SHIFT)
|
||
RET NZ
|
||
LD D,L
|
||
BIT CAPS_L,(IX+K_LOCK)
|
||
LD BC,CAPSTAB
|
||
JR NZ,CONVERT.NO_SET
|
||
LD BC,NORMTAB
|
||
JR CONVERT.NO_SET
|
||
;
|
||
.SHIFT: LD BC,SHIFTAB
|
||
BIT CAPS_L,(IX+K_LOCK)
|
||
JR Z,CONVERT.SET
|
||
LD BC,SHF2TAB
|
||
CONVERT: ;
|
||
.SET: SET 7,D
|
||
.NO_SET: LD H,0
|
||
ADD HL,BC
|
||
LD E,(HL)
|
||
RET
|
||
|
||
; !TODO ¢¥àãâì àãá᪨©? € § 祬?
|
||
;RUSCODE LD A,(IX+K_SHIFT)
|
||
; AND #C0
|
||
; JR NZ,SHIFT_R
|
||
; SET 7,D
|
||
; BIT X_ALT,(IX+K_SHIFT)
|
||
; RET NZ
|
||
; BIT X_CTRL,(IX+K_SHIFT)
|
||
; RET NZ
|
||
; LD D,L
|
||
; BIT CAPS_L,(IX+K_LOCK)
|
||
; LD BC,CAPSRUS
|
||
; JR NZ,CONVER2
|
||
; LD BC,NORMRUS
|
||
;CONVER2 LD H,0
|
||
; ADD HL,BC
|
||
; LD E,(HL)
|
||
; RET
|
||
;
|
||
;SHIFT_R LD BC,SHIFRUS
|
||
; BIT CAPS_L,(IX+K_LOCK)
|
||
; JR Z,CONVER4
|
||
; LD BC,SHF2RUS
|
||
;CONVER4 LD H,0
|
||
; ADD HL,BC
|
||
; LD E,(HL)
|
||
; SET 7,D
|
||
; RET
|
||
|
||
;K_SETUP INC B
|
||
; DEC B
|
||
; JP Z,KEYMAP
|
||
; DEC B
|
||
; JP Z,K_SND_R
|
||
; DEC B
|
||
; JP Z,K_SND_W
|
||
; LD A,#0E
|
||
; SCF
|
||
; RET
|
||
;
|
||
;K_SND_R LD A,(SOUND_K)
|
||
; AND A
|
||
; RET
|
||
;
|
||
;K_SND_W LD (SOUND_K),A
|
||
; AND A
|
||
; RET
|
||
|
||
; `
|
||
; 0
|
||
; Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Back
|
||
; 1 2 3 4 5 6 7 8 9 A B C D E
|
||
|
||
; Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||
; F 10 11 12 13 14 15 16 17 18 19 1A 1B
|
||
|
||
; Cps,"A","S","D","F","G","H","J","K","L",";","'",Enter
|
||
; 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28
|
||
|
||
; LSh,"Z","X","C","V","B","N","M",",",".","/",RSh,"\"
|
||
; 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35
|
||
|
||
; LCl,LAt,SPC,Rat,RCl,F01,F02,F03,F04,F05,F06,F07,F08
|
||
; 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42
|
||
|
||
; F09,F10,F11,F12,prn,scr,num,"/","*","-","+",ent,Del
|
||
; 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
|
||
|
||
; Ins,End,Dwn,PgD,Lft,"5",Rgh,Hom,Upp,PgU
|
||
; 50 51 52 53 54 55 56 57 58 59
|
||
;
|
||
;================================
|
||
Esc EQU #1B
|
||
Bcs EQU #08
|
||
Tab EQU #09
|
||
Cps EQU #00
|
||
Spc EQU #20
|
||
Ent EQU #0D
|
||
|
||
; !TODO ¢¥àãâì àãá᪨©? € § 祬?
|
||
;Standart Russian tables
|
||
;NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||
; DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||
; DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||
; DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,"\"
|
||
; DB #00,#00,Spc,#00,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
; DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
;
|
||
;SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||
; DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||
; DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||
; DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|"
|
||
; DB #00,#00,Spc,#00,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
; DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
;
|
||
;CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||
; DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||
; DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||
; DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,"\"
|
||
; DB #00,#00,Spc,#00,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
; DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
;
|
||
;SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||
; DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||
; DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||
; DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|"
|
||
; DB #00,#00,Spc,#00,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
; DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||
; DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||
;
|
||
;================================
|
||
|
||
BEEP: LD A,#10
|
||
OUT (ZX_Beeper),A
|
||
LD B,D
|
||
LD C,E
|
||
.loop1: DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,.loop1
|
||
XOR A ;LD A,#00
|
||
OUT (ZX_Beeper),A
|
||
LD B,D
|
||
LD C,E
|
||
.loop2: DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,.loop2
|
||
DEC HL
|
||
LD A,H
|
||
OR L
|
||
JR NZ,BEEP
|
||
RET
|
||
|
||
;COM_A EQU #19 Z84.SIO.Ch_A.Ctrl
|
||
;DAT_A EQU #18 Z84.SIO.Ch_A.Data
|
||
;------------------------------;????? à §®¡à âìáï
|
||
; !TODO £«ïãâì, ¬®¦¥â ¯à¨£®¤¨âáï
|
||
; KINIT: LD A,0
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,1
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,#00 ;#18
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,3
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,#C1
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,4
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,#07 ;#05
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,5
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; LD A,#62
|
||
; OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
; RET
|
||
;------------------------------;????? à §®¡à âìáï
|
||
|
||
; [x] 18/02/2024 ¯à®¢¥àª ¯¥à¥¯®«¥¨¥ ¡ãä¥à
|
||
Receiver_Overrun:
|
||
; empty the buffer
|
||
IN A,(Z84.SIO.Ch_A.Data)
|
||
IN A,(Z84.SIO.Ch_A.Ctrl)
|
||
RRCA
|
||
JR C,Receiver_Overrun
|
||
; reg 0 - reset errors
|
||
LD A,%0011'0000
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«¥¨ï ¡ãä¥à ¯à®æ áïâì ª« ¢¨è¨ ¨§ ¯®àâ #FE ᯥªâàã¬
|
||
;
|
||
LD (IX+K_SHIFT),0
|
||
LD (IX+KEYFLG),0
|
||
;
|
||
; LD A,(HOST)
|
||
; LD (HEAD),A
|
||
;
|
||
AND A
|
||
RET
|
||
; |