Mercurial > hg > Members > kono > nitros9-code
annotate level1/modules/cohr.asm @ 3169:1ff3d7673e36
mc09 l2: bring sys/makefile in line with latest organisation for other platforms
Revise bootfiles/makefile to remove sysgo from bootfile - it can be
found on the root of the disk.
author | Neal Crook <foofoobedoo@gmail.com> |
---|---|
date | Mon, 17 Apr 2017 22:59:28 +0100 |
parents | e84a638d1c16 |
children | 799037203bef |
rev | line source |
---|---|
1933 | 1 ******************************************************************** |
2 * CoHR - Hi-Res 51x24 Graphics Console Output Subroutine for VTIO | |
3 * | |
4 * $Id$ | |
5 * | |
6 * Edt/Rev YYYY/MM/DD Modified by | |
7 * Comment | |
8 * ------------------------------------------------------------------ | |
9 * 1 ????/??/?? | |
10 * Original Dragon distribution version | |
11 * | |
12 * 2003/09/22 Rodney Hamilton | |
13 * Recoded fcb arrays, added labels & some comments | |
14 * | |
15 * 2004/11/15 P.Harvey-Smith | |
16 * Added code to turn off the drives on the Dragon Alpha. | |
17 * | |
18 * 2004/12/01 P.Harvey-Smith | |
19 * Began converting drvr51 to CoHR, removed all keyboard | |
20 * related code, added symbolic defines for a lot of things. | |
21 * | |
22 * 2004/12/02 P.Harvey-Smith | |
23 * Finished converting to c051 driver, moved all variable | |
24 * storage into ccio module (defined in cciodefs). | |
25 * | |
26 * 2005/04/09 P.Harvey-Smith | |
27 * Replaced all ; comment chars with * for benefit of native | |
28 * asm. Re-implemented (hopefully) non-destructive cursor which | |
29 * is XORed onto the screen. Commented character drawing routines | |
30 * and replaced the V51xx names with more meaningful ones. | |
31 * | |
32 * 2005/04/24 P.Harvey-Smith | |
33 * Addded routines to flash the cursor, this is as it was in the | |
34 * Dragon Data 51 column driver. | |
35 * | |
36 nam CoHR | |
37 ttl Hi-Res 51x24 Graphics Console Output Subroutine for VTIO | |
38 | |
39 ifp1 | |
2032 | 40 use defsfile |
2624 | 41 use cocovtio.d |
1933 | 42 endc |
43 | |
44 tylg set Systm+Objct | |
45 atrv set ReEnt+rev | |
46 rev set $00 | |
47 edition set 1 | |
48 | |
49 mod eom,name,tylg,atrv,start,size | |
50 | |
51 size equ . | |
52 | |
53 fcb UPDAT. | |
54 | |
55 | |
56 ScreenSize equ $1800 * Screen Size in Bytes | |
57 | |
58 name fcs /CoHR/ | |
59 fcb edition | |
60 | |
61 start lbra Init | |
62 lbra Write | |
63 lbra GetStat | |
64 lbra SetStat | |
65 lbra Term | |
66 | |
67 Init | |
68 pshs u,a | |
69 ldd #ScreenSize+$100 * Request a screenful of ram + $100 bytes | |
70 os9 F$SRqMem | |
71 bcs InitExit * Error : exit | |
72 tfr u,d | |
73 ldu $01,s * Restore saved u | |
74 tfr d,x | |
75 bita #$01 * Check that memory block starts at even page | |
76 beq L0066 * Yes base of screen = base of memory block | |
77 leax >$0100,x * no Move to next page | |
78 bra L0068 | |
79 L0066 adda #$18 | |
80 L0068 stx V.51ScrnA,u | |
81 tfr d,u | |
82 ldd #$0100 | |
83 os9 F$SRtMem * Return unneeded page to OS | |
84 ldu $01,s | |
85 | |
86 clr V.51CursorOn,u * Flag cursor off | |
87 lbsr DoHome | |
88 lbsr DoReverseOff | |
89 lbsr DoCLS | |
90 ldb V.COLoad,u | |
91 orb #ModCoHR * set to CoHR found (?) | |
92 | |
93 leax FlashCursor,pcr * Get address of cursor flash routine | |
94 stx V.Flash,u | |
95 | |
96 InitSaveExit | |
97 stb V.COLoad,u | |
98 clrb | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
99 lda #$FF |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
100 sta V.CColr,u * Flag Cursor as not hidden |
1933 | 101 |
102 InitExit | |
103 puls pc,u,a | |
104 | |
105 InitFlag fcb $00 | |
106 | |
107 Term pshs y,x | |
108 pshs u * save U | |
109 ldd #ScreenSize * Graphics memory size | |
110 ldu V.51ScrnA,u * get pointer to memory | |
111 os9 F$SRtMem * return to system | |
112 puls u * restore U | |
113 ldb V.COLoad,u | |
114 andb #~ModCoHR * Set CoHR unot loaded | |
115 bra InitSaveExit | |
116 | |
117 * Write | |
118 * Entry: A = char to write | |
119 * Y = path desc ptr | |
120 | |
121 Write | |
122 | |
123 L012C inc V.Noflash,u * Flag do not flash cursor | |
124 ldb V.51EscSeq,u | |
125 bne L0165 | |
126 cmpa #$1B * escape? | |
127 bne CheckForNormal | |
128 inc V.51EscSeq,u * flag ESC seq | |
129 | |
130 WriteExit2 | |
131 clr V.NoFlash,u * Allow cursor to flash | |
132 clrb | |
133 L0139 rts | |
134 | |
135 | |
136 CheckForNormal | |
137 cmpa #$20 | |
138 bcs DoCtrlChar * Control charater ? | |
139 cmpa #$7F | |
140 bcc DoCtrlChar * or upper bit set | |
141 bra DoNormalChar | |
142 | |
143 DoCtrlChar | |
144 leax >CtrlCharDispatch,pcr | |
145 L0148 tst ,x | |
146 bne L0150 | |
147 CancelEscSequence | |
148 clr V.51EscSeq,u | |
149 WriteExit | |
150 clr V.NoFlash,u | |
151 rts | |
152 | |
153 L0150 cmpa ,x+ | |
154 bne L0161 | |
155 ldd ,x | |
156 leax >CtrlCharDispatch,pcr | |
157 leax d,x | |
158 stx V.51CtrlDispatch,u | |
159 jsr ,x | |
160 bra WriteExit | |
161 | |
162 L0161 leax $02,x | |
163 bra L0148 | |
164 | |
165 L0165 inc V.51EscSeq,u | |
166 leax >EscCharDispatch,pcr | |
167 cmpb #$01 | |
168 beq L0148 | |
169 jmp [V.51CtrlDispatch,u] | |
170 | |
171 DoNormalChar | |
172 pshs y,a | |
173 lbsr DoEraseCursor | |
174 puls y,a | |
175 inc V.51CursorChanged,u | |
176 bsr DrawCharacter | |
177 tst V.51UnderlineFlag,u * Are we underlining ? | |
178 beq L0185 * no : update cursor | |
179 lda #$F8 * Yes : do underline, then update cursor | |
180 leay <-$40,y | |
181 lbsr L0236 | |
182 | |
183 L0185 lda V.51XPos,u * Get current X pos | |
184 inca * increment it | |
185 cmpa #$33 * past end of line ? | |
186 bcs L01A2 * no : continue | |
187 clr V.51XPos,u * Yes reset x=0 | |
188 lda V.51YPos,u * increment y pos | |
189 inca | |
190 cmpa #$18 * Past last line ? | |
191 bcs L019D * No : continue | |
192 lbsr SoScrollScreen * Yes : scroll screen one line | |
193 bra L01A5 | |
194 L019D sta V.51YPos,u * Ypdate Y pos | |
195 bra L01A5 | |
196 | |
197 L01A2 sta V.51XPos,u * Update X pos | |
198 L01A5 | |
199 ldd V.51XPos,u * Update old Cursor pos | |
200 std V.51OldCursorPosX,u | |
201 dec V.51CursorChanged,u | |
202 lbsr DoDisplayCursor * Display cursor | |
203 | |
204 lbra WriteExit2 | |
205 clrb * Flag no error | |
206 rts * Return to caller | |
207 | |
208 * | |
209 * Draw the normal character $20..$7f, in the a register | |
210 * at position stored in V.51Xpos,V.51Ypos | |
211 * | |
212 | |
213 DrawCharacter | |
214 tfr a,b | |
215 subb #$20 * Make b an offset into table | |
216 clra | |
217 leax >CharacterShapes,pcr * point to character shape table | |
218 lslb * Multiply b by 4 into d (4 bytes/character) | |
219 rola | |
220 lslb | |
221 rola | |
222 leax d,x * Point X at required character's bitmap | |
223 ldb #$05 * Work out pixel X co-ordinate of current cursor | |
224 lda V.51XPos,u | |
225 mul | |
226 pshs b * Save pixel x | |
227 lsra * Divide pixel-x by 8, to get byte offset into line | |
228 rorb | |
229 lsra | |
230 rorb | |
231 lsra | |
232 rorb | |
233 puls a * restore pixel X | |
234 anda #$07 * Calculate offset within byte where character begins | |
235 pshs b | |
236 sta V.51BytePixOffset,u | |
237 tst V.51XORFlag,u | |
238 bne L01FF | |
239 tfr a,b * Calculate a mask for character data | |
240 lda #$F8 * shifts $f8 right b times | |
241 tstb | |
242 beq L01FA * Done all bits ? | |
243 L01E5 lsra * shift mask right | |
244 decb * decrement count | |
245 bhi L01E5 * done all ? | |
246 bne L01EE * have we shifted any mask bits off right hand end ? | |
247 rorb | |
248 bra L01FA | |
249 | |
250 L01EE pshs b * Save count on stack | |
251 ldb #$80 * start to build mask for second byte as well | |
252 L01F2 lsra * shift bits from bottom of a to top of b | |
253 rorb | |
254 dec ,s * decrement count | |
255 bne L01F2 * if any shifts left loop again | |
256 leas $01,s * drop count | |
257 | |
258 * When we reach here we should have a pair of bytes in d which indicate where exactly the | |
259 * character should be drawn, this may be partly in each | |
260 | |
261 L01FA coma | |
262 comb | |
263 std V.51ScreenMask1,u * Save screen mask | |
264 | |
265 * The code below works out the offset of the character cell to be updated, this works because | |
266 * the y co ordinate is loaded into the high byte of d, effectivley multiplying it by 256, since | |
267 * each screen line is 32 bytes wide, and each character is 8 pixels tall this works out as 8x32=256 | |
268 | |
269 L01FF ldy V.51ScrnA,u * Point y at screen memory address | |
270 lda V.51YPos,u | |
271 ldb ,s+ * Retrieve byte offset from stack | |
272 leay d,y * calculate screen address. | |
273 lda #$04 * get character data byte count, 4 bytes of 8 nibbles | |
274 pshs a | |
275 inc V.51CursorChanged,u * flag character at cursor being changed | |
276 | |
277 L0211 lda ,x * get a byte from character data | |
278 anda #$F0 * mask out even line | |
279 bsr L0236 * update screen | |
280 lda ,x+ * Get again | |
281 anda #$0F * mask out odd line | |
282 bsr L0227 * update screen | |
283 dec ,s * Decrement character data byte counter | |
284 bne L0211 * all done ? | |
285 dec V.51CursorChanged,u * Flag character update finished | |
286 clrb * flag no error | |
287 puls pc,b * return to caller | |
288 | |
289 | |
290 L0227 ldb V.51BytePixOffset,u | |
291 subb #$04 | |
292 bhi L023B | |
293 beq L0250 | |
294 L0230 lsla | |
295 incb | |
296 bne L0230 | |
297 bra L0250 | |
298 | |
299 L0236 ldb V.51BytePixOffset,u * Retrieve byte pixel offset | |
300 beq L0250 | |
301 | |
302 L023B lsra * manipulate character data into correct position | |
303 decb * in a similar way to the mask above | |
304 bhi L023B | |
305 bne L0244 | |
306 rorb | |
307 bra L0250 | |
308 L0244 pshs b | |
309 ldb #$80 | |
310 L0248 lsra | |
311 rorb | |
312 dec ,s | |
313 bne L0248 | |
314 leas $01,s | |
315 | |
316 L0250 tst V.51XORFlag,u * are we XORing data direct to screen ? | |
317 bne L0273 * Yes : just do it | |
318 tst V.51ReverseFlag,u * are we in reverse mode ? | |
319 beq L0262 * no : just output data | |
320 coma * set mask up for reverse mode | |
321 comb | |
322 eora V.51ScreenMask1,u | |
323 eorb V.51ScreenMask2,u | |
324 | |
325 L0262 pshs b,a * combine mask and screen data | |
326 ldd V.51ScreenMask1,u | |
327 anda ,y | |
328 andb $01,y | |
329 addd ,s++ | |
330 | |
331 L026D std ,y * screen update | |
332 leay <$20,y | |
333 rts | |
334 | |
335 L0273 eora ,y * XOR onto screen | |
336 eorb $01,y | |
337 bra L026D | |
338 | |
339 * | |
340 * $07 - BEL (ding!) | |
341 * | |
342 | |
343 DoBell | |
344 ldx #$FF20 | |
345 ldb #$64 | |
346 L027E lda ,x | |
347 eora #$C0 | |
348 sta ,x | |
349 lda #$19 | |
350 L0286 deca | |
351 nop | |
352 nop | |
353 bne L0286 | |
354 decb | |
355 bne L027E | |
356 lbra CancelEscSequence | |
357 * | |
358 * $08 - BS (left arrow) | |
359 * | |
360 DoBackspace | |
361 lbsr DoEraseCursor | |
362 dec V.51XPos,u | |
363 bpl DoBSUpdateCursor | |
364 lda #$32 | |
365 sta V.51XPos,u | |
366 bra DoCursorUp1 | |
367 * | |
368 * $1b44 - (cursor up) | |
369 * | |
370 DoCursorUp | |
371 lbsr DoEraseCursor | |
372 DoCursorUp1 | |
373 dec V.51YPos,u | |
374 bpl L02A6 | |
375 clr V.51YPos,u | |
376 lbsr L035E | |
377 L02A6 lbsr L0484 | |
378 lbra CancelEscSequence | |
379 | |
380 DoBSUpdateCursor | |
381 lbsr L0484 | |
382 lbsr DoDisplayCursor | |
383 rts | |
384 | |
385 * | |
386 * $0a, $1b45 - LF, (cursor down) | |
387 * | |
388 | |
389 DoLineFeed | |
390 lbsr DoEraseCursor | |
391 lda V.51YPos,u | |
392 inca | |
393 cmpa #$18 | |
394 bcs L02B9 | |
395 lbsr SoScrollScreen | |
396 bra L02BC | |
397 L02B9 sta V.51YPos,u | |
398 L02BC lbsr DoDisplayCursor | |
399 bra L02A6 | |
400 | |
401 * | |
402 * $0d - CR (return) | |
403 * | |
404 | |
405 DoCarrageReturn | |
406 lbsr DoEraseCursor | |
407 clr V.51XPos,u | |
408 bra L02A6 | |
409 | |
410 * | |
411 * $0c - FF (clear screen) | |
412 * | |
413 DoCLS | |
414 ldy V.51ScrnA,u | |
415 leay >$0080,y | |
416 lda #$18 | |
417 pshs a | |
418 inc V.51CursorChanged,u | |
419 L02D2 bsr L0314 | |
420 dec ,s | |
421 bne L02D2 | |
422 leas $01,s | |
423 clra | |
424 clrb | |
425 std V.51OldCursorPosX,u | |
426 std V.51XPos,u | |
427 dec V.51CursorChanged,u | |
428 ldx #$FF20 | |
429 lda $02,x | |
430 ora #$F0 | |
431 sta $02,x | |
432 ldx #$FFC0 | |
433 lda #$06 | |
434 ldb #$03 | |
435 bsr L0305 | |
436 lda V.51ScrnA,u | |
437 lsra | |
438 ldb #$07 | |
439 bsr L0305 | |
440 clr V.51CursorOn,u * Flag cursor is off | |
441 lbsr DoDisplayCursor * Display cursor | |
442 lbra CancelEscSequence | |
443 | |
444 L0305 lsra | |
445 bcc L030E | |
446 leax $01,x | |
447 sta ,x+ | |
448 bra L0310 | |
449 L030E sta ,x++ | |
450 L0310 decb | |
451 bne L0305 | |
452 rts | |
453 | |
454 L0314 lda #$10 | |
455 L0316 pshs a | |
456 lda V.51ReverseFlag,u | |
457 tfr a,b | |
458 L031D std <-$80,y | |
459 std <-$60,y | |
460 std <-$40,y | |
461 std <-$20,y | |
462 std <$20,y | |
463 std <$40,y | |
464 std <$60,y | |
465 std ,y++ | |
466 dec ,s | |
467 bne L031D | |
468 leay >$00E0,y | |
469 puls pc,b | |
470 | |
471 SoScrollScreen | |
472 ldy V.51ScrnA,u | |
473 inc V.51CursorChanged,u | |
474 pshs u | |
475 leau >$0100,y | |
476 lda #$10 | |
477 bsr L037C | |
478 puls u | |
479 dec V.51OldCursorPosY,u | |
480 | |
481 L0354 leay >$0080,y | |
482 bsr L0314 | |
483 dec V.51CursorChanged,u | |
484 rts | |
485 | |
486 L035E ldy V.51ScrnA,u | |
487 leay >$17F0,y | |
488 inc V.51CursorChanged,u | |
489 pshs u | |
490 leau >-$0100,y | |
491 lda #$F0 | |
492 bsr L037C | |
493 leay ,u | |
494 puls u | |
495 inc V.51OldCursorPosY,u | |
496 bra L0354 | |
497 | |
498 L037C ldb #$17 | |
499 pshs b | |
500 L0380 ldb #$10 | |
501 | |
502 L0382 ldx ,u | |
503 stx ,y | |
504 ldx $02,u | |
505 stx $02,y | |
506 ldx $04,u | |
507 stx $04,y | |
508 ldx $06,u | |
509 stx $06,y | |
510 ldx $08,u | |
511 stx $08,y | |
512 ldx $0A,u | |
513 stx $0A,y | |
514 ldx $0C,u | |
515 stx $0C,y | |
516 ldx $0E,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 | |
525 | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
526 DelLine |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
527 clrb |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
528 stb V.51XPos,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
529 lbsr DoDisplayCursor |
1933 | 530 * |
531 * $1b42 - clear to end of line | |
532 * | |
533 DoClrEOL | |
534 inc V.51CursorChanged,u | |
535 bsr L03BA | |
536 dec V.51CursorChanged,u | |
537 lbra CancelEscSequence | |
538 L03BA | |
539 ldb V.51XPos,u | |
540 pshs b | |
541 bitb #$07 | |
542 bne L03CB | |
543 lda #$05 | |
544 mul | |
545 bra L03F3 | |
546 L03CB lda #$01 | |
547 pshs a | |
548 L03CF lda #$20 | |
549 lbsr DrawCharacter | |
550 lda V.51XPos,u | |
551 inca | |
552 sta V.51XPos,u | |
553 cmpa #$33 | |
554 bcs L03E3 | |
555 leas $01,s | |
556 bra L040D | |
557 L03E3 dec ,s | |
558 bpl L03CF | |
559 lda V.51XPos,u | |
560 ldb #$05 | |
561 mul | |
562 bitb #$08 | |
563 bne L03CF | |
564 leas $01,s | |
565 L03F3 lsrb | |
566 lsrb | |
567 lsrb | |
568 ldy V.51ScrnA,u | |
569 lda V.51YPos,u | |
570 leay d,y | |
571 leay >$0080,y | |
572 lda #$20 | |
573 pshs b | |
574 suba ,s+ | |
575 lsra | |
576 lbsr L0316 | |
577 L040D puls a | |
578 sta V.51XPos,u | |
579 lbsr DoDisplayCursor | |
580 rts | |
581 * | |
582 * $1b4A - clear to end of screen | |
583 * | |
584 DoClearEOS | |
585 inc V.51CursorChanged,u | |
586 bsr L03BA | |
587 lda #$17 | |
588 suba V.51YPos,u | |
589 bls L042A | |
590 pshs a | |
591 L0421 lbsr L0314 | |
592 dec ,s | |
593 bne L0421 | |
594 leas $01,s | |
595 L042A dec V.51CursorChanged,u | |
596 lbsr DoDisplayCursor | |
597 lbra CancelEscSequence | |
598 | |
599 * | |
600 *$0b - (cursor home) | |
601 * | |
602 DoHome | |
603 lbsr DoEraseCursor | |
604 clr V.51XPos,u | |
605 clr V.51YPos,u | |
606 lbsr DoDisplayCursor | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
607 lbra L02A6 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
608 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
609 * |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
610 * $05 XX - set cursor off/on/color per XX-32 from COVDG (only on/off supported) |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
611 * |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
612 SetCrsr ldb #$01 need additional byte |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
613 leax <CrsrSw,pcr |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
614 bra L01E5V |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
615 CrsrSw lda <V.NChr2,u get next char |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
616 suba #C$SPAC take out ASCII space |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
617 bne L01BBV branch if not zero - show cursor |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
618 clr V.CColr,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
619 lbra CancelEscSequence |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
620 L01BBV |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
621 ldb #$FF |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
622 stb V.CColr,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
623 lbra CancelEscSequence |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
624 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
625 * |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
626 * $02 XX YY - move cursor to col XX-32, row YY-32 from COVDG |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
627 * |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
628 CurXY ldb #$02 we want to claim next two chars |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
629 leax <DoCurXY,pcr point to processing routine |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
630 L01E5V stx <V.RTAdd,u store routine to return to |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
631 stb <V.NGChr,u get two more chars |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
632 clrb |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
633 rts |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
634 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
635 DoCurXY lbsr DoEraseCursor hide cursor |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
636 ldb <V.NChr2,u get ASCII Y-pos |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
637 subb #C$SPAC take out ASCII space |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
638 stb V.51YPos,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
639 ldb <V.NChar,u get X-pos |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
640 subb #C$SPAC take out ASCII space |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
641 stb V.51XPos,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
642 lbsr DoDisplayCursor |
1933 | 643 lbra L02A6 |
644 | |
645 * | |
646 * $1b41xxyy - move cursor to col xx (0-50) row yy (0-23) | |
647 * | |
648 DoGotoXY | |
649 lbsr DoEraseCursor | |
650 ldb V.51EscSeq,u | |
651 subb #$02 | |
652 bne L0442 | |
653 clrb | |
654 rts | |
655 L0442 decb | |
656 bne L0450 | |
657 cmpa #51 | |
658 bcs L044B | |
659 lda #50 | |
660 L044B sta V.51XPos,u | |
661 L044D clrb | |
662 rts | |
663 L0450 cmpa #24 | |
664 bcs L0456 | |
665 lda #23 | |
666 L0456 sta V.51YPos,u | |
667 L0459 lbsr DoDisplayCursor | |
668 lbra L02A6 | |
669 | |
670 * | |
671 * $1b43 - (cursor right) | |
672 * | |
673 DoCursorRight | |
674 lbsr DoEraseCursor | |
675 inc V.51XPos,u | |
676 lda V.51XPos,u | |
677 cmpa #$33 | |
678 bcs L0459 | |
679 clr V.51XPos,u | |
680 lbra DoLineFeed | |
681 * | |
682 * $1b46 - reverse on | |
683 * | |
684 DoReverseOn | |
685 lda #$FF | |
686 coma | |
687 L046F sta V.51ReverseFlag,u | |
688 lbra CancelEscSequence | |
689 | |
690 * | |
691 * $1b47 - reverse off | |
692 * | |
693 DoReverseOff | |
694 lda #$FF | |
695 bra L046F | |
696 | |
697 * | |
698 * $1b48 - underline on | |
699 * | |
700 DoUnderlineOn | |
701 lda #$FF | |
702 L047B sta V.51UnderlineFlag,u | |
703 lbra CancelEscSequence | |
704 | |
705 * | |
706 * $1b49 - underline off | |
707 * | |
708 DoUnderlineOff | |
709 clra | |
710 bra L047B | |
711 | |
712 | |
713 L0484 ldd V.51XPos,u | |
714 inc V.51CursorChanged,u | |
715 std V.51OldCursorPosX,u | |
716 bra L04B9 | |
717 | |
718 L0494 pshs b,a | |
719 ldd V.51OldCursorPosX,u | |
720 inc V.51XORFlag,u | |
721 tstb | |
722 bmi L04AB | |
723 cmpb #$18 | |
724 bcc L04AB | |
725 std V.51XPos,u | |
726 lda #$7F | |
727 lbsr DrawCharacter | |
728 | |
729 L04AB puls b,a | |
730 std V.51XPos,u | |
731 std V.51OldCursorPosX,u | |
732 dec V.51XORFlag,u | |
733 L04B9 dec V.51CursorChanged,u | |
734 clrb | |
735 rts | |
736 | |
737 * | |
738 * Display and Erase cursor routines, work by xoring cursor character onto the | |
739 * screen, the variable V.51CursorOn, is implemented such that it prevents | |
740 * multiple calls to these routines from acting as an inverse, so that they | |
741 * may be called from any code, irispective of if the cursor is already on/off. | |
742 * | |
743 | |
744 * | |
745 * Display Cursor. | |
746 * | |
747 DoDisplayCursor | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
748 tst V.CColr,u |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
749 beq NoCrsr |
1933 | 750 inc V.NoFlash,u * Flag in flash |
751 tst V.51CursorOn,u * Get cursor on flag | |
752 bne DoCursorOnEnd * Yes : don't re-display | |
753 bsr DoCursorCommon * Display cursor | |
754 inc V.51CursorOn,u * Flag cursor on | |
755 DoCursorOnEnd | |
756 dec V.NoFlash,u * Flag flash done | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
757 NoCrsr rts |
1933 | 758 * |
759 * Erase cursor | |
760 * | |
761 DoEraseCursor | |
762 inc V.NoFlash,u * Flag in Flash | |
763 tst V.51Cursoron,u * Get cursor on flag | |
764 beq DoEraseCursorEnd * no : don't atempt to turn off | |
765 bsr DoCursorCommon * Hide cursor | |
766 clr V.51CursorOn,u * Flag cursor off | |
767 DoEraseCursorEnd | |
768 dec V.NoFlash,u * Flag Flash done | |
769 rts | |
770 | |
771 DoCursorCommon | |
772 lda #$7f * Cursor character $7f = block | |
773 inc V.51XORFlag,u * Flag xor on screen | |
774 lbsr DrawCharacter * Draw it | |
775 dec V.51XORFlag,u * Flag no xor on screen | |
776 rts | |
777 | |
778 L04CA clrb | |
779 rts | |
780 GetStat | |
781 cmpa #$06 | |
782 beq L04CA | |
783 cmpa #$02 | |
784 bne SetStat | |
785 ldx $06,y | |
786 ldd V.51ScrnA,u | |
787 std $04,x | |
788 clrb | |
789 rts | |
790 | |
791 SetStat comb | |
792 ldb #E$UnkSvc | |
793 rts | |
794 | |
795 * | |
796 * Flash cursor, called by IRQ routine from VTIO | |
797 * | |
798 | |
799 FlashCursor | |
800 tst V.NoFlash,u * Should we flash ? | |
801 bne FlashExit * No: just return | |
802 tst V.51CursorOn,u * Is cursor on ? | |
803 bne FlashOff * Yep : turn off | |
804 bra DoDisplayCursor * Else turn it on | |
805 FlashOff | |
806 bra DoEraseCursor | |
807 FlashExit | |
808 rts | |
809 | |
810 | |
811 * control characters dispatch table | |
812 CtrlCharDispatch | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
813 fcb $01 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
814 fdb DoHome-CtrlCharDispatch * COVDG CurHome |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
815 fcb $02 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
816 fdb CurXY-CtrlCharDispatch * COVDG CURSOR XY |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
817 fcb $03 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
818 fdb DelLine-CtrlCharDispatch * COVDG ERASE LINE |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
819 fcb $04 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
820 fdb DoClrEOL-CtrlCharDispatch * COVDG ErEOLine |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
821 fcb $05 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
822 fdb SetCrsr-CtrlCharDispatch * COVDG CURSOR ON/OFF |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
823 fcb $06 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
824 fdb DoCursorRight-CtrlCharDispatch * COVDG CurRght |
1933 | 825 fcb $07 BEL * (beep) |
826 fdb DoBell-CtrlCharDispatch $FC0B | |
827 fcb $08 BS * (left arrow) | |
828 fdb DoBackspace-CtrlCharDispatch * $FC23 | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
829 fcb $09 |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
830 fdb DoCursorUp-CtrlCharDispatch * COVDG CurUp |
1933 | 831 fcb $0A LF * (down arrow) |
832 fdb DoLineFeed-CtrlCharDispatch * $FC3E | |
833 fcb $0D CR * (return) | |
834 fdb DoCarrageReturn-CtrlCharDispatch *$FC50 | |
835 fcb $0C FF * (clear screen) | |
836 fdb DoCLS-CtrlCharDispatch $FC55 | |
837 fcb $0B * (cursor home) | |
2966
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
838 * Since few applications use CoHR $0B, support COVDG $0B instead |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
839 * fdb DoHome-CtrlCharDispatch $FDC2 * Was CoHR DoHome |
e84a638d1c16
cohr: Support both COVDG control codes and COHR Esc codes
Ken H. <dragon.atv@gmail.com>
parents:
2624
diff
changeset
|
840 fdb DoClearEOS-CtrlCharDispatch * COVDG ErEOScrn |
1933 | 841 fcb $00 |
842 | |
843 * escape sequences dispatch table | |
844 EscCharDispatch | |
845 fcb $41 * cursor xy | |
846 fdb DoGotoXY-CtrlCharDispatch * $FDCB | |
847 fcb $42 * clear EOL | |
848 fdb DoClrEOL-CtrlCharDispatch * $FD41 | |
849 fcb $43 * cursor right | |
850 fdb DoCursorRight-CtrlCharDispatch * $FDEE | |
851 fcb $44 * cursor up | |
852 fdb DoCursorUp-CtrlCharDispatch * $FC2D | |
853 fcb $45 * cursor down | |
854 fdb DoLineFeed-CtrlCharDispatch * $FC3E | |
855 fcb $46 * reverse on | |
856 fdb DoReverseOn-CtrlCharDispatch * $FDFE | |
857 fcb $47 * reverse off | |
858 fdb DoReverseOff-CtrlCharDispatch * $FE07 | |
859 fcb $48 * underline on | |
860 fdb DoUnderlineOn-CtrlCharDispatch * $FE0B | |
861 fcb $49 * underline off | |
862 fdb DoUnderlineOff-CtrlCharDispatch * $FE13 | |
863 fcb $4A * clear EOS | |
864 fdb DoClearEOS-CtrlCharDispatch * $FDA5 | |
865 fcb $00 | |
866 | |
867 CharacterShapes | |
868 * 4x8 bitmap table for characters $20-$7f | |
869 * each nibble represents a row of 4 dots | |
870 * chars 20-27 | |
871 fcb $00,$00,$00,$00 .... .@.. .@.@ .@@. ..@. @..@ .@.. .@.. | |
872 fcb $44,$40,$40,$00 .... .@.. .@.@ @@@@ .@@@ ...@ @.@. .@.. | |
873 fcb $55,$00,$00,$00 .... .@.. .... .@@. @... ..@. .@.. .... | |
874 fcb $6F,$6F,$60,$00 .... .... .... @@@@ .@@. .@.. @.@. .... | |
875 fcb $27,$86,$1E,$20 .... .@.. .... .@@. ...@ @... @@.@ .... | |
876 fcb $91,$24,$89,$00 .... .... .... .... @@@. @..@ .... .... | |
877 fcb $4A,$4A,$D0,$00 .... .... .... .... ..@. .... .... .... | |
878 fcb $44,$00,$00,$00 .... .... .... .... .... .... .... .... | |
879 * chars 29-2f | |
880 fcb $24,$44,$20,$00 ..@. .@.. @..@ .@.. .... .... .... .... | |
881 fcb $42,$22,$40,$00 .@.. ..@. .@@. .@.. .... .... .... ...@ | |
882 fcb $96,$F6,$90,$00 .@.. ..@. @@@@ @@@. .... @@@@ .... ..@. | |
883 fcb $44,$E4,$40,$00 .@.. ..@. .@@. .@.. ..@. .... .@@. .@.. | |
884 fcb $00,$02,$24,$00 ..@. .@.. @..@ .@.. ..@. .... .@@. @... | |
885 fcb $00,$F0,$00,$00 .... .... .... .... .@.. .... .... .... | |
886 fcb $00,$06,$60,$00 .... .... .... .... .... .... .... .... | |
887 fcb $01,$24,$80,$00 .... .... .... .... .... .... .... .... | |
888 * chars 30-37 | |
889 fcb $69,$BD,$60,$00 .@@. ..@. .@@. @@@. ..@. @@@@ .@@@ @@@@ | |
890 fcb $26,$22,$70,$00 @..@ .@@. @..@ ...@ .@@. @... @... ...@ | |
891 fcb $69,$2C,$F0,$00 @.@@ ..@. ..@. .@@. @.@. @@@. @@@. ..@. | |
892 fcb $E1,$61,$E0,$00 @@.@ ..@. @@.. ...@ @@@@ ...@ @..@ .@.. | |
893 fcb $26,$AF,$20,$00 .@@. .@@@ @@@@ @@@. ..@. @@@. .@@. .@.. | |
894 fcb $F8,$E1,$E0,$00 .... .... .... .... .... .... .... .... | |
895 fcb $78,$E9,$60,$00 .... .... .... .... .... .... .... .... | |
896 fcb $F1,$24,$40,$00 .... .... .... .... .... .... .... .... | |
897 * chars 38-3f | |
898 fcb $69,$69,$60,$00 .@@. .@@. .... .... ..@. .... .@.. .@@. | |
899 fcb $69,$71,$60,$00 @..@ @..@ .... .... .@.. @@@@ ..@. @..@ | |
900 fcb $00,$40,$40,$00 .@@. .@@@ .@.. ..@. @... .... ...@ ..@. | |
901 fcb $00,$20,$24,$00 @..@ ...@ .... .... .@.. @@@@ ..@. ..@. | |
902 fcb $24,$84,$20,$00 .@@. .@@. .@.. ..@. ..@. .... .@.. .... | |
903 fcb $0F,$0F,$00,$00 .... .... .... .@.. .... .... .... ..@. | |
904 fcb $42,$12,$40,$00 .... .... .... .... .... .... .... .... | |
905 fcb $69,$22,$02,$00 .... .... .... .... .... .... .... .... | |
906 * chars 40-47 | |
907 fcb $69,$BB,$87,$00 .@@. .@@. @@@. .@@@ @@@. @@@@ @@@@ .@@@ | |
908 fcb $69,$F9,$90,$00 @..@ @..@ @..@ @... @..@ @... @... @... | |
909 fcb $E9,$E9,$E0,$00 @.@@ @@@@ @@@. @... @..@ @@@. @@@. @.@@ | |
910 fcb $78,$88,$70,$00 @.@@ @..@ @..@ @... @..@ @... @... @..@ | |
911 fcb $E9,$99,$E0,$00 @... @..@ @@@. .@@@ @@@. @@@@ @... .@@@ | |
912 fcb $F8,$E8,$F0,$00 .@@@ .... .... .... .... .... .... .... | |
913 fcb $F8,$E8,$80,$00 .... .... .... .... .... .... .... .... | |
914 fcb $78,$B9,$70,$00 .... .... .... .... .... .... .... .... | |
915 * chars 48-4f | |
916 fcb $99,$F9,$90,$00 @..@ @@@. @@@@ @..@ @... @@@@ @..@ .@@. | |
917 fcb $E4,$44,$E0,$00 @..@ .@.. ..@. @.@. @... @@.@ @@.@ @..@ | |
918 fcb $F2,$2A,$40,$00 @@@@ .@.. ..@. @@.. @... @@.@ @.@@ @..@ | |
919 fcb $9A,$CA,$90,$00 @..@ .@.. @.@. @.@. @... @..@ @..@ @..@ | |
920 fcb $88,$88,$F0,$00 @..@ @@@. .@.. @..@ @@@@ @..@ @..@ .@@. | |
921 fcb $FD,$D9,$90,$00 .... .... .... .... .... .... .... .... | |
922 fcb $9D,$B9,$90,$00 .... .... .... .... .... .... .... .... | |
923 fcb $69,$99,$60,$00 .... .... .... .... .... .... .... .... | |
924 * chars 50-57 | |
925 fcb $E9,$E8,$80,$00 @@@. .@@. @@@. .@@@ @@@. @..@ @..@ @..@ | |
926 fcb $69,$9B,$70,$00 @..@ @..@ @..@ @... .@.. @..@ @..@ @..@ | |
927 fcb $E9,$EA,$90,$00 @@@. @..@ @@@. .@@. .@.. @..@ @..@ @@.@ | |
928 fcb $78,$61,$E0,$00 @... @.@@ @.@. ...@ .@.. @..@ .@@. @@.@ | |
929 fcb $E4,$44,$40,$00 @... .@@@ @..@ @@@. .@.. .@@. .@@. @@@@ | |
930 fcb $99,$99,$60,$00 .... .... .... .... .... .... .... .... | |
931 fcb $99,$96,$60,$00 .... .... .... .... .... .... .... .... | |
932 fcb $99,$DD,$F0,$00 .... .... .... .... .... .... .... .... | |
933 * chars 58-5f | |
934 fcb $99,$69,$90,$00 @..@ @..@ @@@@ @@@. .... .@@@ .@@. .... | |
935 fcb $99,$71,$E0,$00 @..@ @..@ ...@ @... @... ...@ @..@ .... | |
936 fcb $F1,$68,$F0,$00 .@@. .@@@ .@@. @... .@.. ...@ .... .... | |
937 fcb $E8,$88,$E0,$00 @..@ ...@ @... @... ..@. ...@ .... .... | |
938 fcb $08,$42,$10,$00 @..@ @@@. @@@@ @@@. ...@ .@@@ .... .... | |
939 fcb $71,$11,$70,$00 .... .... .... .... .... .... .... @@@@ | |
940 fcb $69,$00,$00,$00 .... .... .... .... .... .... .... .... | |
941 fcb $00,$00,$0F,$00 .... .... .... .... .... .... .... .... | |
942 * chars 60-67 | |
943 fcb $22,$00,$00,$00 ..@. .... @... .... ...@ .... ..@@ .... | |
944 fcb $07,$99,$70,$00 ..@. .@@@ @@@. .@@@ .@@@ .@@@ .@.. .@@. | |
945 fcb $8E,$99,$E0,$00 .... @..@ @..@ @... @..@ @.@. @@@@ @..@ | |
946 fcb $07,$88,$70,$00 .... @..@ @..@ @... @..@ @@.. .@.. @..@ | |
947 fcb $17,$99,$70,$00 .... .@@@ @@@. .@@@ .@@@ .@@@ .@.. .@@@ | |
948 fcb $07,$AC,$70,$00 .... .... .... .... .... .... .... ...@ | |
949 fcb $34,$F4,$40,$00 .... .... .... .... .... .... .... @@@. | |
950 fcb $06,$99,$71,$E0 .... .... .... .... .... .... .... .... | |
951 * chars 68-6f | |
952 fcb $8E,$99,$90,$00 @... .@.. ..@. @... .@.. .... .... .... | |
953 fcb $40,$44,$40,$00 @@@. .... .... @.@. .@.. .@@@ .@@@ .@@. | |
954 fcb $20,$22,$22,$C0 @..@ .@.. ..@. @@.. .@.. @@.@ @..@ @..@ | |
955 fcb $8A,$CA,$90,$00 @..@ .@.. ..@. @.@. .@.. @@.@ @..@ @..@ | |
956 fcb $44,$44,$40,$00 @..@ .@.. ..@. @..@ .@.. @..@ @..@ .@@. | |
957 fcb $0E,$DD,$90,$00 .... .... ..@. .... .... .... .... .... | |
958 fcb $0E,$99,$90,$00 .... .... @@.. .... .... .... .... .... | |
959 fcb $06,$99,$60,$00 .... .... .... .... .... .... .... .... | |
960 * chars 70-77 | |
961 fcb $0E,$99,$E8,$80 .... .... .... .... .@.. .... .... .... | |
962 fcb $07,$99,$71,$10 @@@. .@@@ .@@@ .@@@ @@@@ @..@ @..@ @..@ | |
963 fcb $07,$88,$80,$00 @..@ @..@ @... @@.. .@.. @..@ @..@ @@.@ | |
964 fcb $07,$C3,$E0,$00 @..@ @..@ @... ..@@ .@.. @..@ .@@. @@.@ | |
965 fcb $4F,$44,$30,$00 @@@. .@@@ @... @@@. ..@@ .@@@ .@@. .@@. | |
966 fcb $09,$99,$70,$00 @... ...@ .... .... .... .... .... .... | |
967 fcb $09,$96,$60,$00 @... ...@ .... .... .... .... .... .... | |
968 fcb $09,$DD,$60,$00 .... .... .... .... .... .... .... .... | |
969 * chars 78-7f | |
970 fcb $09,$66,$90,$00 .... .... .... ..@@ .@.. @@.. .... @@@@ | |
971 fcb $09,$99,$71,$E0 @..@ @..@ @@@@ .@.. .@.. ..@. .@.@ @@@@ | |
972 fcb $0F,$24,$F0,$00 .@@. @..@ ..@. @@.. .... ..@@ @.@. @@@@ | |
973 fcb $34,$C4,$30,$00 .@@. @..@ .@.. .@.. .@.. ..@. .... @@@@ | |
974 fcb $44,$04,$40,$00 @..@ .@@@ @@@@ ..@@ .@.. @@.. .... @@@@ | |
975 fcb $C2,$32,$C0,$00 .... ...@ .... .... .... .... .... @@@@ | |
976 fcb $05,$A0,$00,$00 .... @@@. .... .... .... .... .... @@@@ | |
977 fcb $FF,$FF,$FF,$F0 .... .... .... .... .... .... .... .... | |
978 | |
979 emod | |
980 eom equ * | |
981 end |