0
|
1 ********************************************************************
|
|
2 * s16550_large - 16550 serial driver
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * Ed. Comments Who YY/MM/DD
|
|
7 * ------------------------------------------------------------------
|
|
8 * 28 Patched by Bob Brose to fix IRQ poll table BOB ??/??/??
|
|
9 * duplication bug
|
|
10
|
|
11 nam s16550
|
|
12 ttl os9 device driver
|
|
13
|
|
14 * Disassembled 02/04/02 22:41:55 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
|
|
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 2
|
|
33 u0008 rmb 1
|
|
34 u0009 rmb 1
|
|
35 u000A rmb 1
|
|
36 u000B rmb 1
|
|
37 u000C rmb 1
|
|
38 u000D rmb 1
|
|
39 u000E rmb 1
|
|
40 u000F rmb 1
|
|
41 u0010 rmb 4
|
|
42 u0014 rmb 2
|
|
43 u0016 rmb 3
|
|
44 u0019 rmb 2
|
|
45 u001B rmb 2
|
|
46 u001D rmb 1
|
|
47 u001E rmb 1
|
|
48 u001F rmb 1
|
|
49 u0020 rmb 1
|
|
50 u0021 rmb 1
|
|
51 u0022 rmb 1
|
|
52 u0023 rmb 2
|
|
53 u0025 rmb 2
|
|
54 u0027 rmb 1
|
|
55 u0028 rmb 1
|
|
56 u0029 rmb 1
|
|
57 u002A rmb 2
|
|
58 u002C rmb 2
|
|
59 u002E rmb 2
|
|
60 u0030 rmb 2
|
|
61 u0032 rmb 2
|
|
62 u0034 rmb 1
|
|
63 u0035 rmb 1
|
|
64 u0036 rmb 2
|
620
|
65 OutNxt rmb 2
|
0
|
66 u003A rmb 1
|
|
67 u003B rmb 1
|
|
68 u003C rmb 2
|
|
69 u003E rmb 2
|
|
70 u0040 rmb 1
|
|
71 u0041 rmb 2
|
|
72 u0043 rmb 1
|
|
73 u0044 rmb 52
|
|
74 u0078 rmb 8
|
|
75 u0080 rmb 128
|
|
76 U0100 rmb 0
|
|
77 size equ .
|
|
78
|
|
79 fcb $03
|
|
80
|
|
81 name fcs /s16550/
|
|
82 fcb 28
|
|
83
|
|
84 L0015 fcb $03
|
|
85
|
|
86 start lbra Init
|
|
87 lbra Read
|
|
88 lbra Write
|
|
89 lbra GetStat
|
|
90 lbra SetStat
|
|
91 lbra Term
|
|
92
|
620
|
93 * Init
|
|
94 *
|
|
95 * Entry:
|
|
96 * Y = address of device descriptor
|
|
97 * U = address of device memory area
|
|
98 *
|
|
99 * Exit:
|
|
100 * CC = carry set on error
|
|
101 * B = error code
|
|
102 *
|
0
|
103 Init clrb
|
|
104 pshs dp,b,cc
|
620
|
105 lbsr GetDP
|
0
|
106 ldd <u0001
|
|
107 addd #$0002
|
620
|
108 pshs y save Y
|
|
109 leax >IRQPkt,pcr
|
|
110 leay >IRQRtn,pcr
|
|
111 os9 F$IRQ install interrupt service routine
|
|
112 puls y restore Y
|
|
113 bcc L004A branch if ok
|
0
|
114 puls a,cc
|
620
|
115 orcc #Carry set error flag
|
|
116 puls pc,dp exit with error
|
|
117 L004A lda <M$Opt,y get option count byte
|
|
118 cmpa #$1C size of standard SCF?
|
|
119 bls L005F branch if lower/same
|
|
120 lda <$2E,y else grab driver specific byte
|
0
|
121 anda #$10
|
|
122 sta <u001F
|
|
123 lda <$2E,y
|
620
|
124 anda #$0F mask out %00001111
|
|
125 bne L0061 if not zero, A holds number of 256 byte pages to allocate
|
|
126 L005F lda #$01 else allocate 1 256 byte page
|
0
|
127 L0061 clrb
|
|
128 pshs u
|
620
|
129 os9 F$SRqMem allocate memory
|
|
130 tfr u,x transfer buffer start to X
|
0
|
131 puls u
|
|
132 bcc L0087
|
620
|
133 * Code here is in case of alloc error -- cleanup and return with error
|
0
|
134 stb $01,s
|
|
135 ldx #$0000
|
|
136 ldd <u0001
|
|
137 addd #$0002
|
|
138 pshs y
|
620
|
139 leay >IRQRtn,pcr
|
0
|
140 os9 F$IRQ
|
|
141 puls y
|
|
142 puls dp,b,cc
|
|
143 orcc #Carry
|
|
144 rts
|
620
|
145
|
|
146 * D = size of allocated buffer in bytes
|
|
147 L0087 stx <u0032 store buffer start in several pointers
|
0
|
148 stx <u002C
|
|
149 stx <u002E
|
|
150 std <u0036
|
620
|
151 leax d,x point at end of buffer
|
|
152 stx <u0030 store
|
|
153 tfr a,b transfer size hi byte to B
|
|
154 clra clear hi byte
|
|
155 orb #$02 OR original hi byte with 2
|
|
156 andb #$0E clear bit 0 (b = %0000XXX0)
|
0
|
157 lslb
|
|
158 lslb
|
|
159 lslb
|
|
160 lslb
|
|
161 tstb
|
|
162 bpl L00A3
|
|
163 ldb #$80
|
|
164 L00A3 pshs b,a
|
|
165 ldd <u0036
|
|
166 subd ,s++
|
|
167 std <u002A
|
|
168 leax <u0044,u
|
|
169 stx <u003E
|
620
|
170 stx <OutNxt
|
0
|
171 stx <u003A
|
|
172 leax >u0100,u
|
|
173 stx <u003C
|
|
174 ldd #$00BC
|
|
175 std <u0041
|
|
176 clr <u0034
|
|
177 clr <u0035
|
|
178 clr <u0040
|
|
179 ldd <$26,y
|
|
180 std <u001D
|
|
181 lbsr L0318
|
|
182 ldx <u0001
|
|
183 lda $05,x
|
|
184 lda ,x
|
|
185 lda $05,x
|
|
186 lda $06,x
|
|
187 anda #$B0
|
|
188 sta <u0020
|
|
189 clrb
|
|
190 bita #$10
|
|
191 bne L00E2
|
|
192 orb #$02
|
|
193 L00E2 bita #$20
|
|
194 bne L00E8
|
|
195 orb #$01
|
|
196 L00E8 stb <u0028
|
|
197 orcc #IntMasks
|
|
198 lda >L0015,pcr
|
|
199 bmi L00F5
|
|
200 sta >$FF7F
|
|
201 L00F5 lda >$FF23
|
|
202 anda #$FC
|
|
203 sta >$FF23
|
|
204 lda >$FF22
|
|
205 lda >$0092
|
|
206 ora #$01
|
|
207 sta >$0092
|
|
208 sta >$FF92
|
|
209 puls pc,dp,b,cc
|
620
|
210
|
0
|
211 Write clrb
|
|
212 pshs dp,b,cc
|
620
|
213 lbsr GetDP
|
|
214 ldx <OutNxt get address of next pos to save write char
|
|
215 sta ,x+ store char (A) at ,X and increment
|
|
216 cmpx <u003C less than end of buffer?
|
0
|
217 bcs L011D
|
|
218 ldx <u003E
|
620
|
219 L011D orcc #IntMasks mask interrupts
|
|
220 cmpx <u003A reached end of buffer?
|
|
221 bne L0138 nope, still more room
|
0
|
222 pshs x
|
|
223 lbsr L05AD
|
|
224 puls x
|
620
|
225 ldu >D.Proc
|
|
226 ldb <P$Signal,u get pending signal, if any
|
|
227 beq L0136 branch if none
|
|
228 cmpb #S$Intrpt interrupt?
|
|
229 bls L013E branch if lower or same
|
0
|
230 L0136 bra L011D
|
620
|
231 L0138 stx <OutNxt update next output position
|
|
232 inc <u0040 increment output buffer size
|
0
|
233 bsr L0140
|
|
234 L013E puls pc,dp,b,cc
|
|
235 L0140 lda #$0F
|
|
236 bra L0146
|
|
237 lda #$0D
|
620
|
238 L0146 ldx <V.Port
|
0
|
239 sta $01,x
|
|
240 rts
|
|
241
|
|
242 Read clrb
|
|
243 pshs dp,b,cc
|
620
|
244 lbsr GetDP
|
0
|
245 orcc #IntMasks
|
|
246 ldd <u0034
|
|
247 beq L0169
|
|
248 cmpd #$0010
|
|
249 lbne L018F
|
|
250 andcc #^IntMasks
|
|
251 bsr L01BD
|
|
252 L0163 orcc #IntMasks
|
|
253 ldd <u0034
|
|
254 bne L018F
|
|
255 L0169 lbsr L05AD
|
|
256 ldx >$0050
|
|
257 ldb <$19,x
|
|
258 beq L0178
|
|
259 cmpb #$03
|
|
260 bls L018A
|
|
261 L0178 ldb $0C,x
|
|
262 andb #$02
|
|
263 bne L018A
|
|
264 ldb <u000E
|
|
265 bne L01A6
|
|
266 ldb <u0005
|
|
267 beq L0163
|
|
268 orcc #IntMasks
|
|
269 bra L0169
|
|
270 L018A puls dp,a,cc
|
|
271 orcc #Carry
|
|
272 rts
|
|
273 L018F subd #$0001
|
|
274 std <u0034
|
|
275 ldx <u002E
|
|
276 lda ,x+
|
|
277 cmpx <u0030
|
|
278 bne L019E
|
|
279 ldx <u0032
|
|
280 L019E stx <u002E
|
|
281 andcc #^IntMasks
|
|
282 ldb <u000E
|
|
283 beq L01BB
|
|
284 L01A6 stb <$3A,y
|
|
285 clr <u000E
|
|
286 puls dp,a,cc
|
|
287 bitb #$20
|
|
288 beq L01B6
|
|
289 ldb #$F4
|
|
290 orcc #Carry
|
|
291 rts
|
|
292 L01B6 ldb #$DC
|
|
293 orcc #Carry
|
|
294 rts
|
|
295 L01BB puls pc,dp,b,cc
|
|
296 L01BD pshs cc
|
|
297 ldx <u0001
|
|
298 ldb <u0028
|
|
299 bitb #$70
|
|
300 beq L01D9
|
|
301 bitb #$20
|
|
302 beq L01DB
|
|
303 orcc #IntMasks
|
|
304 ldb <u0028
|
|
305 andb #$DF
|
|
306 stb <u0028
|
|
307 lda $04,x
|
|
308 ora #$02
|
|
309 sta $04,x
|
|
310 L01D9 puls pc,cc
|
|
311 L01DB bitb #$10
|
|
312 beq L01EF
|
|
313 orcc #IntMasks
|
|
314 ldb <u0028
|
|
315 andb #$EF
|
|
316 stb <u0028
|
|
317 lda $04,x
|
|
318 ora #$01
|
|
319 sta $04,x
|
|
320 bra L01D9
|
|
321 L01EF bitb #$40
|
|
322 beq L01D9
|
|
323 ldb <u000F
|
|
324 orcc #IntMasks
|
|
325 stb <u0043
|
|
326 lbsr L0140
|
|
327 ldb <u0028
|
|
328 andb #$BF
|
|
329 stb <u0028
|
|
330 bra L01D9
|
|
331
|
|
332 GetStat clrb
|
|
333 pshs dp,b,cc
|
620
|
334 lbsr GetDP
|
0
|
335 cmpa #$01
|
|
336 bne L0226
|
|
337 ldd <u0034
|
|
338 beq L021E
|
|
339 tsta
|
|
340 beq L0217
|
|
341 ldb #$FF
|
|
342 L0217 ldx $06,y
|
|
343 stb $02,x
|
|
344 lbra L0316
|
|
345 L021E puls b,cc
|
|
346 orcc #Carry
|
|
347 ldb #$F6
|
|
348 puls pc,dp
|
|
349 L0226 cmpa #$28
|
|
350 bne L024E
|
|
351 ldd <u001D
|
|
352 tst <u001F
|
|
353 beq L0236
|
|
354 bitb #$04
|
|
355 bne L0236
|
|
356 andb #$F7
|
|
357 L0236 ldx $06,y
|
|
358 std $08,x
|
|
359 clrb
|
|
360 lda <u0020
|
|
361 bita #$80
|
|
362 bne L0243
|
|
363 orb #$10
|
|
364 L0243 bita #$20
|
|
365 bne L0249
|
|
366 orb #$40
|
|
367 L0249 stb $02,x
|
|
368 lbra L0316
|
|
369 L024E cmpa #$06
|
|
370 bne L0256
|
|
371 clrb
|
|
372 lbra L0316
|
|
373 L0256 cmpa #$C1
|
|
374 bne L026F
|
|
375 ldx $06,y
|
|
376 ldd #$00BC
|
|
377 std $06,x
|
|
378 clra
|
|
379 ldb <u0040
|
|
380 std $08,x
|
|
381 ldb <u0028
|
|
382 andb #$07
|
|
383 stb $02,x
|
|
384 lbra L0316
|
|
385 L026F cmpa #$D0
|
|
386 bne L02DD
|
|
387 ldb <u000E
|
|
388 lbne L01A6
|
|
389 orcc #IntMasks
|
|
390 ldd <u0030
|
|
391 subd <u002E
|
|
392 cmpd <u0034
|
|
393 bcs L0288
|
|
394 ldd <u0034
|
|
395 beq L021E
|
|
396 L0288 andcc #^IntMasks
|
|
397 ldu $06,y
|
|
398 cmpd u0008,u
|
|
399 bls L0293
|
|
400 ldd u0008,u
|
|
401 L0293 std u0008,u
|
|
402 beq L02DB
|
|
403 pshs b,a
|
|
404 pshs u,y,x
|
|
405 std $02,s
|
|
406 ldd <u002E
|
|
407 std ,s
|
|
408 ldd u0006,u
|
|
409 std $04,s
|
|
410 ldx >$0050
|
|
411 ldb $06,x
|
|
412 lda >$00D0
|
|
413 puls u,y,x
|
|
414 orcc #IntMasks
|
|
415 os9 F$Move
|
|
416 ldd <u0034
|
|
417 subd ,s
|
|
418 std <u0034
|
|
419 andcc #^IntMasks
|
|
420 cmpd #$0010
|
|
421 bhi L02CD
|
|
422 addd ,s
|
|
423 cmpd #$0010
|
|
424 bls L02CD
|
|
425 lbsr L01BD
|
|
426 L02CD puls b,a
|
|
427 ldx <u002E
|
|
428 leax d,x
|
|
429 cmpx <u0030
|
|
430 bne L02D9
|
|
431 ldx <u0032
|
|
432 L02D9 stx <u002E
|
|
433 L02DB bra L0316
|
|
434 L02DD cmpa #$D2
|
|
435 bne L02F5
|
|
436 ldd #$0B04
|
|
437 ldy $06,y
|
|
438 std $01,y
|
|
439 ldd #$0077
|
|
440 std $06,y
|
|
441 ldd #$0001
|
|
442 std $08,y
|
|
443 bra L0316
|
|
444 L02F5 cmpa #$26
|
|
445 bne L030E
|
|
446 ldx $06,y
|
|
447 ldy $03,y
|
|
448 ldy $04,y
|
|
449 clra
|
|
450 ldb <$2C,y
|
|
451 std $06,x
|
|
452 ldb <$2D,y
|
|
453 std $08,x
|
|
454 bra L0316
|
|
455 L030E puls b,cc
|
|
456 orcc #Carry
|
|
457 ldb #$D0
|
|
458 puls pc,dp
|
|
459 L0316 puls pc,dp,b,cc
|
|
460 L0318 pshs u
|
|
461 tfr b,a
|
|
462 leau >L07E3,pcr
|
|
463 ldx <u0001
|
|
464 andb #$0F
|
|
465 lslb
|
|
466 lslb
|
|
467 leau b,u
|
|
468 lsra
|
|
469 lsra
|
|
470 lsra
|
|
471 lsra
|
|
472 lsra
|
|
473 eora #$03
|
|
474 anda #$03
|
|
475 pshs a,cc
|
|
476 lda <u001D
|
|
477 lsra
|
|
478 lsra
|
|
479 anda #$38
|
|
480 ora $01,s
|
|
481 sta $01,s
|
|
482 ora #$80
|
|
483 orcc #IntMasks
|
|
484 sta $03,x
|
|
485 ldd ,u++
|
|
486 exg a,b
|
|
487 std ,x
|
|
488 lda $01,s
|
|
489 sta $03,x
|
|
490 ldd ,u
|
|
491 sta <u0021
|
|
492 ora #$06
|
|
493 sta $02,x
|
|
494 stb <u0029
|
|
495 puls pc,u,a,cc
|
|
496
|
|
497 SetStat clrb
|
|
498 pshs dp,b,cc
|
620
|
499 lbsr GetDP
|
0
|
500 cmpa #$D1
|
|
501 lbne L03F5
|
|
502 ldu $06,y
|
|
503 ldx u0006,u
|
|
504 ldd u0008,u
|
|
505 pshs x,b,a
|
|
506 beq L03D3
|
|
507 L036F ldd <u003A
|
|
508 cmpd <u003E
|
|
509 bne L037D
|
|
510 ldd <u003C
|
|
511 subd #$0001
|
|
512 bra L0387
|
|
513 L037D subd #$0001
|
620
|
514 cmpd <OutNxt
|
0
|
515 bcc L0387
|
|
516 ldd <u003C
|
620
|
517 L0387 subd <OutNxt
|
0
|
518 beq L03D8
|
|
519 cmpd ,s
|
|
520 bls L0392
|
|
521 ldd ,s
|
|
522 L0392 pshs b,a
|
|
523 ldx >$0050
|
|
524 lda $06,x
|
|
525 ldb >$00D0
|
620
|
526 ldu <OutNxt
|
0
|
527 ldx $04,s
|
|
528 ldy ,s
|
|
529 orcc #IntMasks
|
|
530 os9 F$Move
|
|
531 ldd ,s
|
620
|
532 ldu <OutNxt
|
0
|
533 leau d,u
|
|
534 cmpu <u003C
|
|
535 bcs L03B5
|
|
536 ldu <u003E
|
620
|
537 L03B5 stu <OutNxt
|
0
|
538 clra
|
|
539 ldb <u0040
|
|
540 addd ,s
|
|
541 stb <u0040
|
|
542 andcc #^IntMasks
|
|
543 ldd ,s
|
|
544 ldx $04,s
|
|
545 leax d,x
|
|
546 stx $04,s
|
|
547 ldd $02,s
|
|
548 subd ,s++
|
|
549 std ,s
|
|
550 bne L036F
|
|
551 lbsr L0140
|
|
552 L03D3 leas $04,s
|
|
553 lbra L0543
|
|
554 L03D8 orcc #IntMasks
|
|
555 lbsr L0140
|
|
556 lbsr L05AD
|
|
557 ldx >$0050
|
|
558 ldb <$19,x
|
|
559 beq L03EC
|
|
560 cmpb #$03
|
|
561 bls L03D3
|
|
562 L03EC ldb $0C,x
|
|
563 andb #$02
|
|
564 bne L03D3
|
|
565 lbra L036F
|
|
566 L03F5 cmpa #$28
|
|
567 bne L0426
|
|
568 ldy $06,y
|
|
569 ldd $08,y
|
|
570 tst <u001F
|
|
571 beq L0408
|
|
572 bitb #$04
|
|
573 bne L0408
|
|
574 orb #$08
|
|
575 L0408 std <u001D
|
|
576 lbsr L0318
|
|
577 clr <u0022
|
|
578 tst <u000C
|
|
579 bne L0423
|
|
580 tst <u000B
|
|
581 bne L0423
|
|
582 tst <u000D
|
|
583 bne L0423
|
|
584 ldb <u001D
|
|
585 bitb #$04
|
|
586 bne L0423
|
|
587 inc <u0022
|
|
588 L0423 lbra L0543
|
|
589 L0426 cmpa #$2B
|
|
590 bne L0441
|
|
591 ldx <u0001
|
|
592 lda $04,x
|
|
593 pshs x,a
|
|
594 anda #$FE
|
|
595 sta $04,x
|
|
596 ldx #$001E
|
|
597 os9 F$Sleep
|
|
598 puls x,a
|
|
599 sta $04,x
|
|
600 lbra L0543
|
|
601 L0441 cmpa #$1D
|
|
602 bne L0491
|
|
603 orcc #IntMasks
|
|
604 ldx <u0001
|
|
605 lda <u0028
|
|
606 ora #$08
|
|
607 sta <u0028
|
|
608 lda #$0D
|
|
609 sta $01,x
|
|
610 clr <u0040
|
|
611 ldd <u003E
|
|
612 std <u003A
|
620
|
613 std <OutNxt
|
0
|
614 lda <u0021
|
|
615 ora #$04
|
|
616 sta $02,x
|
|
617 clra
|
|
618 sta ,x
|
|
619 L0464 lda $05,x
|
|
620 anda #$40
|
|
621 bne L0476
|
|
622 andcc #^IntMasks
|
|
623 ldx #$0001
|
|
624 os9 F$Sleep
|
|
625 ldx <u0001
|
|
626 bra L0464
|
|
627 L0476 lda $03,x
|
|
628 ora #$40
|
|
629 sta $03,x
|
|
630 ldx #$001E
|
|
631 os9 F$Sleep
|
|
632 ldx <u0001
|
|
633 anda #$BF
|
|
634 sta $03,x
|
|
635 lda <u0028
|
|
636 anda #$F7
|
|
637 sta <u0028
|
|
638 lbra L0543
|
|
639 L0491 cmpa #$C2
|
|
640 bne L04A7
|
|
641 ldb <u0028
|
|
642 andb #$F8
|
|
643 stb <u0028
|
|
644 tst <u0040
|
|
645 lbeq L0543
|
|
646 lbsr L0140
|
|
647 lbra L0543
|
|
648 L04A7 cmpa #$1A
|
|
649 bne L04C4
|
|
650 lda $05,y
|
|
651 ldy $06,y
|
|
652 ldb $07,y
|
|
653 orcc #IntMasks
|
|
654 ldx <u0034
|
|
655 bne L04BD
|
|
656 std <u0025
|
|
657 lbra L0543
|
|
658 L04BD puls cc
|
|
659 os9 F$Send
|
|
660 puls pc,dp,b
|
|
661 L04C4 cmpa #$1B
|
|
662 bne L04D5
|
|
663 lda $05,y
|
|
664 cmpa <u0025
|
|
665 bne L04D2
|
|
666 clra
|
|
667 clrb
|
|
668 std <u0025
|
|
669 L04D2 lbra L0543
|
|
670 L04D5 cmpa #$9A
|
|
671 bne L04E4
|
|
672 lda $05,y
|
|
673 ldy $06,y
|
|
674 ldb $07,y
|
|
675 std <u0023
|
|
676 bra L0543
|
|
677 L04E4 cmpa #$9B
|
|
678 bne L04F6
|
|
679 orcc #IntMasks
|
|
680 lda $05,y
|
|
681 cmpa <u0023
|
|
682 bne L04F4
|
|
683 clra
|
|
684 clrb
|
|
685 std <u0023
|
|
686 L04F4 bra L0543
|
|
687 L04F6 cmpa #$2A
|
|
688 lbne L0511
|
|
689 orcc #IntMasks
|
|
690 lda $05,y
|
|
691 ldx #$0000
|
|
692 cmpa <u0025
|
|
693 bne L0509
|
|
694 stx <u0025
|
|
695 L0509 cmpa <u0023
|
|
696 bne L050F
|
|
697 stx <u0023
|
|
698 L050F bra L0543
|
|
699 L0511 cmpa #$C3
|
|
700 bne L052B
|
|
701 orcc #IntMasks
|
|
702 ldb #$0D
|
|
703 stb $01,x
|
|
704 ldd <u003E
|
620
|
705 std <OutNxt
|
0
|
706 std <u003A
|
|
707 clr <u0040
|
|
708 ldb <u0021
|
|
709 orb #$04
|
|
710 stb $02,x
|
|
711 bra L0543
|
|
712 L052B cmpa #$29
|
|
713 bne L053B
|
|
714 ldx <u0001
|
|
715 lda #$03
|
|
716 sta $04,x
|
|
717 ldb #$0F
|
|
718 stb $01,x
|
|
719 bra L0543
|
|
720 L053B puls b,cc
|
|
721 orcc #Carry
|
|
722 ldb #$D0
|
|
723 puls pc,dp
|
|
724 L0543 puls pc,dp,b,cc
|
|
725
|
|
726 Term clrb
|
|
727 pshs dp,b,cc
|
620
|
728 lbsr GetDP
|
0
|
729 orcc #IntMasks
|
|
730 clra
|
|
731 clrb
|
|
732 std <u0034
|
|
733 ldx <u0032
|
|
734 stx <u002C
|
|
735 stx <u002E
|
|
736 pshs x,b,a
|
|
737 ldb $04,s
|
|
738 tfr b,cc
|
|
739 ldx >$0050
|
|
740 lda ,x
|
|
741 sta <u0004
|
|
742 sta <u0003
|
|
743 L0566 orcc #IntMasks
|
|
744 tst <u0040
|
|
745 bne L0576
|
|
746 ldx <u0001
|
|
747 ldb $05,x
|
|
748 eorb #$20
|
|
749 andb #$20
|
|
750 beq L0585
|
|
751 L0576 orcc #IntMasks
|
|
752 lbsr L05AD
|
|
753 ldd $02,s
|
|
754 std <u002C
|
|
755 ldd ,s
|
|
756 std <u0034
|
|
757 bra L0566
|
|
758 L0585 leas $04,s
|
|
759 clr $01,x
|
|
760 clr $04,x
|
|
761 andcc #^IntMasks
|
|
762 ldd <u0036
|
|
763 pshs u
|
|
764 ldu <u0032
|
|
765 os9 F$SRtMem
|
|
766 puls u
|
|
767 ldx #$0000
|
|
768 ldd <u0001
|
|
769 addd #$0002
|
|
770 pshs y
|
620
|
771 leay >IRQRtn,pcr
|
0
|
772 os9 F$IRQ
|
|
773 puls y
|
|
774 puls pc,dp,b,cc
|
|
775 L05AD ldd >$0050
|
|
776 sta <u0005
|
|
777 tfr d,x
|
|
778 lda $0C,x
|
|
779 ora #$08
|
|
780 sta $0C,x
|
|
781 andcc #^IntMasks
|
|
782 ldx #$0001
|
|
783 os9 F$Sleep
|
|
784 rts
|
620
|
785
|
|
786 * Transfer hi-byte of U to Direct Page
|
|
787 GetDP pshs u
|
0
|
788 puls dp
|
|
789 leas $01,s
|
|
790 rts
|
|
791
|
|
792 L05CA fdb $0160,$0115,$001b,$01bb,$0004,$0004,$002a
|
|
793
|
|
794 * IRQ Service Routine
|
620
|
795 IRQRtn fcb $5f
|
0
|
796 L05D8 pshs dp,b,cc
|
620
|
797 bsr GetDP
|
0
|
798 clr <u0027
|
|
799 ldy <u0001
|
|
800 ldb $02,y
|
|
801 bitb #$01
|
|
802 beq L05F4
|
|
803 tfr a,b
|
|
804 andb #$0E
|
|
805 bne L05F4
|
|
806 puls cc
|
|
807 orcc #Carry
|
|
808 puls pc,dp
|
|
809 L05F4 leax >L05CA,pcr
|
|
810 andb #$0E
|
|
811 abx
|
|
812 tfr pc,d
|
|
813 addd ,x
|
|
814 tfr d,pc
|
|
815 L0601 ldb $02,y
|
|
816 bitb #$01
|
|
817 beq L05F4
|
|
818 lda <u0005
|
|
819 beq L0616
|
|
820 clrb
|
|
821 stb <u0005
|
|
822 tfr d,x
|
|
823 lda $0C,x
|
|
824 anda #$F7
|
|
825 sta $0C,x
|
|
826 L0616 puls pc,dp,b,cc
|
|
827 ldx <u002C
|
|
828 lda $05,y
|
|
829 bmi L062B
|
|
830 ldb <u0029
|
|
831 L0620 bsr L0651
|
|
832 decb
|
|
833 bne L0620
|
|
834 bra L0629
|
|
835 ldx <u002C
|
|
836 L0629 lda $05,y
|
|
837 L062B bita #$1E
|
|
838 beq L0634
|
|
839 lbsr L07BF
|
|
840 bra L0629
|
|
841 L0634 bita #$01
|
|
842 beq L063C
|
|
843 L0638 bsr L0651
|
|
844 bra L0629
|
|
845 L063C tst <u0027
|
|
846 bne L064D
|
|
847 ldd <u0025
|
|
848 beq L064D
|
|
849 stb <u0027
|
|
850 os9 F$Send
|
|
851 clra
|
|
852 clrb
|
|
853 std <u0025
|
|
854 L064D stx <u002C
|
|
855 bra L0601
|
|
856 L0651 lda ,y
|
|
857 beq L0679
|
|
858 tst <u0022
|
|
859 bne L0679
|
|
860 cmpa <u000C
|
|
861 bne L0662
|
|
862 lda #$02
|
|
863 lbra L06FD
|
|
864 L0662 cmpa <u000B
|
|
865 bne L066B
|
|
866 lda #$03
|
|
867 lbra L06FD
|
|
868 L066B cmpa <u000F
|
|
869 beq L06E3
|
|
870 cmpa <u0010
|
|
871 beq L06F2
|
|
872 cmpa <u000D
|
|
873 lbeq L070A
|
|
874 L0679 pshs b
|
|
875 sta ,x+
|
|
876 cmpx <u0030
|
|
877 bne L0683
|
|
878 ldx <u0032
|
|
879 L0683 cmpx <u002E
|
|
880 bne L0697
|
|
881 ldb #$02
|
|
882 orb <u000E
|
|
883 stb <u000E
|
|
884 cmpx <u0032
|
|
885 bne L0693
|
|
886 ldx <u0030
|
|
887 L0693 leax -$01,x
|
|
888 bra L06A5
|
|
889 L0697 stx <u002C
|
|
890 ldd <u0034
|
|
891 addd #$0001
|
|
892 std <u0034
|
|
893 cmpd <u002A
|
|
894 beq L06A7
|
|
895 L06A5 puls pc,b
|
|
896 L06A7 ldb <u0028
|
|
897 bitb #$70
|
|
898 bne L06A5
|
|
899 lda <u001D
|
|
900 bita #$02
|
|
901 beq L06BF
|
|
902 orb #$20
|
|
903 stb <u0028
|
|
904 lda $04,y
|
|
905 anda #$FD
|
|
906 sta $04,y
|
|
907 bra L06A5
|
|
908 L06BF bita #$01
|
|
909 beq L06CF
|
|
910 orb #$10
|
|
911 stb <u0028
|
|
912 lda $04,y
|
|
913 anda #$FE
|
|
914 sta $04,y
|
|
915 bra L06A5
|
|
916 L06CF bita #$08
|
|
917 beq L06A5
|
|
918 orb #$40
|
|
919 stb <u0028
|
|
920 lda <u0010
|
|
921 beq L06A5
|
|
922 sta <u0043
|
|
923 ldb #$0F
|
|
924 stb $01,y
|
|
925 bra L06A5
|
|
926 L06E3 lda <u0028
|
|
927 anda #$FB
|
|
928 sta <u0028
|
|
929 tst <u0040
|
|
930 beq L06F1
|
|
931 lda #$0F
|
|
932 sta $01,y
|
|
933 L06F1 rts
|
|
934 L06F2 lda <u0028
|
|
935 ora #$04
|
|
936 sta <u0028
|
|
937 lda #$0D
|
|
938 sta $01,y
|
|
939 rts
|
|
940 L06FD pshs b
|
|
941 tfr a,b
|
|
942 lda <u0003
|
|
943 stb <u0027
|
|
944 os9 F$Send
|
|
945 puls pc,b
|
|
946 L070A ldu <u0009
|
|
947 beq L0711
|
|
948 sta <u0008,u
|
|
949 L0711 rts
|
|
950 ldx <u003A
|
|
951 lda <u0043
|
|
952 ble L071E
|
|
953 sta ,y
|
|
954 anda #$80
|
|
955 sta <u0043
|
|
956 L071E tst <u0040
|
|
957 beq L0757
|
|
958 ldb <u0028
|
|
959 bitb #$08
|
|
960 bne L0757
|
|
961 andb #$07
|
|
962 andb <u001D
|
|
963 bne L0757
|
|
964 ldb <u003B
|
|
965 negb
|
|
966 cmpb #$0F
|
|
967 bls L0737
|
|
968 ldb #$0F
|
|
969 L0737 cmpb <u0040
|
|
970 bls L073D
|
|
971 ldb <u0040
|
|
972 L073D pshs b
|
|
973 L073F lda ,x+
|
|
974 sta ,y
|
|
975 decb
|
|
976 bne L073F
|
|
977 cmpx <u003C
|
|
978 bcs L074C
|
|
979 ldx <u003E
|
|
980 L074C stx <u003A
|
|
981 ldb <u0040
|
|
982 subb ,s+
|
|
983 stb <u0040
|
|
984 L0754 lbra L0601
|
|
985 L0757 lda #$0D
|
|
986 sta $01,y
|
|
987 bra L0754
|
|
988 lda $06,y
|
|
989 tfr a,b
|
|
990 andb #$B0
|
|
991 stb <u0020
|
|
992 ldb <u0028
|
|
993 andb #$FC
|
|
994 bita #$10
|
|
995 bne L076F
|
|
996 orb #$02
|
|
997 L076F bita #$20
|
|
998 bne L0775
|
|
999 orb #$01
|
|
1000 L0775 bita #$08
|
|
1001 beq L07AF
|
|
1002 bita #$80
|
|
1003 bne L0799
|
|
1004 lda <u001D
|
|
1005 bita #$10
|
|
1006 beq L0791
|
|
1007 ldx <u0016
|
|
1008 beq L0791
|
|
1009 lda #$01
|
|
1010 L0789 sta <$3F,x
|
|
1011 ldx <$3D,x
|
|
1012 bne L0789
|
|
1013 L0791 lda #$20
|
|
1014 ora <u000E
|
|
1015 sta <u000E
|
|
1016 andb #$FB
|
|
1017 L0799 tst <u0027
|
|
1018 bne L07AF
|
|
1019 stb <u0028
|
|
1020 ldd <u0023
|
|
1021 tstb
|
|
1022 beq L07B1
|
|
1023 os9 F$Send
|
|
1024 stb <u0027
|
|
1025 clra
|
|
1026 clrb
|
|
1027 std <u0023
|
|
1028 bra L07B1
|
|
1029 L07AF stb <u0028
|
|
1030 L07B1 lda #$0F
|
|
1031 sta $01,y
|
|
1032 lbra L0601
|
|
1033 lda $05,y
|
|
1034 bsr L07BF
|
|
1035 lbra L0601
|
|
1036 L07BF pshs b
|
|
1037 clrb
|
|
1038 bita #$02
|
|
1039 beq L07C8
|
|
1040 orb #$04
|
|
1041 L07C8 bita #$04
|
|
1042 beq L07CE
|
|
1043 orb #$01
|
|
1044 L07CE bita #$08
|
|
1045 beq L07D4
|
|
1046 orb #$02
|
|
1047 L07D4 bita #$10
|
|
1048 bne L07DE
|
|
1049 orb #$08
|
|
1050 orb <u000E
|
|
1051 stb <u000E
|
|
1052 L07DE puls pc,b
|
|
1053
|
|
1054 * IRQ Flip/Mask/Priority Bytes
|
620
|
1055 IRQPkt fcb $01,$01,$80
|
|
1056
|
0
|
1057 L07E3 fcb $28
|
|
1058 fdb $e901,$010f,$0001,$0107,$8041,$0403
|
|
1059 fdb $c081,$0801,$e0c1,$0e00,$f0c1,$0e00,$78c1,$0e00
|
|
1060 fdb $3c81,$0800,$1e81,$0800,$1481,$0800,$0f81,$0800
|
|
1061 fdb $0a81,$0800,$0a81,$0800,$0a81,$0800,$0a81,$0800
|
|
1062 fdb $2581
|
|
1063 fcb $08
|
|
1064
|
|
1065 emod
|
|
1066 eom equ *
|
|
1067 end
|
|
1068
|