CUR_ADR	EQU	07600H	; THE SCREEN ADDRESS
CUR_XY	EQU	07602H	; THE POSITION
CUR_SEQ	EQU	07604H	; ESC-SEQUENCY
CUR_MIN	EQU	07610H	;*THE X1,Y1 OF VIEW
CUR_MAX	EQU	07612H	;*THE X2,Y2 OF VIEW
CUR_ESC	EQU	07620H	;*CURSOR ESCAPER
;;;;;;;;;;;;;;;;;;;;;;;;;
SAVE_HL	EQU	07607H	;*SAVED HL IN WINDOWS
SAVE_SP	EQU	0760DH	; TAPE IN/OUT
MEM_LIM	EQU	07631H	; THE MEMORY LIMIT
;;;;;;;;;;;;;;;;;;;;;;;;;
REGS_PC	EQU	07614H
REGS_HL	EQU	07616H	; ALSO THE ESCAPE VALUES
REGS_BC	EQU	07618H	; ALSO THE ESCAPE VALUES
REGS_DE	EQU	0761AH	; ALSO THE ESCAPE VALUES
REGS_SP	EQU	0761CH	; ALSO THE WINDOW STACK
REGS_AF	EQU	0761EH	; ALSO THE WINDOW FLAGS
BREAK	EQU	07623H
INSTR	EQU	07625H
;;;;;;;;;;;;;;;;;;;;;;;;;
VIEW_IS	EQU	0C7H	; VIEW_IS,X1,Y1,X2,Y2
PRINTZ	EQU	0CFH	; PRINTZ,'...',0
;;;;;;;;;;;;;;;;;;;;;;;;;
PROMPT_BREAK	EQU 0F9A4H
PROMPT_ERROR	EQU 0FAAEH
;;;;;;;;;;;;;;;;;;;;;;;;;
I8275	EQU	0C000H
;;;;;;;;;;;;;;;;;;;;;;;;;
	ORG	07000H
ANSIC:	PUSH	H
	LXI	H,07FF3H
	MOV	M,A
	POP	H
	XRA	A
	RET
	ORG	07620H
	DW	ANSIC
;;;;;;;;;;;;;;;;;;;;;;;;;
	ORG	00000H
	POP	H
	MOV	A,M
	INX	H
	PUSH	H
	MOV	L,A
	MVI	H,0FFH
	
	ORG	00000H
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	SHLD	THE_HL+1
	PUSH	PSW
	POP	HL
	SHLD	THE_PSW+1
	LXI	H,08A02H
	DAD	SP
	JNC	THE_API
	POP	H
	DCX	H
	MOV	E,L
	CALL	GET_LIM
	SPHL
	LXI	H,ESCAPER
	SHLD	CUR_ESC
	LXI	H,076D0H
	SHLD	REGS_SP
	DB	VIEW_IS,0,0,78,30
	DB	PRINTZ,1BH,'Y AVIEW PORT #',0
	MOV	A,E
	CALL	0F815H
	LXI	H,0F86CH
	PUSH	H
	MOV	A,E
	ADD	A
	ADI	TAB_VIEW
	MOV	L,A
	MVI	H,TAB_VIEW >> 8
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
	PCHL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESCAPER:PUSH	H
	MVI	H,080H
	CPI	02DH
	JZ	ESCAPEC
	MVI	H,0
	CPI	02BH
	JZ	ESCAPEC
	CPI	030H
	JNC	ESCAPEX
ESCAPEC:MOV	A,H
	LHLD	REGS_HL+1
	SHLD	REGS_HL
	LHLD	REGS_BC+1
	SHLD	REGS_BC
ESCAPEN:LHLD	REGS_DE+1
	MOV	H,A
	SHLD	REGS_DE
ESCAPE1:STC
ESCAPE0:PUSH	PSW
	PUSH	D
	LXI	D,REGS_HL
	LXI	H,07FDAH
	MOV	M,A
	INX	H
