2 # --register-prefix-optional --bitwise-or
4 .macro ldarg arg, stacksz, reg
5 move.l (4 + \arg * 4 + \stacksz)(%sp), \reg
8 .global burn10 /* u16 val */
16 .global write16_x16 /* u32 a, u16 count, u16 d */
37 # read single phase from controller
42 move.b #0x40,(0xa10003)
47 move.b #0x00,(0xa10003)
48 andi.w #0x3f,d1 /* 00CB RLDU */
52 andi.w #0xc0,d0 /* SA00 0000 */
58 eor.w d0,d1 /* changed btns */
59 move.w d0,d7 /* old val */
61 and.w d0,d1 /* what changed now */
67 movem.l d2-d7/a2, -(sp)
71 moveq.l #0, d4 /* d4 = count */
72 moveq.l #0, d5 /* d5 = vcnt_expect */
74 move.l #1<<(3+16), d7 /* d7 = SR_VB */
77 beq 0b /* not blanking */
85 bne 0b /* not line 0 */
89 move.l d6, (a2)+ /* d0 = old */
92 move.b (a1), d2 /* 8 d2 = vcnt */
93 cmp.b (a1), d2 /* 8 reread for corruption */
94 bne 0b /* 10 on changing vcounter? */
95 cmp.b d2, d5 /* 4 vcnt == vcnt_expect? */
97 move.l (a0), d0 /* 12 */
101 addq.l #1, d4 /* count++ */
104 bne 2f /* vcnt == vcnt_expect + 1 */
107 and.l d7, d1 /* (old ^ val) & vb */
109 move.l d0, d6 /* old = val */
112 2: /* vcnt jump or vb change */
113 move.l d6, (a2)+ /* *ram++ = old */
114 move.l d0, (a2)+ /* *ram++ = val */
115 move.b d2, d5 /* vcnt_expect = vcnt */
116 move.l d0, d6 /* old = val */
122 bne 1b /* still in VB */
124 move.l d0, (a2)+ /* *ram++ = val */
125 move.l d4, (a2)+ /* *ram++ = count */
127 movem.l (sp)+, d2-d7/a2
130 # vim:filetype=asmM68k:ts=4:sw=4:expandtab