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