ESCAPE6:INX	H
	LDAX	D
	CALL	_VIEW5H
	INX	D
	MOV	A,E
	CPI	060H
	JNZ	ESCAPE6
	POP	D
	POP	PSW
	POP	H
	MVI	A,000H
	ADC	A
	RET
ESCAPEX:CPI	03AH
	JNC	ESCAPES
	PUSH	B
	PUSH	PSW
	LHLD	ESCAPEN+1
	MOV	A,M
	ADD	A
	SBB	A
	MOV	B,A
	POP	PSW
	PUSH	PSW
	SUI	030H
	XRA	B
	SUB	B
	PUSH	PSW
	MOV	A,M
	XRA	B
	SUB	B
	MOV	M,A
	ADD	A
	ADD	A
	ADD	M
	ADD	A
	XRA	B
	SUB	B
	MOV	M,A
	POP	PSW
	ADD	M
	MOV	M,A
	POP	PSW
	POP	B
	JMP	ESCAPE1
ESCAPES:CPI	05AH
	JNC	ESCAPE0
	SUI	040H
	CMC
	JNC	ESCAPE0
	RLC
	LXI	H,ESC_TBL
	ADD	L
	MOV	L,A
	MOV	A,H
	ACI	000H
	MOV	H,A
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
	XTHL
	RET
ESC_TBL:DW	ESC_AT
	DW	ESC_A,ESC_B,ESC_C,ESC_D,ESC_E,ESC_F
	DW	ESC_G,ESC_H,ESC_I,ESC_J,ESC_K,ESC_L
	DW	ESC_M,ESC_N,ESC_O,ESC_P,ESC_Q,ESC_R
	DW	ESC_S,ESC_T,ESC_U,ESC_V,ESC_W,ESC_X,0
	DW	ESC_Z
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SET QUEST - ESC+REL_X,REL_Y,WIDTH,HEIGHT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESC_Q:	CALL	HOME
	LDA	REGS_BC+1
	ORA	A
	CALL	ESC_YN
	LDA	REGS_BC
	ORA	A
	CALL	ESC_XN
	XCHG
	SHLD	CUR_MIN
	PUSH	H
	PUSH	H
	LHLD	REGS_DE
	MOV	B,H
	MOV	C,L
	DCR	H
	DCR	L
	POP	H
	DAD	B
	SHLD	CUR_MAX
	POP	H
	XCHG
	XRA	A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RESTORE VIEW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESC_R:	LXI	H,0
	DAD	SP
	SHLD	SAVE_SP
	LHLD	REGS_SP
	SPHL
	POP	H	; RESTORE CUR_MAX
	SHLD	CUR_MAX
	POP	H	; RESTORE CUR_MIN
	SHLD	CUR_MIN
	POP	D	; RESTORE CUR_POS
	POP	H	; RESTORE CUR_ADR
	SHLD	SAVE_HL
	LXI	H,0
	DAD	SP
	SHLD	REGS_SP
	LHLD	SAVE_SP
	SPHL
	LHLD	SAVE_HL
	XRA	A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SAVE VIEW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESC_S:	SHLD	SAVE_HL
	LXI	H,0
	DAD	SP
	SHLD	SAVE_SP
	LHLD	REGS_SP
	SPHL
	LHLD	SAVE_HL
	PUSH	H	; SAVE CUR_ADR
	PUSH	D	; SAVE CUR_POS
	LHLD	CUR_MIN
	PUSH	H	; SAVE CUR_MIN
	PUSH	B	; SAVE CUR_MAX
	LXI	H,0
	DAD	SP
	SHLD	REGS_SP
	LHLD	SAVE_SP
	SPHL
	LHLD	SAVE_HL
	XRA	A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; DRAW TABLE - ESC+HORIZONTAL,VERTICAL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESC_T:	PUSH	B
	PUSH	D
	PUSH	H
	MOV	A,D
	ORA	A
	JZ	ESC_TL
	PUSH	H
	LXI	B,0FFB2H
	DAD	B
	LDA	CUR_MAX
	SUB	E
