A2osX/ProDOS.FX/ProDOS.S.IRQ.txt
2023-11-04 15:42:28 +01:00

100 lines
2.0 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.

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