comparison level1/modules/rs232.asm @ 0:6641a883d6b0

Initial revision
author boisy
date Thu, 04 Apr 2002 16:34:12 +0000 (2002-04-04)
parents
children 668388823050
comparison
equal deleted inserted replaced
-1:000000000000 0:6641a883d6b0
1 ********************************************************************
2 * RS232 - CoCo bit-banger driver
3 *
4 * $Id$
5 *
6 * Ed. Comments Who YY/MM/DD
7 * ------------------------------------------------------------------
8 * 7 Tandy/Microware original version
9
10 nam RS232
11 ttl CoCo bit-banger driver
12
13 * Disassembled 98/08/23 17:32:49 by Disasm v1.6 (C) 1988 by RML
14
15 ifp1
16 use defsfile
17 use scfdefs
18 endc
19
20 tylg set Drivr+Objct
21 atrv set ReEnt+rev
22 rev set $01
23 edition set $07
24
25 mod eom,name,tylg,atrv,start,size
26
27 u0000 rmb 29
28 u001D rmb 1
29 u001E rmb 1
30 u001F rmb 1
31 u0020 rmb 2
32 u0022 rmb 2
33 u0024 rmb 1
34 u0025 rmb 1
35 size equ .
36 fcb $03
37
38 name fcs /RS232/
39 fcb edition
40
41 L0014 fcb $04
42 fcb $82
43 fcb $01
44 fcb $A2 "
45 fcb $00
46 fcb $CD M
47 fcb $00
48 fcb $63 c
49 fcb $00
50 fcb $2D -
51 fcb $00
52 fcb $13
53 fcb $00
54 fcb $05
55
56 start lbra Init
57 lbra Read
58 lbra Write
59 lbra GetStat
60 lbra SetStat
61 lbra Term
62
63 * Init
64 *
65 * Entry:
66 * Y = address of device descriptor
67 * U = address of device memory area
68 *
69 * Exit:
70 * CC = carry set on error
71 * B = error code
72 *
73 Init pshs cc
74 orcc #IntMasks
75 ldx #PIA.U8
76 clr $01,x
77 ldd <IT.COL,y get col/row bytes
78 std <u0024,u
79 lda #$FE
80 sta ,x
81 lda #$36
82 sta $01,x
83 lda ,x
84 ldd <IT.PAR,y get parity/baud
85 lbsr L014D
86 puls cc
87 clrb
88
89 * Term
90 *
91 * Entry:
92 * U = address of device memory area
93 *
94 * Exit:
95 * CC = carry set on error
96 * B = error code
97 *
98 Term rts
99
100 * Read
101 *
102 * Entry:
103 * Y = address of path descriptor
104 * U = address of device memory area
105 *
106 * Exit:
107 * A = character read
108 * CC = carry set on error
109 * B = error code
110 *
111 Read bsr L00B1
112 bcs L00CD
113 ldb #$08
114 pshs b,cc
115 tst <u001E,u
116 beq L0066
117 dec $01,s
118 L0066 bra L006E
119 L0068 ldx #$0001
120 os9 F$Sleep
121 L006E lda >PIA.U8+2
122 lsra
123 pshs x,a
124 lda >$FF69
125 bpl L0091
126 lda >PIA.U8+3
127 bita #$01
128 beq L0091
129 bita #$80
130 beq L0091
131 orcc #Entire
132 leax <L0091,pcr
133 pshs x
134 pshs u,y,x,dp,b,a,cc
135 jmp [D.SvcIRQ]
136 L0091 puls x,a
137 bcs L0068
138 orcc #IntMasks
139 clra
140 bsr L00DA
141 L009A bsr L00D3
142 ldb >PIA.U8+2
143 lsrb
144 rora
145 dec $01,s
146 bne L009A
147 bsr L00DA
148 tst <u001E,u
149 beq L00AD
150 lsra
151 L00AD puls b,cc
152 clrb
153 rts
154 L00B1 pshs a
155 lda <PD.BAU,y
156 anda #$0F
157 cmpa #$07
158 bcc L00C9
159 lsla
160 leax >L0014,pcr
161 ldd a,x
162 std <u0020,u
163 clrb
164 puls pc,a
165 L00C9 ldb #$CB
166 puls a
167 L00CD orcc #Carry
168 rts
169 L00D0 stb >PIA.U8
170 L00D3 pshs b,a
171 ldd <u0020,u
172 bra L00E1
173 L00DA pshs b,a
174 ldd <u0020,u
175 lsra
176 rorb
177 L00E1 subd #$0001
178 bne L00E1
179 puls pc,b,a
180
181 * Write
182 *
183 * Entry:
184 * A = character to write
185 * Y = address of path descriptor
186 * U = address of device memory area
187 *
188 * Exit:
189 * CC = carry set on error
190 * B = error code
191 *
192 Write bsr L00B1
193 bcs L00CD
194 ldb #$09
195 pshs b,cc
196 orcc #IntMasks
197 tst <u001E,u
198 beq L00F9
199 dec $01,s
200 L00F9 andcc #^Carry
201 L00FB ldb #$02
202 bcs L0100
203 clrb
204 L0100 bsr L00D0
205 lsra
206 dec $01,s
207 bne L00FB
208 ldb <u001D,u
209 beq L0110
210 andb #$FE
211 bsr L00D0
212 L0110 ldb #$02
213 bsr L00D0
214 tst <u001F,u
215 beq L011D
216 ldb #$02
217 bsr L00D0
218 L011D puls pc,b,cc
219
220 * GetStat
221 *
222 * Entry:
223 * A = function code
224 * Y = address of path descriptor
225 * U = address of device memory area
226 *
227 * Exit:
228 * CC = carry set on error
229 * B = error code
230 *
231 GetStat cmpa #SS.EOF
232 bne L0125
233 L0123 clrb
234 rts
235 L0125 ldx PD.RGS,y
236 cmpa #SS.ScSiz
237 beq L0136
238 cmpa #SS.ComSt
239 bne L0183
240 ldd <u0022,u
241 std R$Y,x
242 bra L0123
243 L0136 ldx PD.RGS,y
244 clra
245 ldb <u0024,u
246 std R$X,x
247 ldb <u0025,u
248 std R$Y,x
249 bra L0123
250
251 * SetStat
252 *
253 * Entry:
254 * A = function code
255 * Y = address of path descriptor
256 * U = address of device memory area
257 *
258 * Exit:
259 * CC = carry set on error
260 * B = error code
261 *
262 SetStat cmpa #SS.ComSt
263 bne L0183
264 ldx PD.RGS,y
265 ldd R$Y,x
266 L014D std <u0022,u
267 clra
268 clrb
269 std <u001D,u
270 sta <u001F,u
271 ldd <u0022,u
272 tstb
273 bpl L0161
274 inc <u001F,u
275 L0161 bitb #$40
276 bne L017F
277 bitb #$20
278 beq L016C
279 inc <u001E,u
280 L016C bita #$20
281 beq L017E
282 bita #$80
283 beq L017F
284 inc <u001D,u
285 bita #$40
286 bne L017E
287 inc <u001D,u
288 L017E rts
289 L017F comb
290 ldb <E$BMode
291 rts
292 L0183 comb
293 ldb #E$UnkSvc
294 rts
295
296 emod
297 eom equ *
298 end
299