ESC_THR:PUSH	PSW
	LDA	REGS_DE
	MOV	M,A
	POP	PSW
	INX	H
	DCR	A
	JP	ESC_THR
	POP	H
ESC_TL:	MOV	A,E
	ORA	A
	JZ	ESC_TR
	PUSH	H
	LXI	B,0004EH
	DCX	H
	LDA	CUR_MAX+1
	SUB	D
ESC_TLD:PUSH	PSW
	LDA	REGS_DE+1
	MOV	M,A
	POP	PSW
	DAD	B
	DCR	A
	JP	ESC_TLD
	POP	H
ESC_TR:	POP	H
	POP	D
	POP	B
	CALL	LEFT
	PUSH	B
	PUSH	D
	PUSH	H
	MOV	A,E
	CPI	04DH
	JNC	ESC_TDL
	PUSH	H
	LXI	B,0FFB2H
	INX	H
	LDA	CUR_MIN+1
	DCR	A
ESC_TVR:PUSH	PSW
	LDA	REGS_DE+1
	MOV	M,A
	POP	PSW
	DAD	B
	INR	A
	CMP	D
	JM	ESC_TVR
	POP	H
ESC_TDL:MOV	A,D
	CPI	01DH
	JNC	ESC_TRT
	LXI	B,0004EH
	DAD	B
	LDA	CUR_MIN
	DCR	A
ESC_THL:PUSH	PSW
	LDA	REGS_DE
	MOV	M,A
	POP	PSW
	DCX	H
	INR	A
	CMP	E
	JM	ESC_THL
ESC_TRT:POP	H
	POP	D
	POP	B
	CALL	RIGHT
	XRA	A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SET VIEW - ESC+LEFT,TOP,WIDTH,HEIGHT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ESC_V:	PUSH	H
	LXI	H,0
	SHLD	CUR_MIN
	LXI	H,01D4DH
	SHLD	CUR_MAX
	MOV	B,H
	MOV	C,L
	POP	H
	CALL	HOME
	LDA	REGS_BC+1
	ORA	A
	CALL	ESC_YN
	LDA	REGS_BC
	ORA	A
	CALL	ESC_XN
	PUSH	H
	LHLD	REGS_DE
	DAD	D
	DCR	H
	DCR	L
	SHLD	CUR_MAX
	LHLD	REGS_BC
	SHLD	CUR_MIN
	POP	H
	XRA	A
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
THE_API:MOV	H,B
	MOV	L,C
	SHLD	THE_BC+1
	XCHG
	SHLD	THE_DE+1
	POP	H
	MOV	A,L
	RAR
	RAR
	ANI	00EH
	ADI	TAB_API
	MOV	L,A
	MVI	H,TAB_API >> 8
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
	PCHL
TAB_API:DW	_VIEW,_PRINTZ
TAB_VIEW:DW	_VIEW0,_VIEW1,_VIEW2,_VIEW3
	DW	_VIEW4,_VIEW5,_VIEW6,_VIEW7
	DW	_VIEW8,_VIEW9,_VIEW10,_VIEW11
	DW	_VIEW12,_VIEW13,_VIEW14,_VIEW15
	DW	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DW	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	DW	0,0,0,0,0,0,0,0,0

_DRAW_BAR:
	LHLD	CUR_XY
	XCHG			; E = X, D = Y
	LHLD	CUR_ADR
	MOV	A,D
	ORA	A
	JZ	_DRAW_BAR_1
	PUSH	H
	LXI	B,0FFB2H
	DAD	B
	LDA	CUR_MAX
	SUB	E
_DRAW_BAR_HR:
	MVI	M,01CH
	INX	H
	DCR	A
	JP	_DRAW_BAR_HR
	POP	H
