;==============================================================================
;    (-86)    
;  TASM Z180
; (C) Eugene Po http://orion.efu.name
;==============================================================================

ORIG	.EQU	1		;   0,   
VERBOSE	.EQU	0
ORD	.EQU	0

RABADR	.EQU	0F800H		;   
BASE    .EQU	7600H		;  D0H  -  , 7600h - 7FFFh       

EK_ADR  .EQU	BASE		;    
POSX	.EQU	BASE+02H
POSY	.EQU	BASE+03H
ESC_F   .EQU	BASE+04H
KBDFLG	.EQU	BASE+05H 	;  =0,     SYMBUF
RUSLAT  .EQU	BASE+06H
LAST_K	.EQU	BASE+09H	;  2    
COUNT	.EQU	BASE+0AH	;   ( 15)
APVFLG  .EQU	BASE+0BH
FRELOC	.EQU	BASE+0CH	;    

TMPSTK  .EQU	BASE+0DH	;      /-
POINT   .EQU	BASE+14H	;    RST_30H
R_HL	.EQU	BASE+16H
R_BC	.EQU	BASE+18H
R_SP	.EQU	BASE+1CH
R_AF	.EQU	BASE+1EH   	;   AF,HL,DE,BC
STOP_A  .EQU	BASE+23H	;     G
TMP_COD .EQU	BASE+25H        ;     -
P_JMP	.EQU	BASE+26H        ;  C3H (JMP)   DIR_G
PAR_HL  .EQU	BASE+27H
PAR_DE  .EQU	BASE+29H
PAR_BC  .EQU	BASE+2BH
FLG_P2	.EQU	BASE+2DH	; ,    2  2,3
INV_MG	.EQU	BASE+2EH
KNS_RD	.EQU	BASE+2FH
KNS_WR	.EQU	BASE+30H
RAMTOP	.EQU	BASE+31H
COMBUF	.EQU	BASE+33H        ;   
BUFEND	.EQU	COMBUF+1FH	;   GETLIN  32 
STACK	.EQU	BASE+0D0H	;  

SA	.EQU	0B800H	;    VGA.  -86 - 76D0
SCBASE  .EQU	0B810H	;     VGA.  -86 - 77C2

VG_75   .EQU	0D000H		; .   0000h
VT_57	.EQU	0F800H		;   0E000h

PA	.EQU	0C000H		;  .   08000h
PB	.EQU	PA+1
PC	.EQU	PA+2
PU	.EQU	PA+3

PDA	.EQU	0E000H		;  .   0A000h  0C800H
PDB	.EQU	PDA+1
PDC	.EQU	PDA+2
PDU	.EQU	PDA+3

;==============================================================================
;  
;==============================================================================
.org (0000h)

  ld a,0		; Refresh Control Register (RCR) OFF
  out0 (36h),a		; .  
  
  ld a,10000000b	;    18,432 
  out0 (1fh),a		; CPU Control Register 

  ld a,01110100b	; RTS=1,8,N,1
  out0 (00h),a		; Init CNTLA0 (COM1)

  ld a,10111000b	; PS=30, DR=64, SS=1, 9600BPS  PHI=18,432 
  out0 (02h),a		; Init CNTLB0 (COM1)


  
  jp 0F800H
;==============================================================================
.org (0F800h)
 JP	VHOD
 JP	CONIN	; 0F803H -    
 JP	LDBYTE	; 0F806 -    
 JP	COUT_C	; 0F809 -    
 JP	WRBYTE	; 0F80CH -    
 JP	7654H	; 0F80FH
 JP	STATUS	; 0F812H -   
 JP	HEX_A	; 0F815H -       
 JP	MSSG	; 0F818H -    
 JP	XF81B	; 0F81BH -    
 JP	ASKCUR	; 0F81EH -   
 JP	RD_SCR	; 0F821H -     
 JP	RD_BLK	; 0F824H -    
 JP	WR_BLK	; 0F827 -    
 JP	CHSUMM	; 0F82AH -    
 JP	PUSK_VG	; 0F82DH -    
 JP	ASKTOP	; 0F830H -        
 JP	SETTOP	; 0F833H -        
;==============================================================================

VHOD:	
;	LD	A,98H	;    55 -   .
;	LD	(PU),A

  LD	HL,BASE
  LD	SP,HL		; STACK init

  LD	C,L		; LD C,0
  LD	DE,COMBUF+2CH
;  CALL	DIR_F

;  CALL	PUSK_VG		;   75 -     VGA

  LD	A,0C9H
  LD	(BASE+53H),A

  LD	HL,STACK
  LD	(R_SP),HL

;  .msg	TITR

  LD	HL,BASE-1
  LD	(RAMTOP),HL

  LD	HL,1D21H
  LD	(KNS_RD),HL

  LD	A,0C3H
  LD	(P_JMP),A

;  NOP
;  if	$ ne RABADR + 06CH
;	if1
;	.printx * Standard subroutine WARMST shifted ! *
;	endif
;endif

WARMST:	LD	SP,STACK

