chiark / gitweb /
wip new things
authorian <ian>
Sat, 10 May 2008 10:11:07 +0000 (10:11 +0000)
committerian <ian>
Sat, 10 May 2008 10:11:07 +0000 (10:11 +0000)
detpic/waggle.asm

index b18b61e91ee7af37bd8ab48d1cac626bb6af7963..ab56f0c72a6f2d22985fbaf61cd643ac56b06d48 100644 (file)
@@ -18,9 +18,9 @@ waggle_lpins_section udata waggle_lpins
 ;----------------------------------------
 ; MASTER - Access bank variables etc.
 
-  udata_acs
-waggle_picno           res     1
-waggle_message         res     1
+  udata_acs                            ; idle          busy
+waggle_message         res     1       ; 00000000      101 wwwwY
+waggle_slave           res     1       ; ????????      000 SSSss
 
 ;======================================================================
 ; LOCAL WAGGLERS
@@ -65,12 +65,16 @@ waggle_ifclear
        and_wff INDF0
        bra     waggle_local_done
 
+;----------
+waggle_nonexistent
+       panic   morse_AU
+
 ;----------------------------------------------------------------------
 ; LOCAL WAGGLERS -  INITIALISATION
 
 ;----------------------------------------
 wagglers_local_init
- outputs_local_init picno2wagglemap, maxwaggles, waggle_lpins, bkwaggleix2portbitnum
+ outputs_local_init picno2wagglemap, maxwaggles, waggle_lpins, bkwaggleix2portnumbitnum
        return
 
 ;======================================================================
@@ -82,88 +86,54 @@ wagglers_local_init
 command_waggle @
                                ;       ie              1010 1Yss
                                ;                       OSSS wwww
-       tst_f_ifnz wagglemsg
+       tst_f_ifnz waggle_message
        bra     command_waggle_busy
 
        mov_fw  POSTINC0                ; W =           1010 1Yss
        and_lw  0x03                    ; W =           0000 00ss
-       mov_lw  waggleslave             ; waggleslave = 0000 00ss
+       mov_lw  waggle_slave            ; slave =       0000 00ss
 
        rr_fw   INDF0                   ; W =           w0SSS www
        rr_w                            ; W =           ww0SSS ww
        and_lw  0x1c                    ; W =           000S SS00
-       add_wff waggleslave             ; waggleslave = 000S SSss  C = 0
+       add_wff waggle_slave            ; slave =       000S SSss  C = 0
 
                                        ;                          C = Y
        rlc_fw  INDF0                   ; W =           sss wwwwY  C = O
-       bra_cs  command_waggle_badmsg
+       bra_c   command_waggle_badmsg
        and_lw  0x1f                    ; W =           000 wwwwY
        ior_lw  0xa0                    ; W =           101 wwwwY
-       mov_wf  wagglemsg               ; wagglemsg =   101 wwwwY
+       mov_wf  waggle_message          ; message =     101 wwwwY
 
-       tst_f_ifnz waggleslave
+       tst_f_ifnz waggle_slave
        bra     waggle_local_do
        goto    i2c_needwrite
 
 ;----------
 waggle_needwrite @
-       rr_fw   pointslave
-       
-
-
-       rlc_fw  INDF0                   ; W =           sss wwww?  C = O
-       ; OK:                           ; W =           sss wwww?
-       and_lw  0x1f                    ; W =           000 wwww?
-       ior_lw  0xa0                    ; W =           101 wwww?
-       mov_wf  wagglemsg               ; wagglemsg =   101 wwww?
-
-       swap_fw INDF0                   ; W =           tttt 0ssT
-       and_lw  0x06                    ; W =           0000 0ss0
-       ior_wff pointslave              ; pointslave =  00SS Sss0
-
-       rr_fw   pointslave              ; W =           000S SSss
-       bra_nz  command_point_ifslave
-
-       mov_fw  pointmsg
-       goto    point_local_do
-
-command_point_badmsg panic morse_PX
-command_point_busy panic morse_PB
-command_point_cduempty panic morse_PC
-
-;----------------------------------------------------------------------
-points_master_init @
-
-
-
-
-
-                               ;       ie              1010 1Y__
-                               ;                       O__s ssss
-       tst_f_ifnz wagglemsg
-       bra     command_waggle_busy
-
-       rr_fw   POSTINC0                ; W =           _101 01Y_
-       swap_fw 
-
-       mov_fw  PREINC0                 ; F0->[1], W =  O__s ssss  N = O
-       bra_n   command_waggle_badmsg
-       and_lw  0x1f                    ; W =           000s ssss
-       mov_wf  waggleslave             ; slave =       000s ssss
-
-       
-
+       bt_f_if1 waggle_message, 7
+       return
+       pop
+       mov_fw  waggle_slave
+       goto    i2c_needwrite
 
+;----------
+waggle_getwritebyte @
+       mov_fw  waggle_slave
+       cmp_fw_ifne cwslave
+       return
+       ;...
+       mov_lw  0x04 ; WAGGLED
+       call    serial_addbyte
+       ; actually it's not waggled until the slave acks it but
+       ;  that's a foregone conclusion
 
+       mov_fw  waggle_message
+       clr_f   waggle_message
+       goto    i2c_getwritebyte_yes
 
-;;     rrc_f   POSTINC0                ; [0] =         ?1010 1Ys  C = s
-;;     swap_fw POSTDEC0                ; W =           wwww OSSS
-;;     rlc_w                           ; W =           www OSSSs  C = ?
-;;     rrc_f   INDF0                   ; [0] =         ??1010 1Y  C = s
-;;     rlc_w                           ; W =           ww OSSSss  C = ?
-;;     and_lw  0x1f                    ; W =           00 OSSSss
-;;     mov_wf  waggleslave             ; waggleslave = 00 OSSSss
+command_waggle_badmsg panic morse_AX
+command_waggle_busy panic morse_AB
 
-;;     swap_fw POSTINC0                ; W =           1Yss 1010
-;;     rl_w                            ; W =           Yss 10101
-;;     rlc_w                           ; W =           ss 10101?  C = Y
+;======================================================================
+  include final.inc