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