_DRAW_BAR_1:
	MOV	A,E
	ORA	A
	JZ	_DRAW_BAR_2
	PUSH	H
	LXI	B,0004EH
	DCX	H
	LDA	CUR_MAX+1
	SUB	D
_DRAW_BAR_LD:
	MVI	M,01BH
	DAD	B
	DCR	A
	JP	_DRAW_BAR_LD
	POP	H
_DRAW_BAR_2:
	MVI	C,008H
	CALL	0F809H
	LHLD	CUR_XY
	XCHG
	LHLD	CUR_ADR
	MVI	C,00CH
	CALL	0F809H
	MOV	A,E
	CPI	04DH
	JNC	_DRAW_BAR_3
	PUSH	H
	LXI	B,0FFB2H
	INX	H
	LDA	CUR_MIN+1
	DCR	A
_DRAW_BAR_VR:
	MVI	M,01BH
	DAD	B
	INR	A
	CMP	D
	JM	_DRAW_BAR_VR
	POP	H
_DRAW_BAR_3:
	MOV	A,D
	CPI	01DH
	RNC
	LXI	B,0004EH
	DAD	B
	LDA	CUR_MIN
	DCR	A
_DRAW_BAR_HL:
	MVI	M,01CH
	DCX	H
	INR	A
	CMP	E
	JM	_DRAW_BAR_HL
	RET

_VIEW:	LXI	H,00000H
	SHLD	CUR_MIN
	LXI	H,01D4DH
	SHLD	CUR_MAX
	XRA	A
	STA	CUR_SEQ
	POP	H
	MOV	A,M
	MOV	E,A
	INX	H
	ADI	020H
	STA	_THE_XY+1
	MOV	A,M
	MOV	D,A
	INX	H
	ADI	020H
	STA	_THE_XY
	CALL	_PRINTS
	DB	01BH,'Y'
_THE_XY:DB	' ',' ',0
	MOV	C,M
	INX	H
	MOV	B,M
	INX	H
	PUSH	H
	XCHG
	SHLD	CUR_MIN
	DCR	B
	DCR	C
	DAD	B
	SHLD	CUR_MAX
	CALL	_PRINTS
	DB	0CH,0
	CALL	_DRAW_BAR
THE_PSW:LXI	H,0
	PUSH	H
	POP	PSW
THE_BC:	LXI	B,0
THE_DE:	LXI	D,0
THE_HL:	LXI	H,0
	RET
_PRINTS:XTHL
	CALL	0F818H
	XTHL
	RET
_PRINTZ:XTHL
	CALL	0F818H
	XTHL
	JMP	THE_PSW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_VIEW0:	DB	VIEW_IS,0,0,78,30
	DB	PRINTZ,'MAXIMUM(0,0,78,30)',0
	RET
_VIEW1:	DB	VIEW_IS,8,3,64,25
	DB	PRINTZ,'STANDARD(8,3,64,25)',0
	RET
_VIEW2:	DB	VIEW_IS,36,5,25,19
	DB	PRINTZ,01FH,'MEMORY',0DH,0AH
	DB	'>L0,FF',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0FA08H
	RET
_VIEW3:	DB	VIEW_IS,20,4,32,16
	DB	PRINTZ,'MIDDLE(20,4,32,16)',0
	RET
_VIEW16:DB	VIEW_IS,23,10,20,5
	DB	PRINTZ,1FH,'okno wa{ego wybora:',0
	LHLD	_VIEW16+1
	LXI	D,00202H
	DAD	D
	SHLD	_VIEW16Y+1
	LXI	D,0000AH
	DAD	D
	SHLD	_VIEW16N+1
	CPI	020H
	JNZ	_VIEW16Q
	LDA	_VIEW16L-1
	XRI	1
	STA	_VIEW16L-1
_VIEW16Q:MVI	A,0
_VIEW16L:ADI	080H
	PUSH	PSW
	CPE	_VIEW16Y
	POP	PSW
	PUSH	PSW
	CPO	_VIEW16N
	POP	PSW
	JNC	_VIEW16L
	RET
