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