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