;	.msg	PROMPT
; LD	(PC),A
; LD	(RUSLAT),A
	
; CALL	GETLIN

;  LD	HL,WARMST
;  PUSH	HL

;  LD	HL,COMBUF
;  LD	A,(HL)
;  CP	'X'
;  JP	Z,DIR_X

;  PUSH	AF
;  CALL	GETPRM
	
	; LD	HL,(PAR_BC)
	; LD	C,L
	; LD	B,H
	; LD	HL,(PAR_DE)
	; EX	DE,HL
	; LD	HL,(PAR_HL)

	; POP	AF
	; CP	'D'
	; JP	Z,DIR_D
	; CP	'C'
	; JP	Z,DIR_C
	; CP	'F'
	; JP	Z,DIR_F
	; CP	'S'
	; JP	Z,DIR_S
	; CP	'T'
	; JP	Z,DIR_T
	; CP	'M'
	; JP	Z,DIR_M
	; CP	'G'
	; JP	Z,DIR_G
	; CP	'I'
	; JP	Z,DIR_I
	; CP	'O'
	; JP	Z,DIR_O
	; CP	'L'
	; JP	Z,DIR_L
	; CP      'R'
	; JP      Z,DIR_R
	; JP	ERROR

; imp_eq	MACRO	BYTE,ADDR
	; CP	BYTE
	; JP	Z,ADDR
	; ENDM
	
; ; ???????????????????????????????????????????????????????????????????????????

; BAKSTP:	LD	A,low COMBUF
	; CP	L		;     ?
	; JP	Z,AF8F1
	; PUSH	HL
	; .MSG	TZABOJ
	; POP	HL
	; DEC	HL
	; JP	AF8F3

; ; ??????????????????????????????????????????????

; ;if	$ ne RABADR + 0EEH
; ;	if1
; ;	.printx * Internal subroutine GETLIN shifted ! *
; ;	endif
; ;endif

; GETLIN:	LD	HL,COMBUF
; AF8F1:	LD	B,0
; AF8F3:	CALL	CONIN
; CP	8
; JP	Z,BAKSTP
; CP	7FH
; JP	Z,BAKSTP
; if	ORIG
	; CALL    NZ,COUT_A	; NZ ???
   ; else
	; CALL    COUT_A
; endif
	; LD	(HL),A
	; CP	13
	; JP	Z,AF91A
	; CP	'.'
	; JP	Z,WARMST
	; LD	B,255
	; LD	A,low BUFEND
	; CP	L
	; JP	Z,ERROR
	; INC	HL
	; JP	AF8F3

; ; ???????????????????????????????????????????????????????????????????????????

; AF91A:	LD	A,B
	; RLA
	; LD	DE,COMBUF
	; LD	B,0
	; RET

;    . HL =   

MSSG:	LD	A,(HL)
	; AND	A
	; RET	Z
	; CALL	COUT_A
	; INC	HL
	; JP	MSSG

; ; ??????????????????????????????????????????????

; if	$ ne RABADR + 012CH
	; if1
	; .printx * Internal subroutine GETPRM shifted ! *
	; endif
; endif

; GETPRM:	LD	HL,PAR_HL
	; LD	DE,FLG_P2
	; LD	C,0
	; CALL	DIR_F
	; LD	DE,BASE+34H
	; CALL	GET_HL
	; LD	(PAR_HL),HL
	; LD	(PAR_DE),HL
	; RET	C
	; LD	A,255
	; LD	(FLG_P2),A
	; CALL	GET_HL
	; LD	(PAR_DE),HL
	; RET	C
	; CALL	GET_HL
	; LD	(PAR_BC),HL
	; RET	C
	; JP	ERROR

; ; ??????????????????????????????????????????????

; GET_HL:	LD	HL,0
; AF95D:	LD	A,(DE)
	; INC	DE
	; CP	13
	; JP	Z,RETCY1
	; CP	','
	; RET	Z
	; CP	20H
	; JP	Z,AF95D
	; SUB	30H
	; JP	M,ERROR
	; CP	10
	; JP	M,AF982
	; CP	11H
	; JP	M,ERROR
	; CP	17H
	; JP	P,ERROR
	; SUB	7
; AF982:	LD	C,A
	; ADD	HL,HL
	; ADD	HL,HL
	; ADD	HL,HL
	; ADD	HL,HL
	; JP	C,ERROR
	; ADD	HL,BC
	; JP	AF95D

; ; ??????????????????????????????????????????????

; RETCY1:	SCF
	; RET

; ; ??????????????????????????????????????????????

; if	$ ne RABADR + 0190H
	; if1
	  ; .printx * Internal subroutine CMPDH shifted ! *
	; endif
; endif

; CMPDH:
  ; LD	A,H
  ; CP	D
  ; RET	NZ
  ; LD	A,L
  ; CP	E
  ; RET

; ; ??????????????????????????????????????????????

; AF996:	CALL	CHK_F4
; AF999:
  ; CALL	CMPDH
  ; JP	NZ,INC_HL
; POPAF:
  ; INC	SP
  ; INC	SP
  ; RET

