;C02 Interrupt Vector Assembly Language Routines for Apple 2 ;getbrk() - Return BRK Interrupt Address ;Returns: A = $00 - Software Definable Address ; Y = Address MSB ; X = Address LSB GETBRK: LDA #$00 ;Return software definable LDX $03F0 ;and Address in Soft Break Vector LDY $03F1 RTS ;getrst() - Return RST Interrupt Address ;Returns: A = $00 - Autostart ROM (Vectored through RAM) ; $7F - Monitor ROM (Hard Coded) ; Y = Address MSB ; X = Address LSB GETRST: JSR GETRSC ;Check ROM Version BNE GETRSX ;If Autostart ROM LDX $03F2 ; Return Address in Soft Reset Vector LDY $03F3 RTS GETRSX: LDX $FFFC ;Else LDY $FFFD ; Return Address in 6502 RESET Vector RTS ;Check 6502 RESET Vector ;Returns: A = $00 - Autostart ROM (Vectored through RAM) ; $7F - Monitor ROM (Hard Coded) ;Notes: $FFFC contains $FF59 on Apple ][ (Monitor ROM) ; $FA62 on all other machines (Autostart ROM) GETRSC: LDA $FFFD ;Load MSB of Vector CMP #$FF ; BEQ GETRSF ;If Not Monitor ROM LDA #$00 ; Return $00 RTS GETRSF: LDA #$7F ;Else Return $FF RTS ;getnmi() - Return NMI Interrupt Address ;Returns: A = $00 - Software Definable Address ; Y = Address MSB ; X = Address LSB ;Notes: $FFFA contains $03FB in all ROMs GETNMI: LDA #$00 ;Return software definable LDX $03FB ;and Address in NMI vector LDY $03FC RTS ;getirq() - Return IRQ Interrupt Address ;Returns: A = $00 - Software Definable Address ; Y = Address MSB ; X = Address LSB ;Notes: $FFFE contains $FA86 on Apple ][ (Monitor ROM) ;   $FA40 on Apple ][+ and Pravets ; $C3FA on Apple //e, $FAC3 on TK3000//e ; $FF59 on Franklin 1000 and Laser 128 GETIRQ: LDA #$00 ;Return software definable LDX $03FE ;and Address in CINV LDY $03FF RTS ;setbrk() - Set BRK Interrupt Address ;Args: Y = Address MSB ; X = Address LSB ;Returns: A = $00 - Successfully Set SETBRK: SEI ;Disable Interrupts STX $03F0 ;Store Address in Soft Rreak Vector STY $03F1 CLI ;Enable Interrupts LDA #$00 ;Return Success RTS ;setrst() - Set RST Interrupt Address ;Args: Y = Address MSB ; X = Address LSB ;Returns: A = $00 If Autostart ROM (Success) ; $7F If Monitor ROM (Failure) SETRST: JSR GETRSC ;Check ROM Version BNE SETRSX ;If Autostart ROM SEI ; Disable Interrupts STX $03F2 ; Store Address in Soft Reset Vector STY $03F3 CLI ; Enable Interrupts SETRSX: RTS ;setnmi() - Set NMI Interrupt Address ;Args: Y = Address MSB ; X = Address LSB ;Returns: A = $00 - Successfully Set SETNMI: SEI ;Disable Interrupts STX $03FB ;Store Address in NMI vector STY $03FC CLI ;Enable Interrupts LDA #$00 ;Return Success RTS ;setirq() - Set Maskable Interrupt Address ;Args: Y = Address MSB ; X = Address LSB ;Returns: A = $00 - Successfully Set SETIRQ: SEI ;Disable Interrupts STX $03FE ;Store Address in ???? STY $03FF CLI ;Enable Interrupts LDA #$00 RTS