chiark / gitweb /
working on master program, serial despatch table, etc.; make master.asm compile to...
authorian <ian>
Mon, 19 Dec 2005 11:50:47 +0000 (11:50 +0000)
committerian <ian>
Mon, 19 Dec 2005 11:50:47 +0000 (11:50 +0000)
detpic/final.inc
detpic/master.asm
detpic/master.inc [new file with mode: 0644]
detpic/morse.messages
detpic/nmra-stream.fin [new file with mode: 0644]
detpic/panic.fin
detpic/power.asm
detpic/power.fin [new file with mode: 0644]

index 66e74ec09fba62e91429ca21eec8e73a97f1b3b7..947ef64d0073bab6373dc73656677ab3c1e86ce4 100644 (file)
@@ -13,5 +13,7 @@
  include ../iwjpictest/syncwrite.inc
  include reverse.fin
  include program.fin
+ include nmra-stream.fin
+ include power.fin
 
        end
index 698657343bcc22e21381af44ca2db2d9d4e6f8a2..87711aaf651b1bafae3ca2f391016f8cb96f6e59 100644 (file)
@@ -20,9 +20,11 @@ master
        call    serial_interrupts_init
        call    nmra_init
 
- fixme up to here
+ panic morse_TI4
+; fixme up to here
 
        call    detect_slave_init
+       clr_f   PCLATU
 
        bs_f    INTCON, GIEH
        bs_f    INTCON, GIEL
@@ -35,10 +37,85 @@ master
 ;----------
 master_interrupt_low
        enter_interrupt_low
-       call    serialrx_intrl
-       call    serialtx_intrl
+       call    nmra_serialrx_intrl
+       ;call   serialtx_intrl
        call    points_local_intrl
        call    i2cm_intrl
        panic   morse_IL
 
+serialrx_table_section code    0x2000
+;--------------------
+serialrx_generalmsg
+;  FSR0 ->     start of message
+;                              ; INDF0=MM ww ww ww ww ii ii ii
+       rlc_fw  INDF0           ; W =   ww ww ww ww ii ii ii ??  C=MM Z=00
+       bra_c   serialrx_if_multibyte
+       bra_z   command_crashed
+       ; single-byte non-0 command, has to be ON or OFF
+       ;       ie supposedly   ; INDF0=zz zz II zz zz zz zz PP  C=zz
+       rrc_fw  INDF0           ; W =   zz zz zz II zz zz zz zz  C=PP
+       xor_lw  0x10            ; W =   zz zz zz zz zz zz zz zz  C=PP Z=OK
+       bra_n   serialrx_bad
+       goto    command_power
+
+;-----
+serialrx_if_multibyte
+       rr_fw   INDF0           ; W =   ii MM ww ww ww ww ii ii
+       and_lw  0x3c            ; W =   zz zz ww ww ww ww zz zz
+       add_wff PCL
+       ; <--- here is zero
+
+               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_point           ; 1 0100 xxx
+       goto    serialrx_bad            ; 1 0101 xxx
+       goto    serialrx_bad            ; 1 0110 xxx
+               goto    serialrx_bad            ; 1 0111 xxx
+       goto    serialrx_bad            ; 1 1000 xxx
+       goto    serialrx_bad            ; 1 1001 xxx
+       goto    serialrx_bad            ; 1 1010 xxx
+       goto    serialrx_bad            ; 1 1011 xxx
+       goto    serialrx_bad            ; 1 1100 xxx
+       goto    serialrx_bad            ; 1 1101 xxx
+       goto    serialrx_bad            ; 1 1110 xxx
+       goto    serialrx_bad            ; 1 1111 xxx
+
+       goto    serialrx_bad    ; 0 0000 xxx
+       goto    serialrx_bad    ; 0 0001 xxx
+       goto    serialrx_bad    ; 0 0000 xxx
+
+;-----
+serialrx_bad
+       mov_ff  INDF0, t
+       panic   morse_HX
+
+;      bra_z   crashed_master_do
+;      mov_fw  INDF0
+;      bra_z   crashed_master_do
+; 
+;      serialrx_check 0x00, 0x21, command_power_on
+;      serialrx_check 0x21, 0x20, command_power_off
+; 
+;      and_lw  0xf8            ; W^0x20 =      MM ww ww ww  ww zz zz zz
+; 
+;      serialrx_check 0x00, 0xa0, point_master_do
+;      serialrx_check 0xa0, 0x88, ping_master_do
+;      serialrx_check 0x88, 0x90, polarity_master_do
+; 
+;      serialrx_check 0x90, 0x90, polarity_master_do
+; 
+;      mov_wf  t               ; t =           MM ww ww ww  ww zz zz zz
+; 
+;      xor_lw  0x
+; 
+;      and_lw
+
+
+;--------------------
+command_ping
+       panic   morse_UC
+
+;----------------------------------------------------------------------
  include final.inc
diff --git a/detpic/master.inc b/detpic/master.inc
new file mode 100644 (file)
index 0000000..2e98250
--- /dev/null
@@ -0,0 +1 @@
+; extern master
index 2111b5bdf80896d0626fa0ddeee7b92772d9a933..34c15e4cc56df89fc52bf51afa61ec1d088da486 100644 (file)
@@ -20,6 +20,7 @@
 
 # Miscellaneous
 E                              ; `expected'; we were told to panic
+HX     ::t                     ; host sent unknown command
 
 # Problematic interrupts
 IH     INTCON,INTCON3,PIR1,PIR2,PIR3 ; Interrupt source not found (high pri.)
@@ -40,6 +41,7 @@ X     test-sofar:ch           ; bad character received from host
 
 # Unimplemented things
 UP
+UC
 UL
 UM
 UE
diff --git a/detpic/nmra-stream.fin b/detpic/nmra-stream.fin
new file mode 100644 (file)
index 0000000..6253733
--- /dev/null
@@ -0,0 +1,4 @@
+ extern nmra_init
+ extern serial_init
+ extern serial_interrupts_init
+ extern nmra_serialrx_intrl
index 42d7ca11ac69325acbe783337b6c94e133d7d2a1..dfa3e9fec895e01a33892c4301667a647eab5cae 100644 (file)
@@ -5,3 +5,4 @@
  extern i2csu_write_panicd
  extern i2csu_read_begin_panicd
  extern i2csu_read_another_panicd
+ extern command_crashed
index 1be90177b08e9a151a307566dbfe68c0396d71e5..83bdab0b4ace5f79dc25c9a5e01df980291007e6 100644 (file)
@@ -1,5 +1,8 @@
 ;======================================================================
 
+command_power
+;  C           1 iff command is ON             undefined
+
 power_on ???
 ; from cebpic/nmra-stream.asm's setup
        bcf     PORTB,2,0       ; booster shutdown L
diff --git a/detpic/power.fin b/detpic/power.fin
new file mode 100644 (file)
index 0000000..fd73b2f
--- /dev/null
@@ -0,0 +1 @@
+ extern command_power