0
|
1 ********************************************************************
|
|
2 * ModPak - Tandy RS-232/DCM Modem Pak driver
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * Ed. Comments Who YY/MM/DD
|
|
7 * ------------------------------------------------------------------
|
|
8 * 12 Original Tandy distribution version
|
|
9 * 14 Obtained from L2 Upgrade archive BGP 98/10/12
|
|
10
|
|
11 nam ModPak
|
|
12 ttl Tandy RS-232/DCM Modem Pak driver
|
|
13
|
|
14 * Disassembled 98/08/24 23:06:22 by Disasm v1.6 (C) 1988 by RML
|
|
15
|
|
16 ifp1
|
|
17 use defsfile
|
|
18 use scfdefs
|
|
19 endc
|
|
20
|
|
21 tylg set Drivr+Objct
|
|
22 atrv set ReEnt+rev
|
|
23 rev set $01
|
|
24 edition set 14
|
|
25
|
|
26 mod eom,name,tylg,atrv,start,size
|
|
27
|
|
28 u0000 rmb 1
|
|
29 u0001 rmb 2
|
|
30 u0003 rmb 1
|
|
31 u0004 rmb 1
|
|
32 u0005 rmb 1
|
|
33 u0006 rmb 3
|
|
34 u0009 rmb 2
|
|
35 u000B rmb 1
|
|
36 u000C rmb 1
|
|
37 u000D rmb 1
|
|
38 u000E rmb 1
|
|
39 u000F rmb 1
|
|
40 u0010 rmb 6
|
|
41 u0016 rmb 1
|
|
42 u0017 rmb 6
|
|
43 u001D rmb 2
|
|
44 u001F rmb 2
|
|
45 u0021 rmb 2
|
|
46 u0023 rmb 2
|
|
47 u0025 rmb 2
|
|
48 u0027 rmb 2
|
|
49 u0029 rmb 2
|
|
50 u002B rmb 2
|
|
51 u002D rmb 1
|
|
52 u002E rmb 1
|
|
53 u002F rmb 1
|
|
54 u0030 rmb 1
|
|
55 u0031 rmb 1
|
|
56 u0032 rmb 1
|
|
57 u0033 rmb 1
|
|
58 u0034 rmb 1
|
|
59 u0035 rmb 1
|
|
60 u0036 rmb 1
|
|
61 u0037 rmb 1
|
|
62 u0038 rmb 1
|
|
63 u0039 rmb 1
|
|
64 u003A rmb 1
|
|
65 u003B rmb 2
|
|
66 u003D rmb 1
|
|
67 u003E rmb 1
|
|
68 u003F rmb 5
|
|
69 u0044 rmb 60
|
|
70 u0080 rmb 20
|
|
71 u0094 rmb 108
|
|
72 size equ .
|
|
73 fcb $03
|
|
74
|
|
75 name fcs /MODPAK/
|
|
76 fcb edition
|
|
77
|
|
78 start equ *
|
|
79 lbra Init
|
|
80 lbra Read
|
|
81 lbra Write
|
|
82 lbra GetStat
|
|
83 lbra SetStat
|
|
84 lbra Term
|
|
85 L0027 fcb $00,$80,$0a
|
|
86
|
|
87 * Init
|
|
88 *
|
|
89 * Entry:
|
|
90 * Y = address of device descriptor
|
|
91 * U = address of device memory area
|
|
92 *
|
|
93 * Exit:
|
|
94 * CC = carry set on error
|
|
95 * B = error code
|
|
96 *
|
|
97 Init pshs dp
|
|
98 lbsr L0330
|
|
99 ldd <IT.COL,y
|
|
100 std <u0039
|
|
101 ldd <IT.PAR,y
|
|
102 std <u0036
|
|
103 clr <u0038
|
|
104 lda <IT.XTYP,y
|
|
105 ldb <M$Opt,y
|
|
106 cmpb #$1C
|
|
107 bls L005D
|
|
108 sta <u0038
|
|
109 anda #$0F
|
|
110 beq L005D
|
|
111 ldb #$BB
|
|
112 stb <u002F
|
|
113 clrb
|
|
114 pshs u
|
|
115 os9 F$SRqMem
|
|
116 tfr u,x
|
|
117 puls u
|
|
118 bcs L00C0
|
|
119 bra L0068
|
|
120 L005D ldb #$4F
|
|
121 stb <u002F
|
|
122 clra
|
|
123 ldb #$6C
|
|
124 leax >u0094,u
|
|
125 L0068 std <u0025
|
|
126 stx <u0023
|
|
127 leax d,x
|
|
128 stx <u0027
|
|
129 subd #$0020
|
|
130 std <u002B
|
|
131 clra
|
|
132 ldb #$20
|
|
133 std <u0029
|
|
134 ldx <u0001
|
|
135 ldb #$0A
|
|
136 lda <u0038
|
|
137 bita #$40
|
|
138 beq L0086
|
|
139 orb #$01
|
|
140 L0086 stb $01,x
|
|
141 stb $02,x
|
|
142 ldd #$2040
|
|
143 tst <u0038
|
|
144 bpl L0093
|
|
145 exg a,b
|
|
146 L0093 std <u003D
|
|
147 ldd <u0036
|
|
148 lbsr L0271
|
|
149 ldd <u0001
|
|
150 addd #$0001
|
|
151 leax >L0027,pcr
|
|
152 leay >L0337,pcr
|
|
153 os9 F$IRQ
|
|
154 bcs L00C0
|
|
155 leay <u003F,u
|
|
156 lda #$80
|
|
157 sta $04,y
|
|
158 ldd #$0001
|
|
159 std $02,y
|
|
160 tfr d,x
|
|
161 os9 F$VIRQ
|
|
162 bcs L00C0
|
|
163 clrb
|
|
164 L00C0 puls pc,dp
|
|
165 L00C2 bsr L0110
|
|
166 bra L00CB
|
|
167
|
|
168 * Read
|
|
169 *
|
|
170 * Entry:
|
|
171 * Y = address of path descriptor
|
|
172 * U = address of device memory area
|
|
173 *
|
|
174 * Exit:
|
|
175 * A = character read
|
|
176 * CC = carry set on error
|
|
177 * B = error code
|
|
178 *
|
|
179 Read pshs dp
|
|
180 lbsr L0330
|
|
181 L00CB lda <u0031
|
|
182 bita #$10
|
|
183 beq L00E0
|
|
184 ldx <u0021
|
|
185 cmpx <u0029
|
|
186 bhi L00E0
|
|
187 lda #$A0
|
|
188 ldb #$05
|
|
189 lbsr L040D
|
|
190 sta <u0031
|
|
191 L00E0 tst <u0033
|
|
192 bne L015F
|
|
193 ldx <u001F
|
|
194 orcc #IntMasks
|
|
195 cmpx <u001D
|
|
196 beq L00C2
|
|
197 lda ,x
|
|
198 leax $01,x
|
|
199 cmpx <u0027
|
|
200 bcs L00F6
|
|
201 ldx <u0023
|
|
202 L00F6 stx <u001F
|
|
203 ldx <u0021
|
|
204 leax -$01,x
|
|
205 stx <u0021
|
|
206 ldb <u000E
|
|
207 lbeq L020F
|
|
208 clr <u000E
|
|
209 stb <$3A,y
|
|
210 andcc #^IntMasks
|
|
211 comb
|
|
212 ldb #E$Read
|
|
213 puls pc,dp
|
|
214
|
|
215 L0110 pshs x,b,a
|
|
216 lda >D.Proc
|
|
217 sta <u0005
|
|
218 L0117 ldx >D.Proc
|
|
219 lda P$State,x
|
|
220 ora #Suspend
|
|
221 sta P$State,x
|
|
222 andcc #^IntMasks
|
|
223 ldx #$0001
|
|
224 os9 F$Sleep
|
|
225 orcc #IntMasks
|
|
226 ldx >D.Proc
|
|
227 lda <P$Signal,x
|
|
228 beq L013C
|
|
229 cmpa #C$INTR
|
|
230 bls L0158
|
|
231 lda P$State,x
|
|
232 bita #Condem
|
|
233 bne L0158
|
|
234 L013C lda <u0005
|
|
235 bne L0117
|
|
236 andcc #^IntMasks
|
|
237 clra
|
|
238 lda P$State,x
|
|
239 bita #Condem
|
|
240 bne L0158
|
|
241 ldb #$DC
|
|
242 lda <u000E
|
|
243 bita #$20
|
|
244 bne L0153
|
|
245 puls pc,x,b,a
|
|
246
|
|
247 L0153 inc <$3F,y
|
|
248 clr <u000E
|
|
249 L0158 andcc #^IntMasks
|
|
250 leas $06,s
|
|
251 coma
|
|
252 puls pc,dp
|
|
253 L015F comb
|
|
254 ldb #$F6
|
|
255 puls pc,dp
|
|
256 L0164 bsr L0110
|
|
257 bra L016D
|
|
258
|
|
259 * Write
|
|
260 *
|
|
261 * Entry:
|
|
262 * A = character to write
|
|
263 * Y = address of path descriptor
|
|
264 * U = address of device memory area
|
|
265 *
|
|
266 * Exit:
|
|
267 * CC = carry set on error
|
|
268 * B = error code
|
|
269 *
|
|
270 Write pshs dp
|
|
271 lbsr L0330
|
|
272 L016D leax <u0044,u
|
|
273 ldb <u002E
|
|
274 abx
|
|
275 sta ,x
|
|
276 incb
|
|
277 cmpb <u002F
|
|
278 bls L017B
|
|
279 clrb
|
|
280 L017B orcc #IntMasks
|
|
281 cmpb <u002D
|
|
282 beq L0164
|
|
283 stb <u002E
|
|
284 lda <u0030
|
|
285 beq L0192
|
|
286 anda #$FD
|
|
287 sta <u0030
|
|
288 bne L0192
|
|
289 ldb #$05
|
|
290 lbsr L040D
|
|
291 L0192 bra L020F
|
|
292
|
|
293 * GetStat
|
|
294 *
|
|
295 * Entry:
|
|
296 * A = function code
|
|
297 * Y = address of path descriptor
|
|
298 * U = address of device memory area
|
|
299 *
|
|
300 * Exit:
|
|
301 * CC = carry set on error
|
|
302 * B = error code
|
|
303 *
|
|
304 GetStat pshs dp
|
|
305 lbsr L0330
|
|
306 ldx PD.RGS,y
|
|
307 cmpa #SS.Ready
|
|
308 bne L01AD
|
|
309 ldd <u0021
|
|
310 beq L015F
|
|
311 tsta
|
|
312 beq L01A8
|
|
313 ldb #$FF
|
|
314 L01A8 stb R$B,x
|
|
315 L01AA clrb
|
|
316 puls pc,dp
|
|
317 L01AD cmpa #SS.EOF
|
|
318 beq L01AA
|
|
319 cmpa #SS.ScSiz
|
|
320 beq L01D6
|
|
321 cmpa #SS.ComSt
|
|
322 beq L01D0
|
|
323 cmpa #SS.CDSta
|
|
324 bne L0214
|
|
325 lda <u0032
|
|
326 clrb
|
|
327 bita <u003D
|
|
328 beq L01C6
|
|
329 orb #$20
|
|
330 L01C6 bita <u003E
|
|
331 beq L01CC
|
|
332 orb #$40
|
|
333 L01CC stb $02,x
|
|
334 bra L01AA
|
|
335 L01D0 ldd <u0036
|
|
336 std R$Y,x
|
|
337 bra L01AA
|
|
338 L01D6 clra
|
|
339 ldb <u0039
|
|
340 std R$X,x
|
|
341 ldb <u003A
|
|
342 std R$Y,x
|
|
343 bra L01AA
|
|
344 L01E1 lda $05,y
|
|
345 ldb $05,x
|
|
346 orcc #IntMasks
|
|
347 std <u003B
|
|
348 bra L020F
|
|
349 L01EB leax <u003B,u
|
|
350 L01EE lda $05,y
|
|
351 cmpa ,x
|
|
352 bne L01AA
|
|
353 clr ,x
|
|
354 puls pc,dp
|
|
355
|
|
356 * SetStat
|
|
357 *
|
|
358 * Entry:
|
|
359 * A = function code
|
|
360 * Y = address of path descriptor
|
|
361 * U = address of device memory area
|
|
362 *
|
|
363 * Exit:
|
|
364 * CC = carry set on error
|
|
365 * B = error code
|
|
366 *
|
|
367 SetStat pshs dp
|
|
368 lbsr L0330
|
|
369 ldx PD.RGS,y
|
|
370 cmpa #SS.SSig
|
|
371 bne L0220
|
|
372 lda PD.CPR,y
|
|
373 ldb R$X+1,x
|
|
374 orcc #IntMasks
|
|
375 ldx <u0021
|
|
376 bne L0219
|
|
377 std <u0033
|
|
378 L020F clrb
|
|
379 andcc #^IntMasks
|
|
380 puls pc,dp
|
|
381 L0214 comb
|
|
382 ldb #E$UnkSvc
|
|
383 puls pc,dp
|
|
384 L0219 andcc #^IntMasks
|
|
385 os9 F$Send
|
|
386 bra L024D
|
|
387 L0220 cmpa #SS.HngUp
|
|
388 beq L025A
|
|
389 cmpa #SS.Relea
|
|
390 bne L022D
|
|
391 leax <u0033,u
|
|
392 bra L01EE
|
|
393 L022D cmpa #SS.CDSig
|
|
394 beq L01E1
|
|
395 cmpa #SS.CDRel
|
|
396 beq L01EB
|
|
397 cmpa #SS.ComSt
|
|
398 beq L026B
|
|
399 cmpa #SS.Break
|
|
400 bne L0250
|
|
401 ldx <u0001
|
|
402 lda $02,x
|
|
403 pshs x,a
|
|
404 ora #$0C
|
|
405 sta $02,x
|
|
406 bsr L0291
|
|
407 puls x,a
|
|
408 sta $02,x
|
|
409 L024D clrb
|
|
410 L024E puls pc,dp
|
|
411 L0250 cmpa #SS.Open
|
|
412 beq L0298
|
|
413 cmpa #SS.Close
|
|
414 beq L02CF
|
|
415 bra L0214
|
|
416 L025A lbsr L02DF
|
|
417 bcs L024E
|
|
418 bsr L0291
|
|
419 bra L029E
|
|
420 L0263 fcb $13,$16,$17,$18,$1a,$1c,$1e,$1f
|
|
421 L026B ldd $06,x
|
|
422 bsr L0271
|
|
423 L026F bra L024D
|
|
424 L0271 std <u0036
|
|
425 andb #$E0
|
|
426 pshs b
|
|
427 ldb <u0037
|
|
428 andb #$0F
|
|
429 leax <L0263,pcr
|
|
430 ldb b,x
|
|
431 orb ,s+
|
|
432 anda #$E0
|
|
433 sta <u0006
|
|
434 ldx <u0001
|
|
435 lda $02,x
|
|
436 anda #$1F
|
|
437 ora <u0006
|
|
438 std $02,x
|
|
439 rts
|
|
440 L0291 ldx #$0010
|
|
441 os9 F$Sleep
|
|
442 rts
|
|
443 L0298 lda $07,x
|
|
444 cmpa #$01
|
|
445 bne L024D
|
|
446 L029E ldb #$09
|
|
447 orcc #IntMasks
|
|
448 lbsr L040D
|
|
449 lda ,x
|
|
450 lda ,x
|
|
451 lda $01,x
|
|
452 ldb $01,x
|
|
453 ldb $01,x
|
|
454 bmi L02CA
|
|
455 lda #$02
|
|
456 sta <u0030
|
|
457 clra
|
|
458 andb #$60
|
|
459 std <u0031
|
|
460 clrb
|
|
461 std <u002D
|
|
462 std <u0021
|
|
463 std <u0033
|
|
464 ldx <u0023
|
|
465 stx <u001F
|
|
466 stx <u001D
|
|
467 lbra L020F
|
|
468 L02CA andcc #^IntMasks
|
|
469 lbra L015F
|
|
470 L02CF lda $07,x
|
|
471 bne L026F
|
|
472 bsr L02D7
|
|
473 puls pc,dp
|
|
474 L02D7 ldb #$0B
|
|
475 lda <u0038
|
|
476 bita #$40
|
|
477 bne L02E0
|
|
478 L02DF clrb
|
|
479 L02E0 bsr L02F0
|
|
480 bcs L02E0
|
|
481 bsr L02E8
|
|
482 clrb
|
|
483 rts
|
|
484 L02E8 orcc #IntMasks
|
|
485 lbsr L040D
|
|
486 andcc #^IntMasks
|
|
487 rts
|
|
488 L02F0 pshs dp
|
|
489 bra L02F7
|
|
490 L02F4 lbsr L0110
|
|
491 L02F7 lda <u002E
|
|
492 orcc #IntMasks
|
|
493 cmpa <u002D
|
|
494 bne L02F4
|
|
495 puls pc,dp
|
|
496
|
|
497 * Term
|
|
498 *
|
|
499 * Entry:
|
|
500 * Y = address of device descriptor
|
|
501 * U = address of device memory area
|
|
502 *
|
|
503 * Exit:
|
|
504 * CC = carry set on error
|
|
505 * B = error code
|
|
506 *
|
|
507 Term pshs dp
|
|
508 bsr L0330
|
|
509 ldx >D.Proc
|
|
510 lda P$ID,x
|
|
511 sta <u0004
|
|
512 sta <u0003
|
|
513 bsr L02D7
|
|
514 ldx #$0000
|
|
515 leay <u003F,u
|
|
516 os9 F$VIRQ
|
|
517 ldx #$0000
|
|
518 os9 F$IRQ
|
|
519 ldd <u0025
|
|
520 tsta
|
|
521 beq L032D
|
|
522 pshs u
|
|
523 ldu <u0023
|
|
524 os9 F$SRtMem
|
|
525 puls u
|
|
526 L032D clrb
|
|
527 puls pc,dp
|
|
528 L0330 pshs u
|
|
529 puls dp
|
|
530 leas $01,s
|
|
531 rts
|
|
532
|
|
533 L0337 pshs dp
|
|
534 bsr L0330
|
|
535 ldx <u0001
|
|
536 sta <u0035
|
|
537 tfr a,b
|
|
538 andb #$60
|
|
539 cmpb <u0032
|
|
540 beq L0392
|
|
541 tfr b,a
|
|
542 eorb <u0032
|
|
543 sta <u0032
|
|
544 lda <u0035
|
|
545 bitb <u003D
|
|
546 beq L037F
|
|
547 tst <u003B
|
|
548 beq L0362
|
|
549 pshs b,a
|
|
550 ldd <u003B
|
|
551 clr <u003B
|
|
552 os9 F$Send
|
|
553 puls b,a
|
|
554 L0362 bita <u003D
|
|
555 beq L037F
|
|
556 lda <u0036
|
|
557 bita #$10
|
|
558 beq L03B2
|
|
559 ldx <u0016
|
|
560 beq L0378
|
|
561 L0370 inc <$3F,x
|
|
562 ldx <$3D,x
|
|
563 bne L0370
|
|
564 L0378 lda #$20
|
|
565 lbsr L0415
|
|
566 bra L03E8
|
|
567 L037F bitb <u003E
|
|
568 beq L03DC
|
|
569 ldb <u0036
|
|
570 bitb #$01
|
|
571 beq L03DC
|
|
572 bita <u003E
|
|
573 lbeq L041A
|
|
574 lbra L0428
|
|
575 L0392 bita #$08
|
|
576 bne L03FB
|
|
577 bita #$10
|
|
578 beq L03DC
|
|
579 lda <u0031
|
|
580 bpl L03B4
|
|
581 ldb <u000F
|
|
582 bita #$20
|
|
583 bne L03A8
|
|
584 lda #$10
|
|
585 ldb <u0010
|
|
586 L03A8 stb ,x
|
|
587 anda #$10
|
|
588 sta <u0031
|
|
589 lda <u0030
|
|
590 bne L03D6
|
|
591 L03B2 bra L03DC
|
|
592 L03B4 ldb <u002D
|
|
593 cmpb <u002E
|
|
594 beq L03D0
|
|
595 leax <u0044,u
|
|
596 abx
|
|
597 lda ,x
|
|
598 ldx <u0001
|
|
599 incb
|
|
600 cmpb <u002F
|
|
601 bls L03C8
|
|
602 clrb
|
|
603 L03C8 stb <u002D
|
|
604 sta ,x
|
|
605 cmpb <u002E
|
|
606 bne L03E8
|
|
607 L03D0 lda <u0030
|
|
608 ora #$02
|
|
609 sta <u0030
|
|
610 L03D6 ldb #$09
|
|
611 bsr L040F
|
|
612 bra L03E8
|
|
613 L03DC ldx <u0001
|
|
614 puls dp
|
|
615 lda $01,x
|
|
616 lbmi L0337
|
|
617 clrb
|
|
618 rts
|
|
619 L03E8 tst <u0005
|
|
620 beq L03DC
|
|
621 lda <u0005
|
|
622 clrb
|
|
623 stb <u0005
|
|
624 tfr d,x
|
|
625 lda $0C,x
|
|
626 anda #$F7
|
|
627 sta $0C,x
|
|
628 bra L03DC
|
|
629 L03FB bita #$07
|
|
630 beq L0436
|
|
631 tst ,x
|
|
632 anda #$07
|
|
633 bsr L0415
|
|
634 ldd $02,x
|
|
635 sta $01,x
|
|
636 std $02,x
|
|
637 bra L03DC
|
|
638 L040D ldx <u0001
|
|
639 L040F orb <u0006
|
|
640 stb $02,x
|
|
641 clrb
|
|
642 rts
|
|
643 L0415 ora <u000E
|
|
644 sta <u000E
|
|
645 rts
|
|
646 L041A lda <u0030
|
|
647 anda #$FE
|
|
648 sta <u0030
|
|
649 bne L03DC
|
|
650 ldb #$05
|
|
651 bsr L040F
|
|
652 bra L03DC
|
|
653 L0428 lda <u0030
|
|
654 bne L0430
|
|
655 ldb #$09
|
|
656 bsr L040F
|
|
657 L0430 ora #$01
|
|
658 sta <u0030
|
|
659 L0434 bra L03DC
|
|
660 L0436 lda ,x
|
|
661 beq L0454
|
|
662 cmpa <u000B
|
|
663 beq L04A1
|
|
664 cmpa <u000C
|
|
665 beq L04A5
|
|
666 cmpa <u000D
|
|
667 beq L0499
|
|
668 ldb <u0036
|
|
669 bitb #$08
|
|
670 beq L0454
|
|
671 cmpa <u000F
|
|
672 beq L041A
|
|
673 cmpa <u0010
|
|
674 beq L0428
|
|
675 L0454 ldx <u001D
|
|
676 sta ,x
|
|
677 leax $01,x
|
|
678 cmpx <u0027
|
|
679 bcs L0460
|
|
680 ldx <u0023
|
|
681 L0460 cmpx <u001F
|
|
682 bne L046B
|
|
683 lda #$04
|
|
684 bsr L0415
|
|
685 L0468 lbra L03E8
|
|
686 L046B stx <u001D
|
|
687 ldx <u0021
|
|
688 leax $01,x
|
|
689 stx <u0021
|
|
690 cmpx <u002B
|
|
691 bcs L048C
|
|
692 tst <u0031
|
|
693 bne L048C
|
|
694 bita #$04
|
|
695 beq L048C
|
|
696 lda <u0010
|
|
697 beq L048C
|
|
698 lda #$C0
|
|
699 sta <u0031
|
|
700 ldb #$05
|
|
701 lbsr L040D
|
|
702 L048C tst <u0033
|
|
703 beq L0468
|
|
704 ldd <u0033
|
|
705 clr <u0033
|
|
706 os9 F$Send
|
|
707 bra L0434
|
|
708 L0499 ldx <u0009
|
|
709 beq L0454
|
|
710 sta $08,x
|
|
711 bra L0454
|
|
712 L04A1 ldb #$03
|
|
713 bra L04A7
|
|
714 L04A5 ldb #$02
|
|
715 L04A7 pshs a
|
|
716 lda <u0003
|
|
717 os9 F$Send
|
|
718 puls a
|
|
719 bra L0454
|
|
720
|
|
721 emod
|
|
722 eom equ *
|
|
723 end
|