; ; ???????????????????????????????????????????????????????????????????????????

; INC_HL:
  ; INC	HL
  ; RET

; ; ??????????????????????????????????????????????

; CHK_F4:	CALL	XF81B
	; CP	3
	; RET	NZ
	; CALL	PUSK_VG
	; JP	ERROR

; ; ??????????????????????????????????????????????

; if	$ ne RABADR + 01B0H
	; if1
	; .printx * Internal subroutine RIGHT4 shifted ! *
	; endif
; endif

; RIGHT4:	PUSH	HL	;      4 
	; .msg	TRIGH4
	; POP	HL
	; RET

; ; ??????????????????????????????????????????????

; JJJ_02:	CALL    HXHLBL

; LDXHX@:	LD	A,(HL)			; 12 bytes
; HXA_BL:	PUSH	BC
	; CALL	HEX_A
	; LD	A,20H
	; CALL	COUT_A
	; POP	BC
	; RET

; ; ??????????????????????????????????????????????

; DIR_D:	CALL	HXHLBL
; AF9C8:	CALL	LDXHX@
	; CALL	AF996
	; LD	A,L
	; AND	00001111B
	; JP	Z,DIR_D
	; JP	AF9C8

; ; ??????????????????????????????????????????????

; DIR_C:	LD	A,(BC)		; 19 bytes
	; CP	(HL)
	; JP	Z,AF9E6

; ;	CALL	HXHLBL
; ;	CALL	LDXHX@
	; CALL	JJJ_02

	; LD	A,(BC)
	; CALL	HXA_BL
; AF9E6:	INC	BC
	; CALL	AF996
	; JP	DIR_C

; ; ??????????????????????????????????????????????

; DIR_F:	LD	(HL),C
  ; CALL	AF999
  ; JP	DIR_F

; ; ??????????????????????????????????????????????

; DIR_S:	LD	A,C
	; CP	(HL)
	; CALL	Z,HXHLBL
	; CALL	AF996
	; JP	DIR_S

; ; ??????????????????????????????????????????????

; DIR_T:	LD	A,(HL)
	; LD	(BC),A
	; INC	BC
	; CALL	AF999
	; JP	DIR_T

; ; ??????????????????????????????????????????????

; DIR_L:	CALL	HXHLBL
; AFA0B:	LD	A,(HL)
	; OR	A
	; JP	M,AFA15
	; CP	20H
	; JP	NC,AFA17
; AFA15:	LD	A,'.'
; AFA17:	CALL	COUT_A
	; CALL	AF996
	; LD	A,L
	; AND	00001111B
	; JP	Z,DIR_L
	; JP	AFA0B

; ; ??????????????????????????????????????????????

; DIR_M:
; ;	CALL    HXHLBL		; 22 bytes
; ;	CALL	LDXHX@
	; CALL	JJJ_02

	; PUSH	HL
	; CALL	GETLIN
	; POP	HL
	; JP	NC,AFA3B
	; PUSH	HL
	; CALL	GET_HL
	; LD	A,L
	; POP	HL
	; LD	(HL),A
; AFA3B:	INC	HL
	; JP	DIR_M

; ; ??????????????????????????????????????????????

; DIR_G:	CALL	CMPDH
	; JP	Z,AFA5A

	; EX	DE,HL
	; LD	(STOP_A),HL

	; LD	A,(HL)
	; LD	(TMP_COD),A	;     

	; LD	(HL),0F7H	;   RST 30

	; LD	A,0C3H
	; LD	(0030H),A	;  RST 30

	; LD	HL,0FFA4H
	; LD	(0031H),HL

; AFA5A:	LD	SP,R_BC 	; BASE+18H
	; POP	BC      	; BC <-- (BASE+18H)
	; POP	DE      	; DE <-- (BASE+1AH)
	; POP	HL      	; HL <-- (BASE+1CH)  
	; POP	AF      	; AF <-- (BASE+1DH)
	; LD	SP,HL
	; LD	HL,(R_HL)
	; JP	P_JMP

; ; ??????????????????????????????????????????????

; DIR_R:	LD	A,090H
	; LD	(PDU),A
; AFA6D:	LD	(PDB),HL
	; LD	A,(PDA)
	; LD	(BC),A
	; INC	BC
	; CALL	AF999
	; JP	AFA6D

;   .  -  , L -  

ASKCUR:
  LD	HL,(POSX)
  RET

;     .  -   

RD_SCR:
  PUSH	HL
	; LD	HL,(EK_ADR)
	; LD	A,(HL)
	; POP	HL
  RET

; ; ??????????????????????????????????????????????

; DIR_I:	LD	A,(FLG_P2)
	; OR	A
	; JP	Z,AFA91
	; LD	A,E
	; LD	(KNS_RD),A
; AFA91:	CALL	RD_BLK
	; CALL	HXHLBL
	; EX	DE,HL
	; CALL	HXHLBL
	; EX	DE,HL
	; PUSH	BC
	; CALL	CHSUMM
	; LD	H,B
	; LD	L,C
	; CALL	HXHLBL
	; POP	DE
	; CALL	CMPDH
	; RET	Z
	; EX	DE,HL
	; CALL	HXHLBL