_VIEW16Y:DB	VIEW_IS,25,13,6,2
	DB	PRINTZ,' da?',0
	RET
_VIEW16N:DB	VIEW_IS,43,13,6,2
	DB	PRINTZ,' net?',0
	RET
_VIEW5:	CALL	_VIEW1
	CALL	_VIEW2
	CALL	0F803H
	CALL	_VIEW3
	JMP	_VIEW1
_VIEW6:	CALL	_VIEW0
	CALL	0F803H
	CPI	00DH
	RZ
	CALL	_VIEW1
	CALL	0F803H
	CPI	00DH
	RZ
	CALL	_VIEW2
	CALL	0F803H
	CPI	00DH
	RZ
	CALL	_VIEW3
	CALL	0F803H
	CPI	00DH
	RZ
	JMP	_VIEW6
_VIEW12:DB	VIEW_IS,36,5,25,19
	DB	PRINTZ,01FH,'MEMORY',0DH,0AH
	DB	'>L0,FF',0
	LXI	H,00000H
	LXI	D,000FFH
	JMP	0FA08H
_VIEW13:DB	VIEW_IS,3,2,57,19
	DB	PRINTZ,01FH,'MEMORY',0DH,0AH
	DB	'>D0,FF',0
	LXI	H,00000H
	LXI	D,000FFH
	JMP	0F9C5H
_VIEW10:LXI	H,_VIEW16
	CALL	_VIEWGO
	CPI	00DH
	JNZ	_VIEW10
	JMP	0F86CH
_VIEW4:	LXI	H,_VIEW12
	CALL	_VIEWAS
	LXI	H,_VIEW13
	CALL	_VIEWAS
	LXI	H,_VIEW3
	CALL	_VIEWAS
_VIEW4A:LXI	H,_VIEW16
	CALL	_VIEWGO
	CPI	009H
	JZ	_VIEW4
	CPI	020H
	JZ	_VIEW4A
	LDA	_VIEW16L-1
	RRC
	JC	_VIEW4
	DB	VIEW_IS,0,0,78,30
	DB	PRINTZ,1FH,0
	JMP	_VIEW4
_VIEWAS:CALL	_VIEWGO
	CPI	009H
	JNZ	_VIEWAS
	RET
_VIEWGO:PUSH	H
	CALL	_VIEWSW
	POP	H
_VIEWGH:CALL	0F812H
	ORA	A
	JZ	_VIEWGH
	LDA	07609H
	LXI	D,00001H
	CPI	018H
	JZ	_VIEWMO
	MVI	E,0FFH
	CPI	008H
	JZ	_VIEWMO
	LXI	D,0FF00H
	CPI	019H
	JZ	_VIEWMO
	MVI	D,001H
	CPI	01AH
	JZ	_VIEWMO
	CPI	02EH
	JNC	0F86CH
_VIEWKY:CALL	0F803H
	CPI	009H
	RZ
	CPI	00DH
	RZ
	CPI	020H
	RZ
	JMP	_VIEWGH
_VIEWMO:PUSH	H
	INX	H
	MOV	A,E
	ADD	M
	JM	_VIEWMX
	MOV	M,A
_VIEWMX:INX	H
	MOV	A,D
	ADD	M
	JM	_VIEWMY
	MOV	M,A
_VIEWMY:POP	H
	CALL	0F803H
	JMP	_VIEWGO
_VIEWSW:PCHL
	CALL	0F830H
_VIEW5:	LDA	CUR_SEQ
	LXI	H,76D0H
	CALL	_VIEW5H
	CALL	0F803H
	CPI	00CH
	MVI	C,00AH
	JZ	PUTC
	CPI	07FH
	MVI	C,01BH
	JZ	PUTC
	CPI	009H
	JZ	0F86CH
	MOV	C,A
PUTC:	CALL	PUTCH
	JMP	_VIEW5
_VIEW5H:PUSH	PSW
	RRC
	RRC
	RRC
	RRC
	CALL	_VIEW50
	POP	PSW
