annotate level1/modules/dwread.asm @ 2330:8dc0e99eeeb6

Updated
author boisy
date Wed, 13 Jan 2010 05:22:53 +0000
parents 27f07aa0bca0
children f0977fc3f2d6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
1 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
2 *
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
3 * DWRead
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
4 * Receive a response from the DriveWire server.
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
5 * Times out if serial port goes idle for more than 1.4 (0.7) seconds.
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
6 * Serial data format: 1-8-N-1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
7 * 4/12/2009 by Darren Atkinson
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
8 *
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
9 * Entry:
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
10 * X = starting address where data is to be stored
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
11 * Y = number of bytes expected
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
12 *
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
13 * Exit:
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
14 * CC = carry set on framing error, Z set if all bytes received
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
15 * X = starting address of data received
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
16 * Y = checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
17 * U is preserved. All accumulators are clobbered
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
18 *
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
19
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
20
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
21 IFNE BAUD38400
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
22 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
23 * 38400 bps using 6809 code and timimg
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
24 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
25
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
26 DWRead clra ; clear Carry (no framing error)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
27 deca ; clear Z flag, A = timeout msb ($ff)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
28 tfr cc,b
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
29 pshs u,x,dp,b,a ; preserve registers, push timeout msb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
30 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
31 tfr a,dp ; set direct page to $FFxx
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
32 setdp $ff
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
33 leau ,x ; U = storage ptr
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
34 ldx #0 ; initialize checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
35 adda #2 ; A = $01 (serial in mask), set Carry
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
36
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
37 * Wait for a start bit or timeout
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
38 rx0010 bcc rxExit ; exit if timeout expired
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
39 ldb #$ff ; init timeout lsb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
40 rx0020 bita <BBIN ; check for start bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
41 beq rxByte ; branch if start bit detected
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
42 subb #1 ; decrement timeout lsb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
43 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
44 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
45 bcc rx0020 ; loop until timeout lsb rolls under
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
46 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
47 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
48 addb ,s ; B = timeout msb - 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
49 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
50 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
51 stb ,s ; store decremented timeout msb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
52 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
53 bne rx0010 ; loop if still no start bit
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
54
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
55 * Read a byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
56 rxByte leay ,-y ; decrement request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
57 ldd #$ff80 ; A = timeout msb, B = shift counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
58 sta ,s ; reset timeout msb for next byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
59 rx0030 exg a,a
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
60 nop
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
61 lda <BBIN ; read data bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
62 lsra ; shift into carry
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
63 rorb ; rotate into byte accumulator
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
64 lda #$01 ; prep stop bit mask
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
65 bcc rx0030 ; loop until all 8 bits read
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
66
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
67 stb ,u+ ; store received byte to memory
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
68 abx ; update checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
69 ldb #$ff ; set timeout lsb for next byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
70 anda <BBIN ; read stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
71 beq rxExit ; exit if framing error
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
72 leay ,y ; test request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
73 bne rx0020 ; loop if another byte wanted
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
74 lda #$03 ; setup to return SUCCESS
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
75
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
76 * Clean up, set status and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
77 rxExit leas 1,s ; remove timeout msb from stack
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
78 inca ; A = status to be returned in C and Z
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
79 ora ,s ; place status information into the..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
80 sta ,s ; ..C and Z bits of the preserved CC
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
81 leay ,x ; return checksum in Y
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
82 puls cc,dp,x,u,pc ; restore registers and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
83 setdp $00
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
84
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
85
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
86 ELSE
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
87 IFNE H6309-1
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
88 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
89 * 57600 (115200) bps using 6809 code and timimg
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
90 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
91
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
92 DWRead clra ; clear Carry (no framing error)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
93 deca ; clear Z flag, A = timeout msb ($ff)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
94 tfr cc,b
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
95 pshs u,x,dp,b,a ; preserve registers, push timeout msb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
96 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
97 tfr a,dp ; set direct page to $FFxx
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
98 setdp $ff
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
99 leau ,x ; U = storage ptr
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
100 ldx #0 ; initialize checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
101 lda #$01 ; A = serial in mask
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
102 bra rx0030 ; go wait for start bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
103
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
104 * Read a byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
105 rxByte leau 1,u ; bump storage ptr
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
106 leay ,-y ; decrement request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
107 lda <BBIN ; read bit 0
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
108 lsra ; move bit 0 into Carry
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
109 ldd #$ff20 ; A = timeout msb, B = shift counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
110 sta ,s ; reset timeout msb for next byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
111 rorb ; rotate bit 0 into byte accumulator
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
112 rx0010 lda <BBIN ; read bit (d1, d3, d5)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
113 lsra
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
114 rorb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
115 bita 1,s ; 5 cycle delay
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
116 bcs rx0020 ; exit loop after reading bit 5
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
117 lda <BBIN ; read bit (d2, d4)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
118 lsra
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
119 rorb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
120 leau ,u
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
121 bra rx0010
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
122
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
123 rx0020 lda <BBIN ; read bit 6
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
124 lsra
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
125 rorb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
126 leay ,y ; test request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
127 beq rx0050 ; branch if final byte of request
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
128 lda <BBIN ; read bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
129 lsra
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
130 rorb ; byte is now complete
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
131 stb -1,u ; store received byte to memory
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
132 abx ; update checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
133 lda <BBIN ; read stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
134 anda #$01 ; mask out other bits
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
135 beq rxExit ; exit if framing error
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
136
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
137 * Wait for a start bit or timeout
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
138 rx0030 bita <BBIN ; check for start bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
139 beq rxByte ; branch if start bit detected
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
140 bita <BBIN ; again
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
141 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
142 ldb #$ff ; init timeout lsb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
143 rx0040 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
144 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
145 subb #1 ; decrement timeout lsb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
146 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
147 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
148 bcc rx0040 ; loop until timeout lsb rolls under
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
149 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
150 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
151 addb ,s ; B = timeout msb - 1
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
152 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
153 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
154 stb ,s ; store decremented timeout msb
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
155 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
156 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
157 bcs rx0030 ; loop if timeout hasn't expired
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
158 bra rxExit ; exit due to timeout
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
159
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
160 rx0050 lda <BBIN ; read bit 7 of final byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
161 lsra
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
162 rorb ; byte is now complete
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
163 stb -1,u ; store received byte to memory
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
164 abx ; calculate final checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
165 lda <BBIN ; read stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
166 anda #$01 ; mask out other bits
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
167 ora #$02 ; return SUCCESS if no framing error
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
168
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
169 * Clean up, set status and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
170 rxExit leas 1,s ; remove timeout msb from stack
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
171 inca ; A = status to be returned in C and Z
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
172 ora ,s ; place status information into the..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
173 sta ,s ; ..C and Z bits of the preserved CC
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
174 leay ,x ; return checksum in Y
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
175 puls cc,dp,x,u,pc ; restore registers and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
176 setdp $00
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
177
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
178
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
179 ELSE
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
180 *******************************************************
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
181 * 57600 (115200) bps using 6309 native mode
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
182 *******************************************************
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
183
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
184 DWRead clrb ; clear Carry (no framing error)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
185 decb ; clear Z flag, B = $FF
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
186 pshs u,x,dp,cc ; preserve registers
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
187 orcc #$50 ; mask interrupts
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
188 * ldmd #1 ; requires 6309 native mode
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
189 tfr b,dp ; set direct page to $FFxx
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
190 setdp $ff
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
191 leay -1,y ; adjust request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
192 leau ,x ; U = storage ptr
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
193 tfr 0,x ; initialize checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
194 lda #$01 ; A = serial in mask
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
195 bra rx0030 ; go wait for start bit
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
196
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
197 * Read a byte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
198 rxByte sexw ; 4 cycle delay
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
199 ldw #$006a ; shift counter and timing flags
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
200 clra ; clear carry so next will branch
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
201 rx0010 bcc rx0020 ; branch if even bit number (15 cycles)
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
202 nop ; extra (16th) cycle
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
203 rx0020 lda <BBIN ; read bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
204 lsra ; move bit into carry
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
205 rorb ; rotate bit into byte accumulator
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
206 lda #0 ; prep A for 8th data bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
207 lsrw ; bump shift count, timing bit to carry
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
208 bne rx0010 ; loop until 7th data bit has been read
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
209 incw ; W = 1 for subtraction from Y
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
210 inca ; A = 1 for reading bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
211 anda <BBIN ; read bit 7
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
212 lsra ; move bit 7 into carry, A = 0
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
213 rorb ; byte is now complete
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
214 stb ,u+ ; store received byte to memory
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
215 abx ; update checksum
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
216 subr w,y ; decrement request count
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
217 inca ; A = 1 for reading stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
218 anda <BBIN ; read stop bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
219 bls rxExit ; exit if completed or framing error
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
220
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
221 * Wait for a start bit or timeout
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
222 rx0030 clrw ; initialize timeout counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
223 rx0040 bita <BBIN ; check for start bit
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
224 beq rxByte ; branch if start bit detected
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
225 addw #1 ; bump timeout counter
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
226 bita <BBIN
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
227 beq rxByte
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
228 bcc rx0040 ; loop until timeout rolls over
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
229 lda #$03 ; setup to return TIMEOUT status
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
230
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
231 * Clean up, set status and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
232 rxExit beq rx0050 ; branch if framing error
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
233 eora #$02 ; toggle SUCCESS flag
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
234 rx0050 inca ; A = status to be returned in C and Z
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
235 ora ,s ; place status information into the..
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
236 sta ,s ; ..C and Z bits of the preserved CC
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
237 leay ,x ; return checksum in Y
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
238 puls cc,dp,x,u,pc ; restore registers and return
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
239 setdp $00
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
240
2182
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
241 ENDC
b1b374ada668 Added 38.4kbps routines from Darren Atkinson
boisy
parents: 2180
diff changeset
242 ENDC
2180
660cc987e18d Added DriveWire 3 modules to distribution
boisy
parents:
diff changeset
243
2231
27f07aa0bca0 Updated modules to use Darren Atkinson's latest changes to low level read/write routines
boisy
parents: 2182
diff changeset
244