; ERROR:
	; LD	A,'?'
	; CALL	COUT_A
	; JP	WARMST

;    

RD_BLK:
  LD	A,255
	; CALL	@LD_BC
	; PUSH	HL
	; ADD	HL,BC
	; EX	DE,HL
	; CALL	LDBCBS
	; POP	HL
	; ADD	HL,BC
	; EX	DE,HL
	; PUSH	HL
	; CALL	LD_BLK
	; LD	A,255
	; CALL	@LD_BC
	; POP	HL

; if	$ ne RABADR + 02CEH
	; if1
	; .printx * Internal subroutine PUSK_VG shifted ! *
	; endif
; endif

PUSK_VG:	;    
; ;	PUSH	HL
; ;	LD	HL,VG_75+1
; ;	LD	(HL),0   	; reset commando
; ;	DEC	HL       	;  VG_75
; ;	LD	(HL),4DH	; 0.1001101  77 (77+1 )
; ;	LD	(HL),1DH	; 00.011101  29 (29+1 )

; ;if	ORIG
; ;        LD	(HL),99H	; 1001.1001  9 9 (9+1  )
; ;        			; (9+1   )
; ;        LD	(HL),93H	; 1.0.01.0011  .
; ;        			;  -   
; ;        			;   
; ;	 			; 3   -     .
; ;    else
; ;	LD	(HL),59H	; ****  58H:  - - 
; ;	LD	(HL),0C3H	; 1.1.00.0011 -   
				; ;  -  
				; ;   
; ;endif				;   

; ;	INC     HL		;  VG_75+1
; ;	LD	(HL),27H	; VHOD display commando

; ;	LD	A,(HL)		; read status (-  )
; ;AFAE1:	LD	A,(HL)		; read status
; ;	AND     20H		; mask 'Interrupt request flag'
; ;	JP      Z,AFAE1         ;   

; ;	LD	HL,VT_57+8
; ;	LD	(HL),80H
; ;	LD	L,4             ; VT_57+04
; ;	LD	(HL),low SA 	; 0D0H
; ;	LD	(HL),high SA	; 076H
; ;	INC     L               ;  VT_57+5
; ;	LD	(HL),23H	;  
; ;	LD	(HL),49H	; 
; ;	LD	L,8             ; VT_57+8
; ;	LD	(HL),0A4H
; ;	POP	HL
  RET

; ; ??????????????????????????????????????????????

; LDBCBS:	LD	A,8
; @LD_BC:	CALL	LDBYTE
	; LD	B,A
	; LD	A,8
	; CALL	LDBYTE
	; LD	C,A
	; RET

; ; ??????????????????????????????????????????????

; LD_BLK:	LD	A,8
	; CALL	LDBYTE
	; LD	(HL),A
	; CALL	AF999
	; JP	LD_BLK

;    

CHSUMM:	LD	BC,0
; AFB19:	LD	A,(HL)
	; ADD	A,C
	; LD	C,A
	; PUSH	AF
	; CALL	CMPDH
	; JP	Z,POPAF
	; POP	AF
	; LD	A,B
	; ADC	A,(HL)
	; LD	B,A
	; CALL	AF999
	; JP	AFB19

; ; ??????????????????????????????????????????????

; DIR_O:	LD	A,C
	; OR	A
	; JP	Z,AFB35
	; LD	(KNS_WR),A
; AFB35:	PUSH	HL
	; CALL	CHSUMM
	; POP	HL
	; CALL	HXHLBL
	; EX	DE,HL
	; CALL	HXHLBL
	; EX	DE,HL
	; PUSH	HL
	; LD	H,B
	; LD	L,C
	; CALL	HXHLBL
	; POP	HL		; 
WR_BLK:		;    
	; PUSH	BC
                                ; ; 
	; LD	BC,0
; AFB4D:	CALL	WRBYTE		;  256  00 ()
	; DEC	B
	; EX	(SP),HL 	;   38 
	; EX	(SP),HL
	; JP	NZ,AFB4D

	; LD	C,0E6H		;   E6
	; CALL	WRBYTE

	; CALL	WR_HL           ;  
	; EX	DE,HL
	; CALL	WR_HL           ;  

	; EX	DE,HL
	; CALL	AFB86           ;  

	; LD	HL,0
	; CALL	WR_HL           ;  2  00

	; LD	C,0E6H          ;   / E6
	; CALL	WRBYTE

	; POP	HL
	; CALL	WR_HL		;  

	; JP	PUSK_VG

; ; ??????????????????????????????????????????????

; if	$ ne RABADR + 0378H
	; if1
	; .printx * Internal subroutine HXHLBL shifted ! *
	; endif
; endif

; HXHLBL:	PUSH	BC
	; CALL	RIGHT4
	; LD	A,H
	; CALL	HEX_A
	; LD	A,L
	; CALL	HXA_BL
	; POP	BC
	; RET

