NEW
  AUTO 3,1
* object code = mli_3
*
* this routine handles interrupts and is coded to reach 'lreset' precisely at
* address $FFCB (ROM rts opcode) for rom switching to function.

lanirq			pha		  				$2D9B-2DFF moved to $FF9B-FFFF
				lda accsav
				sta oldacc
				pla
				sta accsav		
				pla						get status register from stack
				pha		 				and put it back.
				and #$10	   			is it a break or interrupt?
				bne	H2DC2	   			branch if break.
				lda $D000				get ram bankid (LC1 = $D8, LC2=$EE)
				eor #$D8	   			is the system active? ($D8)
				beq	sysactv	   			branch if it is
				lda	#$FF
sysactv			sta	bankid
				sta afbank
				lda /aftirq				setup return address
				pha
				lda #aftirq
				pha
				lda #$04				status reg with interrupt flag set
				pha
H2DC2  			lda /romirq				setup ROM re-entry
				pha
				lda #romirq
				pha
gorom			sta RROMBNK2			hits ROM rts at $FFCB

* 'lreset' address must = $FFCB for rom switch i/o to work

lreset			lda rreset+1
				pha
				lda rreset
				pha
				jmp gorom
rreset			.DA resetv-1			rts to resetv
fix45			sta p8areg	  			A register savearea
				lda oldacc
				sta accsav
				lda RRAMWRAMBNK1		read/write RAM bank 1
				lda RRAMWRAMBNK1
				lda afbank
				jmp irqxit0
stypfx			sty newpfxptr			fix appletalk PFI bug
				sty preflag	  			prefix flag
				rts
stapfx			sta newpfxptr
				sta preflag
				rts

* these 3 vectors hard-coded into processor

				.DA nmivect	 			nmi handler
				.DA lreset	 			reset handler
irqv			.DA lanirq				irq handler

* end of obj mli_3
*--------------------------------------
MAN
SAVE usr/src/prodos.203/prodos.s.irq
LOAD usr/src/prodos.203/prodos.s
ASM
