; Justice Unlimited Gadget Microcode ; (C) 2004 Nathan (Acorn) Pooley ; ; gerror.inc ; ;@DOC@ handle errors ; ; ; error handling ; ;############################################ ;############### Errors ##################### ;############################################ ; ; NOTE: All errors should have bit 5 set to 0 ; ERROR_BASE EQU ~0x20 ; DF = 20 ERROR_BADINT EQU ERROR_BASE^0x01 ; DE = 21 ERROR_BADPC EQU ERROR_BASE^0x02 ; DD = 22 ERROR_HANG EQU ERROR_BASE^0x03 ; DC = 23 ERROR_OUT_PUTC EQU ERROR_BASE^0x04 ; DB = 24 #if 0 ERROR_OUT_PUTC_W EQU ERROR_BASE^0x05 ; DA = 25 ERROR_OUT_PUTC_B EQU ERROR_BASE^0x06 ; D9 = 26 ERROR_OUT_PUTC_WB EQU ERROR_BASE^0x07 ; D8 = 27 ERROR_OUT_WCOL EQU ERROR_BASE^0x08 ; D7 = 28 ERROR_OUT_BUS EQU ERROR_BASE^0x09 ; D6 = 29 #endif ERROR_OUT_HANG EQU ERROR_BASE^0x0a ; D5 = 2A ERROR_OUT_DIS EQU ERROR_BASE^0x0b ; D4 = 2B ERROR_OUT_EN EQU ERROR_BASE^0x0c ; D3 = 2C ERROR_TABLE EQU ERROR_BASE^0x0d ; D2 = 2D ERROR_JUMP EQU ERROR_BASE^0x0e ; D1 = 2E ERROR_MODE EQU ERROR_BASE^0x0f ; D0 = 2F ERROR_STRING EQU ERROR_BASE^0x10 ; CF = 30 ERROR_BAD_SC EQU ERROR_BASE^0x11 ; CE = 31 ERROR_STACKPOP EQU ERROR_BASE^0x12 ; CD = 32 ERROR_STACKPUSH EQU ERROR_BASE^0x13 ; CC = 33 ERROR_NEXTC EQU ERROR_BASE^0x14 ; CB = 34 ERROR_MAX EQU ERROR_BASE^0x1f ; max allowed error ; ; REPORT ERRORS ; When an error occurs hang and report condition ; on PORTA ; #if REPORT_ERRORS unknown_error: movlw ERROR_BASE error_loop: error_loop1: BREAKPOINT bp_error bcf b_gieh ; disable interrupts bcf b_giel goto soft_reset btfss b_error_occurred bra error_loop1 error_loop2: movwf v_errno bsf b_error_occurred clrf TRISA movwf PORTA rcall output_disable rcall input_disable DISABLE_DISPLAY clrf TRISA movf v_errno,w movwf PORTA DISABLE_IR LIGHT_OFF SOUND_OFF DISABLE_SPINNER rcall output_enable clrf v_putl_linenum rcall put_position_linestart PUT_CHAR 'E' PUT_CHAR 'R' PUT_CHAR 'R' PUT_CHAR 'O' PUT_CHAR 'R' PUT_CHAR ' ' movf v_errno,w rcall putnum_w error_loop3: nop bra error_loop3 ; ; unexpected interrupt occurred ; error_badint_low: movlw ERROR_BADINT bra error_loop ; ; program counter in bad place ; error_badpc: movlw ERROR_BADPC bra error_loop ; ; puts_nextc was called for last char in string ; error_nextc: movlw ERROR_NEXTC bra error_loop #if 0 ; ; wcol error in I2C transmission ; error_out_wcol: movlw ERROR_OUT_WCOL bra error_loop ; ; bus collision in I2C transmission ; error_out_bus: movlw ERROR_OUT_BUS bra error_loop #endif ; ; hung waiting for sspif ; error_out_hang: movlw ERROR_OUT_HANG bra error_loop ; ; Table crosses page boundary ; error_table: movlw ERROR_TABLE bra error_loop ; ; bad jump table index ; error_jump: movlw ERROR_JUMP bra error_loop ; ; bad mode ; error_mode: movlw ERROR_MODE bra error_loop ; ; stack pop underflow ; error_stackpop: movlw ERROR_STACKPOP bra error_loop ; ; stack push overflow ; error_stackpush: movlw ERROR_STACKPUSH bra error_loop ; ; bad string id ; error_string: movlw ERROR_STRING bra error_loop ; ; bad special character ; error_bad_sc: movlw ERROR_BAD_SC bra error_loop ; ; program was hung ; error_hang: movf v_hang_state,w addlw -ERROR_OUT_PUTC bz error_out_putc movf v_hang_state,w bnz error_loop movlw ERROR_HANG bra error_loop ; ; putc hung ; error_out_putc: movlw ERROR_OUT_PUTC #if 0 btfsc b_wcol iorlw ERROR_OUT_PUTC_W btfsc b_bclif iorlw ERROR_OUT_PUTC_B #endif bra error_loop ; ; DO NOT REPORT ERRORS ; When error occurs reset the chip ; #else unknown_error: error_badint_low: error_badpc: #if 0 error_out_wcol: error_out_bus: #endif error_out_hang: error_table: error_bad_sc: error_hang: error_out_putc: clrf INTCON ; disable interrupts bsf b_error ; signal error condition reset ; reset the chip #endif |
This file Copyright (C) 2004 by Nathan (Acorn) Pooley
Go to DRUID Development page
Go to DRUID page
Go to JU Gadgets page
Go to Justice Unlimited homepage
Go to Acorn's personal webpage
Contact Acorn
See comments from others
Post your own comments
File created by do_doc at Wed Aug 4 17:52:43 2004