; ; ??????????????????????????????????????????????

; AFB86:	LD	C,(HL)
	; CALL	WRBYTE
	; CALL	AF999
	; JP	AFB86

; ; ??????????????????????????????????????????????

; WR_HL:	LD	C,H
	; CALL	WRBYTE
	; LD	C,L
	; JP	WRBYTE

; ; ??????????????????????????????????????????????

LDBYTE:
  PUSH	HL
	; PUSH	BC
	; PUSH	DE
	; LD	D,A
; AFB9C:	LD	A,80H
	; LD	(VT_57+8),A
	; LD	HL,0
	; LD	C,L		; LD C,0
	; ADD	HL,SP
	; LD	(TMPSTK),HL
	; LD	SP,0
	; LD	A,(PC)
	; RRCA
	; RRCA
	; RRCA
	; RRCA
	; AND	00000001B
	; LD	E,A
; AFBB7:	POP	AF
	; LD	A,C
	; AND	7FH
	; RLCA
	; LD	C,A
	; LD	H,0
; AFBBF:	DEC	H
	; JP	Z,AFC34
	; POP	AF              ;  
	; LD	A,(PC)
	; RRCA
	; RRCA
	; RRCA
	; RRCA
	; AND	00000001B
	; CP	E
	; JP	Z,AFBBF
	; OR	C
	; LD	C,A
	; DEC	D
	; LD	A,(KNS_RD)
	; JP	NZ,AFBDC
	; SUB	12H
; AFBDC:	LD	B,A
; AFBDD:	POP	AF              ;  
	; DEC	B
	; JP	NZ,AFBDD
	; INC	D
	; LD	A,(PC)
	; RRCA
	; RRCA
	; RRCA
	; RRCA
	; AND	00000001B
	; LD	E,A
	; LD	A,D
	; OR	A
	; JP	P,AFC0B
	; LD	A,C
	; CP	0E6H		;  - ?
	; JP	NZ,AFBFF
	; XOR	A
	; LD	(INV_MG),A       ;   
	; JP	AFC09

; ; ??????????????????????????????????????????????

; AFBFF:	CP	19H
	; JP	NZ,AFBB7
	; LD	A,255
	; LD	(INV_MG),A
; AFC09:	LD	D,9
; AFC0B:	DEC	D
	; JP	NZ,AFBB7
	; LD	HL,VT_57+4
	; LD	(HL),low SA	; 0D0H
	; LD	(HL),high SA 	; 076H
	; INC	HL
	; LD	(HL),23H
	; LD	(HL),49H
	; LD	A,27H		; VHOD display commando
	; LD	(VG_75+1),A
	; LD	A,0E0H          ; reset count
	; LD	(VG_75+1),A
	; LD	A,(VG_75+1)
	; LD	L,8
	; LD	(HL),0A4H
	; LD	HL,(TMPSTK)
	; LD	SP,HL
	; LD	A,(INV_MG)      ; with Tape Inverse flag
	; XOR	C
	; JP	POPREG

; ; ??????????????????????????????????????????????

; AFC34:	LD	HL,(TMPSTK)
	; LD	SP,HL
	; CALL	PUSK_VG
	; LD	A,D
	; OR	A
	; JP	P,ERROR
	; CALL	CHK_F4
	; JP	AFB9C

; ; ??????????????????????????????????????????????

WRBYTE:	PUSH	HL
	; PUSH	BC
	; PUSH	DE
	; PUSH	AF
	; LD	A,80H
	; LD	(VT_57+8),A
	; LD	HL,0
	; ADD	HL,SP
	; LD	SP,0
	; LD	D,8
; AFC58:	POP	AF
	; LD	A,C
	; RLCA
	; LD	C,A
	; LD	A,1
	; XOR	C
	; AND	1
	; LD	(PC),A
	; LD	A,(KNS_WR)
	; LD	B,A
; AFC66:	POP	AF
	; DEC	B
	; JP	NZ,AFC66
	; LD	A,0
	; XOR	C
	; AND	1
	; LD	(PC),A
	; DEC	D
	; LD	A,(KNS_WR)
	; JP	NZ,AFC7A
	; SUB	14
; AFC7A:	LD	B,A

; AFC7B:	POP	AF		;    [.B] 
	; DEC	B
	; JP	NZ,AFC7B
	; INC	D
	; DEC	D
	; JP	NZ,AFC58
	; LD	SP,HL
	; LD	HL,VT_57+4
	; LD	(HL),low SA	; 0D0H
	; LD	(HL),high SA	; 076H
	; INC	HL              ; VT_57+5
	; LD	(HL),23H
	; LD	(HL),49H
	; LD	A,27H           ; VHOD display commando
	; LD	(VG_75+1),A     ; 001.sss.bb    001.001.11
	; LD	A,0E0H          ;      ???
	; LD	(VG_75+1),A
	; LD	A,(VG_75+1)
	; LD	L,8              ; VT_57+8
	; LD	(HL),0A4H
	; POP	AF
; POPREG:	POP	DE
	; POP	BC
	; POP	HL
