1044
|
1 ********************************************************************
|
|
2 * drvr51 - Driver for The 51 column by 24 line video display
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
1499
|
6 * Edt/Rev YYYY/MM/DD Modified by
|
|
7 * Comment
|
1044
|
8 * ------------------------------------------------------------------
|
1499
|
9 * 1 ????/??/??
|
|
10 * Original Dragon distribution version
|
1512
|
11 *
|
|
12 * 2003/09/22 Rodney Hamilton
|
|
13 * Recoded fcb arrays, added labels & some comments
|
1729
|
14 * 2004/11/15 P.Harvey-Smith.
|
|
15 * Added code to turn off the drives on the Dragon Alpha.
|
|
16 *
|
1044
|
17
|
|
18 nam drvr51
|
|
19 ttl Driver for The 51 column by 24 line video display
|
|
20
|
|
21 * Disassembled 02/07/06 21:17:23 by Disasm v1.6 (C) 1988 by RML
|
|
22
|
|
23 ifp1
|
1729
|
24 use defsfile.dragon
|
1044
|
25 endc
|
|
26
|
|
27 tylg set Drivr+Objct
|
|
28 atrv set ReEnt+rev
|
1287
|
29 rev set $00
|
1044
|
30 edition set 1
|
|
31
|
|
32 mod eom,name,tylg,atrv,start,size
|
|
33
|
|
34 org 0
|
|
35 u0000 rmb 1
|
|
36 u0001 rmb 1
|
|
37 u0002 rmb 1
|
|
38 u0003 rmb 1
|
|
39 u0004 rmb 1
|
|
40 u0005 rmb 1
|
|
41 u0006 rmb 1
|
|
42 u0007 rmb 1
|
|
43 u0008 rmb 1
|
|
44 u0009 rmb 1
|
|
45 u000A rmb 1
|
|
46 u000B rmb 1
|
|
47 u000C rmb 1
|
|
48 u000D rmb 1
|
|
49 u000E rmb 1
|
|
50 u000F rmb 8
|
|
51 u0017 rmb 4
|
|
52 u001B rmb 2
|
|
53 u001D rmb 1
|
|
54 u001E rmb 1
|
|
55 u001F rmb 1
|
1512
|
56 u0020 rmb 2
|
1044
|
57 u0022 rmb 2
|
|
58 u0024 rmb 1
|
|
59 u0025 rmb 1
|
|
60 u0026 rmb 1
|
|
61 u0027 rmb 1
|
|
62 u0028 rmb 1
|
|
63 u0029 rmb 1
|
|
64 u002A rmb 1
|
|
65 u002B rmb 1
|
|
66 u002C rmb 1
|
1512
|
67 u002D rmb 1 SHIFT flag
|
|
68 u002E rmb 1 CONTROL flag
|
|
69 u002F rmb 1 SHIFTLOCK toggle
|
1044
|
70 u0030 rmb 1
|
|
71 u0031 rmb 1
|
|
72 u0032 rmb 1
|
|
73 u0033 rmb 1
|
|
74 u0034 rmb 1
|
|
75 u0035 rmb 1
|
|
76 u0036 rmb 1
|
|
77 u0037 rmb 1
|
|
78 u0038 rmb 1
|
|
79 u0039 rmb 1
|
1512
|
80 u003A rmb 100
|
1044
|
81 size equ .
|
|
82
|
|
83 fcb UPDAT.
|
|
84
|
|
85 name fcs /drvr51/
|
|
86 fcb edition
|
|
87
|
|
88 start lbra Init
|
|
89 lbra Read
|
|
90 lbra Write
|
|
91 lbra GetStat
|
|
92 lbra SetStat
|
1512
|
93 lbra Term
|
1044
|
94
|
|
95 Init pshs u,a
|
|
96 ldu <u001D,u
|
|
97 ldd #$0200
|
|
98 os9 F$SRtMem
|
|
99 ldu $01,s
|
|
100 tst <u002C,u
|
|
101 beq L0044
|
|
102 ldu <u002D,u
|
|
103 ldd #$1800
|
|
104 os9 F$SRtMem
|
|
105 ldu $01,s
|
|
106 L0044 ldb #$81
|
|
107 leax <u001D,u
|
|
108 L0049 clr ,x+
|
|
109 decb
|
|
110 bne L0049
|
|
111 ldd #$1900
|
|
112 os9 F$SRqMem
|
|
113 bcs L009C
|
|
114 tfr u,d
|
|
115 ldu $01,s
|
|
116 tfr d,x
|
|
117 bita #$01
|
|
118 beq L0066
|
|
119 leax >$0100,x
|
|
120 bra L0068
|
|
121 L0066 adda #$18
|
|
122 L0068 stx <u0022,u
|
|
123 tfr d,u
|
|
124 ldd #$0100
|
|
125 os9 F$SRtMem
|
|
126 ldu $01,s
|
|
127 lda #$10
|
|
128 sta <u0037,u
|
|
129 pshs cc
|
|
130 orcc #IntMasks
|
|
131 leay >L00AD,pcr
|
|
132 sty >D.IRQ
|
|
133 ldx #$FF00
|
|
134 lda $03,x
|
|
135 ora #$01
|
|
136 sta $03,x
|
1512
|
137 inc >InitFlag,pcr
|
1044
|
138 puls cc
|
|
139 lbsr L0475
|
|
140 lbsr L02C3
|
|
141 clrb
|
|
142 L009C puls pc,u,a
|
1512
|
143 InitFlag fcb $00
|
|
144 Term pshs cc
|
1044
|
145 orcc #IntMasks
|
|
146 ldx >D.AltIRQ
|
|
147 stx >D.IRQ
|
|
148 puls cc
|
|
149 clrb
|
|
150 rts
|
|
151 L00AD ldu >D.KbdSta
|
|
152 ldx #$FF00
|
|
153 lda $03,x
|
|
154 bmi L00BB
|
|
155 jmp [>D.SvcIRQ]
|
|
156 L00BB lda $02,x
|
|
157 lda >D.DskTmr
|
|
158 beq L00CB
|
|
159 deca
|
|
160 sta >D.DskTmr
|
|
161 bne L00CB
|
1729
|
162
|
|
163 IFNE DragonAlpha ; Turn off all drives
|
|
164 lbsr AlphaDskCtl
|
|
165 ELSE
|
|
166 sta >DskCtl
|
|
167 ENDC
|
|
168
|
|
169 ; sta >$FF48
|
1044
|
170 L00CB lbsr L04E5
|
|
171 jmp [>D.AltIRQ]
|
|
172 L00D2 pshs x,b
|
|
173 lda u0004,u
|
|
174 sta u0005,u
|
|
175 ldx #$0000
|
|
176 os9 F$Sleep
|
1512
|
177 ldx <D.Proc
|
1044
|
178 ldb <$36,x
|
|
179 beq L00EC
|
|
180 cmpb #$03
|
|
181 bhi L00EC
|
|
182 coma
|
|
183 puls pc,x,a
|
|
184
|
|
185 L00EC puls x,b
|
1512
|
186 Read tst >InitFlag,pcr
|
1044
|
187 bne L00F9
|
|
188 lbsr Init
|
|
189 bcs L011C
|
|
190 L00F9 leax <u003A,u
|
|
191 orcc #IRQMask
|
|
192 ldb <u001D,u
|
|
193 cmpb <u001E,u
|
|
194 beq L00D2
|
|
195 lda b,x
|
|
196 incb
|
|
197 cmpb #$64
|
|
198 bcs L010E
|
|
199 clrb
|
|
200 L010E stb <u001D,u
|
|
201 andcc #^(IRQMask+Carry)
|
|
202 tst u000E,u
|
|
203 beq L011C
|
|
204 clr u000E,u
|
|
205 comb
|
1512
|
206 ldb #E$Read READ error
|
1044
|
207 L011C rts
|
|
208
|
1512
|
209 Write tst >InitFlag,pcr
|
1044
|
210 bne L012C
|
|
211 pshs a
|
|
212 lbsr Init
|
|
213 puls a
|
|
214 bcs L0139
|
|
215 L012C ldb <u001F,u
|
|
216 bne L0165
|
1512
|
217 cmpa #$1B escape?
|
1044
|
218 bne L013A
|
1512
|
219 inc <u001F,u flag ESC seq
|
1044
|
220 clrb
|
|
221 L0139 rts
|
|
222 L013A cmpa #$20
|
|
223 bcs L0144
|
|
224 cmpa #$7F
|
|
225 bcc L0144
|
|
226 bra L0173
|
|
227 L0144 leax >L066E,pcr
|
|
228 L0148 tst ,x
|
|
229 bne L0150
|
|
230 L014C clr <u001F,u
|
|
231 rts
|
|
232 L0150 cmpa ,x+
|
|
233 bne L0161
|
|
234 ldd ,x
|
|
235 leax >L066E,pcr
|
|
236 leax d,x
|
|
237 stx <u0020,u
|
|
238 jmp ,x
|
|
239 L0161 leax $02,x
|
|
240 bra L0148
|
|
241 L0165 inc <u001F,u
|
|
242 leax >L0681,pcr
|
|
243 cmpb #$01
|
|
244 beq L0148
|
|
245 jmp [<u0020,u]
|
|
246 L0173 inc <u0032,u
|
|
247 bsr L01B3
|
|
248 tst <u0039,u
|
|
249 beq L0185
|
|
250 lda #$F8
|
|
251 leay <-$40,y
|
|
252 lbsr L0236
|
|
253 L0185 lda <u0024,u
|
|
254 inca
|
|
255 cmpa #$33
|
|
256 bcs L01A2
|
|
257 clr <u0024,u
|
|
258 lda <u0025,u
|
|
259 inca
|
|
260 cmpa #$18
|
|
261 bcs L019D
|
|
262 lbsr L033E
|
|
263 bra L01A5
|
|
264 L019D sta <u0025,u
|
|
265 bra L01A5
|
|
266 L01A2 sta <u0024,u
|
|
267 L01A5 clr <u0033,u
|
|
268 ldd <u0024,u
|
|
269 std <u0030,u
|
|
270 dec <u0032,u
|
|
271 clrb
|
|
272 rts
|
|
273 L01B3 tfr a,b
|
|
274 subb #$20
|
|
275 clra
|
|
276 leax >L06A0,pcr
|
|
277 lslb
|
|
278 rola
|
|
279 lslb
|
|
280 rola
|
|
281 leax d,x
|
|
282 ldb #$05
|
|
283 lda <u0024,u
|
|
284 mul
|
|
285 pshs b
|
|
286 lsra
|
|
287 rorb
|
|
288 lsra
|
|
289 rorb
|
|
290 lsra
|
|
291 rorb
|
|
292 puls a
|
|
293 anda #$07
|
|
294 pshs b
|
|
295 sta <u0026,u
|
|
296 tst <u0034,u
|
|
297 bne L01FF
|
|
298 tfr a,b
|
|
299 lda #$F8
|
|
300 tstb
|
|
301 beq L01FA
|
|
302 L01E5 lsra
|
|
303 decb
|
|
304 bhi L01E5
|
|
305 bne L01EE
|
|
306 rorb
|
|
307 bra L01FA
|
|
308 L01EE pshs b
|
|
309 ldb #$80
|
|
310 L01F2 lsra
|
|
311 rorb
|
|
312 dec ,s
|
|
313 bne L01F2
|
|
314 leas $01,s
|
|
315 L01FA coma
|
|
316 comb
|
|
317 std <u0035,u
|
|
318 L01FF ldy <u0022,u
|
|
319 lda <u0025,u
|
|
320 ldb ,s+
|
|
321 leay d,y
|
|
322 lda #$04
|
|
323 pshs a
|
|
324 inc <u0032,u
|
|
325 L0211 lda ,x
|
|
326 anda #$F0
|
|
327 bsr L0236
|
|
328 lda ,x+
|
|
329 anda #$0F
|
|
330 bsr L0227
|
|
331 dec ,s
|
|
332 bne L0211
|
|
333 dec <u0032,u
|
|
334 clrb
|
|
335 puls pc,b
|
|
336 L0227 ldb <u0026,u
|
|
337 subb #$04
|
|
338 bhi L023B
|
|
339 beq L0250
|
|
340 L0230 lsla
|
|
341 incb
|
|
342 bne L0230
|
|
343 bra L0250
|
|
344 L0236 ldb <u0026,u
|
|
345 beq L0250
|
|
346 L023B lsra
|
|
347 decb
|
|
348 bhi L023B
|
|
349 bne L0244
|
|
350 rorb
|
|
351 bra L0250
|
|
352 L0244 pshs b
|
|
353 ldb #$80
|
|
354 L0248 lsra
|
|
355 rorb
|
|
356 dec ,s
|
|
357 bne L0248
|
|
358 leas $01,s
|
|
359 L0250 tst <u0034,u
|
|
360 bne L0273
|
|
361 tst <u0038,u
|
|
362 beq L0262
|
|
363 coma
|
|
364 comb
|
|
365 eora <u0035,u
|
|
366 eorb <u0036,u
|
|
367 L0262 pshs b,a
|
|
368 ldd <u0035,u
|
|
369 anda ,y
|
|
370 andb $01,y
|
|
371 addd ,s++
|
|
372 L026D std ,y
|
|
373 leay <$20,y
|
|
374 rts
|
|
375 L0273 eora ,y
|
|
376 eorb $01,y
|
|
377 bra L026D
|
1512
|
378
|
|
379 * $07 - BEL (ding!)
|
|
380 L0279 ldx #$FF20
|
1044
|
381 ldb #$64
|
|
382 L027E lda ,x
|
|
383 eora #$C0
|
|
384 sta ,x
|
|
385 lda #$19
|
|
386 L0286 deca
|
|
387 nop
|
|
388 nop
|
|
389 bne L0286
|
|
390 decb
|
|
391 bne L027E
|
|
392 lbra L014C
|
1512
|
393
|
|
394 * $08 - BS (left arrow)
|
|
395 L0291 dec <u0024,u
|
1044
|
396 bpl L02A6
|
|
397 lda #$32
|
|
398 sta <u0024,u
|
1512
|
399
|
|
400 * $1b44 - (cursor up)
|
|
401 L029B dec <u0025,u
|
1044
|
402 bpl L02A6
|
|
403 clr <u0025,u
|
|
404 lbsr L035E
|
|
405 L02A6 lbsr L0484
|
|
406 lbra L014C
|
1512
|
407
|
|
408 * $0a, $1b45 - LF, (cursor down)
|
1044
|
409 L02AC lda <u0025,u
|
|
410 inca
|
|
411 cmpa #$18
|
|
412 bcs L02B9
|
|
413 lbsr L033E
|
|
414 bra L02BC
|
|
415 L02B9 sta <u0025,u
|
|
416 L02BC bra L02A6
|
1512
|
417
|
|
418 * $0d - CR (return)
|
|
419 L02BE clr <u0024,u
|
1044
|
420 bra L02A6
|
1512
|
421
|
|
422 * $0c - FF (clear screen)
|
1044
|
423 L02C3 ldy <u0022,u
|
|
424 leay >$0080,y
|
|
425 lda #$18
|
|
426 pshs a
|
|
427 inc <u0032,u
|
|
428 L02D2 bsr L0314
|
|
429 dec ,s
|
|
430 bne L02D2
|
|
431 leas $01,s
|
|
432 clra
|
|
433 clrb
|
|
434 sta <u0033,u
|
|
435 std <u0030,u
|
|
436 std <u0024,u
|
|
437 dec <u0032,u
|
|
438 ldx #$FF20
|
|
439 lda $02,x
|
|
440 ora #$F0
|
|
441 sta $02,x
|
|
442 ldx #$FFC0
|
|
443 lda #$06
|
|
444 ldb #$03
|
|
445 bsr L0305
|
|
446 lda <u0022,u
|
|
447 lsra
|
|
448 ldb #$07
|
|
449 bsr L0305
|
|
450 lbra L014C
|
|
451 L0305 lsra
|
|
452 bcc L030E
|
|
453 leax $01,x
|
|
454 sta ,x+
|
|
455 bra L0310
|
|
456 L030E sta ,x++
|
|
457 L0310 decb
|
|
458 bne L0305
|
|
459 rts
|
|
460 L0314 lda #$10
|
|
461 L0316 pshs a
|
|
462 lda <u0038,u
|
|
463 tfr a,b
|
|
464 L031D std <-$80,y
|
|
465 std <-$60,y
|
|
466 std <-$40,y
|
|
467 std <-$20,y
|
|
468 std <$20,y
|
|
469 std <$40,y
|
|
470 std <$60,y
|
|
471 std ,y++
|
|
472 dec ,s
|
|
473 bne L031D
|
|
474 leay >$00E0,y
|
|
475 puls pc,b
|
|
476 L033E ldy <u0022,u
|
|
477 inc <u0032,u
|
|
478 pshs u
|
|
479 leau >$0100,y
|
|
480 lda #$10
|
|
481 bsr L037C
|
|
482 puls u
|
|
483 dec <u0031,u
|
|
484 L0354 leay >$0080,y
|
|
485 bsr L0314
|
|
486 dec <u0032,u
|
|
487 rts
|
|
488 L035E ldy <u0022,u
|
|
489 leay >$17F0,y
|
|
490 inc <u0032,u
|
|
491 pshs u
|
|
492 leau >-$0100,y
|
|
493 lda #$F0
|
|
494 bsr L037C
|
|
495 leay ,u
|
|
496 puls u
|
|
497 inc <u0031,u
|
|
498 bra L0354
|
|
499 L037C ldb #$17
|
|
500 pshs b
|
|
501 L0380 ldb #$10
|
|
502 L0382 ldx ,u
|
|
503 stx ,y
|
|
504 ldx u0002,u
|
|
505 stx $02,y
|
|
506 ldx u0004,u
|
|
507 stx $04,y
|
|
508 ldx u0006,u
|
|
509 stx $06,y
|
|
510 ldx u0008,u
|
|
511 stx $08,y
|
|
512 ldx u000A,u
|
|
513 stx $0A,y
|
|
514 ldx u000C,u
|
|
515 stx $0C,y
|
|
516 ldx u000E,u
|
|
517 stx $0E,y
|
|
518 leay a,y
|
|
519 leau a,u
|
|
520 decb
|
|
521 bne L0382
|
|
522 dec ,s
|
|
523 bne L0380
|
|
524 puls pc,b
|
1512
|
525
|
|
526 * $1b42 - clear to end of line
|
|
527 L03AF inc <u0032,u
|
1044
|
528 bsr L03BA
|
|
529 dec <u0032,u
|
|
530 lbra L014C
|
|
531 L03BA clr <u0033,u
|
|
532 ldb <u0024,u
|
|
533 pshs b
|
|
534 bitb #$07
|
|
535 bne L03CB
|
|
536 lda #$05
|
|
537 mul
|
|
538 bra L03F3
|
|
539 L03CB lda #$01
|
|
540 pshs a
|
|
541 L03CF lda #$20
|
|
542 lbsr L01B3
|
|
543 lda <u0024,u
|
|
544 inca
|
|
545 sta <u0024,u
|
|
546 cmpa #$33
|
|
547 bcs L03E3
|
|
548 leas $01,s
|
|
549 bra L040D
|
|
550 L03E3 dec ,s
|
|
551 bpl L03CF
|
|
552 lda <u0024,u
|
|
553 ldb #$05
|
|
554 mul
|
|
555 bitb #$08
|
|
556 bne L03CF
|
|
557 leas $01,s
|
|
558 L03F3 lsrb
|
|
559 lsrb
|
|
560 lsrb
|
|
561 ldy <u0022,u
|
|
562 lda <u0025,u
|
|
563 leay d,y
|
|
564 leay >$0080,y
|
|
565 lda #$20
|
|
566 pshs b
|
|
567 suba ,s+
|
|
568 lsra
|
|
569 lbsr L0316
|
|
570 L040D puls a
|
|
571 sta <u0024,u
|
|
572 rts
|
1512
|
573
|
|
574 * $1b4A - clear to end of screen
|
|
575 L0413 inc <u0032,u
|
1044
|
576 bsr L03BA
|
|
577 lda #$17
|
|
578 suba <u0025,u
|
|
579 bls L042A
|
|
580 pshs a
|
|
581 L0421 lbsr L0314
|
|
582 dec ,s
|
|
583 bne L0421
|
|
584 leas $01,s
|
|
585 L042A dec <u0032,u
|
|
586 lbra L014C
|
1512
|
587
|
|
588 * $0b - (cursor home)
|
|
589 L0430 clr <u0024,u
|
1044
|
590 clr <u0025,u
|
|
591 lbra L02A6
|
1512
|
592
|
|
593 * $1b41xxyy - move cursor to col xx (0-50) row yy (0-23)
|
|
594 L0439 ldb <u001F,u
|
1044
|
595 subb #$02
|
|
596 bne L0442
|
|
597 clrb
|
|
598 rts
|
|
599 L0442 decb
|
|
600 bne L0450
|
1512
|
601 cmpa #51
|
1044
|
602 bcs L044B
|
1512
|
603 lda #50
|
1044
|
604 L044B sta <u0024,u
|
1512
|
605 L044D clrb
|
1044
|
606 rts
|
1512
|
607 L0450 cmpa #24
|
1044
|
608 bcs L0456
|
1512
|
609 lda #23
|
1044
|
610 L0456 sta <u0025,u
|
|
611 L0459 lbra L02A6
|
1512
|
612
|
|
613 * $1b43 - (cursor right)
|
|
614 L045C inc <u0024,u
|
1044
|
615 lda <u0024,u
|
|
616 cmpa #$33
|
|
617 bcs L0459
|
|
618 clr <u0024,u
|
|
619 lbra L02AC
|
1512
|
620
|
|
621 * $1b46 - reverse on
|
|
622 L046C lda #$FF
|
1044
|
623 coma
|
|
624 L046F sta <u0038,u
|
|
625 lbra L014C
|
1512
|
626
|
|
627 * $1b47 - reverse off
|
1044
|
628 L0475 lda #$FF
|
|
629 bra L046F
|
1512
|
630
|
|
631 * $1b48 - underline on
|
|
632 L0479 lda #$FF
|
1044
|
633 L047B sta <u0039,u
|
|
634 lbra L014C
|
1512
|
635
|
|
636 * $1b49 - underline off
|
|
637 L0481 clra
|
1044
|
638 bra L047B
|
|
639 L0484 ldd <u0024,u
|
|
640 inc <u0032,u
|
|
641 tst <u0033,u
|
|
642 bne L0494
|
|
643 std <u0030,u
|
|
644 bra L04B9
|
|
645 L0494 pshs b,a
|
|
646 ldd <u0030,u
|
|
647 inc <u0034,u
|
|
648 tstb
|
|
649 bmi L04AB
|
|
650 cmpb #$18
|
|
651 bcc L04AB
|
|
652 std <u0024,u
|
|
653 lda #$7F
|
|
654 lbsr L01B3
|
|
655 L04AB puls b,a
|
|
656 std <u0024,u
|
|
657 std <u0030,u
|
|
658 clr <u0033,u
|
|
659 dec <u0034,u
|
|
660 L04B9 dec <u0032,u
|
|
661 clrb
|
|
662 rts
|
|
663
|
|
664 GetStat cmpa #$01
|
|
665 bne L04D0
|
|
666 lda <u001D,u
|
|
667 cmpa <u001E,u
|
|
668 beq L04CC
|
|
669 L04CA clrb
|
|
670 rts
|
|
671 L04CC comb
|
1512
|
672 ldb #E$NotRdy
|
1044
|
673 rts
|
|
674 L04D0 cmpa #$06
|
|
675 beq L04CA
|
|
676 cmpa #$02
|
|
677 bne SetStat
|
|
678 ldx $06,y
|
|
679 ldd <u0022,u
|
|
680 std $04,x
|
|
681 clrb
|
|
682 rts
|
|
683
|
|
684 SetStat comb
|
1512
|
685 ldb #E$UnkSvc
|
1044
|
686 rts
|
|
687
|
|
688 L04E5 tst <u0032,u
|
|
689 bne L0512
|
|
690 dec <u0037,u
|
|
691 bne L0512
|
|
692 lda #$10
|
|
693 sta <u0037,u
|
|
694 inc <u0034,u
|
|
695 ldd <u0024,u
|
|
696 pshs b,a
|
|
697 ldd <u0030,u
|
|
698 std <u0024,u
|
|
699 lda #$7F
|
|
700 lbsr L01B3
|
|
701 puls b,a
|
|
702 std <u0024,u
|
|
703 com <u0033,u
|
|
704 dec <u0034,u
|
|
705 L0512 ldx #$FF00
|
|
706 lda #$FF
|
|
707 sta $02,x
|
|
708 bsr L053B
|
|
709 anda #$03
|
|
710 bne L0526
|
|
711 clra
|
1512
|
712 sta $02,x strobe all keys
|
|
713 bsr L053B any keys pressed?
|
|
714 bne L052D yes, do scan
|
1044
|
715 L0526 clr <u0027,u
|
|
716 clr <u0028,u
|
|
717 rts
|
|
718 L052D tst <u0028,u
|
|
719 bne L0541
|
|
720 sta <u0028,u
|
|
721 L0535 clrb
|
|
722 rts
|
|
723 L0537 clrb
|
|
724 stb $02,x
|
|
725 rts
|
1512
|
726 L053B lda ,x read keyboard rows
|
1044
|
727 coma
|
1512
|
728 anda #$7F mask off joystick row
|
1044
|
729 rts
|
|
730 L0541 cmpa <u0028,u
|
|
731 bne L0526
|
|
732 clr <u002A,u
|
|
733 clr <u002B,u
|
|
734 clr <u002C,u
|
|
735 clr <u002D,u
|
|
736 clr <u002E,u
|
1512
|
737 ldb #$01 start kbd scan with column#0
|
1044
|
738 L0557 comb
|
1512
|
739 stb $02,x strobe keyboard column
|
|
740 bsr L053B read keyboard rows
|
|
741 beq L05A1 no keys seen, do next column
|
|
742 bita #$40 is this a row 6 key?
|
1044
|
743 beq L0583
|
1512
|
744 cmpb #$7F SHIFT key pressed?
|
1044
|
745 bne L056B
|
1512
|
746 inc <u002D,u yes, flag SHIFT
|
1044
|
747 bra L057F
|
1512
|
748 L056B cmpb #$FD CONTROL pressed? (CLEAR key)
|
1044
|
749 bne L0574
|
1512
|
750 inc <u002E,u yes, flag CONTROL
|
1044
|
751 bra L057F
|
|
752 L0574 tst <u002C,u
|
|
753 bne L0537
|
|
754 stb <u002C,u
|
|
755 com <u002C,u
|
|
756 L057F anda #$3F
|
|
757 beq L05A1
|
|
758 L0583 pshs b,a
|
|
759 clrb
|
|
760 L0586 lsra
|
|
761 bcc L058A
|
|
762 incb
|
|
763 L058A tsta
|
|
764 bne L0586
|
|
765 cmpb #$01
|
|
766 puls b,a
|
|
767 bne L0537
|
|
768 tst <u002A,u
|
|
769 bne L0537
|
|
770 sta <u002A,u
|
|
771 stb <u002B,u
|
|
772 com <u002B,u
|
|
773 L05A1 comb
|
|
774 lslb
|
|
775 bne L0557
|
|
776 stb $02,x
|
|
777 ldb <u002C,u
|
|
778 beq L05B5
|
|
779 tst <u002A,u
|
|
780 bne L0535
|
|
781 lda #$40
|
|
782 bra L05BF
|
|
783 L05B5 ldb <u002B,u
|
|
784 lda <u002A,u
|
|
785 lbeq L0526
|
|
786 L05BF pshs b
|
|
787 tst <u0027,u
|
|
788 beq L05D0
|
|
789 dec <u0027,u
|
|
790 beq L05D4
|
|
791 puls b
|
|
792 lbra L0665
|
|
793 L05D0 ldb #$32
|
|
794 bra L05D6
|
|
795 L05D4 ldb #$05
|
|
796 L05D6 stb <u0027,u
|
|
797 lbsr L0667
|
|
798 lslb
|
|
799 lslb
|
|
800 lslb
|
|
801 puls a
|
|
802 pshs b
|
|
803 lbsr L0667
|
|
804 orb ,s+
|
|
805 stb <u0029,u
|
1512
|
806 leax >L0820,pcr NORMAL keys
|
1044
|
807 lda b,x
|
1512
|
808 tst <u002E,u CONTROL flag on?
|
1044
|
809 beq L05FE
|
1512
|
810 leax >L0886,pcr CONTROL keys
|
1044
|
811 lda b,x
|
|
812 bra L0609
|
1512
|
813 L05FE tst <u002D,u SHIFT flag on?
|
1044
|
814 beq L0612
|
1512
|
815 leax >L0853,pcr SHIFTED keys
|
1044
|
816 lda b,x
|
1512
|
817 L0609 cmpa #$1F SHIFTLOCK toggle key?
|
1044
|
818 bne L0621
|
|
819 com <u002F,u
|
|
820 bra L0665
|
1512
|
821 L0612 tst <u002F,u SHIFTLOCK flag on?
|
1044
|
822 beq L0621
|
1512
|
823 cmpa #$61 less than 'a ?
|
1044
|
824 bcs L0621
|
1512
|
825 cmpa #$7A more than 'z ?
|
1044
|
826 bhi L0621
|
1512
|
827 suba #$20 only does lower->UPPER
|
1044
|
828 L0621 leax <u003A,u
|
|
829 ldb <u001E,u
|
|
830 sta b,x
|
|
831 incb
|
|
832 cmpb #$64
|
|
833 bcs L062F
|
|
834 clrb
|
|
835 L062F cmpb <u001D,u
|
|
836 bne L0638
|
|
837 inc u000E,u
|
|
838 bra L063B
|
|
839 L0638 stb <u001E,u
|
|
840 L063B tsta
|
|
841 beq L065A
|
|
842 cmpa u000D,u
|
|
843 L0640 bne L064A
|
|
844 ldx u0009,u
|
|
845 beq L065A
|
|
846 L0646 sta $08,x
|
|
847 bra L065A
|
|
848 L064A ldb #$03
|
|
849 cmpa u000B,u
|
|
850 beq L0656
|
|
851 ldb #$02
|
|
852 cmpa u000C,u
|
|
853 bne L065A
|
|
854 L0656 lda u0003,u
|
|
855 bra L065E
|
|
856 L065A ldb #S$Wake
|
|
857 lda u0005,u
|
|
858 L065E beq L0663
|
|
859 os9 F$Send
|
|
860 L0663 clr u0005,u
|
|
861 L0665 clrb
|
|
862 rts
|
|
863 L0667 clrb
|
|
864 L0668 incb
|
|
865 lsra
|
|
866 bne L0668
|
|
867 decb
|
|
868 rts
|
|
869
|
1512
|
870 * control characters dispatch table
|
|
871 L066E fcb $07 BEL (beep)
|
|
872 fdb L0279-L066E $FC0B
|
|
873 fcb $08 BS (left arrow)
|
|
874 fdb L0291-L066E $FC23
|
|
875 fcb $0A LF (down arrow)
|
|
876 fdb L02AC-L066E $FC3E
|
|
877 fcb $0D CR (return)
|
|
878 fdb L02BE-L066E $FC50
|
|
879 fcb $0C FF (clear screen)
|
|
880 fdb L02C3-L066E $FC55
|
|
881 fcb $0B (cursor home)
|
|
882 fdb L0430-L066E $FDC2
|
1044
|
883 fcb $00
|
1512
|
884
|
|
885 * escape sequences dispatch table
|
|
886 L0681 fcb $41 cursor xy
|
|
887 fdb L0439-L066E $FDCB
|
|
888 fcb $42 clear EOL
|
|
889 fdb L03AF-L066E $FD41
|
|
890 fcb $43 cursor right
|
|
891 fdb L045C-L066E $FDEE
|
|
892 fcb $44 cursor up
|
|
893 fdb L029B-L066E $FC2D
|
|
894 fcb $45 cursor down
|
|
895 fdb L02AC-L066E $FC3E
|
|
896 fcb $46 reverse on
|
|
897 fdb L046C-L066E $FDFE
|
|
898 fcb $47 reverse off
|
|
899 fdb L0475-L066E $FE07
|
|
900 fcb $48 underline on
|
|
901 fdb L0479-L066E $FE0B
|
|
902 fcb $49 underline off
|
|
903 fdb L0481-L066E $FE13
|
|
904 fcb $4A clear EOS
|
|
905 fdb L0413-L066E $FDA5
|
1044
|
906 fcb $00
|
1512
|
907
|
|
908 L06A0
|
|
909 * 4x8 bitmap table for characters $20-$7f
|
|
910 * each nibble represents a row of 4 dots
|
|
911 * chars 20-27
|
|
912 fcb $00,$00,$00,$00 .... .@.. .@.@ .@@. ..@. @..@ .@.. .@..
|
|
913 fcb $44,$40,$40,$00 .... .@.. .@.@ @@@@ .@@@ ...@ @.@. .@..
|
|
914 fcb $55,$00,$00,$00 .... .@.. .... .@@. @... ..@. .@.. ....
|
|
915 fcb $6F,$6F,$60,$00 .... .... .... @@@@ .@@. .@.. @.@. ....
|
|
916 fcb $27,$86,$1E,$20 .... .@.. .... .@@. ...@ @... @@.@ ....
|
|
917 fcb $91,$24,$89,$00 .... .... .... .... @@@. @..@ .... ....
|
|
918 fcb $4A,$4A,$D0,$00 .... .... .... .... ..@. .... .... ....
|
|
919 fcb $44,$00,$00,$00 .... .... .... .... .... .... .... ....
|
|
920 * chars 29-2f
|
|
921 fcb $24,$44,$20,$00 ..@. .@.. @..@ .@.. .... .... .... ....
|
|
922 fcb $42,$22,$40,$00 .@.. ..@. .@@. .@.. .... .... .... ...@
|
|
923 fcb $96,$F6,$90,$00 .@.. ..@. @@@@ @@@. .... @@@@ .... ..@.
|
|
924 fcb $44,$E4,$40,$00 .@.. ..@. .@@. .@.. ..@. .... .@@. .@..
|
|
925 fcb $00,$02,$24,$00 ..@. .@.. @..@ .@.. ..@. .... .@@. @...
|
|
926 fcb $00,$F0,$00,$00 .... .... .... .... .@.. .... .... ....
|
|
927 fcb $00,$06,$60,$00 .... .... .... .... .... .... .... ....
|
|
928 fcb $01,$24,$80,$00 .... .... .... .... .... .... .... ....
|
|
929 * chars 30-37
|
|
930 fcb $69,$BD,$60,$00 .@@. ..@. .@@. @@@. ..@. @@@@ .@@@ @@@@
|
|
931 fcb $26,$22,$70,$00 @..@ .@@. @..@ ...@ .@@. @... @... ...@
|
|
932 fcb $69,$2C,$F0,$00 @.@@ ..@. ..@. .@@. @.@. @@@. @@@. ..@.
|
|
933 fcb $E1,$61,$E0,$00 @@.@ ..@. @@.. ...@ @@@@ ...@ @..@ .@..
|
|
934 fcb $26,$AF,$20,$00 .@@. .@@@ @@@@ @@@. ..@. @@@. .@@. .@..
|
|
935 fcb $F8,$E1,$E0,$00 .... .... .... .... .... .... .... ....
|
|
936 fcb $78,$E9,$60,$00 .... .... .... .... .... .... .... ....
|
|
937 fcb $F1,$24,$40,$00 .... .... .... .... .... .... .... ....
|
|
938 * chars 38-3f
|
|
939 fcb $69,$69,$60,$00 .@@. .@@. .... .... ..@. .... .@.. .@@.
|
|
940 fcb $69,$71,$60,$00 @..@ @..@ .... .... .@.. @@@@ ..@. @..@
|
|
941 fcb $00,$40,$40,$00 .@@. .@@@ .@.. ..@. @... .... ...@ ..@.
|
|
942 fcb $00,$20,$24,$00 @..@ ...@ .... .... .@.. @@@@ ..@. ..@.
|
|
943 fcb $24,$84,$20,$00 .@@. .@@. .@.. ..@. ..@. .... .@.. ....
|
|
944 fcb $0F,$0F,$00,$00 .... .... .... .@.. .... .... .... ..@.
|
|
945 fcb $42,$12,$40,$00 .... .... .... .... .... .... .... ....
|
|
946 fcb $69,$22,$02,$00 .... .... .... .... .... .... .... ....
|
|
947 * chars 40-47
|
|
948 fcb $69,$BB,$87,$00 .@@. .@@. @@@. .@@@ @@@. @@@@ @@@@ .@@@
|
|
949 fcb $69,$F9,$90,$00 @..@ @..@ @..@ @... @..@ @... @... @...
|
|
950 fcb $E9,$E9,$E0,$00 @.@@ @@@@ @@@. @... @..@ @@@. @@@. @.@@
|
|
951 fcb $78,$88,$70,$00 @.@@ @..@ @..@ @... @..@ @... @... @..@
|
|
952 fcb $E9,$99,$E0,$00 @... @..@ @@@. .@@@ @@@. @@@@ @... .@@@
|
|
953 fcb $F8,$E8,$F0,$00 .@@@ .... .... .... .... .... .... ....
|
|
954 fcb $F8,$E8,$80,$00 .... .... .... .... .... .... .... ....
|
|
955 fcb $78,$B9,$70,$00 .... .... .... .... .... .... .... ....
|
|
956 * chars 48-4f
|
|
957 fcb $99,$F9,$90,$00 @..@ @@@. @@@@ @..@ @... @@@@ @..@ .@@.
|
|
958 fcb $E4,$44,$E0,$00 @..@ .@.. ..@. @.@. @... @@.@ @@.@ @..@
|
|
959 fcb $F2,$2A,$40,$00 @@@@ .@.. ..@. @@.. @... @@.@ @.@@ @..@
|
|
960 fcb $9A,$CA,$90,$00 @..@ .@.. @.@. @.@. @... @..@ @..@ @..@
|
|
961 fcb $88,$88,$F0,$00 @..@ @@@. .@.. @..@ @@@@ @..@ @..@ .@@.
|
|
962 fcb $FD,$D9,$90,$00 .... .... .... .... .... .... .... ....
|
|
963 fcb $9D,$B9,$90,$00 .... .... .... .... .... .... .... ....
|
|
964 fcb $69,$99,$60,$00 .... .... .... .... .... .... .... ....
|
|
965 * chars 50-57
|
|
966 fcb $E9,$E8,$80,$00 @@@. .@@. @@@. .@@@ @@@. @..@ @..@ @..@
|
|
967 fcb $69,$9B,$70,$00 @..@ @..@ @..@ @... .@.. @..@ @..@ @..@
|
|
968 fcb $E9,$EA,$90,$00 @@@. @..@ @@@. .@@. .@.. @..@ @..@ @@.@
|
|
969 fcb $78,$61,$E0,$00 @... @.@@ @.@. ...@ .@.. @..@ .@@. @@.@
|
|
970 fcb $E4,$44,$40,$00 @... .@@@ @..@ @@@. .@.. .@@. .@@. @@@@
|
|
971 fcb $99,$99,$60,$00 .... .... .... .... .... .... .... ....
|
|
972 fcb $99,$96,$60,$00 .... .... .... .... .... .... .... ....
|
|
973 fcb $99,$DD,$F0,$00 .... .... .... .... .... .... .... ....
|
|
974 * chars 58-5f
|
|
975 fcb $99,$69,$90,$00 @..@ @..@ @@@@ @@@. .... .@@@ .@@. ....
|
|
976 fcb $99,$71,$E0,$00 @..@ @..@ ...@ @... @... ...@ @..@ ....
|
|
977 fcb $F1,$68,$F0,$00 .@@. .@@@ .@@. @... .@.. ...@ .... ....
|
|
978 fcb $E8,$88,$E0,$00 @..@ ...@ @... @... ..@. ...@ .... ....
|
|
979 fcb $08,$42,$10,$00 @..@ @@@. @@@@ @@@. ...@ .@@@ .... ....
|
|
980 fcb $71,$11,$70,$00 .... .... .... .... .... .... .... @@@@
|
|
981 fcb $69,$00,$00,$00 .... .... .... .... .... .... .... ....
|
|
982 fcb $00,$00,$0F,$00 .... .... .... .... .... .... .... ....
|
|
983 * chars 60-67
|
|
984 fcb $22,$00,$00,$00 ..@. .... @... .... ...@ .... ..@@ ....
|
|
985 fcb $07,$99,$70,$00 ..@. .@@@ @@@. .@@@ .@@@ .@@@ .@.. .@@.
|
|
986 fcb $8E,$99,$E0,$00 .... @..@ @..@ @... @..@ @.@. @@@@ @..@
|
|
987 fcb $07,$88,$70,$00 .... @..@ @..@ @... @..@ @@.. .@.. @..@
|
|
988 fcb $17,$99,$70,$00 .... .@@@ @@@. .@@@ .@@@ .@@@ .@.. .@@@
|
|
989 fcb $07,$AC,$70,$00 .... .... .... .... .... .... .... ...@
|
|
990 fcb $34,$F4,$40,$00 .... .... .... .... .... .... .... @@@.
|
|
991 fcb $06,$99,$71,$E0 .... .... .... .... .... .... .... ....
|
|
992 * chars 68-6f
|
|
993 fcb $8E,$99,$90,$00 @... .@.. ..@. @... .@.. .... .... ....
|
|
994 fcb $40,$44,$40,$00 @@@. .... .... @.@. .@.. .@@@ .@@@ .@@.
|
|
995 fcb $20,$22,$22,$C0 @..@ .@.. ..@. @@.. .@.. @@.@ @..@ @..@
|
|
996 fcb $8A,$CA,$90,$00 @..@ .@.. ..@. @.@. .@.. @@.@ @..@ @..@
|
|
997 fcb $44,$44,$40,$00 @..@ .@.. ..@. @..@ .@.. @..@ @..@ .@@.
|
|
998 fcb $0E,$DD,$90,$00 .... .... ..@. .... .... .... .... ....
|
|
999 fcb $0E,$99,$90,$00 .... .... @@.. .... .... .... .... ....
|
|
1000 fcb $06,$99,$60,$00 .... .... .... .... .... .... .... ....
|
|
1001 * chars 70-77
|
|
1002 fcb $0E,$99,$E8,$80 .... .... .... .... .@.. .... .... ....
|
|
1003 fcb $07,$99,$71,$10 @@@. .@@@ .@@@ .@@@ @@@@ @..@ @..@ @..@
|
|
1004 fcb $07,$88,$80,$00 @..@ @..@ @... @@.. .@.. @..@ @..@ @@.@
|
|
1005 fcb $07,$C3,$E0,$00 @..@ @..@ @... ..@@ .@.. @..@ .@@. @@.@
|
|
1006 fcb $4F,$44,$30,$00 @@@. .@@@ @... @@@. ..@@ .@@@ .@@. .@@.
|
|
1007 fcb $09,$99,$70,$00 @... ...@ .... .... .... .... .... ....
|
|
1008 fcb $09,$96,$60,$00 @... ...@ .... .... .... .... .... ....
|
|
1009 fcb $09,$DD,$60,$00 .... .... .... .... .... .... .... ....
|
|
1010 * chars 78-7f
|
|
1011 fcb $09,$66,$90,$00 .... .... .... ..@@ .@.. @@.. .... @@@@
|
|
1012 fcb $09,$99,$71,$E0 @..@ @..@ @@@@ .@.. .@.. ..@. .@.@ @@@@
|
|
1013 fcb $0F,$24,$F0,$00 .@@. @..@ ..@. @@.. .... ..@@ @.@. @@@@
|
|
1014 fcb $34,$C4,$30,$00 .@@. @..@ .@.. .@.. .@.. ..@. .... @@@@
|
|
1015 fcb $44,$04,$40,$00 @..@ .@@@ @@@@ ..@@ .@.. @@.. .... @@@@
|
|
1016 fcb $C2,$32,$C0,$00 .... ...@ .... .... .... .... .... @@@@
|
|
1017 fcb $05,$A0,$00,$00 .... @@@. .... .... .... .... .... @@@@
|
|
1018 fcb $FF,$FF,$FF,$F0 .... .... .... .... .... .... .... ....
|
|
1019
|
|
1020 * NOTE: these tables and the keyboard matrix are in DRAGON column order!
|
|
1021 * UNSHIFTED keytable
|
|
1022 L0820 fcb $30,$31,$32,$33 0 1 2 3
|
|
1023 fcb $34,$35,$36,$37 4 5 6 7
|
|
1024 fcb $38,$39,$3A,$3B 8 9 : ;
|
|
1025 fcb $2C,$2D,$2E,$2F , - . /
|
|
1026 fcb $40,$61,$62,$63 @ a b c
|
|
1027 fcb $64,$65,$66,$67 d e f g
|
|
1028 fcb $68,$69,$6A,$6B h i j k
|
|
1029 fcb $6C,$6D,$6E,$6F l m n o
|
|
1030 fcb $70,$71,$72,$73 p q r s
|
|
1031 fcb $74,$75,$76,$77 t u v w
|
|
1032 fcb $78,$79,$7A,$0C x y z up
|
|
1033 fcb $0A,$08,$09,$20 down left right space
|
|
1034 fcb $0D,$00,$05 ENTER CLEAR BREAK
|
|
1035
|
|
1036 * SHIFTED keytable
|
|
1037 L0853 fcb $30,$21,$22,$23 0 ! " #
|
|
1038 fcb $24,$25,$26,$27 $ % & '
|
|
1039 fcb $28,$29,$2A,$2B ( ) * +
|
|
1040 fcb $3C,$3D,$3E,$3F < = > ?
|
|
1041 fcb $7C,$41,$42,$43 | A B C
|
|
1042 fcb $44,$45,$46,$47 D E F G
|
|
1043 fcb $48,$49,$4A,$4B H I J K
|
|
1044 fcb $4C,$4D,$4E,$4F L M N O
|
|
1045 fcb $50,$51,$52,$53 P Q R S
|
|
1046 fcb $54,$55,$56,$57 T U V W
|
|
1047 fcb $58,$59,$5A,$1C X Y Z fs
|
|
1048 fcb $1A,$18,$19,$20 sub can em space
|
|
1049 fcb $0D,$00,$03 ENTER CLEAR shft-BREAK
|
|
1050
|
|
1051 * CONTROL keytable
|
|
1052 L0886 fcb $1F,$7C,$00,$7E shift-toggle | nul ~
|
|
1053 fcb $00,$00,$00,$5E nul nul nul ^
|
|
1054 fcb $5B,$5D,$00,$00 [ ] nul nul
|
|
1055 fcb $7B,$5F,$7D,$5C { _ } \
|
|
1056 fcb $00,$01,$02,$03 ^@ ^A ^B ^C
|
|
1057 fcb $04,$05,$06,$07 ^D ^E ^F ^G
|
|
1058 fcb $08,$09,$0A,$0B ^H ^I ^J ^K
|
|
1059 fcb $0C,$0D,$0E,$0F ^L ^M ^N ^O
|
|
1060 fcb $10,$11,$12,$13 ^P ^Q ^R ^S
|
|
1061 fcb $14,$15,$16,$17 ^T ^U ^V ^W
|
|
1062 fcb $18,$19,$1A,$13 ^X ^Y ^Z dc3
|
|
1063 fcb $12,$10,$11,$20 dc2 dle dc1 space
|
|
1064 fcb $0D,$00,$1B ENTER CLEAR esc
|
1044
|
1065
|
1729
|
1066 IFNE DragonAlpha
|
|
1067 ; Warning this version of AlphaDskCtl, does NOT convert DragonDos
|
|
1068 ; $FF48 codes to alpha ones, they must be in Alpha format.
|
|
1069 ; This is only used for timed turn off of drive motors.
|
|
1070 ; We do not need to preserve the ROM select bit as this code
|
|
1071 ; operates in RAM only mode.
|
|
1072
|
|
1073 AlphaDskCtl
|
|
1074 pshs a,b,cc
|
|
1075
|
|
1076 pshs a
|
|
1077 lda #AYIOREG ; AY-8912 IO register
|
|
1078 sta PIA2DB ; Output to PIA
|
|
1079 ldb #AYREGLatch ; Latch register to modify
|
|
1080 stb PIA2DA
|
|
1081
|
|
1082 CLR PIA2DA ; Idle AY
|
|
1083
|
|
1084 lda ,s+ ; Fetch saved Drive Selects
|
|
1085 sta PIA2DB ; output to PIA
|
|
1086 ldb #AYWriteReg ; Write value to latched register
|
|
1087 stb PIA2DA ; Set register
|
|
1088
|
|
1089 clr PIA2DA ; Idle AY
|
|
1090
|
|
1091 PULS A,B,CC
|
|
1092 RTS
|
|
1093
|
|
1094 ENDC
|
|
1095
|
1044
|
1096 emod
|
|
1097 eom equ *
|
1512
|
1098 end
|