32 extern uint8_t _load_start_FullDuplexSerial_cog[];
36 void *get_full_duplex_serial_driver () {
37 return _load_start_FullDuplexSerial_cog;
43 " .section .FullDuplexSerial.cog, \"ax\" \n"
50 " add t1, #(4 << 2) \n"
59 " rdlong rxtxmode, t1 \n"
61 " rdlong bitticks, t1 \n"
63 " rdlong rxbuff, t1 \n"
64 " mov txbuff, rxbuff \n"
65 " add txbuff, #$10 \n"
66 " test rxtxmode, #4 wz \n"
67 " test rxtxmode, #2 wc \n"
68 " if_z_ne_c or OUTA, txmask \n"
69 " if_z or DIRA, txmask \n"
70 " mov txcode, #((transmit-..start)/4) \n"
71 " wrlong zero, PAR \n"
74 " jmpret rxcode, txcode \n"
75 " test rxtxmode, #1 wz \n"
76 " test rxmask, INA wc \n"
77 " if_z_eq_c jmp #receive \n"
79 " mov rxcnt, bitticks \n"
84 " add rxcnt, bitticks \n"
87 " jmpret rxcode, txcode \n"
91 " if_nc jmp #Receive_wait \n"
92 " test rxmask, INA wc \n"
94 " djnz rxbits, #Receive_bit \n"
95 " shr rxdata, #($20 - 9) \n"
96 " and rxdata, #$ff \n"
97 " test rxtxmode, #1 wz \n"
98 " if_nz xor rxdata, #$ff \n"
101 " wrbyte rxdata, t2 \n"
109 " jmpret txcode, rxcode \n"
111 " add t1, #(2 << 2) \n"
113 " add t1, #(1 << 2) \n"
116 " if_z jmp #transmit \n"
118 " rdbyte txdata, t3 \n"
123 " or txdata, #$100 \n"
126 " mov txbits, #$b \n"
130 " test rxtxmode, #4 wz \n"
131 " test rxtxmode, #2 wc \n"
132 " if_z_and_c xor txdata, #1 \n"
133 " shr txdata, #1 wc \n"
134 " if_z muxc OUTA, txmask \n"
135 " if_nz muxnc DIRA, txmask \n"
136 " add txcnt, bitticks \n"
139 " jmpret txcode, rxcode \n"
143 " if_nc jmp #Transmit_wait \n"
144 " djnz txbits, #Transmit_bit \n"
200 " .compress default \n"