;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; CP/M PROLOG-80 CONFIGURATION FILE ;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	.Z80

START:	JP	FREESTART##
$INIIO::	JP	INIIO
$ENTED::	JP	ENTED
$EXIED::	JP	EXIED
$TABXY::	JP	TABXY
$CLREOL::	JP	CLREOL
$INKEY::	JP	INKEY
$WINK::		JP	WINK
$EDIKEY::		JP	EDIKEY
$TSTBREAK::	JP	TSTBREAK
$PRINT::	JP	PRINT
$$PRINT::	JP	PRINT1

; END OF VECTORS, DATA AREA FOLLOWS

$MINCHR::	DB	' '
$MAXCHR::	DB	0FFH
$LINES::	DB	32
$CHARS::	DB	90

$EDICMD::
	db	'S'-'@'	;left
	db	'D'-'@'	; right
	db	'E'-'@'	; up
	db	'X'-'@'	; down
	db	'A'-'@'	; first in line
	db	'F'-'@'	; last in line
	db	'R'-'@'	; page up
	db	'C'-'@'	; page down
	db	'W'-'@'	; fisrt in file
	db	'Z'-'@'	; last in file
	db	'G'-'@'	; delete under cursor
	db	7fh	; backspace
	db	'I'-'@'	; insert tab
	db	'Y'-'@'	; delete current line
	db	'N'-'@'	; insert line
	db	'M'-'@'	; cr
	db	'V'-'@'	; toggle insert/overwrite
	db	1bh	; end of file / exit editor

$CTABLE::
	DB	28,28,28,28,28,28,28,28
	DB	28,28,28,28,28,28,28,28
	DB	28,28,28,28,28,28,28,28
	DB	28,28,30,28,28,28,28,28	; 0-31, ^Z = 30 (EOF)
	DB	28			; ' '
	DB	26,10,36,6,6,6,12
	DB	18,20,6,6,22,6
	DB	6,32			; 33-47
	DB	0,0,0,0,0,0,0,0,0,0	; '0'-'9'
	DB	6,24,6,6
	DB	6,6,6
	DB	4,4,4,4,4,4,4,4,4,4
	DB	4,4,4,4,4,4,4,4,4,4
	DB	4,4,4,4,4,4		; 'A'-'Z'
	DB	14,6
	DB	16,6
	DB	8,6
	DB	2,2,2,2,2,2,2,2,2,2
	DB	2,2,2,2,2,2,2,2,2,2
	DB	2,2,2,2,2,2		; LOWERCASE LETTERS
	DB	6,34,6,6
	DB	28			; 127
	DB	28,28,28,28,28,28,28,28	; 80H-87H
	DB	28,28,28,28,28,28,28,28	; 88H-8FH
	DB	28,28,28,28,28,28,28,28	; 90-98
	DB	28,28,28,28,28,28,28,28	; 98-9F
	DB	28,28,28,28,28,28,28,28	; A0-A7
	DB	28,28,28,28,28,28,28,28	; A8-AF
	DB	28,28,28,28,28,28,28,28	; B0-B7
	DB	28,28,28,28,28,28,28,28	; B7-BF

; THE FOLLOWING CODES CORRESPOND TO NATIONAL CHARACTER
; SET ACCORDING TO KOI-8 CS2 ALPHABET (CZECH AND SLOVAK)

	DB	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ; CX
	DB	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2	; DX LWC
	DB	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4	; EX
	DB	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4	; FX UPC

iniio:	ld	hl,initxt
	jp	outit

outit:	ld	a,(hl)
	cp	-1
	ret	z
	ld	a,(hl)
	call	out
	inc	hl
	jr	outit

ented:	ld	hl,eedtxt
	jp	outit

exied:	ld	hl,exetxt
	jp	outit

TABXY:	LD	A,1BH	; ADR.
	CALL	OUT
	ld	a,'Y'
	call	out
	ld	a,h	; row
	add	a,32
	CALL	OUT
	LD	A,L
	add	a,32
	JP	OUT

clreol:	ld	a,27
	call	out
	ld	a,'K'
	JP	OUT	; CLEAR TO END OF LINE

INKEY:	LD	A,(LASTK)
	OR	A
	JR	Z,TSTKEY
	PUSH	AF
	XOR	A
	LD	(LASTK),A
	POP	AF
	RET

TSTKEY:	PUSH	HL
	PUSH	DE
	PUSH	BC
	LD	E,-1
	LD	C,6	; CONSOLE DIRECT I/O
	CALL	5	; BDOS
NORMKEY:	OR	A
	POP	BC
	POP	DE
	POP	HL
	RET


WINK:	CALL	INKEY
	RET	NZ
	JR	WINK

edikey:	ld	a,27
	call	out
	ld	a,'e'
	call	out
	call	wink
	ld	c,a
	ld	a,27
	call	out
	ld	a,'f'
	call	out
	LD	A,C
	RET

TSTBREAK:
	CALL	TSTKEY
	OR	A
	RET	Z
	cp	3	; klavesa stop
	SCF
	RET	Z
	LD	(LASTK),A
	XOR	A
	RET

PRINT:	PUSH	AF
	PUSH	BC
	LD	C,A
	AND	0FCH	; MASK OUT D0 AND D1
	CP	1CH
	JR	NZ,NOCTL
	CP	C
	JR	Z,NOCTL
	LD	A,C
	LD	(FLAG),A
	JR	NOPRT
NOCTL:	LD	A,(FLAG)
	RRA
	JR	NC,NODISP
	LD	B,A
	LD	A,C
	CALL	PRINT1
	LD	A,B
NODISP:	RRA
	JR	NC,NOPRT
	PUSH	HL
	PUSH	DE
	ld	e,c
	ld	c,5
	call	5
	POP	DE
	POP	HL
NOPRT:	POP	BC
	POP	AF
	RET


print1:
OUT:	PUSH	AF
	PUSH	BC
	PUSH	DE
	PUSH	HL
OUT1:	LD	E,A
	ld	c,6
	call	5
	POP	HL
	POP	DE
	POP	BC
	POP	AF
	RET



FLAG:	DB	1DH	; DISPLAY, NO PRINTER
LASTK:	DB	0	; NO KEY PRESSED

	.radix	16
initxt:	db	1b,'y',1b,'v',1b,'e',1b,'2',0,1b,'0',1b,'Y',20,20,-1
eedtxt:	db	1b,'Y',20,20,1b,'J',1b,'f',-1
exetxt:	db	1b,'Y',20,20,1b,'J',1b,'e',7,-1
	END
