	PAGE
;
;
;
;	-- MONITOR ENTRY POINT TABLE --

COLD:	JP	REINIT		;MONITOR COLD ENTRY POINT
WARM:	JP	ROLLIN		;MONITOR WARM ENTRY POINT
CONST:	JP	KBDST		;CONSOLE STATUS VECTOR
CONIN:	JP	KBDIN		;CONSOLE INPUT VECTOR
CONOUT:	JP	VIDOUT		;CONSOLE OUTPUT VECTOR
	JP	VIDOUT		;CRT OUTPUT VECTOR
	JP	SIOST		;SIO CHANEL B STATUS VECTOR
	JP	SIOIN		;SIO CHANEL B INPUT VECTOR
	JP	SIOOUT		;SIO CHANEL B OUTPUT VECTOR
	JP	SELECT		;DISK DRIVE SELECT
	JP	HOME		;HOME R/W HEAD
	JP	SEEK		;SEEK TO TRACK
	JP	READ		;READ SECTOR
	JP	WRITE		;WRITE SECTOR
	JP	READID		;READ ID
	JP	WTRAK		;IMPLEMENTED 15/01/83
;
;
;
REINIT:
	DI
	LD	A,DYSTAT+OFF
	OUT	(PORT0),A	;SWITCH ROMS ON IN LOW 32K MEMORY
	JP	0		;JUMP TO ABSOLUTE LOCATION 0
;
;
;
ROLLIN:
	DI
	LD	A,DYSTAT+OFF
	OUT	(PORT0),A	;TURN ROMS ON AND ALSO SET MEMORY
	LD	(DSCOPY),A	; BANK SWITCH VARIABLE TO INDICATE
	LD	SP,STACK	; WE WILL BE EXECUTING FROM ROM
	EI
	JP	PROMPT
;
;
;
VIDOUT:
	DI
	LD	(CRTSAV),SP
	LD	SP,CRTSTK	;POINT SP TO TOP OF LOCAL STACK
	PUSH	HL
	PUSH	DE
	PUSH	BC
	LD	C,A		;MOVE OUTPUT CHARACTER TO C
	LD	A,(DSCOPY)	;SAVE CURRENT RAM/ROM CONTROL BYTE
	PUSH	AF		; ON STACK FOR DURATION OF 'CRTOUT'
	LD	A,DYSTAT+OFF
	LD	(DSCOPY),A	;SET 'DSCOPY' TO ENABLE LOWER 32K BANK
	OUT	(PORT0),A	;TURN ON ROMS AND CRT MEMORY
	EI

	LD	HL,(CRTVEC)
	CALL	DISPATCH	;CALL SELECTED CRTOUT ROUTINE

	DI
	POP	AF		;RESTORE OLD MEMORY MAP BIT SETTING
	LD	(DSCOPY),A	;GO BACK TO MEMORY CONFIGURATION
	OUT	(PORT0),A	; AS IT WAS BEFORE CALLING 'CRTOUT'
	POP	BC
	POP	DE
	POP	HL
	LD	SP,(CRTSAV)
	EI
	RET
;
;
;
;
LOAD:
	DI
	LD	A,(CONFIG)
	ADD	A,A
	ADD	A,A
	ADD	A,A
	OUT	(PORT0),A
	LD	C,(HL)
	LD	A,(DSCOPY)
	OUT	(PORT0),A
	EI
	RET
;
;
STORE:
	DI
	LD	A,(CONFIG)
	ADD	A,A
	ADD	A,A
	ADD	A,A
	OUT	(PORT0),A
	LD	(HL),C
	LD	A,(DSCOPY)
	OUT	(PORT0),A
	EI
	RET
;
;
;
MOVE:
	DI
	LD	A,(CONFIG)
	ADD	A,A
	ADD	A,A
	ADD	A,A
	OUT	(PORT0),A
	LDIR
	LD	A,(DSCOPY)
	OUT	(PORT0),A
	EI
	RET
;
;
;
EXITMON:
	DI
	PUSH	AF
	LD	A,(CONFIG)	;SET BANK SWITCH STATE TO VALUE
	ADD	A,A		; CURRENTLY SELECTED IN MONITOR
	ADD	A,A
	ADD	A,A
	AND	00001000B
	LD	(DSCOPY),A	;STORE CONTROL BYTE FOR D/S BIT
	OUT	(PORT0),A	;SWITCH TO SPECIFIED LOWER BANK
	POP	AF
	EI
	RET			;DO JUMP BY POPPING STACK
;
;
;
;
MEMTEST:
	DI
	LD	A,(CONFIG)
	ADD	A,A
	ADD	A,A
	ADD	A,A
	OUT	(PORT0),A	;SWITCH TO SELECTED MEMORY BANK TO TEST
MTST2:	LD	A,L
	XOR	H		;GENERATE TEST BYTE
	XOR	B
	LD	(HL),A		;STORE BYTE IN RAM
	INC	HL
	LD	A,H
	CP	E		;CHECK FOR END OF TEST BLOCK
	JR	NZ,MTST2
;				NOW READ BACK EACH BYTE & COMPARE
	LD	H,D
	LD	L,0		;POINT HL BACK TO START
MTST3:	LD	A,L
	XOR	H		;RE-GENERATE TEST BYTE DATA
	XOR	B
	CP	(HL)		;COMPARE EXPECTED MEMORY DATA WITH 
	JR	NZ,MTST4	; ACTUAL CONTENTS @HL AND EXIT IF <>
	INC	HL
	LD	A,H
	CP	E		;CHECK FOR END OF BLOCK
	JR	NZ,MTST3
MTST4:	LD	A,(DSCOPY)
	OUT	(PORT0),A
	EI
	RET
;
