NEW
  AUTO 3,1
*--------------------------------------
* called directly by IRQ Vector $FFFE in AuxLC
* Must keep:
*  A,X,Y
*   IO.SETREADAUX
*  if we are here, Aux ZP/Stack already On
* Exit with RTI
* if A2osX Drivers cannot clear IRQ, 
* must call regular System Handler
*--------------------------------------
MSLOT			.EQ $7f8
*--------------------------------------
*IRQ.BRK		jmp IRQ.6
*--------------------------------------
IRQ.Handler		cld

				sta IRQ.6+1
				pla
				pha
				and #$10				BRK?
*				bne IRQ.BRK
				bne *

				stx	IRQ.5+1
				sty IRQ.4+1
				
				lda IO.RD80STORE
				and IO.RDPAGE2
				pha
				sta IO.CLRPAGE2

				lda IO.RDREADAUX
				pha
				sta IO.CLRREADAUX		Make sure we can access FD.Table

				lda IO.RDWRITEAUX
				pha
				sta IO.CLRWRITEAUX		Driver may R/W in screen holes

				lda MSLOT				Save MSLOT
				sta IRQ.2+2

*				lda IO.RDCXROM			C100-C7ff state
*				pha
*				sta IO.CLRCXROM			Enable access to slot C100-C7ff space

IRQ.JSR			jsr CORE.IRQ.DEV		SELF MODIFIED

*				ldx #IO.CLRCXROM

*				pla						Get CXROM State
*				bpl .3

*				inx						X = SETCXROM
				
*.3				sta $C000,x

				lda IRQ.2+2				Get back MSLOT
				sta MSLOT

				and #$F0
				eor #$C0				....mmm...not looking like Cn....
				bne IRQ.3

				sta	IO.CLRC8ROM			Release $C800
				
IRQ.2			lda $ff00				SELF MODIFIED

IRQ.3			pla						Must keep Carry
				bpl .1

				sta IO.SETWRITEAUX
				clv						coming for AUX.....cancel switch

.1				pla
				bpl .2

				sta IO.SETREADAUX
				clv						coming for AUX.....cancel switch

.2				pla
				bpl .3

				sta IO.SETPAGE2

.3				bvc IRQ.4				if not V, skip task switching

				tsx						Check Stack if before "dec IRQ.InKernel"
				cpx #$fc				$1ff-PChi-PClo-P = $1fc
				bcs .8					in CORE.Run or CORE.Dispatch

				lda $103,x
				cmp /A2osX.SYSCALL
				bcs .8					we are in kernel GP or LC

				php
				php						make room for 2 additional bytes

				tsx

				lda $104,x				get RTI PC LO
				bne .4

				dec $105,x				adjust RTI PC HI

.4				dec $104,x				back one byte, to make it a "RTS" return adddress 

				lda $103,x				get IRQ pushed P
				sta $101,x				down 2 bytes
				lda #A2osX.SLEEP		make a RTI like "jsr A2osX.SLEEP"
				sta $102,x
				lda /A2osX.SLEEP		with RTS=PC IRQ-1
				sta $103,x

.8				clc

IRQ.4			ldy #$ff				Self Modified
IRQ.5			ldx #$ff				Self Modified
IRQ.6			lda #$ff				Self Modified
				bcc IRQ.8

				dec IRQ.Skip			Make regular ProDOS IRQ manager skip A2osX
IRQ.JMP			jmp $FFFF				SELF MODIFIED	Not handled, pass to ProDOS

IRQ.8			rti
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.irq
LOAD usr/src/sys/kernel.s
ASM