_VIEW50:ANI	0FH
	CPI	0AH
	JC	_VIEW57
	ADI	7
_VIEW57:ADI	030H
	MOV	M,A
	INX	H
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_VIEW7:	DB	PRINTZ,1BH,'+10+5+68+20V',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0F9C5H
	DB	PRINTZ,1BH,'S',1BH,'+10+5+48+5Q',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0F9C5H
	DB	PRINTZ,1BH,'S',1BH,'+2+2+16+1Q',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0F9C5H
	CALL	0F803H
	DB	PRINTZ,1BH,'R',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0F9C5H
	CALL	0F803H
	DB	PRINTZ,1BH,'R',0
	LXI	H,00000H
	LXI	D,000FFH
	CALL	0F9C5H
	JMP	0F86CH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	ORG	0F800H
	JMP	MON_CLD
	ORG	0F830H
GET_LIM:LHLD	MEM_LIM
SET_LIM:SHLD	MEM_LIM
	RET
MON_TAB:DB	00DH,00AH,018H,018H,018H,0
MON_CLD:LXI	H,08003H
	MVI	M,08AH
MON_ARR:DB	00DH,00AH,'>',0
MON_CLN:DCX	H
	MOV	M,A
	MOV	A,H
	CPI	075H
	JNZ	MON_CLN-2
	SHLD	MEM_LIM
	LXI	H,0221DH
	SHLD	0762FH
	LHLD	0F86DH
	SHLD	0761CH
	SPHL
	CALL	0FACEH
	LXI	H,MON_TTL
	CALL	0F922H
	MVI	A,0C3H
	STA	07626H
PROMPT_LOOP:
	LXI	SP,076CFH
	LXI	H,MON_ARR
	ORG	0F95AH
PROMPT_ARG_READ:
	LXI	H,00000H
PROMPT_ARG_NEXT:
	LDAX	D
	INX	D
	CPI	00DH
	STC
	RZ
	CPI	02CH
	RZ
	CPI	020H
	JZ	PROMPT_ARG_NEXT
	LXI	B,PROMPT_ERROR
	PUSH	B
	SUI	030H
	RM
	CPI	00AH
	JM	PROMPT_ARG_CYCLE
	CPI	011H
	RM
	CPI	017H
	RP
	SUI	007H
PROMPT_ARG_CYCLE:
	MOV	C,A
	DAD	H
	DAD	H
	DAD	H
	DAD	H
	RC
	MVI	B,000H
	DAD	B
	POP	B
	JMP	PROMPT_ARG_NEXT
BACK_CLR:
	DB	008H,020H,008H,0	; <--
CMP_HL_DE:
	MOV	A,H
	CMP	D
	RNZ
	MOV	A,L
	CMP	E
	RET
CMP_HL_DE_TEST:
	CALL	PROMPT_BREAK
CMP_HL_DE_LOOP:
	CALL	CMP_HL_DE
	INX	H
	RNZ
	DCX	H
CMP_HL_DE_BREAK:
	INX	SP
	INX	SP
	RET
CMP_HL_DE_NEXT:
	DB	0FFH,0FFH

;;;;;;;; THE PATCH FOR ADDRESS
	ORG	0F8E3H
	LXI	H,BACK_CLR
	ORG	0F9B1H
	LXI	H,MON_TAB
	ORG	0F889H
	JZ	PRINT_REGS
;;;;;;;;

	ORG	0FA3FH
THE_G:	CALL	CMP_HL_DE
	JZ	FA5A
	XCHG
	MOV	A,M
	STA	INSTR
	MVI	M,0CDH
	INX	H
	SPHL
	POP	H
	SHLD	BREAK
	LXI	H,DEBUG
	PUSH	H
FA5A:	LXI	SP,REGS_BC
	POP	B
	POP	D
	POP	H
	POP	PSW
	SPHL
	LHLD	REGS_HL
	CALL	07626H
	JMP	DEBUG
	DB	0FFH

	ORG	0FCBAH
