NEW
  AUTO 3,1
*--------------------------------------
GP.START		jmp	GP.MLIENTRY			$2E00-2EFF moved to $BF00
jspare			jmp *					will be changed to point to dispatcher.
clockv 			rts						changed to jmp ($4C) if clock present.
				.DA XDOS.ClockDrv		clock routine entry address.
GP.P8errv		jmp XDOS.syserr			error reporting hook.
GP.SysDeath		jmp XDOS.SysDeath		system failure hook.
p8error  		.DA #0
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA nodevice
				.DA #0					DEVNUM
				.DA #$ff				DEVCNT : count (-1) active devices
				.HS 00000000000000		DEVLST : up to 14 units may be active
				.HS 00000000000000
				.DA #0
*--------------------------------------
				.AS "(C)APPLE  "
*--------------------------------------
GP.MLIENTRY		php
				sei
				jmp GP.MLICONT
*--------------------------------------
*aftirq			sta RRAMWRAMBNK1		read/write RAM bank 1
*				jmp fix45				restore $45 after interrupt in LC
*oldacc			.DA #0
*afbank			.HS 00
*--------------------------------------
				.LIST ON
GP.FREE1		.EQ $BF58-*
				.LIST OFF
				.BS GP.FREE1
*--------------------------------------				
* memory map of lower 48k. each bit represents 1 page.
* protected pages = 1, unprotected = 0

*--------------------------------------
				.HS C000000000000000	MEMTABL
				.HS 0000000000000000
				.HS 0000000000000001
*--------------------------------------
* table of buffer addresses for currently open files.
* these can only be changed thru the mli call setbuf.
*--------------------------------------
buftbl 			.HS 0000				file #1
				.HS 0000	  			file #2
				.HS 0000	  			file #3
				.HS 0000	  			file #4
				.HS 0000				file #5
				.HS 0000				file #6
				.HS 0000				file #7
				.HS 0000				file #8
*--------------------------------------
* table of interrupt vectors. these can only be changed
* by the mli call allocate_interrupt. values of the registers
* at the time of the most recent interrupt are stored here along
* with the address interrupted.
*--------------------------------------
inttbl 			.HS 0000				int #1
				.HS 0000				int #2
				.HS 0000				int #3
				.HS 0000				int #4
*--------------------------------------
*p8areg 			.DA #0					A register savearea
*p8xreg 			.DA #0					X register savearea
*p8yreg 			.DA #0					Y register savearea
*p8sreg 			.DA #0					S register savearea
*p8preg 			.DA #0					P register savearea
*bankid			.DA #1					bank ID byte (ROM/RAM)
*intadr 			.HS 0000				interrupt return address
*--------------------------------------
				.BS 8
*--------------------------------------
p8date 			.HS 0000				bits 15-9=yr, 8-5=mo, 4-0=day
p8time 			.HS 0000				bits 12-8=hr, 5-0=min, low-hi format
flevel  		.DA #0					current file level
bubit  			.DA #0					backup bit disable, setfileinfo only
*spare1			.DA #0					used to save acc
				.DA #0
newpfxptr 		.DA #0					appletalk alternate prefix ptr
machidbyte		.DA #0					machine ID byte
rommap 			.DA #0					slot ROM bit map
preflag  		.DA #0					prefix active flag
mliact 			.DA #0					MLI active flag
mliretn  		.DA 0					last MLI call return address
mlix   			.DA #0					MLI X register savearea
mliy   			.DA #0					MLI Y register savearea
*--------------------------------------
* language card bank switching routines which must reside at $BFA0 because
* workstation software patches this area
*--------------------------------------
GP.MLIEXIT		eor $E000				test for rom enable
				beq .1	  				taken if ram enabled
				sta RROMBNK2			read ROM
				bne .2	 				always
.1			  	lda bnkbyt2				for alternate ram
				eor $D000				test
				beq .2					branch if not alternate ram
				lda RRAMWRAMBNK2		else enable alt $D000
.2  			pla		 			 	return code
				rti		  				re-enable interrupts and return
*--------------------------------------
GP.MLICONT		sec
				ror mliact	   			notify interrupt routines MLI active.
				lda $E000				preserve language card/rom orientation
				sta bnkbyt1	  			for proper restoration when mli exits.
				lda $D000
				sta bnkbyt2
				lda RRAMWRAMBNK1		force ram card on
				lda RRAMWRAMBNK1		with write allowed
				jmp XDOS
*--------------------------------------
*GP.IrqExit		lda bankid	   			determine state of ram card (ROM/RAM)
*irqxit0
*				beq .2					branch if ram card enabled.
*				bmi .1					branch if alternate $D000 enabled.

*				lsr						determine if no ram card present.
*				bcc .3					branch if rom only system.

*				lda RROMWRAMBNK2	   	enable rom
*				bcs .3					always taken

*.1	  			lda RRAMWRAMBNK2		enable alternate $D000

*.2	  			lda #$01	   			preset bankid for rom.
*				sta bankid	   			(reset if ram card interrupt)

*.3				lda	p8areg	  			restore acc
*				rti		  				exit
*--------------------------------------
				.LIST ON
GP.FREE2		.EQ $BFEB-*
				.LIST OFF
				.BS GP.FREE2
*--------------------------------------
GP.IRQV			bit	RRAMWRAMBNK1	   	***NEW ROM ONLY IRQ $fffe > $Cxxx space***
				bit	RRAMWRAMBNK1		Entry used when rom/mainLC/auxLC
				jmp	XDOS.IRQV
*--------------------------------------
bnkbyt1			.DA #0
bnkbyt2			.DA #0
				.HS 00000000			pad to before $BFFA
				.DA #4					gsos compatibility byte ($BFFA)
				.DA #0					pad
				.DA #0					reserved
				.DA #0					version # of running interpreter
				.DA #0					preserved for System Utilities
kversion		.HS 23					represents release 2.0.3
*--------------------------------------
GP.LEN			.EQ *-GP.START
MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.GP
LOAD USR/SRC/PRODOS.FX/PRODOS.S
ASM
