GLBSTUFF PROC	temporg	$BE00	; for actual build use this proc
;GLBSTUFF PROC	org	$BE00		; for test purposes use this proc

	MACHINE	M65C02
	LONGA	OFF
	LONGI	OFF	
	
			IMPORT  WARMDOS
			IMPORT	SYNTAX
			IMPORT	ERROR
			IMPORT	PRTERROR
			IMPORT 	NODEVERR
			IMPORT 	DOSOUT
			IMPORT	DOSINP
			IMPORT 	TXBUF
			IMPORT	CALLX
			IMPORT 	SYSCTBL
			IMPORT  MLIERTBL
			IMPORT	CIERRTBL
			IMPORT	GETPAGES
			IMPORT	FREPAGES
			IMPORT	ALIASCMD
	
			INCLUDE 'EQUATES'

CIENTRY		JMP	WARMDOS		;RE-ENTER PRODOS/APPLESOFT 
DOSCMD		JMP	SYNTAX		;EXTERNAL ENTRY FOR COMMAND STRINGS
			EXPORT EXTRNCMD
EXTRNCMD	JMP	ALIASCMD		;LS/PFX, THEN OTHER EXTERNAL COMMANDS. 
ERROUT		JMP	ERROR	 	;HANDLES ONERR OR PRINTS ERROR
			EXPORT PRINTERR
PRINTERR	JMP	PRTERROR	;PRINT ERROR MESSAGE (NUMBER IN ACC) 
			EXPORT ERRCODE
ERRCODE		DC.B	0	 	;PRODOS ERROR CODE STORED HERE AND $DE FOR APPLESOFT. 
*
*****************************************************
* Default I/O Vectors.  These may be changed by the User to   
*   remap slots for Non-Disk Devices.  When the system is 
*   Booted, all slots not containing a ROM are considered to 
*   be 'NOT CONNECTED' and the Default Vector is left to
*   point at the appropriate Error Handling Routine.
*****************************************************
*
			EXPORT OUTVECT0
OUTVECT0	DC.W	COUT1	 	;MONITOR VIDEO OUTPUT ROUTINE.
OUTVECT1	DC.W	NODEVERR	;DEFAULT $C100 WHEN ROM PRESENT. 
OUTVECT2	DC.W	NODEVERR	;DEFAULT $C200 WHEN ROM PRESENT. 
OUTVECT3	DC.W	NODEVERR	;DEFAULT $C300 WHEN ROM PRESENT. 
OUTVECT4	DC.W	NODEVERR	;DEFAULT $C400 WHEN ROM PRESENT. 
OUTVECT5	DC.W	NODEVERR	;DEFAULT $C500 WHEN ROM PRESENT. 
OUTVECT6	DC.W	NODEVERR	;DEFAULT $C600 WHEN ROM PRESENT. 
OUTVECT7	DC.W	NODEVERR	;DEFAULT $C700 WHEN ROM PRESENT. 
INVECT0		DC.W	CHIN1	 	;MONITOR KEYBOARD INPUT ROUTINE. 
INVECT1		DC.W	NODEVERR	;DEFAULT $C100 WHEN ROM PRESENT. 
INVECT2		DC.W	NODEVERR	;DEFAULT $C200 WHEN ROM PRESENT. 
INVECT3		DC.W	NODEVERR	;DEFAULT $C300 WHEN ROM PRESENT. 
INVECT4		DC.W	NODEVERR	;DEFAULT $C400 WHEN ROM PRESENT. 
INVECT5		DC.W	NODEVERR	;DEFAULT $C500 WHEN ROM PRESENT. 
INVECT6		DC.W	NODEVERR	;DEFAULT $C600 WHEN ROM PRESENT. 
INVECT7		DC.W	NODEVERR	;DEFAULT $C700 WHEN ROM PRESENT. 
*
			EXPORT VECTOUT
VECTOUT		DC.W	COUT1	 	;CURRENT CHARACTER OUTPUT ROUTINE. 
			EXPORT VECTIN
VECTIN		DC.W	CHIN1	 	;CURRENT CHARACTER INPUT ROUTINE.
*
			EXPORT VDOSIO
VDOSIO		DC.W	DOSOUT		;PRODOS CHAR OUT INTERCEPT ROUTINE. 
			DC.W	DOSINP		;PRODOS CHAR IN INTERCEPT ROUTINE. 
*
			EXPORT VSYSIO
