241
|
1 ********************************************************************
|
257
|
2 * KBVDIO - keyboard/video driver
|
241
|
3 *
|
|
4 * $Id$
|
|
5 *
|
1499
|
6 * Edt/Rev YYYY/MM/DD Modified by
|
|
7 * Comment
|
241
|
8 * ------------------------------------------------------------------
|
1499
|
9 * ????/??/??
|
|
10 * Original Dragon Data distribution version
|
1512
|
11 *
|
|
12 * 2004/01/04 Rodney Hamilton
|
|
13 * Recoded anonymous fcb arrays, added some comments
|
241
|
14
|
|
15 nam KBVDIO
|
1499
|
16 ttl keyboard/video driver
|
241
|
17
|
|
18 * Disassembled 02/04/21 22:37:57 by Disasm v1.6 (C) 1988 by RML
|
|
19
|
|
20 ifp1
|
|
21 use defsfile
|
|
22 endc
|
257
|
23
|
241
|
24 tylg set Drivr+Objct
|
|
25 atrv set ReEnt+rev
|
1287
|
26 rev set $00
|
257
|
27 edition set 4
|
|
28
|
241
|
29 mod eom,name,tylg,atrv,start,size
|
257
|
30
|
241
|
31 u0000 rmb 2
|
|
32 u0002 rmb 1
|
|
33 u0003 rmb 1
|
|
34 u0004 rmb 1
|
|
35 u0005 rmb 4
|
|
36 u0009 rmb 2
|
|
37 u000B rmb 1
|
|
38 u000C rmb 1
|
|
39 u000D rmb 11
|
|
40 u0018 rmb 1
|
|
41 u0019 rmb 1
|
|
42 u001A rmb 1
|
|
43 u001B rmb 1
|
|
44 u001C rmb 1
|
|
45 u001D rmb 2
|
|
46 u001F rmb 2
|
|
47 u0021 rmb 1
|
|
48 u0022 rmb 1
|
|
49 u0023 rmb 1
|
|
50 u0024 rmb 1
|
|
51 u0025 rmb 1
|
|
52 u0026 rmb 2
|
|
53 u0028 rmb 1
|
|
54 u0029 rmb 2
|
|
55 u002B rmb 1
|
|
56 u002C rmb 1
|
|
57 u002D rmb 2
|
|
58 u002F rmb 1
|
|
59 u0030 rmb 1
|
|
60 u0031 rmb 2
|
|
61 u0033 rmb 1
|
|
62 u0034 rmb 1
|
|
63 u0035 rmb 1
|
|
64 u0036 rmb 1
|
|
65 u0037 rmb 1
|
|
66 u0038 rmb 1
|
|
67 u0039 rmb 1
|
|
68 u003A rmb 1
|
1114
|
69 vhwaddr rmb 2 address of keyboard hardware
|
1512
|
70 u003D rmb 1 SHIFTLOCK toggle
|
241
|
71 u003E rmb 1
|
|
72 u003F rmb 1
|
|
73 u0040 rmb 1
|
|
74 u0041 rmb 1
|
|
75 u0042 rmb 1
|
|
76 u0043 rmb 1
|
|
77 u0044 rmb 1
|
1512
|
78 u0045 rmb 1 SHIFT key flag
|
|
79 u0046 rmb 1 CONTROL key flag
|
241
|
80 u0047 rmb 1
|
|
81 u0048 rmb 1
|
|
82 u0049 rmb 1
|
|
83 u004A rmb 1
|
|
84 u004B rmb 10
|
|
85 u0055 rmb 26
|
|
86 u006F rmb 91
|
|
87 size equ .
|
|
88 fcb $07
|
257
|
89
|
|
90 name fcs /KBVDIO/
|
|
91 fcb edition
|
242
|
92
|
257
|
93 start lbra Init
|
|
94 lbra Read
|
|
95 lbra Write
|
|
96 lbra GetStat
|
|
97 lbra SetStat
|
|
98 lbra Term
|
|
99
|
1512
|
100 Init lbsr AllocMem allocate video memory
|
|
101 lbra L002D unsure why this is here.. timing?
|
|
102 L002D pshs cc save CC
|
|
103 orcc #IRQMask mask IRQs
|
|
104 stu >D.KbdSta save our static mem
|
|
105 ldd >D.IRQ get current IRQ vector address
|
|
106 std >D.AltIRQ store in Alt. IRQ vector
|
|
107 leax >OurIRQ,pcr point to our IRQ address
|
|
108 stx >D.IRQ store in D.IRQ
|
|
109 ldx #$FF00 get address of PIA
|
|
110 stx <vhwaddr,u store in statics for IRQ routine
|
241
|
111 clra
|
|
112 clrb
|
|
113 std <u0048,u
|
1512
|
114 sta $01,x clear $FF01
|
|
115 sta ,x clear $FF00
|
|
116 sta $03,x clear $FF03
|
|
117 comb B = $FF now
|
241
|
118 stb <u003D,u
|
1512
|
119 stb $02,x put $FF in $FF02
|
241
|
120 stb <u003F,u
|
|
121 stb <u0040,u
|
|
122 stb <u0041,u
|
|
123 lda #$34
|
1512
|
124 sta $01,x put $34 in $FF01
|
241
|
125 lda #$3F
|
1512
|
126 sta $03,x put $3F in $FF03
|
|
127 lda $02,x get byte at $FF02
|
|
128 puls pc,cc get CC and return
|
|
129 ldb #E$Write
|
|
130 orcc #Carry set carry
|
|
131 rts and return
|
1114
|
132
|
1512
|
133 GetStat cmpa #SS.Ready SS.Ready call?
|
|
134 bne L0082 branch if not
|
241
|
135 lda <u0049,u
|
|
136 suba <u0048,u
|
1114
|
137 bne GSOk
|
|
138 ldb #E$NotRdy
|
241
|
139 bra L009A
|
1512
|
140 L0082 cmpa #SS.EOF End of file?
|
|
141 beq GSOk branch if so
|
1114
|
142 cmpa #SS.DStat
|
1512
|
143 lbeq L04E4
|
|
144 cmpa #SS.Joy joystick value acquisition?
|
241
|
145 lbeq L085F
|
1512
|
146 cmpa #SS.AlfaS Alfa display status?
|
|
147 lbeq L04CD branch if so
|
257
|
148
|
|
149 SetStat ldb #E$UnkSvc
|
|
150 L009A orcc #Carry
|
241
|
151 rts
|
257
|
152
|
1512
|
153 Term pshs cc save CC
|
|
154 orcc #IRQMask mask IRQs
|
|
155 ldx >D.AltIRQ get Alt. IRQ address
|
|
156 stx >D.IRQ and restore it to D.IRQ
|
|
157 puls pc,cc get CC and return
|
257
|
158
|
241
|
159 L00A9 incb
|
|
160 cmpb #$7F
|
|
161 bls L00AF
|
1114
|
162 GSOk clrb
|
241
|
163 L00AF rts
|
1114
|
164
|
|
165 * Driver's IRQ Routine
|
1512
|
166 OurIRQ ldu >D.KbdSta get pointer to driver's statics
|
|
167 ldx <vhwaddr,u get keyboard hardware address
|
|
168 lda $03,x get byte
|
|
169 bmi L00BE branch if hi bit set
|
|
170 jmp [>D.SvcIRQ] else jump on
|
241
|
171 L00BE lda $02,x
|
|
172 lda #$FF
|
|
173 sta $02,x
|
|
174 lda ,x
|
|
175 coma
|
|
176 anda #$03
|
|
177 bne L00D4
|
|
178 clr $02,x
|
|
179 lda ,x
|
|
180 coma
|
|
181 anda #$7F
|
|
182 bne L00F1
|
|
183 L00D4 clra
|
|
184 coma
|
|
185 sta <u003F,u
|
|
186 sta <u0040,u
|
|
187 sta <u0041,u
|
257
|
188 L00DF lda >D.DskTmr
|
241
|
189 beq L00ED
|
|
190 deca
|
257
|
191 sta >D.DskTmr
|
241
|
192 bne L00ED
|
|
193 sta >$FF48
|
257
|
194 L00ED jmp [>D.AltIRQ]
|
241
|
195 L00F1 bsr L013F
|
|
196 bmi L00DF
|
|
197 sta <u0047,u
|
1512
|
198 cmpa #$1F control-zero?
|
241
|
199 bne L0101
|
1512
|
200 com <u003D,u yes, toggle SHIFTLOCK
|
241
|
201 bra L00DF
|
|
202 L0101 ldb <u0048,u
|
|
203 leax <u004A,u
|
|
204 abx
|
|
205 bsr L00A9
|
|
206 cmpb <u0049,u
|
|
207 beq L0112
|
|
208 stb <u0048,u
|
|
209 L0112 sta ,x
|
|
210 beq L0132
|
|
211 cmpa u000D,u
|
|
212 bne L0122
|
|
213 ldx u0009,u
|
|
214 beq L0132
|
|
215 sta $08,x
|
|
216 bra L0132
|
|
217 L0122 ldb #$03
|
|
218 cmpa u000B,u
|
|
219 beq L012E
|
|
220 ldb #$02
|
|
221 cmpa u000C,u
|
|
222 bne L0132
|
|
223 L012E lda u0003,u
|
|
224 bra L0136
|
1114
|
225 L0132 ldb #S$Wake
|
|
226 lda V.WAKE,u
|
241
|
227 L0136 beq L013B
|
1512
|
228 os9 F$Send send signal to process
|
1114
|
229 L013B clr V.WAKE,u
|
241
|
230 bra L00DF
|
1512
|
231
|
241
|
232 L013F clra
|
|
233 sta <u003E,u
|
|
234 sta <u0045,u
|
|
235 sta <u0046,u
|
|
236 coma
|
|
237 sta <u0042,u
|
|
238 sta <u0043,u
|
|
239 sta <u0044,u
|
|
240 deca
|
1512
|
241 sta $02,x strobe column #0 ($FF02)
|
|
242 L0156 lda ,x read row register ($FF00)
|
|
243 coma flip bits to active-high
|
|
244 anda #$7F mask off joystick row
|
|
245 beq L0169 no keypress in this column
|
241
|
246 ldb #$FF
|
|
247 L015F incb
|
|
248 lsra
|
1512
|
249 bcc L0165 no key in this row, move along
|
|
250 bsr L01AF keypress detected, process row & col
|
|
251 L0165 cmpb #$06 final row checked?
|
241
|
252 bcs L015F
|
1512
|
253 L0169 inc <u003E,u bump column counter
|
1114
|
254 orcc #Carry
|
1512
|
255 rol $02,x strobe next column
|
241
|
256 bcs L0156
|
|
257 lbsr L01F8
|
|
258 bmi L01AE
|
|
259 suba #$1B
|
1512
|
260 bcc L0191 not an alpha key
|
241
|
261 adda #$1B
|
1512
|
262 ldb <u0046,u control key pressed?
|
|
263 bne L0190 yes, return CTRL code
|
|
264 adda #$40 no, convert to ASCII
|
|
265 ldb <u0045,u shift key pressed?
|
241
|
266 eorb <u003D,u
|
|
267 andb #$01
|
|
268 bne L0190
|
|
269 adda #$20
|
|
270 L0190 rts
|
1512
|
271 L0191 ldb #3 three values per key
|
241
|
272 mul
|
1512
|
273 lda <u0045,u shift key pressed?
|
241
|
274 beq L019C
|
1512
|
275 incb yes, use 2nd value
|
241
|
276 bra L01A3
|
1512
|
277 L019C lda <u0046,u control key pressed?
|
241
|
278 beq L01A3
|
1512
|
279 addb #$02 yes, use 3rd value
|
241
|
280 L01A3 pshs x
|
|
281 leax >L023E,pcr
|
|
282 clra
|
|
283 lda d,x
|
|
284 puls x
|
|
285 L01AE rts
|
1512
|
286
|
|
287 * convert row number in B.reg from DRAGON to COCO order
|
241
|
288 L01AF pshs b
|
|
289 cmpb #$06
|
|
290 beq L01BF
|
|
291 cmpb #$01
|
|
292 bhi L01BD
|
|
293 addb #$04
|
|
294 bra L01BF
|
|
295 L01BD subb #$02
|
1512
|
296 L01BF lslb multiply row * 8
|
241
|
297 lslb
|
|
298 lslb
|
1512
|
299 addb <u003E,u add column. B.reg now = keycode ($00-$37)
|
|
300 cmpb #$31 is this the CLEAR key?
|
241
|
301 bne L01CE
|
1512
|
302 inc <u0046,u yes, set control pressed flag
|
241
|
303 puls pc,b
|
1512
|
304 L01CE cmpb #$37 is this a SHIFT key?
|
241
|
305 bne L01D7
|
1512
|
306 com <u0045,u yes, set shift pressed flag
|
241
|
307 puls pc,b
|
|
308 L01D7 pshs x
|
|
309 leax <u0042,u
|
|
310 bsr L01E2
|
|
311 puls x
|
|
312 puls pc,b
|
|
313 L01E2 pshs a
|
|
314 lda ,x
|
|
315 bpl L01EC
|
|
316 stb ,x
|
|
317 puls pc,a
|
|
318 L01EC lda $01,x
|
|
319 bpl L01F4
|
|
320 stb $01,x
|
|
321 puls pc,a
|
|
322 L01F4 stb $02,x
|
|
323 puls pc,a
|
|
324 L01F8 pshs y,x,b
|
|
325 leax <u003F,u
|
|
326 ldb #$03
|
|
327 pshs b
|
|
328 L0201 leay <u0042,u
|
|
329 ldb #$03
|
|
330 lda ,x
|
|
331 bmi L021D
|
|
332 L020A cmpa ,y
|
|
333 bne L0214
|
|
334 clr ,y
|
|
335 com ,y
|
|
336 bra L021D
|
|
337 L0214 leay $01,y
|
|
338 decb
|
|
339 bne L020A
|
|
340 lda #$FF
|
|
341 sta ,x
|
|
342 L021D leax $01,x
|
|
343 dec ,s
|
|
344 bne L0201
|
|
345 leas $01,s
|
|
346 leax <u0042,u
|
|
347 lda #$03
|
|
348 L022A ldb ,x+
|
|
349 bpl L0235
|
|
350 deca
|
|
351 bne L022A
|
1114
|
352 orcc #Negative
|
241
|
353 puls pc,y,x,b
|
1114
|
354
|
241
|
355 L0235 leax <u003F,u
|
|
356 bsr L01E2
|
|
357 tfr b,a
|
|
358 puls pc,y,x,b
|
1114
|
359
|
1512
|
360 *RVH: the following is a non-alpha key lookup table with
|
|
361 *normal/shift/control codes for each key (1D,1E,7F missing)
|
|
362 L023E fcb $0C,$1C,$13 UP-ARROW (FF| FS|DC3)
|
|
363 L0241 fcb $0A,$1A,$12 DN-ARROW (LF|SUB|DC2)
|
|
364 L0244 fcb $08,$18,$10 LF-ARROW (BS|CAN|DLE)
|
|
365 L0247 fcb $09,$19,$11 RT-ARROW (HT| EM|DC1)
|
|
366 L024A fcb $20,$20,$20 SPACEBAR
|
|
367 L024D fcb $30,$30,$1F 0 0 . (1F=shiftlock toggle)
|
|
368 L0250 fcb $31,$21,$7C 1 ! |
|
|
369 L0253 fcb $32,$22,$00 2 " null
|
|
370 L0256 fcb $33,$23,$7E 3 # ~
|
|
371 L0259 fcb $34,$24,$00 4 $ null
|
|
372 L025C fcb $35,$25,$00 5 % null
|
|
373 L025F fcb $36,$26,$00 6 & null
|
|
374 L0262 fcb $37,$27,$5E 7 ' ^
|
|
375 L0265 fcb $38,$28,$5B 8 ( [
|
|
376 L0268 fcb $39,$29,$5D 9 ) ]
|
|
377 L026B fcb $3A,$2A,$00 : * null
|
|
378 L026E fcb $3B,$2B,$00 ; + null
|
|
379 L0271 fcb $2C,$3C,$7B , < {
|
|
380 L0274 fcb $2D,$3D,$5F - = _
|
|
381 L0277 fcb $2E,$3E,$7D . > }
|
|
382 L027A fcb $2F,$3F,$5C / ? \
|
|
383 L027D fcb $0D,$0D,$0D ENTER
|
|
384 L0280 fcb $00,$00,$00 CLEAR?
|
|
385 L0283 fcb $05,$03,$1B BREAK (ENQ|ETX|ESC)
|
257
|
386
|
|
387 Read leax <u004A,u
|
241
|
388 ldb <u0049,u
|
1114
|
389 orcc #IRQMask
|
241
|
390 cmpb <u0048,u
|
|
391 beq L029F
|
|
392 abx
|
|
393 lda ,x
|
|
394 lbsr L00A9
|
|
395 stb <u0049,u
|
1114
|
396 andcc #^(IRQMask+Carry)
|
241
|
397 rts
|
1114
|
398
|
|
399 L029F lda V.BUSY,u
|
|
400 sta V.WAKE,u
|
|
401 andcc #^IRQMask
|
241
|
402 ldx #$0000
|
|
403 os9 F$Sleep
|
1114
|
404 clr V.WAKE,u
|
241
|
405 ldx <u004B
|
|
406 L02AF ldb <$36,x
|
257
|
407 beq Read
|
241
|
408 cmpb #$04
|
257
|
409 L02B6 bcc Read
|
241
|
410 coma
|
|
411 rts
|
1114
|
412
|
|
413 * Allocate video memory on a 512 byte boundary
|
|
414 AllocMem pshs y,x
|
241
|
415 clr <u0025,u
|
|
416 clr <u002C,u
|
1114
|
417 L02C2 pshs u save static mem pointer
|
|
418 ldd #768
|
|
419 L02C7 os9 F$SRqMem get 768 bytes
|
|
420 tfr u,d put pointer into D
|
|
421 tfr u,x and X
|
|
422 bita #$01 odd or even page?
|
|
423 beq L02D8 branch if even
|
|
424 leax >256,x else memory not on 512 byte boundary
|
242
|
425 L02D6 bra L02DC
|
1114
|
426 L02D8 leau >512,u free last page
|
|
427 L02DC ldd #256 get page amount
|
|
428 os9 F$SRtMem and return page to system
|
|
429 puls u get static mem pointer
|
|
430 stx <u001D,u save pointer to page
|
241
|
431 clra
|
|
432 clrb
|
|
433 bsr L0303
|
|
434 stx <u0021,u
|
1114
|
435 leax >512,x
|
241
|
436 stx <u001F,u
|
1512
|
437 lbsr L0459 clear screen
|
241
|
438 lda #$60
|
|
439 sta <u0023,u
|
|
440 sta <u002B,u
|
|
441 clrb
|
|
442 puls pc,y,x
|
1114
|
443
|
241
|
444 L0303 pshs x,a
|
|
445 lda >$FF22
|
|
446 anda #$07
|
|
447 ora ,s+
|
|
448 sta >$FF22
|
|
449 tstb
|
|
450 bne L0320
|
|
451 stb >$FFC0
|
|
452 stb >$FFC2
|
|
453 stb >$FFC4
|
|
454 lda <u001D,u
|
|
455 bra L032C
|
|
456 L0320 stb >$FFC0
|
|
457 stb >$FFC3
|
|
458 stb >$FFC5
|
|
459 lda <u002D,u
|
|
460 L032C ldb #$07
|
|
461 ldx #$FFC6
|
|
462 lsra
|
|
463 L0332 lsra
|
|
464 bcs L033B
|
|
465 sta ,x+
|
|
466 leax $01,x
|
|
467 bra L033F
|
|
468 L033B leax $01,x
|
|
469 sta ,x+
|
|
470 L033F decb
|
|
471 bne L0332
|
|
472 clrb
|
|
473 puls pc,x
|
1114
|
474
|
257
|
475 Write ldb <u0025,u
|
241
|
476 bne L0387
|
|
477 tsta
|
|
478 bmi L0371
|
|
479 cmpa #$1F
|
|
480 bls L03BC
|
|
481 cmpa #$7C
|
|
482 bne L0359
|
|
483 lda #$61
|
|
484 bra L0371
|
|
485 L0359 cmpa #$7E
|
|
486 bne L0361
|
|
487 lda #$6D
|
|
488 bra L0371
|
|
489 L0361 cmpa #$60
|
|
490 bcs L036B
|
|
491 suba #$20
|
|
492 ora #$40
|
|
493 bra L0371
|
|
494 L036B cmpa #$40
|
|
495 bcs L0371
|
|
496 suba #$40
|
|
497 L0371 ldx <u0021,u
|
|
498 eora #$40
|
|
499 sta ,x+
|
|
500 stx <u0021,u
|
|
501 cmpx <u001F,u
|
|
502 bcs L0382
|
|
503 bsr L039C
|
|
504 L0382 lbsr L0415
|
|
505 clrb
|
|
506 rts
|
|
507 L0387 cmpb #$01
|
|
508 beq L0394
|
|
509 clr <u0025,u
|
|
510 sta <u0029,u
|
|
511 jmp [<u0026,u]
|
|
512 L0394 sta <u0028,u
|
|
513 inc <u0025,u
|
1512
|
514 * no operation entry point
|
|
515 L039A clrb
|
241
|
516 rts
|
|
517 L039C ldx <u001D,u
|
|
518 leax <$20,x
|
|
519 L03A2 ldd ,x++
|
|
520 std <-$22,x
|
|
521 cmpx <u001F,u
|
|
522 bcs L03A2
|
|
523 leax <-$20,x
|
|
524 stx <u0021,u
|
|
525 lda #$20
|
|
526 ldb #$60
|
|
527 L03B6 stb ,x+
|
|
528 deca
|
|
529 bne L03B6
|
|
530 L03BB rts
|
1512
|
531 L03BC cmpa #27
|
241
|
532 bcc L03BB
|
|
533 cmpa #$10
|
|
534 bcs L03CE
|
|
535 ldb <u002C,u
|
|
536 bne L03CE
|
1512
|
537 ldb #E$NotRdy
|
1114
|
538 orcc #Carry
|
241
|
539 rts
|
1114
|
540
|
241
|
541 L03CE leax <L03D6,pcr
|
|
542 lsla
|
|
543 ldd a,x
|
|
544 jmp d,x
|
1114
|
545
|
1512
|
546 * dispatch table for display function codes
|
|
547 L03D6 fdb L039A-L03D6 $FFC4 00: no-op
|
|
548 fdb L0467-L03D6 $0091 01: home cursor
|
|
549 fdb L047B-L03D6 $00A5 02: cursor xy
|
|
550 fdb L04A6-L03D6 $00D0 03: erase line
|
|
551 fdb L039A-L03D6 $FFC4 04: no-op
|
|
552 fdb L039A-L03D6 $FFC4 05: no-op
|
|
553 fdb L044B-L03D6 $0075 06: cursor right
|
|
554 fdb L039A-L03D6 $FFC4 07: no-op
|
|
555 fdb L043D-L03D6 $0067 08: cursor left
|
|
556 fdb L04B8-L03D6 $00E2 09: cursor up
|
|
557 fdb L0424-L03D6 $004E 0A: cursor down
|
|
558 fdb L039A-L03D6 $FFC4 0B: no-op
|
|
559 fdb L0459-L03D6 $0083 0C: clear screen
|
|
560 fdb L040C-L03D6 $0036 0D: return cursor to start of line
|
|
561 fdb L04C8-L03D6 $00F2 0E: display alpha
|
|
562 fdb L0520-L03D6 $014A 0F: display graphics
|
|
563 fdb L0604-L03D6 $022E 10: preset screen to specific color
|
|
564 fdb L05DF-L03D6 $0209 11: set color
|
|
565 fdb L05F3-L03D6 $021D 12: end graphics
|
|
566 fdb L0624-L03D6 $024E 13: erase graphics
|
|
567 fdb L062F-L03D6 $0259 14: home graphics cursor
|
|
568 fdb L0648-L03D6 $0272 15: Set Graphics Cursor
|
|
569 fdb L06B5-L03D6 $02DF 16: Draw Line
|
|
570 fdb L06B0-L03D6 $02DA 17: Erase Line
|
|
571 fdb L065F-L03D6 $0289 18: Set Point
|
|
572 fdb L065A-L03D6 $0284 19: Erase Point
|
|
573 fdb L077E-L03D6 $03A8 1A: Draw Circle
|
1114
|
574
|
1512
|
575 * $0D - return cursor to start of line (carriage return)
|
|
576 L040C bsr L0472
|
|
577 tfr x,d
|
241
|
578 andb #$E0
|
|
579 stb <u0022,u
|
|
580 L0415 ldx <u0021,u
|
|
581 lda ,x
|
|
582 sta <u0023,u
|
|
583 lda #$20
|
|
584 sta ,x
|
1114
|
585 andcc #^Carry
|
241
|
586 rts
|
1114
|
587
|
1512
|
588 * $0A - cursor down
|
|
589 L0424 bsr L0472
|
241
|
590 leax <$20,x
|
|
591 cmpx <u001F,u
|
|
592 bcs L0438
|
|
593 leax <-$20,x
|
|
594 pshs x
|
|
595 lbsr L039C
|
|
596 puls x
|
|
597 L0438 stx <u0021,u
|
|
598 bra L0415
|
1512
|
599
|
|
600 * $08 - cursor left
|
|
601 L043D bsr L0472
|
241
|
602 cmpx <u001D,u
|
|
603 bls L0449
|
|
604 leax -$01,x
|
|
605 stx <u0021,u
|
|
606 L0449 bra L0415
|
1512
|
607
|
|
608 * $06 - cursor right
|
|
609 L044B bsr L0472
|
241
|
610 leax $01,x
|
|
611 cmpx <u001F,u
|
|
612 bcc L0457
|
|
613 stx <u0021,u
|
|
614 L0457 bra L0415
|
1512
|
615
|
|
616 * $0C - clear screen
|
241
|
617 L0459 bsr L0467
|
|
618 lda #$60
|
|
619 L045D sta ,x+
|
|
620 cmpx <u001F,u
|
|
621 bcs L045D
|
|
622 lbra L0415
|
1512
|
623
|
|
624 * $01 - home cursor
|
241
|
625 L0467 bsr L0472
|
|
626 ldx <u001D,u
|
|
627 stx <u0021,u
|
|
628 lbra L0415
|
|
629 L0472 ldx <u0021,u
|
|
630 lda <u0023,u
|
|
631 sta ,x
|
|
632 rts
|
1512
|
633
|
|
634 * $02 XX YY - cursor xy (move cursor to XX-32,YY-32)
|
|
635 L047B leax <L0481,pcr
|
241
|
636 lbra L064B
|
|
637 L0481 bsr L0472
|
|
638 ldb <u0029,u
|
|
639 subb #$20
|
|
640 lda #$20
|
|
641 mul
|
|
642 addb <u0028,u
|
|
643 adca #$00
|
|
644 subd #$0020
|
|
645 addd <u001D,u
|
|
646 cmpd <u001F,u
|
|
647 bcc L04A3
|
|
648 std <u0021,u
|
|
649 lbsr L0415
|
|
650 clrb
|
|
651 L04A3 lbra L0415
|
1512
|
652
|
|
653 * $03 - erase line
|
|
654 L04A6 lbsr L040C do a CR
|
|
655 ldb #$20 32 chars per line
|
|
656 lda #$60 space char for VDG screen
|
241
|
657 ldx <u0021,u
|
1512
|
658 L04B0 sta ,x+ fill screen line with 'space'
|
241
|
659 decb
|
|
660 bne L04B0
|
|
661 lbra L0415
|
1512
|
662
|
|
663 * $09 - cursor up
|
|
664 L04B8 bsr L0472
|
241
|
665 leax <-$20,x
|
|
666 cmpx <u001D,u
|
|
667 bcs L04C5
|
|
668 stx <u0021,u
|
|
669 L04C5 lbra L0415
|
1512
|
670
|
|
671 * $0E - display alpha
|
|
672 L04C8 clra
|
241
|
673 clrb
|
|
674 lbra L0303
|
|
675 L04CD ldx $06,y
|
|
676 ldd <u001D,u
|
|
677 std $04,x
|
|
678 ldd <u0021,u
|
|
679 std $06,x
|
|
680 ldb <u003D,u
|
|
681 stb $01,x
|
|
682 clrb
|
|
683 rts
|
1114
|
684
|
1512
|
685 * 4-color mode color table
|
|
686 L04E0 fcb $00,$55,$AA,$FF
|
1114
|
687
|
1512
|
688 L04E4 lda <u002C,u
|
|
689 bne L04EE
|
|
690 L04E9 ldb #E$NotRdy
|
|
691 orcc #Carry
|
|
692 rts
|
|
693
|
|
694 L04EE ldd <u0034,u
|
241
|
695 lbsr L0684
|
|
696 tfr a,b
|
|
697 andb ,x
|
|
698 L04F8 bita #$01
|
|
699 bne L0507
|
|
700 lsra
|
|
701 lsrb
|
|
702 tst <u0024,u
|
|
703 bmi L04F8
|
|
704 lsra
|
|
705 lsrb
|
|
706 bra L04F8
|
|
707 L0507 pshs b
|
|
708 ldb <u003A,u
|
|
709 andb #$FC
|
|
710 L050E orb ,s+
|
|
711 ldx $06,y
|
|
712 stb $01,x
|
|
713 ldd <u0034,u
|
|
714 std $06,x
|
|
715 ldd <u002D,u
|
|
716 std $04,x
|
|
717 clrb
|
|
718 rts
|
1512
|
719
|
|
720 * $0F - display graphics
|
|
721 L0520 leax <L0526,pcr
|
241
|
722 lbra L064B
|
|
723 L0526 ldb <u002C,u
|
|
724 bne L0566
|
|
725 pshs u
|
|
726 ldd #$1900
|
|
727 os9 F$SRqMem
|
|
728 tfr u,d
|
|
729 puls u
|
|
730 bcs L0585
|
|
731 tfr a,b
|
|
732 bita #$01
|
|
733 beq L0543
|
|
734 adda #$01
|
|
735 bra L0545
|
|
736 L0543 addb #$18
|
|
737 L0545 pshs u,a
|
|
738 tfr b,a
|
|
739 clrb
|
|
740 tfr d,u
|
|
741 ldd #$0100
|
|
742 os9 F$SRtMem
|
|
743 puls u,a
|
|
744 bcs L0585
|
|
745 clrb
|
|
746 std <u002D,u
|
|
747 addd #$1800
|
|
748 std <u002F,u
|
|
749 inc <u002C,u
|
|
750 lbsr L0624
|
|
751 L0566 lda <u0029,u
|
|
752 sta <u003A,u
|
|
753 anda #$03
|
|
754 leax >L04E0,pcr
|
|
755 lda a,x
|
|
756 sta <u0036,u
|
|
757 sta <u0037,u
|
|
758 lda <u0028,u
|
|
759 cmpa #$01
|
|
760 bls L0586
|
1512
|
761 ldb #E$BMode illegal mode
|
1114
|
762 orcc #Carry
|
241
|
763 L0585 rts
|
1114
|
764
|
241
|
765 L0586 tsta
|
|
766 beq L05A6
|
|
767 ldd #$C003
|
|
768 std <u0038,u
|
|
769 lda #$01
|
|
770 sta <u0024,u
|
|
771 lda #$E0
|
|
772 ldb <u0029,u
|
|
773 andb #$08
|
|
774 beq L059F
|
|
775 lda #$F0
|
|
776 L059F ldb #$03
|
|
777 leax <L05D3,pcr
|
|
778 bra L05BE
|
|
779 L05A6 ldd #$8001
|
|
780 std <u0038,u
|
|
781 lda #$FF
|
|
782 sta <u0036,u
|
|
783 sta <u0037,u
|
|
784 sta <u0024,u
|
|
785 lda #$F0
|
|
786 ldb #$07
|
|
787 leax <L05D7,pcr
|
|
788 L05BE stb <u0033,u
|
|
789 stx <u0031,u
|
|
790 ldb <u0029,u
|
|
791 andb #$04
|
|
792 lslb
|
|
793 pshs b
|
|
794 ora ,s+
|
|
795 ldb #$01
|
|
796 lbra L0303
|
1114
|
797
|
1512
|
798 * 4-color mode pixel masks
|
1114
|
799 L05D3 fcb $C0,$30,$0C,$03
|
1512
|
800
|
|
801 * 2-color mode pixel masks
|
|
802 L05D7 fcb $80,$40,$20,$10,$08,$04,$02,$01
|
1114
|
803
|
1512
|
804 * $11 - set color
|
|
805 L05DF leax <L05E5,pcr
|
|
806 lbra L0781
|
|
807 L05E5 clr <u0028,u
|
|
808 lda <u0024,u
|
|
809 bmi L05F0
|
241
|
810 inc <u0028,u
|
|
811 L05F0 lbra L0566
|
1512
|
812
|
|
813 * $12 - end graphics
|
|
814 L05F3 pshs u
|
241
|
815 ldu <u002D,u
|
1512
|
816 ldd #6144 size of graphics screen
|
241
|
817 os9 F$SRtMem
|
|
818 puls u
|
|
819 clr <u002C,u
|
|
820 rts
|
1512
|
821
|
|
822 * $10 - preset screen to specified color
|
|
823 L0604 leax <L060A,pcr
|
241
|
824 lbra L0781
|
|
825 L060A lda <u0029,u
|
|
826 tst <u0024,u
|
|
827 bpl L061A
|
|
828 ldb #$FF
|
|
829 anda #$01
|
|
830 beq L0624
|
|
831 bra L0625
|
|
832 L061A anda #$03
|
|
833 leax >L04E0,pcr
|
|
834 ldb a,x
|
|
835 bra L0625
|
1512
|
836
|
|
837 * $13 - erase graphics
|
241
|
838 L0624 clrb
|
|
839 L0625 ldx <u002D,u
|
|
840 L0628 stb ,x+
|
|
841 cmpx <u002F,u
|
|
842 bcs L0628
|
1512
|
843
|
|
844 * $14 - home graphics cursor
|
|
845 L062F clra
|
241
|
846 clrb
|
|
847 std <u0034,u
|
|
848 rts
|
|
849 L0635 ldd <u0028,u
|
1512
|
850 cmpb #192
|
241
|
851 bcs L063E
|
1512
|
852 ldb #192-1
|
241
|
853 L063E tst <u0024,u
|
|
854 bmi L0644
|
|
855 lsra
|
|
856 L0644 std <u0028,u
|
|
857 rts
|
1512
|
858
|
|
859 * $15 - set graphics cursor
|
|
860 L0648 leax <L0653,pcr
|
241
|
861 L064B stx <u0026,u
|
|
862 inc <u0025,u
|
|
863 clrb
|
|
864 rts
|
|
865 L0653 bsr L0635
|
|
866 std <u0034,u
|
|
867 clrb
|
|
868 rts
|
1512
|
869
|
|
870 * $19 - erase point
|
|
871 L065A clr <u0036,u
|
241
|
872 bra L065F
|
1512
|
873
|
|
874 * $18 - set point
|
241
|
875 L065F leax <L0664,pcr
|
|
876 bra L064B
|
|
877 L0664 bsr L0635
|
|
878 std <u0034,u
|
|
879 bsr L0673
|
|
880 lda <u0037,u
|
|
881 sta <u0036,u
|
|
882 clrb
|
|
883 rts
|
|
884 L0673 bsr L0684
|
|
885 tfr a,b
|
|
886 comb
|
|
887 andb ,x
|
|
888 stb ,x
|
|
889 anda <u0036,u
|
|
890 ora ,x
|
|
891 sta ,x
|
|
892 rts
|
|
893 L0684 pshs y,b,a
|
|
894 ldb <u0024,u
|
|
895 bpl L068C
|
|
896 lsra
|
|
897 L068C lsra
|
|
898 lsra
|
|
899 pshs a
|
|
900 ldb #$BF
|
|
901 subb $02,s
|
|
902 lda #$20
|
|
903 mul
|
|
904 addb ,s+
|
|
905 adca #$00
|
|
906 ldy <u002D,u
|
|
907 leay d,y
|
|
908 lda ,s
|
|
909 sty ,s
|
|
910 anda <u0033,u
|
|
911 ldx <u0031,u
|
|
912 lda a,x
|
|
913 puls pc,y,x
|
1512
|
914
|
|
915 * $17 - erase line
|
|
916 L06B0 clr <u0036,u
|
241
|
917 bra L06B5
|
1512
|
918
|
|
919 * $16 - draw line
|
241
|
920 L06B5 leax <L06BA,pcr
|
|
921 bra L064B
|
|
922 L06BA lbsr L0635
|
|
923 leas -$0E,s
|
|
924 std $0C,s
|
|
925 bsr L0684
|
|
926 stx $02,s
|
|
927 sta $01,s
|
|
928 ldd <u0034,u
|
|
929 bsr L0684
|
|
930 sta ,s
|
|
931 clra
|
|
932 clrb
|
|
933 std $04,s
|
|
934 lda #$BF
|
|
935 suba <u0035,u
|
|
936 sta <u0035,u
|
|
937 lda #$BF
|
|
938 suba <u0029,u
|
|
939 sta <u0029,u
|
|
940 lda #$FF
|
|
941 sta $06,s
|
|
942 clra
|
|
943 ldb <u0034,u
|
|
944 subb <u0028,u
|
|
945 sbca #$00
|
|
946 bpl L06F7
|
|
947 nega
|
|
948 negb
|
|
949 sbca #$00
|
|
950 neg $06,s
|
|
951 L06F7 std $08,s
|
|
952 bne L0700
|
|
953 ldd #$FFFF
|
|
954 std $04,s
|
|
955 L0700 lda #$E0
|
|
956 sta $07,s
|
|
957 clra
|
|
958 ldb <u0035,u
|
|
959 subb <u0029,u
|
|
960 sbca #$00
|
|
961 bpl L0715
|
|
962 nega
|
|
963 negb
|
|
964 sbca #$00
|
|
965 neg $07,s
|
|
966 L0715 std $0A,s
|
|
967 bra L0721
|
|
968 L0719 sta ,s
|
|
969 ldd $04,s
|
|
970 subd $0A,s
|
|
971 std $04,s
|
|
972 L0721 lda ,s
|
|
973 tfr a,b
|
|
974 anda <u0036,u
|
|
975 comb
|
|
976 andb ,x
|
|
977 pshs b
|
|
978 ora ,s+
|
|
979 sta ,x
|
|
980 cmpx $02,s
|
|
981 bne L073B
|
|
982 lda ,s
|
|
983 cmpa $01,s
|
|
984 beq L076F
|
|
985 L073B ldd $04,s
|
|
986 bpl L0749
|
|
987 addd $08,s
|
|
988 std $04,s
|
|
989 lda $07,s
|
|
990 leax a,x
|
|
991 bra L0721
|
|
992 L0749 lda ,s
|
|
993 ldb $06,s
|
|
994 bpl L075F
|
|
995 lsla
|
|
996 ldb <u0024,u
|
|
997 bmi L0756
|
|
998 lsla
|
|
999 L0756 bcc L0719
|
|
1000 lda <u0039,u
|
|
1001 leax -$01,x
|
|
1002 bra L0719
|
|
1003 L075F lsra
|
|
1004 ldb <u0024,u
|
|
1005 bmi L0766
|
|
1006 lsra
|
|
1007 L0766 bcc L0719
|
|
1008 lda <u0038,u
|
|
1009 leax $01,x
|
|
1010 bra L0719
|
|
1011 L076F ldd $0C,s
|
|
1012 std <u0034,u
|
|
1013 leas $0E,s
|
|
1014 lda <u0037,u
|
|
1015 sta <u0036,u
|
|
1016 clrb
|
|
1017 rts
|
1512
|
1018
|
|
1019 * $1A - draw circle
|
|
1020 L077E leax <L0789,pcr
|
241
|
1021 L0781 stx <u0026,u
|
|
1022 com <u0025,u
|
|
1023 clrb
|
|
1024 rts
|
|
1025 L0789 leas -$04,s
|
1512
|
1026 ldb <u0029,u get radius
|
|
1027 stb $01,s stack it
|
241
|
1028 clra
|
|
1029 sta ,s
|
|
1030 addb $01,s
|
|
1031 adca #$00
|
|
1032 nega
|
|
1033 negb
|
|
1034 sbca #$00
|
|
1035 addd #$0003
|
|
1036 std $02,s
|
|
1037 L07A0 lda ,s
|
|
1038 cmpa $01,s
|
|
1039 bcc L07D2
|
|
1040 ldb $01,s
|
|
1041 bsr L07E0
|
|
1042 clra
|
|
1043 ldb $02,s
|
|
1044 bpl L07BA
|
|
1045 ldb ,s
|
|
1046 lslb
|
|
1047 rola
|
|
1048 lslb
|
|
1049 rola
|
|
1050 addd #$0006
|
|
1051 bra L07CA
|
|
1052 L07BA dec $01,s
|
|
1053 clra
|
|
1054 ldb ,s
|
|
1055 subb $01,s
|
|
1056 sbca #$00
|
|
1057 lslb
|
|
1058 rola
|
|
1059 lslb
|
|
1060 rola
|
|
1061 addd #$000A
|
|
1062 L07CA addd $02,s
|
|
1063 std $02,s
|
|
1064 inc ,s
|
|
1065 bra L07A0
|
|
1066 L07D2 lda ,s
|
|
1067 cmpa $01,s
|
|
1068 bne L07DC
|
|
1069 ldb $01,s
|
|
1070 bsr L07E0
|
|
1071 L07DC leas $04,s
|
|
1072 clrb
|
|
1073 rts
|
|
1074 L07E0 leas -$08,s
|
|
1075 sta ,s
|
|
1076 clra
|
|
1077 std $02,s
|
|
1078 nega
|
|
1079 negb
|
|
1080 sbca #$00
|
|
1081 std $06,s
|
|
1082 ldb ,s
|
|
1083 clra
|
|
1084 std ,s
|
|
1085 nega
|
|
1086 negb
|
|
1087 sbca #$00
|
|
1088 std $04,s
|
|
1089 ldx $06,s
|
|
1090 bsr L0829
|
|
1091 ldd $04,s
|
|
1092 ldx $02,s
|
|
1093 bsr L0829
|
|
1094 ldd ,s
|
|
1095 ldx $02,s
|
|
1096 bsr L0829
|
|
1097 ldd ,s
|
|
1098 ldx $06,s
|
|
1099 bsr L0829
|
|
1100 ldd $02,s
|
|
1101 ldx ,s
|
|
1102 bsr L0829
|
|
1103 ldd $02,s
|
|
1104 ldx $04,s
|
|
1105 bsr L0829
|
|
1106 ldd $06,s
|
|
1107 ldx $04,s
|
|
1108 bsr L0829
|
|
1109 ldd $06,s
|
|
1110 ldx ,s
|
|
1111 bsr L0829
|
|
1112 leas $08,s
|
|
1113 rts
|
|
1114 L0829 pshs b,a
|
|
1115 ldb <u0035,u
|
|
1116 clra
|
|
1117 leax d,x
|
|
1118 cmpx #$0000
|
|
1119 bmi L083B
|
|
1120 cmpx #$00BF
|
|
1121 ble L083D
|
|
1122 L083B puls pc,b,a
|
|
1123 L083D ldb <u0034,u
|
|
1124 clra
|
|
1125 tst <u0024,u
|
|
1126 bmi L0848
|
|
1127 lslb
|
|
1128 rola
|
|
1129 L0848 addd ,s++
|
|
1130 tsta
|
|
1131 beq L084E
|
|
1132 rts
|
|
1133 L084E pshs b
|
|
1134 tfr x,d
|
|
1135 puls a
|
|
1136 tst <u0024,u
|
|
1137 lbmi L0673
|
|
1138 lsra
|
|
1139 lbra L0673
|
|
1140 L085F ldx $06,y
|
|
1141 pshs y,cc
|
1114
|
1142 orcc #IRQMask
|
241
|
1143 lda #$FF
|
|
1144 clr >$FF02
|
|
1145 ldb >$FF00
|
|
1146 ldy $04,x
|
|
1147 bne L0878
|
|
1148 andb #$01
|
|
1149 bne L087C
|
|
1150 bra L087D
|
|
1151 L0878 andb #$02
|
|
1152 beq L087D
|
|
1153 L087C clra
|
|
1154 L087D sta $01,x
|
|
1155 lda >$FF03
|
|
1156 ora #$08
|
|
1157 ldy $04,x
|
|
1158 bne L088B
|
|
1159 anda #$F7
|
|
1160 L088B sta >$FF03
|
|
1161 lda >$FF01
|
|
1162 anda #$F7
|
|
1163 bsr L08AA
|
|
1164 std $04,x
|
|
1165 lda >$FF01
|
|
1166 ora #$08
|
|
1167 bsr L08AA
|
|
1168 pshs b,a
|
|
1169 ldd #$003F
|
|
1170 subd ,s++
|
|
1171 std $06,x
|
|
1172 clrb
|
|
1173 puls pc,y,cc
|
|
1174 L08AA sta >$FF01
|
|
1175 clrb
|
|
1176 bsr L08BA
|
|
1177 bsr L08BA
|
|
1178 bsr L08BA
|
|
1179 bsr L08BA
|
|
1180 lsrb
|
|
1181 lsrb
|
|
1182 clra
|
|
1183 rts
|
|
1184 L08BA pshs b
|
|
1185 lda #$7F
|
|
1186 tfr a,b
|
|
1187 L08C0 lsrb
|
|
1188 cmpb #$03
|
|
1189 bhi L08CC
|
|
1190 lsra
|
|
1191 lsra
|
|
1192 tfr a,b
|
|
1193 addb ,s+
|
|
1194 rts
|
|
1195 L08CC addb #$02
|
|
1196 andb #$FC
|
|
1197 pshs b
|
|
1198 anda #$FC
|
|
1199 sta >$FF20
|
|
1200 tst >$FF00
|
|
1201 bpl L08E0
|
|
1202 adda ,s+
|
|
1203 bra L08C0
|
|
1204 L08E0 suba ,s+
|
|
1205 bra L08C0
|
257
|
1206
|
241
|
1207 emod
|
|
1208 eom equ *
|
257
|
1209 end
|
|
1210
|