From: ian Date: Sat, 10 May 2008 10:11:07 +0000 (+0000) Subject: wip new things X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=0f9f1e195b57508c0658a029e27008f0194c4f04;p=trains.git wip new things --- diff --git a/detpic/waggle.asm b/detpic/waggle.asm index b18b61e..ab56f0c 100644 --- a/detpic/waggle.asm +++ b/detpic/waggle.asm @@ -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