Snippets

ScorpionIlluminati Crash Handler

Created by ScorpionIlluminati last modified
I am writting a crash handler and want to display a crash screen when my game crashes. Some exceptions are not possible to trigger in normal certain curcumstances, but are included nevertheless as it's possible for them to occur due to abitary data execution due to the crash.

Do we need these?

Line 1010 Emulator - Keep
Line 1111 Emulator - Keep
Spurious Interrupt - Remove, Not Possible To Trigger
TRAPV, CHK & TRACE instruction vectors - Keep For Debug Use

Source: https://www.dropbox.com/s/94wn18h7qt4ly88/ExVecTab.pdf?dl=0
RegisterA0String:
      dc.b "A0: ",0

RegisterA1String:
      dc.b "A1: ",0

RegisterA2String:
      dc.b "A2: ",0

RegisterA3String:
      dc.b "A3: ",0

RegisterA4String:
      dc.b "A4: ",0

RegisterA5String:
      dc.b "A5: ",0

RegisterA6String:
      dc.b "A6: ",0

RegisterA7String:
      dc.b "A7: ",0

RegisterD0String:
      dc.b "D0: ",0

RegisterD1String:
      dc.b "D1: ",0

RegisterD2String:
      dc.b "D2: ",0

RegisterD3String:
      dc.b "D3: ",0

RegisterD4String:
      dc.b "D4: ",0

RegisterD5String:
      dc.b "D5: ",0

RegisterD6String:
      dc.b "D6: ",0

RegisterD7String:
      dc.b "D7: ",0

BusErrorString:
      dc.b "Bus Error",0

AddressErrorString:
      dc.b "Address Error",0

IllegalInstructionString:
      dc.b "Illegal Instruction",0

ZeroDivideString:
      dc.b "Zero Divide",0

CHKInstructionString:
      dc.b "CHK Instruction",0

TRAPVInstructionString:
      dc.b "TRAPV Instruction",0

PrivilegeViolationString:
      dc.b "Privilege Violation",0

TraceString:
      dc.b "Trace",0

LineAEmulatorString:
      dc.b "Line-A Emulator",0

LineFEmulatorString:
      dc.b "Line-F Emulator",0

Trap00ExceptionString:
      dc.b "Trap 00 Exception",0

Trap01ExceptionString:
      dc.b "Trap 01 Exception",0

Trap02ExceptionString:
      dc.b "Trap 02 Exception",0

Trap03ExceptionString:
      dc.b "Trap 03 Exception",0

Trap04ExceptionString:
      dc.b "Trap 04 Exception",0

Trap05ExceptionString:
      dc.b "Trap 05 Exception",0

Trap06ExceptionString:
      dc.b "Trap 06 Exception",0

Trap07ExceptionString:
      dc.b "Trap 07 Exception",0

Trap08ExceptionString:
      dc.b "Trap 08 Exception",0

Trap09ExceptionString:
      dc.b "Trap 09 Exception",0

Trap10ExceptionString:
      dc.b "Trap 10 Exception",0

Trap11ExceptionString:
      dc.b "Trap 11 Exception",0

Trap12ExceptionString:
      dc.b "Trap 12 Exception",0

Trap13ExceptionString:
      dc.b "Trap 13 Exception",0

Trap14ExceptionString:
      dc.b "Trap 14 Exception",0

Trap15ExceptionString:
      dc.b "Trap 15 Exception",0
      even
;==============================================================
;   BIG EVIL CORPORATION .co.uk
;==============================================================
;   SEGA Genesis Framework (c) Matt Phillips 2014
;==============================================================
;   interpts.asm - Interrupts and exceptions
;==============================================================

HBlankInterrupt:
   addi.l #0x1, hblank_counter    ; Increment hinterrupt counter
   rte

VBlankInterrupt:
   ; Backup registers
   movem.l d0-a7,-(sp)

   ; Cache Joypad inputs
   jsr ReadPadA
   jsr ReadPadB

   addi.l #0x1, vblank_counter    ; Increment vinterrupt counter
   TRAP #0 ; Sync with debugger - NOT FOR RELEASE

   ; Restore registers
   movem.l (sp)+,d0-a7
   rte

Exception:
   TRAP #0 ; Sync with debugger - NOT FOR RELEASE
   stop #$2700 ; Halt CPU
   TRAP #0 ; Sync with debugger - NOT FOR RELEASE
   jmp Exception
   rte

BusErrorException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l BusErrorString, (error_code)                                         ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

AddressErrorException:
   move.w 8(sp), (backup_pc)                                                   ; save pc state
   move.l AddressErrorString, (error_code)                                     ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

IllegalInstructionException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l IllegalInstructionString, (error_code)                               ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

ZeroDivideException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l ZeroDivideString, (error_code)                                       ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

CHKInstructionException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l CHKInstructionString, (error_code)                                   ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAPVInstructionException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAPVInstructionString, (error_code)                                 ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

PrivilegeViolationException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l PrivilegeViolationString, (error_code)                               ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRACEException:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRACEString, (error_code)                                            ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

LineAEmulator:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l LineAEmulatorString, (error_code)                                    ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

LineFEmulator:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l LineFEmulatorString, (error_code)                                    ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP00Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP00ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP01Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP01ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP02Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP02ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP03Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP03ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP04Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP04ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP05Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP05ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP06Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP06ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP07Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP07ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP08Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP08ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP09Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP09ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte
TRAP10Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP10ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP11Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP11ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP12Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP12ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP13Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP13ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP14Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP14ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

TRAP15Exception:
   move.w 2(sp), (backup_pc)                                                   ; save pc state
   move.l TRAP15ExceptionString, (error_code)                                  ; store error code in ram
   jmp CrashHandler_Init                                                       ; jump to crash handler
   stop #$2700                                                                 ; Halt CPU
   rte

NullInterrupt:
   rte

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.