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
;----------
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