VSYSIO		DC.W	0,0	 		;INTERNAL REDIRECTION OF I/O. 
*
			EXPORT DEFSLT
DEFSLT		DC.B	$06	 		;DEFAULT SLOT, SET BY 'S' PARM
			EXPORT DEFDRV
DEFDRV		DC.B	$01	 		;DEFAULT DRIVE, SET BY 'D' PARM
* 
			EXPORT PREGA
PREGA		DC.B	0	 		;REGISTER SAVE AREA.
			EXPORT PREGX
PREGX		DC.B	0
			EXPORT PREGY
PREGY		DC.B	0
			EXPORT DTRACE
DTRACE		DC.B	0	 		;APPLESOFT TRACE ENABLE.
			EXPORT STATE
STATE		DC.B	0	 		;0=IMM, >0=DEF MODES. 
			EXPORT EXACTV
EXACTV		DC.B	0	 		;EXEC FILE ACTIVE IF BIT 7 ON 
			EXPORT IFILACTV
IFILACTV	DC.B	0	 		;INPUT FILE ACTIVE  ' ' ' ' ' 
			EXPORT OFILACTV
OFILACTV	DC.B	0	 		;OUTPUT FILE  ' ' ' ' ' ' ' '
			EXPORT PFXACTV
PFXACTV		DC.B	0	 		;PREFIX INPUT ACTIVE  ' ' ' '
			EXPORT DIRFLG
DIRFLG		DC.B	0	 		;FILE BEING ACCESSED IS DIRECTORY 
EDIRFLG		DC.B	0	 		;END OF DIRECTORY ENCOUNTERED.
			EXPORT STRINGS
STRINGS		DC.B	0	 		;COUNTER FOR FREE STRING 
			EXPORT TBUFPTR
TBUFPTR		DC.B	0	 		;TEMPORARY BUFFERED CHAR. COUNT (WRITE)
			EXPORT INPTR
INPTR		DC.B	0	 		;INPUT CHAR. COUNT DURING KBD INPUT.
			EXPORT CHRLAST
CHRLAST		DC.B	0	 		;LAST CHARACTER OUTPUT (FOR ERROR DETECT) 
			EXPORT OPENCNT
OPENCNT		DC.B	0			;NUMBER OF OPEN FILE (EXCEPT EXEC FILE).
			EXPORT EXFILE
EXFILE		DC.B	0			;FLAG TO INDICATE EXEC FILE BEING CLOSED.
			EXPORT CATFLAG
CATFLAG		DC.B	0	 		;FILE BEING INPUT IS (TRANSLATED) DIR.
			EXPORT XTRNADDR
XTRNADDR	DC.W	0	 		;EXECUTION ADDRESS OF EXTERNAL CMD (0).
			EXPORT XLEN
XLEN		DC.B	0	 		;LENTH OF COMMAND STRING-1, I.E. "HELP"=3.
			EXPORT XCNUM
XCNUM		DC.B	0	 		;CI CMD NUMBER (EXTERNAL CMD IF =0) 

			EXPORT PBITS
PBITS		DC.W	0	 		;ALLOWED PARAMETER BITS.
			EXPORT FBITS
FBITS		DC.W	0	 		;FOUND PARAMETER BITS.
			EXPORT VADDR
VADDR		DC.W	0	 		;PARAMETER VALUE FOR 'A' PARM
			EXPORT VBYTE
VBYTE		DC.B	0,0,0		;PARAMETER VALUE FOR 'B' PARM 
			EXPORT VENDA
VENDA		DC.W	0	 		;PARAMETER VALUE FOR 'E' PARM 
			EXPORT VLNTH
VLNTH		DC.W	0	 		;PARAMETER VALUE FOR 'L' PARM
			EXPORT VSLOT
VSLOT		DC.B	0	 		;PARAMETER VALUE FOR 'S' PARM 
			EXPORT VDRIV
VDRIV		DC.B	0	 		;PARAMETER VALUE FOR 'D' PARM 
			EXPORT VFELD
VFELD		DC.W	0	 		;PARAMETER VALUE FOR 'F' PARM 
			EXPORT VRECD
VRECD		DC.W	0	 		;PARAMETER VALUE FOR 'R' PARM 
VVOLM		DC.B	0	 		;PARAMETER VALUE FOR 'V' PARM, IGNORED.
			EXPORT VLINE
