Sprinter-Core/src/bios/rom/SETUP/KEY.asm

790 lines
22 KiB
NASM
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.

;
_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
;
CALL GetSymAddr
;
LD (HL),E
INC L
LD (HL),D
INC L
LD (HL),B
INC L
LD (HL),C
RET
GetSymAddr: LD A,(HL)
INC (HL)
INC (HL)
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
RET
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
AND A
;
CALL GetSymAddr
;
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
;