;==============================================================================
; €äàïòàöèß Œîíèòîðà Œèêðîøà (àäèî-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		; ‚èäåîêîíòðîëëåð. „ëß àäèî 0‘000h
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


