	TITLE M5b Z-80 MONITOR CHARACTER I/O ROM
	LIST	NOCOND
;****************************************************************************
;
;	SYSTEM MONITOR FOR M5b
;	(c) 1982,1983  GRH ELECTRONICS, CUPERTINO, CA
;
;****************************************************************************
;
;	This code module contains the system character I/O drivers and 
; resides in the same address space as the resident Monitor ROM. The ROMs
; communicate with each other through a ROM transfer function.
;
*INCLUDE B:ZBMH122.HDR
;****************************************************************************
;
;	Revision status:
;
; 1.0 - Release
; 1.22	11-22-90   GRH
;	Split off from Monitor code to separate ROM in order to gain space
;	 for I/O drivers and interrupt code.
;	Add rom xover function as include file.
;	Add function dispatcher for execution and breakpoint entries.
;	Add CON: selection based on Naked Terminal presence.
;
; 1.23	8-16-91   GRH
;	Move code to banked rom. Add rom swapper.
;
VERSN	EQU	123
;****************************************************************************
	FORM
FALSE	EQU	0
TRUE	EQU	NOT FALSE

;
;   INCLUDE SYSTEM DEFINITION FILES
;
;*MACLIB    ASMBTOOL.MLB
;*INCLUDE   MONBOARD.DEF
;*INCLUDE B:ZBMF101.DEF
;*INCLUDE B:ZBMG101.DEF
;*INCLUDE   CB2.DEF
;
	LIST	OFF
*MACLIB	   ASMBTOOL.MLB
*INCLUDE   MONBOARD.DEF
*INCLUDE B:ZBMF101.DEF
*INCLUDE B:ZBMG101.DEF
*INCLUDE   CB2.DEF
	LIST	ON


THIS_ROM EQU	CHR_RNUM
BNKREG	EQU	BNKPORT

	SUBTTL	EXTERNAL ENTRY POINTS
	ORG	MONROM
;
	JP	CINIT		;COLD START
;
;   EXTERNAL FUNCTION ENTRY DURING INTERRUPT
;
	DS	(MONROM + 6) - $
	JP	I_STUB


;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;	EXTERNAL FUNCTION STUB FOR USE DURING AN INTERRUPT WITHOUT THE
; RESIDENT ROM ENABLED. USE IN ALL NON-RESIDENT ROMS.
;	ENTRY-	A= FUNCTION #
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
I_STUB:
	ADD	A,2		;BIAS UP
	PUSH	HL
	LD	H,MR_RNUM	;USE RESIDENT ROM
	LD	L,A
	EX	(SP),HL
	CALL	XROMF		;GO EXECUTE THE FUNCTION
	INC	SP		;BALANCE STACK
	INC	SP
	RET


;****************************************************************************
;
;	COLD INIT ONLY SWITCHES TO RESIDENT ROM
;
;****************************************************************************
;
CINIT:
;
;   SET STACK
;
	LD	SP,MONSTK
;
;   RESET ROM FUNCTION SHOULD NOT RETURN
;
	LD	HL,[MR_RNUM SHL 8] + 1	;RESET
	PUSH	HL
	CALL	XROMF
;
;   IF RETURNED THEN HALT
;
	HALT


	SUBTTL	MONITOR BOARD SHADOW ROM SELECTION PROCEDURE
*INCLUDE	B:XROM.Z80

	SUBTTL	BANKED MEMORY EXECUTER
*INCLUDE	B:ZBMX100.Z80

	SUBTTL	MONITOR FUNCTION CALL DISPATCHER
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
;	ENTRY-	A= FUNCTION #
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
FUNCH:
	PUSH	HL
	LD	HL,2006H	;SET FUNCTION HANDLER ADDRESS
;
DO_X:	LD	(RXOFF),HL
	LD	L,0FEH		;SET BANK #
	LD	(RXBNK),HL
;
	POP	HL
	JP	CALLBNK		;GO EXECUTE


;****************************************************************************
;
;	INITIALIZE I/O
;
;****************************************************************************
;
ROM_INIT:
	PUSH	HL
	LD	HL,2000H	;INIT ENTRY
	JR	DO_X


	END