PUTCH:	PUSH	PSW
	PUSH	H
	PUSH	D
	LHLD	CUR_MAX
	PUSH	B
	MOV	B,H
	MOV	C,L
	LHLD	CUR_XY
	XCHG
	LHLD	CUR_ADR
	LDA	CUR_SEQ
	DCR	A
	XTHL
	MOV	A,L
	RLC
	STC
	CMC
	RAR
	XTHL
	CALL	ESCAPE
	STA	CUR_SEQ
	SHLD	CUR_ADR
	LXI	H,I8275+1
	MVI	M,080H
	DCX	H
	MOV	M,E
	MOV	M,D
	XCHG
	CALL	0FE01H
	SHLD	CUR_XY
	POP	B
	POP	D
	POP	H
	POP	PSW
	RET
CTRL:	XTHL
	INX	H
	INX	H
	INX	H
	XTHL
	CPI	008H	; 08
	JZ	LEFT
	CPI	00AH	; 0A
	JZ	SCROLL
	CPI	00CH	; 0C
	JZ	HOME
	CPI	00DH	; 0D
	JZ	GOTO_X0
	CPI	018H	; 18
	JZ	RIGHT
	CPI	019H	; 19
	JZ	UP
	CPI	01AH	; 1A
	JZ	DOWN
	CPI	01FH	; 1F
	JZ	CLEAR
	CPI	007H	; 07
	JNZ	CHAR
	ORG	0FD24H
	LXI	B,005F0H
BELL:	MOV	A,B
BELL_1:	EI
	DCR	A
	JNZ	BELL_1
	MOV	A,B
BELL_2:	DI
	DCR	A
	JNZ	BELL_2
	DCR	C
	JNZ	BELL
	RET
UP_DOWN:PUSH	B
	SBB	A
	MOV	B,A
	XRI	04EH
	SUB	B
	MOV	C,A
	DAD	B
	MOV	A,B
	ADD	A
	INR	A
	ADD	D
	MOV	D,A
	POP	B
	RET
LEFT:	LDA	CUR_MIN
	CMP	E
	JNC	LEFTS
	DCX	H
	DCR	E
	RET
CHAR:	MOV	M,A
	INX	H
	MOV	A,E
	INR	E
	CMP	C
	RC
	CALL	GOTO_X0
SCROLL:	MOV	A,B
	DCR	A
	CMP	D
	JNC	UP_DOWN
	PUSH	D
	PUSH	H
	CALL	GOTO_X0
	LDA	CUR_MIN+1
	CMA
	INR	A
	ADD	B
	MOV	D,A
	MOV	A,C
	SUB	E
	MOV	E,A
	INR	E
	LXI	B,0FFB2H
SCROLLX:PUSH	D
	PUSH	H
	INR	D
	XRA	A
SCROLLY:MOV	E,M
	MOV	M,A
	DAD	B
	MOV	A,E
	DCR	D
	JNZ	SCROLLY
	POP	H
	POP	D
	INX	H
	DCR	E
	JNZ	SCROLLX
	POP	H
	POP	D
	RET
RIGHT:	INX	H
	INR	E
	MOV	A,E
	CMP	C
	RC
	CALL	GOTO_X0
DOWN:	CALL	UP_DOWN
	DCR	A
	CMP	B
	RC
GOTO_Y0:LDA	CUR_MIN+1
	CMP	D
	RNC
	CALL	UP_DOWN
	JMP	GOTO_Y0
LEFTS:	INX	H
	INR	E
	MOV	A,E
	CMP	C
	JNZ	LEFTS
UP:	LDA	CUR_MIN+1
	CMP	D
	JC	UP_DOWN
UPS:	CALL	UP_DOWN
	CMP	B
	CMC
	JNC	UPS
	RET