VLINE		DC.W	0	 		;PARAMETER VALUE FOR '@' PARM
	 		EXPORT VTYPE	
VTYPE		DC.B	0	 		;PARAMETER VALUE FOR 'T' PARM
			EXPORT PIOSLT:equ	; :equ added by SEG on 11  May 89
PIOSLT		EQU	PTYPE+1
			EXPORT VIOSLT
VIOSLT		DC.B	0	 		;PARAMETER VALUE FOR IN# OR PR# 
VPATH1		DC.W	TXBUF-1		;CONSTANT PATH NAME 1 BUFFER 
VPATH2		DC.W	TXBUF2		;CONSTANT PATH NAME 2 BUFFER (RENAME) 
	
*****************************************************
*  GOSYSTEM is used to make ALL MLI Calls since Errors must 
*    be translated before Returning to the Calling Routine. 
*  On Entry, the ACC should contain the Call Number.  The
*    Address of the Parameter Table is looked up and set 
*    based on the Call Number.  Only File Management Calls 
*    ($C0-$D3) can be made using this routine.
*  The original implementation of this CI Contains only
*    these calls.
*****************************************************
*
			EXPORT GOSYSTEM
GOSYSTEM	STA	SYSCALL			;SAVE CALL NUMBER
			STX	CALLX	 		;PRESERVE X REGISTER.
			AND	#$1F	 		;STRIP HIGH BITS OF CALL NUMBER
			TAX					;AND USE AS LOOKUP INDEX.
			LDA	SYSCTBL,X		;GET LOW ADDRESS OF PARM TABLE.
			STA	SYSPARM
			LDX	CALLX	 		;RESTORE X BEFORE CALLING.
*
			JSR	MLIENTRY		;CALL XDOS MLI TO EXECUTE REQUEST.
SYSCALL		DC.B	0
SYSPARM		DC.W	*	 		;(HIGH ADDRESS SHOULD BE SAME AS PARM TABLES).
			BCS	BADCALL			;BRANCH IF ERROR ENCOUNTERED.
			RTS
*
*****************************************************
* BADCALL converts MLI Errors into CI Error equivalents. 
*   Routine should be entered with Error # in ACC, & Returns 
*   CI-Error # in ACC.  All unrecognized Errors are mapped 
*   to I/O Error.  X-Reg is restored to the value it had 
*   before the Call was made.  Carry is SET. 
*****************************************************
*
BADCALL		LDX	#$12	 		;19 ERRORS ARE MAPPED TO
MLIERR1		CMP	MLIERTBL,X		; OTHER THAN I/O ERROR.
			BEQ	MLIERR2	 
			DEX
			BPL	MLIERR1
			LDX	#$13	 		;IF NOT RECOGNIZED, MAKE IT I/O ERROR.
* 
MLIERR2		LDA	CIERRTBL,X	 	;RETURN ERROR IN ACC.
			LDX	CALLX	 		;RESTORE X-REG.
			SEC					;SET CARRY TO INDICATE ERROR.
XRETURN		RTS
CISPARE1	DC.B	$00	 
*
*****************************************************
* The following are the System Call Parameter Tables. 
*   These tables must reside within the same page of Memory. 
*   Only those Parameters that are subject to alterations 
*   have been Labeled.  SYSCTBL, below, contains the low 
*   Order Address of each Parameter Table.  SYSCTBL is used 
*   by GOSYSTEM to set up the Address of the Parameter  
*   Table for each Call.  (See GOSYSTEM) 
*****************************************************
*
			EXPORT SCREATE
SCREATE		DC.B	$07
			DC.W	TXBUF-1	 	;POINTER TO PATHNAME.
			EXPORT CRACESS
CRACESS		DC.B	$C3	 		;$C1 IF DIRECTORY CREATE. 
			EXPORT CRFILID
CRFILID		DC.B	$00
			EXPORT CRAUXID
CRAUXID		DC.W	$0000
			EXPORT CRFKIND
CRFKIND		DC.B	0
			DC.W	0	 		;NO PREDETERMINED DATE/TIME.
			DC.W	0

			EXPORT SSGPRFX
SSGPRFX
			
			EXPORT SDSTROY
SDSTROY		DC.B	$01
			DC.W	TXBUF-1	 	;THIS CALL REQUIRES NO MODIFICATIONS.

			EXPORT SRENAME
