mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-31 08:05:30 +00:00
100 lines
2.0 KiB
Plaintext
100 lines
2.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
* this routine handles interrupts and is coded to reach 'lreset' precisely at
|
||
* address $FFCB (ROM rts opcode) for rom switching to function.
|
||
* $FF9B
|
||
*--------------------------------------
|
||
IRQ.START .PH IRQ
|
||
|
||
IRQ.START1 ldx #$FA save 6 bytes of page 0
|
||
|
||
.2 lda $00,x
|
||
sta IRQ.ZPSave-$FA,x
|
||
inx
|
||
bne .2
|
||
|
||
* lda mslot
|
||
* sta IRQ.DoneCn+2
|
||
|
||
* ldx #0
|
||
|
||
.3 lda GP.IRQVs+1,x test for a valid routine.
|
||
beq .4 branch if no routine.
|
||
|
||
phx
|
||
jsr IRQ.GoX
|
||
plx
|
||
|
||
bcc IRQ.Done
|
||
|
||
.4 inx
|
||
inx
|
||
cpx #8
|
||
bne .3
|
||
|
||
inc IRQ.Cnt allow 255 unclaimed interrupts
|
||
bne IRQ.Done before system death.
|
||
|
||
lda #$01 bad irq so
|
||
jsr GP.SYSDEATH kill the system.
|
||
*--------------------------------------
|
||
.LIST ON
|
||
IRQ.FREE1 .EQ $ffc8-*
|
||
.LIST OFF
|
||
|
||
.BS IRQ.FREE1
|
||
|
||
IRQ.ToRomRTS sta IO.RROMBNK2
|
||
.DO *=$FFCB
|
||
* hits ROM rts at $FFCB
|
||
.ELSE
|
||
ERROR
|
||
.FIN
|
||
*--------------------------------------
|
||
IRQ.Done ldx #$FA
|
||
|
||
.1 lda IRQ.ZPSave-$FA,x restore the zero page
|
||
sta $00,x
|
||
inx
|
||
bne .1
|
||
|
||
* lda IO.CLRC8ROM
|
||
|
||
*IRQ.DoneCn lda $C100 SELF MODIFIED
|
||
* lda IRQ.DoneCn+2
|
||
* sta mslot
|
||
|
||
rti
|
||
*--------------------------------------
|
||
IRQ.GoX jmp (GP.IRQVs,x) interrupt routine x
|
||
|
||
IRQ.Reset lda /ROM.RESETV-1
|
||
pha
|
||
lda #ROM.RESETV-1
|
||
pha
|
||
bra IRQ.ToRomRTS
|
||
|
||
IRQ.Cnt .HS 00 # of unclaimed interrupts.
|
||
IRQ.ZPSave .HS 000000000000 6 bytes
|
||
|
||
.LIST ON
|
||
IRQ.FREE2 .EQ $fffa-*
|
||
.LIST OFF
|
||
|
||
.BS IRQ.FREE2
|
||
|
||
.DA ROM.NMIJMP nmi handler
|
||
.DA IRQ.Reset reset handler
|
||
irqv .DA * PATCHED with ROM vector by LDR
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
IRQ.LEN .EQ *-IRQ.START
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/prodos.fx/prodos.s.irq
|
||
LOAD usr/src/prodos.fx/prodos.s
|
||
ASM
|