CLEAR:	ANA	B
	JNZ	CLEARZ
	LXI	H,00308H
	SHLD	CUR_MIN
	LXI	H,01B47H
	SHLD	CUR_MAX
	MOV	B,H
	MOV	C,L
	LXI	H,077C2H
	LXI	D,00308H
CLEARZ:	CALL	HOME
CLEARS:	XRA	A
	CALL	CHAR
	MOV	A,D
	CMP	B
	JNZ	CLEARS
	MOV	A,E
	CMP	C
	JNZ	CLEARS
	XRA	A
	CALL	CHAR
HOME:	CALL	GOTO_Y0
GOTO_X0:LDA	CUR_MIN
	SUB	E
	RNC
	DCR	E
	DCX	H
	JMP	GOTO_X0
ESC_Y_:	SUI	020H	; CUR_SEQ == 2 ; JPO/PF
ESC_YN:	JZ	ESC_4_
	PUSH	PSW
	CNC	DOWN
	POP	PSW
	DCR	A
	JMP	ESC_YN
	;;;;;;;;
	ORG	0FF52H
ESCAPE:	JZ	ESC_1_		; CUR_SEQ == 1
	JPO	ESC_Y_		; CUR_SEQ == 2
	JP	ESC_X_		; CUR_SEQ == 4
	CPI	01BH
	JNZ	CTRL
	MVI	A,001H
	RET
ESC_1_:	PUSH	H	; CUR_SEQ == 1 ; JZ/ZF
	LHLD	CUR_ESC
	XTHL
	CPI	059H
	RNZ
	POP	PSW
	CALL	HOME
	MVI	A,0FEH
ESC_4_:	ADI	4
	RET
ESC_X_:	SUI	020H	; CUR_SEQ == 4 ; JPE
ESC_XN:	PUSH	PSW
	CNZ	RIGHT
	POP	PSW
	DCR	A
	JP	ESC_XN
	XRA	A
	RET
DEBUG:	SHLD	REGS_HL
	PUSH	PSW
	POP	H
	SHLD	REGS_AF
	POP	H
	SHLD	REGS_PC
	LXI	H,0FFFEH
	DAD	SP
	LXI	SP,REGS_AF
	PUSH	H
	PUSH	D
	PUSH	B
	LHLD	REGS_PC
	SPHL
	LHLD	BREAK
	PUSH	H
	DCX	SP
	POP	H
	LDA	INSTR
	MOV	L,A
	PUSH	H
	JMP	0F86CH
PRINT_REGS:
	LXI	H,MON_RGX
	CALL	0F922H
	LXI	H,07614H
	MVI	B,6
FFDE:	MOV	E,M
	INX	H
	MOV	D,M
	PUSH	B
	PUSH	H
	XCHG
	CALL	0FB78H
	CALL	0F8EEH
	JNC	FFF6
	CALL	0F95AH
	POP	D
	PUSH	D
	XCHG
	MOV	M,D
	DCX	H
	MOV	M,E
FFF6:	POP	H
	POP	B
	DCR	B
	INX	H
	JNZ	FFDE
	RET
MON_RGX:DB	00AH
	DB	00DH,00AH,'HL'
	DB	00DH,00AH,'BC'
	DB	00DH,00AH,'DE'
	DB	00DH,00AH,'SP'
	DB	00DH,00AH,'AF'
	DB	019H,019H,019H,019H,019H
	DB	00DH,'IP',019H,0
MON_TTL:DB	1FH," WINDOWS'86",0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
;F950                               21 00 00 1A 13 FE
;F960 0D 37 C8 FE 2C C8 FE 20 CA 5D F9 01 AE FA C5 D6
;F970 30 F8 FE 0A FA 7D F9 FE 11 F8 FE 17 F0 D6 07 4F
;F980 29 29 29 29 D8 06 00 09 C1 C3 5D F9 XX XX XX XX
;F990 7C BA C0 7D BB C9 CD A4 F9 CD 90 F9 23 C0 2B 33
;F9A0 33 C9 XX XX