	.PREL
	.IDENT	HOOKS
	.INSERT	BBEQU.ASM
.DEFINE NULRET=[
	RET
	.WORD	0]
HKRST0:: JMP	BEGIN#	; HARD RESET
HVTEXT:: .WORD	TEXT#	; TEXT AREA START
HVDFTL:: .WORD	08C00H	; TEXT AREA LIMIT
HKHLT:: NULRET		; HALT HOOK
HKSINT:: JMP	KBSCAN	; SCREEN INTERRUPT
HKLPIN:: NULRET		; LITE PEN INTERRUPT
HKSTOP:: NULRET		; STOP HOOK
HKMVD::	JMP	MVDOWN#	; MOVE DOWN
HKMVU::	JMP	MVUP#	; MOVE UP
HKFLN:: NULRET		; FIND LINE NUMBER
EXEC0:: JMP	EXC0LA#	; EXECUTE A COMMAND
FIN::	JMP	FINLA#	; FINISH A COMMAND
HKUCMD:: JMP	DEFLT#	; USER COMMAND HOOK
HKUFUN:: JMP	NOTF#	; USER FUNCTION HOOK
EXPR::	JMP	EXPRLA#	; EXPRESSION EVALUATOR
HKTSTV:: NULRET		; TEST VARIABLE
HKCLRS:: NULRET		; CLEAR SCREEN HOOK
OUTCH::	JMP	OUTCLA#	; OUTPUT A CHARACTER
CHKIO::	JMP	CKIOLA#	; INPUT A CHARACTER
PNOTE:: JMP	PNOTLA#	; PLAY NOTE
HKERR::	JMP	ERROR#	; REPORT AN ERROR
HKHCHK:: NULRET		; HALT CHECKER
; UART EQUATES
UARTD=0E0H
UARTS=0E1H
; KEYBOARD SCANNER
KBSCAN::
	IN	UARTS	; CHECK STATUS
	ANI	2	; IS A CHAR THERE?
	RZ
	IN	UARTD	; GRAB A CHAR
..GOTK:	ANI	7FH	; ZAP PARITY
	CPI	20H	; CONTROL CHARACTER?
	JRNC	..STUF	; JUMP IF NOT
; WE GOT A CONTROL CHARACTER - LOOKUP IN TRANSLATE TABLE
	MOV	C,A
	MVI	B,0
	LXI	H,CTRLTBL
	DAD	B
	MOV	A,M
	ANA	A	; A HALT CHAR?
	JRNZ	..STUF	; JUMP IF NOT
	INR	A	; SET THE HALT FLAG
	STA	HLTFLG#
	RET
..STUF:	MOV	E,A	; SAVE CHAR
	LHLD	KBBPC#	; GET BUFFER POINTERS
	MOV	A,L	; A=PRODUCER
	CALL	BUMPKB#
	CMP	H	; IS THE BUFFER FULL
	RZ		; IF SO - IGNORE THE CHAR
	STA	KBPRO#	; ELSE UPDATE THE POINTER
	MVI	H,0	; AND STORE AT OLD PTR VAL
	LXI	B,KEYBUF#
	DAD	B
	MOV	M,E
	RET
; CONTROL CHARACTER TRANSLATE TABLE
CTRLTBL:
	.BYTE	0	; NULL
	.BYTE	76H	; A - RND
	.BYTE	71H	; B - BOX
	.BYTE	69H	; C - CLEAR
	.BYTE	78H	; D - DATA
	.BYTE	66H	; E - EDIT KEY
	.BYTE	72H	; F - FOR
	.BYTE	6FH	; G - GOSUB
	.BYTE	RUBOUT	; H - RUBOUT
	.BYTE	73H	; I - INPUT
	.BYTE	67H	; J - GO+10
	.BYTE	6DH	; K - IF
	.BYTE	68H	; L - LIST
	.BYTE	CR	; CARRIAGE RETURN
	.BYTE	6BH	; N - NEXT
	.BYTE	79H	; O - CIRCLE
	.BYTE	74H	; P - PRINT
	.BYTE	7DH	; Q - SNAP
	.BYTE	70H	; R - RETURN
	.BYTE	75H	; S - STEP
	.BYTE	77H	; T - TO
	.BYTE	7AH	; U - POINT
	.BYTE	7BH	; V - DEFAULT
	.BYTE	7CH	; W - SHOW
	.BYTE	6AH	; X - RUN
	.BYTE	7FH	; Y - SCROLL
	.BYTE	7EH	; Z - ZERO
	.BYTE	0	; ESCAPE - HALT
	.BYTE	6CH	; BACKSLASH - LINE
	.BYTE	67H	; CLOSE SQUARE BKT - GO + 10
	.BYTE	62H	; CARAT - MULTIPLY
	.BYTE	63H	; UNDERLINE - DIVIDE
	.END
                                                                                  