chiark / gitweb /
better resolution of interrupt causes in debug version
[trains.git] / detpic / program.asm
index 0126bdf2773214892f8ab085e5b635f194b3776b..62e58385bf052ddfa8675c96f80f8d99d1f354de 100644 (file)
@@ -9,24 +9,10 @@
 
 ;----------------------------------------
 vector_reset @
-
- set_f qqTRISA
- set_f qqTRISB
- set_f qqTRISC
- set_f qqTRISD
- set_f qqTRISE
- mov_lw 0xaa
- mov_wf qqLATA
- mov_wf qqLATB
- mov_wf qqLATC
- mov_wf qqLATD
- mov_wf qqLATE
-
        clr_f   INTCON
        bs_f    RCON, IPEN      ; interrupt priorities
 
        call    idlocs_init
-       clr_f   flags
 
        bt_f_if0 idloc1,idloc1_master
        call    slave_init
@@ -71,6 +57,8 @@ intrl_handled_routine @
 ;----------------------------------------
 master_init
 ; Master-specific initialisation.
+       call    memory_erase
+       clr_f   flags
        call    serial_init
        call    i2cm_init
        call    serialtxbuf_init
@@ -81,13 +69,23 @@ master_init
        call    serialtxfc_init
        call    mascan_init
        call    tick_init
+       call    cdu_init
        call    power_polarising_init
        call    power_fault_init
+       call    watchdog_init
        return
 
 ;----------------------------------------
 master_interrupt_low @
        enter_interrupt_low
+       Dl 0x80
+       Df      INTCON
+       Df      INTCON2
+       Df      INTCON3
+       Df      PIR1
+       Df      PIR2
+       Df      PIR3
+       Dl 0x8d
        call    tick_intrl
        call    nmra_serialrx_intrl
        call    power_fault_intrl
@@ -95,11 +93,24 @@ master_interrupt_low @
        call    serialtx_intrl
        call    points_local_intrl
        call    i2cm_intrl
+       Dl 0x8e
+       Df      INTCON
+       Df      INTCON2
+       Df      INTCON3
+       Df      PIR1
+       Df      PIR2
+       Df      PIR3
+       Dl 0x8f
        panic   morse_IL
 
 ;----------------------------------------------------------------------
 serialrx_table_section code    0x2000
 
+;--------------------
+command_tellmode
+       mov_lw  0x09
+       goto    serial_addbyte
+
 ;--------------------
 serialrx_generalmsg @
 ;command_<something>  has same calling convention:
@@ -111,10 +122,12 @@ serialrx_generalmsg @
        bra_n   serialrx_if_multibyte
        bra_z   command_crashed
 
-       xor_lw  0x21
+       xor_lw  0x11
        bra_z   command_power_on
-       xor_lw  0x01
+       xor_lw  0x10 ^ 0x11
        bra_z   command_power_off
+       xor_lw  0x0a ^ 0x10
+       bra_z   command_tellmode
        bra     serialrx_bad
 
 ;-----
@@ -128,7 +141,7 @@ serialrx_if_multibyte
                goto    serialrx_bad            ; 1 0000 xxx
        goto    command_ping            ; 1 0001 xxx
        goto    command_polarity        ; 1 0010 xxx
-       goto    serialrx_bad            ; 1 0011 xxx
+       goto    command_watchdog        ; 1 0011 xxx
        goto    command_point           ; 1 0100 xxx
        goto    serialrx_bad            ; 1 0101 xxx
        goto    serialrx_bad            ; 1 0110 xxx
@@ -165,6 +178,8 @@ command_ping_bad panic morse_HP
 ;----------------------------------------
 slave_init
 ; Slave-specific initialisation.
+       clr_f   flags
+
        mov_fw  picno
        call    i2cs_init