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