SRENAME		DC.B	$02
			DC.W	TXBUF-1	 	;NO MODIFICATIONS NEEDED.
			DC.W	TXBUF2	 

			EXPORT SSGINFO
SSGINFO		DC.B	$00	 		;P.CNT=7 IF SET FILE INFO, =A IF GET FILE INFO
			DC.W	TXBUF-1
			EXPORT FIACESS
FIACESS		DC.B	$00	 		;ACCESS USED BY LOCK/UNLOCK.
			EXPORT FIFILID
FIFILID		DC.B	$00	 		;FILE ID IS TYPE SPECIFER
			EXPORT FIAUXID
FIAUXID		DC.W	$0000	 	;AUX ID USED FOR LOAD ADDR/RECORD LENGTH.
			EXPORT FIFKIND
FIFKIND		DC.B	$00	 		;IDENTIFIES TREES VS. DIRECTORIES.
			EXPORT FIBLOKS
FIBLOKS		DC.W	$0000	 	;USED ONLY BY CATALOG COMMANDS FOR ROOT DIRECTORY.
			EXPORT FIMDATE
FIMDATE		DC.W	$0000	 	;MODIFICATION DATE & TIME  
			DC.W	$0000	 	; SHOULD ALWAYS BE ZEROED BEFORE CALL. 
			DC.W	$0000	 	;CREATE DATE AND TIME IGNORED. 
			DC.W	$0000
	
			EXPORT SONLINE
SONLINE
			EXPORT SSETMRK
SSETMRK
			EXPORT SGETMRK
SGETMRK		
			EXPORT SSETEOF
SSETEOF
			EXPORT SGETEOF
SGETEOF
			EXPORT SSETBUF
SSETBUF
			EXPORT SGETBUF
SGETBUF
			DC.B	$02	 		;PARAMETER COUNT
			EXPORT SBUFREF
SBUFREF
			EXPORT SREFNUM
SREFNUM
			EXPORT SUNITNUM
SUNITNUM
			DC.B	0	 		;UNIT OR REFERENCE NUMBER.
			EXPORT SDATPTR
SDATPTR
			EXPORT SMARK
SMARK
			EXPORT SEOF
SEOF
			EXPORT SBUFADR
SBUFADR
			DC.B	0,0,0	 	;MRK & EOF USE 3 BYTES.

			EXPORT SOPEN
SOPEN		DC.B	$03
			DC.W	TXBUF-1
			EXPORT OSYSBUF
OSYSBUF		DC.W	$0000
			EXPORT OREFNUM
OREFNUM		DC.B	0
*
*
			EXPORT SNEWLIN
SNEWLIN		DC.B	$03
			EXPORT NEWLREF
NEWLREF		DC.B	$00	 		;REFERENCE NUMBER.
			EXPORT NLINENBL
NLINENBL	DC.B	$7F	 		;NEW LINE CHARACTER IS ALWAYS CARRAGE RETURN.
			DC.B	$0D	 		; BOTH $0D AND $8D IS RECODGNIZED.
*
*
			EXPORT SBYE
SBYE
			EXPORT SREAD
SREAD
			EXPORT SWRITE
SWRITE
			DC.B	$04
			EXPORT RWREFNUM
RWREFNUM	DC.B	$00
			EXPORT RWDATA
RWDATA		DC.W	$0000	 	;POINTER TO DATA TO BE READ/WRITTEN.
			EXPORT RWCOUNT
RWCOUNT		DC.W	$0000	 	;NUMBER OF BYTES TO BE READ/WRITTEN.
			EXPORT RWTRANS
RWTRANS		DC.W	$0000	 	;RETURNED # OF BYTES READ/WRITTEN.
*
*
			EXPORT SCLOSE
SCLOSE
			EXPORT SFLUSH
SFLUSH
			DC.B	$01
			EXPORT CFREFNUM
CFREFNUM	DC.B	$00
*
*
CCCSPARE	DC.B	$00
			MSB ON
			DC.B	'COPYRIGHT APPLE, 1983'
			MSB OFF
GETBUFR		JMP	GETPAGES	 	;Get a buffer N pages in length 
FREBUFR		JMP	FREPAGES	 	;Free the pages reserved by GETPAGES.
			EXPORT RSHIMEM
RSHIMEM		DC.B	0	 		;HIMEM at boot time 
			DC.B	0,0,0,0
GLB_END		EQU	*	 			;This location should be $BF00 (0100 in temporg)

	END