Mercurial > hg > Members > kono > nitros9-code
comparison level1/modules/scbbt.asm @ 1942:b41df77588b0
printer is now scbbp
sio is now scbbt
All references changed in various files
author | boisy |
---|---|
date | Sat, 26 Nov 2005 22:51:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1941:f408295c1f0a | 1942:b41df77588b0 |
---|---|
1 ******************************************************************** | |
2 * scbbt - CoCo Bit-Banger Terminal Driver | |
3 * | |
4 * $Id$ | |
5 * | |
6 * Edt/Rev YYYY/MM/DD Modified by | |
7 * Comment | |
8 * ------------------------------------------------------------------ | |
9 * 9 ????/??/?? ??? | |
10 * Original Tandy L2 distribution version. | |
11 * | |
12 * 10 ????/??/?? ??? | |
13 * Added baud delay table for NitrOS-9. | |
14 * | |
15 * 11 2003/12/15 Boisy G. Pitre | |
16 * Merged Level 1 and Level 2 sources for now. | |
17 | |
18 nam scbbt | |
19 ttl CoCo Bit-Banger Terminal Driver | |
20 | |
21 * Disassembled 98/08/23 20:58:36 by Disasm v1.6 (C) 1988 by RML | |
22 | |
23 ifp1 | |
24 use defsfile | |
25 endc | |
26 | |
27 tylg set Drivr+Objct | |
28 atrv set ReEnt+rev | |
29 rev set $00 | |
30 edition set 9 | |
31 | |
32 mod eom,name,tylg,atrv,start,size | |
33 | |
34 fcb UPDAT. | |
35 | |
36 name fcs /scbbt/ | |
37 fcb edition | |
38 | |
39 IFGT Level-1 | |
40 | |
41 u0000 rmb 29 | |
42 u001D rmb 1 | |
43 u001E rmb 1 | |
44 u001F rmb 1 | |
45 u0020 rmb 2 | |
46 u0022 rmb 2 | |
47 u0024 rmb 1 | |
48 u0025 rmb 1 | |
49 size equ . | |
50 | |
51 * Baud Rate Delay Table | |
52 DelayTbl | |
53 IFEQ H6309 | |
54 * 6809 delay values (1.89MHz) | |
55 fdb $090C 110 baud | |
56 fdb $034C 300 baud | |
57 fdb $01A2 600 baud | |
58 fdb $00CE 1200 baud | |
59 fdb $0062 2400 baud | |
60 fdb $002E 4800 baud | |
61 fdb $0012 9600 baud | |
62 fdb $0003 32000 baud | |
63 ELSE | |
64 * 6309 native mode delay values (1.89MHz) | |
65 fdb $090C 110 baud (Unchanged, unknown) | |
66 fdb $03D0 300 baud | |
67 fdb $01A2 600 baud (Unchanged, unknown) | |
68 fdb $00F0 1200 baud | |
69 fdb $0073 2400 baud | |
70 fdb $0036 4800 baud | |
71 fdb $0017 9600 baud | |
72 fdb $0003 32000 baud (Unchanged, unknown) | |
73 ENDC | |
74 | |
75 start lbra Init | |
76 lbra Read | |
77 lbra Write | |
78 lbra GetStat | |
79 lbra SetStat | |
80 lbra Term | |
81 | |
82 * Init | |
83 * | |
84 * Entry: | |
85 * Y = address of device descriptor | |
86 * U = address of device memory area | |
87 * | |
88 * Exit: | |
89 * CC = carry set on error | |
90 * B = error code | |
91 * | |
92 Init pshs cc | |
93 orcc #IntMasks | |
94 ldx #PIA1Base | |
95 clr $01,x | |
96 ldd <IT.COL,y get col/row bytes | |
97 std <u0024,u | |
98 lda #$FE | |
99 sta ,x | |
100 lda #$36 | |
101 sta $01,x | |
102 lda ,x | |
103 ldd <IT.PAR,y get parity/baud | |
104 lbsr L0148 | |
105 puls cc | |
106 clrb | |
107 | |
108 * Term | |
109 * | |
110 * Entry: | |
111 * U = address of device memory area | |
112 * | |
113 * Exit: | |
114 * CC = carry set on error | |
115 * B = error code | |
116 * | |
117 Term rts | |
118 | |
119 * Read | |
120 * | |
121 * Entry: | |
122 * Y = address of path descriptor | |
123 * U = address of device memory area | |
124 * | |
125 * Exit: | |
126 * A = character read | |
127 * CC = carry set on error | |
128 * B = error code | |
129 * | |
130 Read bsr L00AC | |
131 bcs L00C8 | |
132 ldb #$08 | |
133 pshs b,cc | |
134 tst <u001E,u | |
135 beq L0066 | |
136 dec $01,s | |
137 L0066 bra L0077 | |
138 L0068 lda <PD.BAU,y | |
139 anda #$0F | |
140 cmpa #$07 | |
141 beq L0077 | |
142 ldx #$0001 | |
143 os9 F$Sleep | |
144 L0077 pshs y | |
145 ldy #$FFFF | |
146 L007D lda >PIA1Base+2 | |
147 leay -$01,y | |
148 beq L008B | |
149 lsra | |
150 bcs L007D | |
151 puls y | |
152 bra L0090 | |
153 L008B puls y | |
154 lsra | |
155 bcs L0068 | |
156 L0090 orcc #IntMasks | |
157 clra | |
158 bsr L00D5 | |
159 L0095 bsr L00CE | |
160 ldb >PIA1Base+2 | |
161 lsrb | |
162 rora | |
163 dec $01,s | |
164 bne L0095 | |
165 bsr L00D5 | |
166 tst <u001E,u | |
167 beq L00A8 | |
168 lsra | |
169 L00A8 puls b,cc | |
170 clrb | |
171 rts | |
172 L00AC pshs a | |
173 lda <PD.BAU,y | |
174 anda #$0F | |
175 cmpa #$08 | |
176 bcc L00C4 | |
177 lsla | |
178 leax >DelayTbl,pcr | |
179 ldd a,x | |
180 std <u0020,u | |
181 clrb | |
182 puls pc,a | |
183 L00C4 ldb #E$BMode | |
184 puls a | |
185 L00C8 orcc #Carry | |
186 rts | |
187 L00CB stb >PIA1Base | |
188 L00CE pshs b,a | |
189 ldd <u0020,u | |
190 bra L00DC | |
191 L00D5 pshs b,a | |
192 ldd <u0020,u | |
193 lsra | |
194 rorb | |
195 L00DC subd #$0001 | |
196 bne L00DC | |
197 puls pc,b,a | |
198 | |
199 * Write | |
200 * | |
201 * Entry: | |
202 * A = character to write | |
203 * Y = address of path descriptor | |
204 * U = address of device memory area | |
205 * | |
206 * Exit: | |
207 * CC = carry set on error | |
208 * B = error code | |
209 * | |
210 Write bsr L00AC | |
211 bcs L00C8 | |
212 ldb #$09 | |
213 pshs b,cc | |
214 orcc #IntMasks | |
215 tst <u001E,u | |
216 beq L00F4 | |
217 dec $01,s | |
218 L00F4 andcc #^Carry | |
219 L00F6 ldb #$02 | |
220 bcs L00FB | |
221 clrb | |
222 L00FB bsr L00CB | |
223 lsra | |
224 dec $01,s | |
225 bne L00F6 | |
226 ldb <u001D,u | |
227 beq L010B | |
228 andb #$FE | |
229 bsr L00CB | |
230 L010B ldb #$02 | |
231 bsr L00CB | |
232 tst <u001F,u | |
233 beq L0118 | |
234 ldb #$02 | |
235 bsr L00CB | |
236 L0118 puls pc,b,cc | |
237 | |
238 * GetStat | |
239 * | |
240 * Entry: | |
241 * A = function code | |
242 * Y = address of path descriptor | |
243 * U = address of device memory area | |
244 * | |
245 * Exit: | |
246 * CC = carry set on error | |
247 * B = error code | |
248 * | |
249 GetStat cmpa #SS.EOF | |
250 bne L0120 | |
251 L011E clrb | |
252 rts | |
253 L0120 ldx PD.RGS,y | |
254 cmpa #SS.ScSiz | |
255 beq L0131 | |
256 cmpa #SS.ComSt | |
257 bne L017E | |
258 ldd <u0022,u | |
259 std R$Y,x | |
260 bra L011E | |
261 L0131 ldx PD.RGS,y | |
262 clra | |
263 ldb <u0024,u | |
264 std R$X,x | |
265 ldb <u0025,u | |
266 std R$Y,x | |
267 bra L011E | |
268 | |
269 * SetStat | |
270 * | |
271 * Entry: | |
272 * A = function code | |
273 * Y = address of path descriptor | |
274 * U = address of device memory area | |
275 * | |
276 * Exit: | |
277 * CC = carry set on error | |
278 * B = error code | |
279 * | |
280 SetStat cmpa #SS.ComSt | |
281 bne L017E | |
282 ldx PD.RGS,y | |
283 ldd R$Y,x | |
284 L0148 std <u0022,u | |
285 clra | |
286 clrb | |
287 std <u001D,u | |
288 sta <u001F,u | |
289 ldd <u0022,u | |
290 tstb | |
291 bpl L015C | |
292 inc <u001F,u | |
293 L015C bitb #$40 | |
294 bne L017A | |
295 bitb #$20 | |
296 beq L0167 | |
297 inc <u001E,u | |
298 L0167 bita #$20 | |
299 beq L0179 | |
300 bita #$80 | |
301 beq L017A | |
302 inc <u001D,u | |
303 bita #$40 | |
304 bne L0179 | |
305 inc <u001D,u | |
306 L0179 rts | |
307 L017A comb | |
308 ldb #E$BMode | |
309 rts | |
310 L017E comb | |
311 ldb #E$UnkSvc | |
312 rts | |
313 | |
314 ELSE | |
315 | |
316 rmb V.SCF | |
317 u001D rmb 1 | |
318 u001E rmb 1 | |
319 u001F rmb 1 | |
320 BaudCnt rmb 2 baud rate counter | |
321 u0022 rmb 2 | |
322 u0024 rmb 1 | |
323 u0025 rmb 1 | |
324 size equ . | |
325 | |
326 BaudTbl fdb $0482 110 baud | |
327 fdb $01A2 300 baud | |
328 fdb $00CD 600 baud | |
329 fdb $0063 1200 baud | |
330 fdb $002D 2400 baud | |
331 fdb $0013 4800 baud | |
332 fdb $0005 9600 baud | |
333 | |
334 start lbra Init | |
335 lbra Read | |
336 lbra Write | |
337 lbra GetStat | |
338 lbra SetStat | |
339 lbra Term | |
340 | |
341 * Init | |
342 * | |
343 * Entry: | |
344 * Y = address of device descriptor | |
345 * U = address of device memory area | |
346 * | |
347 * Exit: | |
348 * CC = carry set on error | |
349 * B = error code | |
350 * | |
351 Init pshs cc | |
352 orcc #IntMasks | |
353 ldx #PIA1Base | |
354 clr $01,x | |
355 ldd <IT.COL,y get col/row bytes | |
356 std <u0024,u | |
357 lda #$FE | |
358 sta ,x | |
359 lda #$36 | |
360 sta $01,x | |
361 lda ,x | |
362 ldd <IT.PAR,y get parity/baud | |
363 lbsr L014D | |
364 puls cc | |
365 clrb | |
366 | |
367 * Term | |
368 * | |
369 * Entry: | |
370 * U = address of device memory area | |
371 * | |
372 * Exit: | |
373 * CC = carry set on error | |
374 * B = error code | |
375 * | |
376 Term rts | |
377 | |
378 * Read | |
379 * | |
380 * Entry: | |
381 * Y = address of path descriptor | |
382 * U = address of device memory area | |
383 * | |
384 * Exit: | |
385 * A = character read | |
386 * CC = carry set on error | |
387 * B = error code | |
388 * | |
389 Read bsr L00B1 | |
390 bcs L00CD | |
391 ldb #$08 | |
392 pshs b,cc | |
393 tst <u001E,u | |
394 beq L0066 | |
395 dec $01,s | |
396 L0066 bra L006E | |
397 L0068 ldx #$0001 | |
398 os9 F$Sleep | |
399 L006E lda >PIA1Base+2 | |
400 lsra | |
401 pshs x,a | |
402 lda >$FF69 | |
403 bpl L0091 | |
404 lda >PIA1Base+3 | |
405 bita #$01 | |
406 beq L0091 | |
407 bita #$80 | |
408 beq L0091 | |
409 orcc #Entire | |
410 leax <L0091,pcr | |
411 pshs x | |
412 pshs u,y,x,dp,b,a,cc | |
413 jmp [D.SvcIRQ] | |
414 L0091 puls x,a | |
415 bcs L0068 | |
416 orcc #IntMasks | |
417 clra | |
418 bsr L00DA | |
419 L009A bsr L00D3 | |
420 ldb >PIA1Base+2 | |
421 lsrb | |
422 rora | |
423 dec $01,s | |
424 bne L009A | |
425 bsr L00DA | |
426 tst <u001E,u | |
427 beq L00AD | |
428 lsra | |
429 L00AD puls b,cc | |
430 clrb | |
431 rts | |
432 L00B1 pshs a | |
433 lda <PD.BAU,y | |
434 anda #$0F mask out baud rate | |
435 cmpa #B19200 | |
436 bcc L00C9 | |
437 lsla | |
438 leax >BaudTbl,pcr | |
439 ldd a,x | |
440 std <BaudCnt,u | |
441 clrb | |
442 puls pc,a | |
443 L00C9 ldb #E$BMode | |
444 puls a | |
445 L00CD orcc #Carry | |
446 rts | |
447 L00D0 stb >PIA1Base | |
448 L00D3 pshs b,a | |
449 ldd <BaudCnt,u | |
450 bra L00E1 | |
451 L00DA pshs b,a | |
452 ldd <BaudCnt,u | |
453 lsra | |
454 rorb | |
455 L00E1 subd #$0001 | |
456 bne L00E1 | |
457 puls pc,b,a | |
458 | |
459 * Write | |
460 * | |
461 * Entry: | |
462 * A = character to write | |
463 * Y = address of path descriptor | |
464 * U = address of device memory area | |
465 * | |
466 * Exit: | |
467 * CC = carry set on error | |
468 * B = error code | |
469 * | |
470 Write bsr L00B1 | |
471 bcs L00CD | |
472 ldb #$09 | |
473 pshs b,cc | |
474 orcc #IntMasks | |
475 tst <u001E,u | |
476 beq L00F9 | |
477 dec $01,s | |
478 L00F9 andcc #^Carry | |
479 L00FB ldb #$02 | |
480 bcs L0100 | |
481 clrb | |
482 L0100 bsr L00D0 | |
483 lsra | |
484 dec $01,s | |
485 bne L00FB | |
486 ldb <u001D,u | |
487 beq L0110 | |
488 andb #$FE | |
489 bsr L00D0 | |
490 L0110 ldb #$02 | |
491 bsr L00D0 | |
492 tst <u001F,u | |
493 beq L011D | |
494 ldb #$02 | |
495 bsr L00D0 | |
496 L011D puls pc,b,cc | |
497 | |
498 * GetStat | |
499 * | |
500 * Entry: | |
501 * A = function code | |
502 * Y = address of path descriptor | |
503 * U = address of device memory area | |
504 * | |
505 * Exit: | |
506 * CC = carry set on error | |
507 * B = error code | |
508 * | |
509 GetStat cmpa #SS.EOF | |
510 bne L0125 | |
511 L0123 clrb | |
512 rts | |
513 L0125 ldx PD.RGS,y | |
514 cmpa #SS.ScSiz | |
515 beq L0136 | |
516 cmpa #SS.ComSt | |
517 bne L0183 | |
518 ldd <u0022,u | |
519 std R$Y,x | |
520 bra L0123 | |
521 L0136 ldx PD.RGS,y | |
522 clra | |
523 ldb <u0024,u | |
524 std R$X,x | |
525 ldb <u0025,u | |
526 std R$Y,x | |
527 bra L0123 | |
528 | |
529 * SetStat | |
530 * | |
531 * Entry: | |
532 * A = function code | |
533 * Y = address of path descriptor | |
534 * U = address of device memory area | |
535 * | |
536 * Exit: | |
537 * CC = carry set on error | |
538 * B = error code | |
539 * | |
540 SetStat cmpa #SS.ComSt | |
541 bne L0183 | |
542 ldx PD.RGS,y | |
543 ldd R$Y,x | |
544 L014D std <u0022,u | |
545 clra | |
546 clrb | |
547 std <u001D,u | |
548 sta <u001F,u | |
549 ldd <u0022,u | |
550 tstb | |
551 bpl L0161 | |
552 inc <u001F,u | |
553 L0161 bitb #$40 | |
554 bne L017F | |
555 bitb #$20 | |
556 beq L016C | |
557 inc <u001E,u | |
558 L016C bita #$20 | |
559 beq L017E | |
560 bita #$80 | |
561 beq L017F | |
562 inc <u001D,u | |
563 bita #$40 | |
564 bne L017E | |
565 inc <u001D,u | |
566 L017E rts | |
567 L017F comb | |
568 ldb <E$BMode | |
569 rts | |
570 L0183 comb | |
571 ldb #E$UnkSvc | |
572 rts | |
573 | |
574 ENDC | |
575 | |
576 emod | |
577 eom equ * | |
578 end | |
579 |