NEW
  AUTO 3,1
*--------------------------------------
* called directly by IRQ Vector $FFFE in AuxLC
* Must keep:
*  A,X,Y
*   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 RDPAGE2
				pha
				sta CLRPAGE2

				lda RD80STORE
				pha
				sta CLR80STORE

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

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

				lda MSLOT				Save MSLOT
				pha

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

IRQ.JSR			jsr CORE.IRQ.DEV		SELF MODIFIED

				ldx #CLRCXROM

				pla						Get CXROM State
				bpl .3

				inx						X = SETCXROM
				
.3				sta $C000,x

				pla						Get back MSLOT
				sta MSLOT
				sta IRQ.2+2

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

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

IRQ.3			pla						Must keep Carry
				bpl .1

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

.1				pla
				bpl .2

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

.2				pla
				bpl .3

				sta SET80STORE

.3				pla
				bpl .30

				sta SETPAGE2

.30				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