; @BAK	EQU	$
	; RET

;       .  -  

HEX_A:	PUSH	AF
	; RRCA
	; RRCA
	; RRCA
	; RRCA
	; CALL	NIBBLE
	; POP	AF
; NIBBLE: AND	0FH
	; CP	10
	; CCF
	; ADC	A,30H
	; DAA

; COUT_A:	LD	C,A
COUT_C:	PUSH	AF
	; PUSH	BC
	; PUSH	DE
	; PUSH	HL

	; CALL	BASE+53H

	; LD	HL,TOBACK
	; PUSH	HL

	; LD	HL,(POSX)
	; EX	DE,HL
	; LD	HL,(EK_ADR)

	; LD	A,(ESC_F)
	; DEC	A
	; JP	M,NO_ESC

	; JP	Z,AFD65
	; JP	PO,AFD73
	; LD	A,C
	; SUB	20H
	; LD	C,A
; AFCDD:	DEC	C
	; JP	M,ESCRES
	; PUSH	BC
	; CALL	COD_18
	; POP	BC
	; JP	AFCDD

; ; ??????????????????????????????????????????????

; ESCRES:	XOR	A
; SETESC:	LD	(ESC_F),A
	; RET

; ; ??????????????????????????????????????????????

; NO_ESC:	LD	A,C
	; AND	7FH
	; LD	C,A
	; CP	1FH
	; JP	Z,CLS
	; CP	0CH
	; JP	Z,HOME
	; CP	0DH
	; JP	Z,COD_0D
	; CP	0AH
	; JP	Z,COD_0A
	; CP	8
	; JP	Z,COD_08
	; CP	18H
	; JP	Z,COD_18
	; CP	19H
	; JP	Z,COD_19
	; CP	1AH
	; JP	Z,COD_1A
	; CP	1BH
	; JP	Z,COD_1B
	; CP	7
	; JP	NZ,PR_SYM
; BEEP:
	; LD	BC,5F0H
; BP1:	LD	A,255
	; LD	(PC),A
	; LD	A,B
; BP2:	EI
	; DEC	A
	; JP	NZ,BP2
	; XOR	A
	; LD	(PC),A
	; LD	A,B
; BP3:	DI
	; DEC	A
	; JP	NZ,BP3
	; DEC	C
	; JP	NZ,BP1
	; RET

; ; ??????????????????????????????????????????????

; PR_SYM:	LD	(HL),C		;    
	; CALL	COD_18          ;    
	; LD	A,D
	; CP	3               ;     ?
	; RET	NZ              ;     
	; LD	A,E
	; CP	8               ;     ?
	; RET	NZ              ;     
	; CALL	COD_19
; COD_0A:	LD	A,D
	; CP	3+24	        ;     ?
	; JP	NZ,COD_1A       ;     

; ;   

; ROLL:	PUSH	HL
	; PUSH	DE
	; LD	HL,SCBASE+78
	; LD	DE,SCBASE
	; LD	BC,25*78
; ROLLOO:
	; LD	A,(HL)		;    [BC]
	; LD	(DE),A          ; (HL) --> (DE)
	; INC	HL
	; INC	DE
	; LOOP	ROLLOO
	; POP	DE
	; POP	HL
	; RET

; ; ??????????????????????????????????????????????

; AFD65:	LD	A,C
	; CP	'Y'
	; JP	NZ,ESCRES
	; CALL	HOME
	; LD	A,2		;  2  ESC,'Y'
	; JP	SETESC

; ; ??????????????????????????????????????????????

; AFD73:	LD	A,C
	; SUB	20H
	; LD	C,A
; AFD77:	DEC	C
	; LD	A,4
	; JP	M,SETESC
	; PUSH	BC
	; CALL	COD_1A
	; POP	BC
	; JP	AFD77

; ; ??????????????????????????????????????????????

; ; >> NO EXECUTION PATH TO HERE <<

; TOBACK:	LD	(EK_ADR),HL
	; EX	DE,HL
	; LD	(POSX),HL
	; LD	A,80H
	; LD	(VG_75+1),A
	; LD	A,L
	; LD	(VG_75),A
	; LD	A,H
	; LD	(VG_75),A
	; POP	HL
	; POP	DE
	; POP	BC
	; POP	AF
	; RET

; ; ??????????????????????????????????????????????

; COD_1B:	LD	A,1		;  ESC--
	; JP	SETESC

; ; ??????????????????????????????????????????????

; CLS:	LD	HL,SCBASE+832H		; 22 bytes ; 07FF4H
	; LD	DE,30*78 +1
; CLSLOO:	XOR	A
	; LD	(HL),A
	; DEC	HL
	; DEC	DE
	; LD	A,E
	; OR	D
	; JP	NZ,CLSLOO
; HOME:	LD	DE,308H
	; LD	HL,SCBASE
	; RET

; ; ??????????????????????????????????????????????

; COD_18:	LD	A,E		;  . .
	; INC	HL
	; INC	E
	; CP	47H             ; 71 ?
	; RET	NZ
	; LD	E,8
	; LD	BC,-64
	; ADD	HL,BC           ;  64
