; C02 Interrupt Vector Assembly Language Routines for VIC-20

;getirq() - Return IRQ Interrupt Handler Address
;Returns: A = $00 - Software Definable Address
;         Y = Address MSB
;         X = Address LSB
GETIRQ: LDA #$00    ;Return software definable
        LDX $0314   ;and Address in CINV
        LDY $0315
        RTS

;getbrk() - Return BRK Interrupt Handler Address
;Returns: A = $00 - Software Definable Address
;         Y = Address MSB
;         X = Address LSB
GETBRK: LDA #$00    ;Return software definable
        LDX $0316   ;and Address in CBINV
        LDY $0317
        RTS

;getnmi() - Return NMI Interrupt Handler Address
;Returns: A = $00 - Software Definable Address
;         Y = Address MSB
;         X = Address LSB
GETNMI: LDA #$00    ;Return software definable
        LDX $0318   ;and Address in CBINV
        LDY $0319
        RTS

;getrst() - Return RESET Interrupt Handler Address
;Returns: A = $7F - Firmware Defined Address
;         Y = Address MSB
;         X = Address LSB
GETRST: LDX $FFFC   ;Load 6502 Interrupt Vector
        LDY $FFFD   ;and Fall into SETRST

;setrst() - Set RESET Interrupt Handler Address
;Args: Y = Address MSB
;      X = Address LSB
;Returns: A = $7F - Failure - Can't be Changed
SETRST: LDA #$7F    ;Return "Hard Coded"
        RTS

;setirq() - Set IRQ Interrupt Handler Address
;Args: Y = Address MSB
;      X = Address LSB
;Returns: A = $00 - Successfully Set
SETIRQ: SEI         ;Disable Interrupts
        STX $0314   ;Store Address in CINV
        STY $0315
        CLI         ;Enable Interrupts
        LDA #$00    ;Return "Modified"
        RTS

;setrst() - Set BRK Interrupt Handler Address
;Args: Y = Address MSB
;      X = Address LSB
;Returns: A = $00 - Successfully Set
SETBRK: SEI         ;Disable Interrupts
        STX $0316   ;Store Address in CBINV
        STY $0317
        CLI         ;Enable Interrupts
        LDA #$00    Return "Modified"
        RTS

;setnmi() - Set NMI Interrupt Handler Address
;Args: Y = Address MSB
;      X = Address LSB
;Returns: A = $00 - Successfully Set
SETNMI: STX $0318   ;Store Address in NMINV
        STY $0319
        LDA #$00    ;Return "Modified"
        RTS

;xitirq - Exit from IRQ Interrupt
;Exit IRQ if not Executing System IRQ Routine
XITIRQ: PLA     ;Restore Y Register
        TAY
        PLA     ;Restore Y Register
        TAX
        PLA     ;Restore Accumulator
        RTI     ;Return from Interrupt
