A2osX/SYS/KERNEL.S.IRQ.txt
2016-01-04 08:18:33 +01:00

116 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* Setup MainLC ($3FE)
*
*
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
S.IrqMgrInit >LDYA $FFFE
cpy #S.IrqHandlerAuxLC
bne .1
cmp /S.IrqHandlerAuxLC
beq .8
.1 php
sei
>STYA S.IrqMgrOldFFFE
>LDYAI S.IrqHandlerAuxLC
>STYA $FFFE
plp
.8 clc
.9 rts
*--------------------------------------
S.IrqMgrQuit php
sei
>LDYA S.IrqMgrOldFFFE
>STYA $FFFE
plp
cli
.8 rts
*--------------------------------------
*--------------------------------------
* 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
*--------------------------------------
S.IrqHandlerAuxLC
sta S.IrqMgr.A
pla
pha
and #$10 BRK?
beq .10
lda S.IrqMgr.A
.82 jmp (S.IrqMgrOldFFFE)
.10 stx S.IrqMgr.X
sty S.IrqMgr.Y
lda $fe
pha
lda $ff
pha
lda RDREADAUX
pha
sta CLRREADAUX Make sure we can access DevMgr.Table
>LDYAI DevMgr.Table
>STYA $fe
.1 lda ($fe) End Of Table ?
sec
beq .8
ldy #S.DEV.F
lda ($fe),y
and #S.DEV.F.IRQ
beq .2
jsr S.IrqHandlerJMP
bcc .8 CC, IRQ cleared by device
.2 lda $fe CS,
adc #S.DEV.SIZE-1
sta $fe
bcc .1
inc $ff
bra .1
.8 pla Must keep Carry
bpl .81
sta SETREADAUX
.81 pla
sta $ff
pla
sta $fe
ldy S.IrqMgr.Y
ldx S.IrqMgr.X
lda S.IrqMgr.A
bcs .82
rti
S.IrqHandlerJMP ldx #DEVMGR.IRQ
jmp ($fe)
*--------------------------------------
S.IrqMgrOldFFFE .BS 2
S.IrqMgr.A .BS 1
S.IrqMgr.X .BS 1
S.IrqMgr.Y .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.IRQ
LOAD SYS/KERNEL.S
ASM