; COD_1A:	LD	A,D
	; CP	1BH             ;  ?
	; LD	BC,78
	; JP	NZ,AFDD3
	; LD	D,2
	; LD	BC,0F8B0H
; AFDD3:	INC	D
	; ADD	HL,BC           ;  750H
	; RET

; ; ??????????????????????????????????????????????                                                                                                                                           ????????????????

; COD_08:				; : E=POSX, D=POSY
				; ;       HL=  
	; LD	A,E
	; DEC	HL
	; DEC	E
	; CP      8		;     ?
	; RET	NZ		;      
	; LD	E,7+64		;    ?
	; LD	BC,64
	; ADD	HL,BC		; .   
; COD_19:	LD	A,D
	; CP      3		;    ?
	; LD	BC,0-78
	; JP	NZ,AFDF0
	; LD	D,3+25
	; LD	BC,24*78	; 750H
; AFDF0:	DEC	D
	; ADD     HL,BC           ;  78   24*28
	; RET

; ; ??????????????????????????????????????????????

; COD_0D:	LD	A,L
	; SUB	E
	; JP	NC,AFDF9
	; DEC	H
; AFDF9:	LD	L,A
	; LD	E,8             ;-
	; LD	BC,8
	; ADD	HL,BC
	; RET

; ; ??????????????????????????????????????????????

; ;    15H  STATUS      KBDFLG

STATUS:
; ;	LD	A,(PC)
; ;	AND	20H		; RUS/LAT  ?
; ;	JP	Z,AFE0E
; ;	LD	A,(KBDFLG)
; ;	OR	A
; ;	RET	NZ		;   SYMBUF   
; ;AFE0E:	PUSH	HL
; ;	LD	HL,(LAST_K)
; ;	CALL	XF81B
; ;	CP	L
; ;	LD	L,A
; ;	JP	Z,AFE2A
; ;AFE1A:	LD	A,1
; ;	LD	(APVFLG),A
; ;	LD	H,15H		;  ,   
; ;AFE21:	XOR	A
; ;AFE22:	LD	(LAST_K),HL
; ;	POP	HL
; ;	LD	(KBDFLG),A

  in0 a,(04h)		;    COM1 (STAT0)
  rla			;   7
  jp c,STAT_OK		;   ( C=1)
  and 0		;   ,  0
  RET
STAT_OK:
  ld a,0FFH	;  ,  0FFH
  RET

; ; ??????????????????????????????????????????????

; AFE2A:	DEC	H		;  .A= ,  .H- COUNT
	; JP	NZ,AFE21
	; INC	A
	; JP	Z,AFE22         ;   FF,   
	; INC	A
	; JP	Z,KEY_FE        ;   FE (RUSLAT)

	; PUSH	BC              ; 
	; LD	BC,5003H
	; CALL	BP1
	; POP	BC

	; LD	A,(APVFLG)
	; LD	H,0E0H
	; DEC	A
	; LD	(APVFLG),A
	; JP	Z,AFE4C
	; LD	H,40H
; AFE4C:	LD	A,255
	; JP	AFE22

; ; ??????????????????????????????????????????????

; KEY_FE:	LD	A,(PC)
	; AND	20H
	; JP	Z,KEY_FE	;   /
	; LD	A,(RUSLAT)
	; CPL
	; LD	(RUSLAT),A
	; JP	AFE1A

;    ,    -  

CONIN:
  CALL	STATUS		;   = FF,   = 00
  OR	A
  JP	Z,CONIN
  XOR	A
  LD	(KBDFLG),A
  LD	A,(LAST_K)
  RET

;    . A=0FFH -  , A=0FEH - /,  -  

XF81B:	LD	A,(PC)
	; AND	20H		; RUS/LAT  ?
	; JP	NZ,AFE7D
	; LD	A,0FEH
  RET

; ; ??????????????????????????????????????????????

; AFE7D:	XOR	A
	; LD	(PB),A
	; LD	(PC),A
	; LD	A,(RUSLAT)
	; AND	1
	; OR	6
	; LD	(PU),A
	; LD	A,(PA)
	; INC	A
	; JP	NZ,AFE97
	; DEC	A
	; RET

; ; ??????????????????????????????????????????????

; AFE97:	PUSH	HL
	; LD	HL,1 + 7 shl 8 
; AFE9C:	LD	A,L
	; RRCA
	; LD	L,A
	; CPL
	; LD	(PB),A
	; LD	A,(PA)
	; CPL
	; OR	A
	; JP	NZ,AFEB3
	; DEC	H
	; JP	P,AFE9C
; AFEAF:	LD	A,255
	; POP	HL
	; RET

; ; ??????????????????????????????????????????????

; AFEB3:	LD	L,20H
; AFEB5:	LD	A,(PA)
	; CPL
	; OR	A
	; JP	Z,AFEAF
	; DEC	L
	; JP	NZ,AFEB5
	; LD	L,8
; AFEC3:	DEC	L
	; RLCA
	; JP	NC,AFEC3
	; LD	A,L
	; CP	1
	; JP	Z,AFEFA
	; JP	C,AFEF3
	; RLCA
	; RLCA
	; RLCA
	; ADD	A,20H
	; OR	H
	; JP	AFF06

; ; ??????????????????????????????????????????????

; TABK2:	defb     19h,1Ah,0Ch,0,1,2,3,4
; TABK1:	defb     20h,1Bh,9,0Ah,0Dh,1Fh,8,18h,5

; ; ??????????????????????????????????????????????

; AFEF3:	LD	A,H
	; LD	HL,TABK1
	; JP	AFEFE

; ; ??????????????????????????????????????????????

; AFEFA:	LD	A,H
	; LD	HL,TABK2
; AFEFE:	ADD	A,L
	; LD	L,A
	; LD	A,(HL)
	; CP	40H
	; POP	HL
	; RET	C
	; PUSH	HL
; AFF06:	LD	L,A
	; LD	A,(PC)
	; LD	H,A
	; AND	40H
	; JP	NZ,AFF1A
	; LD	A,L
	; CP	40H
	; JP	M,AFF3F
	; AND	1FH
	; POP	HL
	; ret

; ; ??????????????????????????????????????????????

; AFF1A:	LD	A,(RUSLAT)
	; OR	A
	; JP	Z,AFF2A
	; LD	A,L
	; CP	40H
	; JP	M,AFF2A
	; OR	20H
	; LD	L,A
; AFF2A:	LD	A,H
	; AND	80H
	; JP	NZ,AFF3F
	; LD	A,L
	; CP	40H
	; JP	M,AFF3B
	; LD	A,L
	; XOR	20H
	; POP	HL
	; RET

; ; ??????????????????????????????????????????????

; AFF3B:	LD	A,L
	; AND	101111B
	; LD	L,A
; AFF3F:	LD	A,L
	; CP	40H
	; POP	HL
	; RET	P
	; PUSH	HL
	; LD	L,A
	; AND	0FH
	; CP	0CH
	; LD	A,L
	; JP	M,POPHL
	; XOR	10H
; POPHL:	POP	HL
	; RET

;        . HL -  

ASKTOP:
  LD	HL,(RAMTOP)
  RET

;        . HL -  

SETTOP:
  LD	(RAMTOP),HL
  RET

;   

TITR:	.db    1Fh,"Radio-86RK/XT",0
PROMPT:	.db    13,10,"-->",0
TRIGH4: .db    13,10,18H,18H,18H,18H,0

; ; ??????????????????????????????????????????????

; T_REGS:	defb    13,10
	; defb    ' PC-',13,10
	; defb    ' HL-',13,10
	; defb    ' BC-',13,10
	; defb    ' DE-',13,10
	; defb    ' SP-',13,10
	; defb    ' AF-'
	; defb    19H,19H,19H,19H,19H,19H,0

; ; ??????????????????????????????????????????????

; TZABOJ:	defb    8,' ',8,0

; ; ??????????????????????????????????????????????

; BREAK:	LD	(R_HL),HL
	; PUSH	AF
	; POP	HL
	; LD	(R_AF),HL	; REG_AF
	; POP	HL
	; DEC	HL
	; LD	(POINT),HL      ;    RST_30H
	; LD	HL,0
	; ADD     HL,SP
	; LD	SP,R_AF
	; PUSH    HL              ; REG_SP
	; PUSH    DE              ; REG_DE
	; PUSH    BC              ; REG_BC
	; LD	HL,(POINT)
	; LD	SP,STACK
	; CALL    HXHLBL		;    RST_30H
	; EX	DE,HL
	; LD	HL,(STOP_A)
	; CALL    CMPDH           ;     ?
	; JP      NZ,WARMST	;   USER_BREAK, 
	; LD	A,(TMP_COD)     ;  -
	; LD	(HL),A
	; JP      WARMST

; ; ???????????????????????????????????????????????????????????????????????????

; DIR_X:	.msg	T_REGS
	; LD	HL,POINT
	; LD	B,6
; AFFDE:	LD	E,(HL)
	; INC	HL
	; LD	D,(HL)
	; PUSH	BC
	; PUSH	HL
	; EX	DE,HL
	; CALL	HXHLBL
	; CALL	GETLIN
	; JP	NC,AFFF6
	; CALL	GET_HL
	; POP	DE
	; PUSH	DE
	; EX	DE,HL
	; LD	(HL),D
	; DEC	HL
	; LD	(HL),E
; AFFF6:	POP	HL
	; POP	BC
	; DEC	B
	; INC	HL
	; JP	NZ,AFFDE
	; RET

; ; ??????????????????????????????????????????????

; @FREE	aset	0
  	; rept	100
	; if	$ ne 0
	; defb	255
	; @FREE	aset	@FREE+1
	; endif
	; ENDM

; if	high	$-1 ne 0FFFFH
	; if1
	; .printx * Code length over 2048 bytes ! *
	; endif
; endif

; ; ??????????????????????????????????????????????

	; .dephase

	; END


.end


