-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoutput.asm
More file actions
3832 lines (3831 loc) · 192 KB
/
output.asm
File metadata and controls
3832 lines (3831 loc) · 192 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
00001 0000 ; ========================================
00002 0001 ; PROJECT : FONT FACTORY
00003 0001 ; TARGET : COMMODORE 64
00004 0001 ; COMMENTS : COPYRIGHT (C) 1989 CRAIG NOTTINGHAM. ALL RIGHTS RESERVED.
00005 0001 ; AUTHOR : CRAIG NOTTINGHAM
00006 0001 ; ========================================
00007 0001
00008 0001 TARGET TGT_C64
00009 0001
00010 0001 ;===============================================================================
00011 0001 ; KERNEL CONSTANTS
00012 0001 ;===============================================================================
00013 0001
00014 0001 ; ZERO-PAGE MEMORY
00015 0001 ;
00016 0001 PROCPORT = $01
00017 0001 DEVICESTATUS = $90
00018 0001 BITCIRS232 = $A8
00019 0001 RINONERS232 = $A9
00020 0001 RIDATARS232 = $AA
00021 0001 RIPRTYRS232 = $AB
00022 0001 DEVICEENDLO = $AE
00023 0001 DEVICEENDHI = $AF
00024 0001 FILENAMLEN = $B7
00025 0001 FILELOGNUM = $B8
00026 0001 FILESECADDR = $B9
00027 0001 DEVICENUM = $BA
00028 0001 FILENAMELO = $BB
00029 0001 FILENAMEHI = $BC
00030 0001 DEVICESTARTLO = $C1
00031 0001 DEVICESTARTHI = $C2
00032 0001 KEYBDMATRIX = $C5
00033 0001 KEYBDBUFFERLEN = $C6
00034 0001 SCRNLINEPNTLO = $D1
00035 0001 SCRNLINEPNTHI = $D2
00036 0001 SCRNCOLPNTR = $D3
00037 0001
00038 0001 ; SYSTEM MEMORY
00039 0001 ;
00040 0001 KEYBDBUFFERBASE = $0277
00041 0001 CURSORCOLOR = $0286
00042 0001 IRQSVCLOADDR = $0314
00043 0001 IRQSVCHIADDR = $0315
00044 0001 DISPLAYBASE = $0400
00045 0001 CARTRIDGESIG = $8008
00046 0001 UPPERCHRROM = $D000
00047 0001 SCRNCTLREG = $D011
00048 0001 RASTERLINE = $D012
00049 0001 MEMSETUPREG = $D018
00050 0001 IRQSTATUSREG = $D019
00051 0001 IRQCTLREG = $D01A
00052 0001 BORDERCOLOR = $D020
00053 0001 SCRNCOLOR = $D021
00054 0001 LOWERCHRROM = $D800
00055 0001 JOYSTICKPORT2 = $DC00
00056 0001 JOYSTICKPORT1 = $DC01
00057 0001 IRQCTLSTATREG = $DC0D
00058 0001 TIMERACTLREG = $DC0E
00059 0001 TIMERBCTLREG = $DC0F
00060 0001 CHRROMEND = $E000
00061 0001
00062 0001 ; KERNEL ROUTINES
00063 0001 ;
00064 0001 KRNL_LINPRT = $BDCD
00065 0001 KRNL_CLRSCRN = $E544
00066 0001 IRQSVCROUTINE = $EA31
00067 0001 KRNL_PRTLOADING = $F3D5
00068 0001 KRNL_GOSAVE = $F5EA
00069 0001 KRNL_CLOSEFILE = $F642
00070 0001 KRNL_COLDSTART = $FCE2
00071 0001 KRNL_TKSA = $FF96
00072 0001 KRNL_SCNKEY = $FF9F
00073 0001 KRNL_IECIN = $FFA5
00074 0001 KRNL_UNTLK = $FFAB
00075 0001 KRNL_TALK = $FFB4
00076 0001 KRNL_SETLFS = $FFBA
00077 0001 KRNL_SETNAM = $FFBD
00078 0001 KRNL_CHRIN = $FFCF
00079 0001 KRNL_CHROUT = $FFD2
00080 0001 KRNL_LOAD = $FFD5
00081 0001 KRNL_SAVE = $FFD8
00082 0001 KRNL_GETIN = $FFE4
00083 0001 KRNL_CLALL = $FFE7
00084 0001 KRNL_PLOT = $FFF0
00085 0001
00086 0001 ; COLOR CODES
00087 0001 ;
00088 0001 COLORWHITE = #$01
00089 0001 COLORBLUE = #$06
00090 0001 COLORLIGHTBLUE = #$0E
00091 0001
00092 0001 ; KEY CODES
00093 0001 ;
00094 0001 KEYCBMSHIFT = #$08
00095 0001 KEYRETURN = #$0D
00096 0001 KEYSPACE = #$20
00097 0001 KEYASTERISK = #$2A
00098 0001 KEYPLUS = #$2B
00099 0001 KEYMINUS = #$2D
00100 0001 KEY0 = #$30
00101 0001 KEY1 = #$31
00102 0001 KEY2 = #$32
00103 0001 KEY3 = #$33
00104 0001 KEY4 = #$34
00105 0001 KEY5 = #$35
00106 0001 KEY6 = #$36
00107 0001 KEY7 = #$37
00108 0001 KEY8 = #$38
00109 0001 KEY9 = #$39
00110 0001 KEYD = #$44
00111 0001 KEYL = #$4C
00112 0001 KEYQ = #$51
00113 0001 KEYS = #$53
00114 0001 KEYT = #$54
00115 0001 KEYU = #$55
00116 0001 KEYSTERLING = #$5C
00117 0001 KEYF5 = #$87
00118 0001 KEYF7 = #$88
00119 0001 KEYFULLBLOCK = #$A0
00120 0001 ;===============================================================================
00121 0001 ; CONSTANTS
00122 0001 ;===============================================================================
00123 0001
00124 0001 ; PROGRAM CONSTANTS
00125 0001 ;
00126 0001 DEFAULTSCRNCTL = #$1B
00127 0001 MESSAGEAREALEN = #$19 ; LENGTH OF MESSAGE DISPLAY AREA
00128 0001 NUMMAINCOMMANDS = #$1A ; NUMBER OF MAIN EDITING KEY COMMANDS
00129 0001 EDITGRIDHEXROW = #$01 ; LINE/ROW NUMBER OF EDIT GRID HEX VALUES
00130 0001 EDITGRIDHEXCOL = #$0B ; COLUMN OF EDIT GRID HEX VALUES
00131 0001 EDITCHARHEXROW = #$09 ; LINE/ROW NUMBER OF EDITING CHAR HEX VALUE DISPLAY
00132 0001 EDITCHARHEXCOL = #$26 ; COLUMN OF EDITING CHAR HEX VALUE DISPLAY
00133 0001 FIREBTNDELAY = #$03 ; NUMBER OF CALLS TO MONITOR FIRE BTN BEFORE CHECKING PORT
00134 0001 EDITSTICKDELAY = #$03 ; NUMBER OF CALLS TO MONITOR JOYSTICK USE IN 8*8 GRID BEFORE READING PORT
00135 0001 CHARSTICKDELAY = #$05 ; NUMBER OF CALLS TO MONITOR JOYSTICK USE IN 20*6 GRID BEFORE READING PORT
00136 0001 CHARCRSRHOMEROW = #$0B ; DEFAULT CURSOR LINE IN 20*6 GRID
00137 0001 CHARCRSRHOMECOL = #$01 ; DEFAULT CURSOR COL IN 20*6 GRID
00138 0001 CURSORDELAY = $10 ; TIMING DELAY FOR INTERRUPT-DRIVEN BLINKING CURSOR
00139 0001
00140 0001 ; PROGRAM VARIABLES
00141 0001 ;
00142 0001 CHARMEMPOSLO = $A8 ; LO/HI POINTER IN CHARMEMBASE $3000 - $37F8
00143 0001 CHARMEMPOSHI = $A9
00144 0001 EDITGRIDPOSLO = $AA ; LO/HI POINTER OF EDIT GRID CURSOR POSITION
00145 0001 EDITGRIDPOSHI = $AB
00146 0001 TEMPSAVE4 = $AC
00147 0001 TEMPSAVE5 = $AD
00148 0001 WORKGRIDPOSLO = $B8 ; LO/HI POINTER OF EDIT GRID MANIPULATION FUNCTIONS
00149 0001 WORKGRIDPOSHI = $B9
00150 0001 CHARSETPOSLO = $BA ; LO/HI POINTER IN DISPLAY EDITING CHARACTER CHARSETHOME $06D1 - $07DC
00151 0001 CHARSETPOSHI = $BB
00152 0001 TEMPCHARSAVE = $BC
00153 0001 TEMPSAVE6 = $BD
00154 0001 TEMPSAVE1 = $FB
00155 0001 TEMPSAVE2 = $FC
00156 0001 TEMPSAVE3 = $FD
00157 0001 EDITGRIDHOME = $0429 ; TOP-LEFT 'PIXEL' OF EDIT GRID
00158 0001 GRIDMODEADDR = $043C ; GRID MODE DISPLAY AREA
00159 0001 MESSAGEAREAADDR = $04AE ; MESSAGE DISPLAY AREA
00160 0001 EDITINGCHARCODE = $058A ; EDITING CHARACTER DISPLAY AREA
00161 0001 EDITINGCHARPRT = $05B2 ; EDITING CHARACTER SECOND DISPLAY AREA
00162 0001 SCRNGRIDADDR = $0590 ; START OF 20*6 DISPLAY AREA
00163 0001 SCRNGRIDHOME = $05B9 ; TOP-LEFT AND FIRST CHARACTER OF 20*6 DISPLAY AREA
00164 0001 CHARSETHOME = $06D1 ; START OF CHARACTER SET DISPLAY AREA
00165 0001 CHARSETEND = $07DC ; END OF CHARACTER SET DISPLAY AREA
00166 0001 CHARMEMBASE = $3000 ; CHARACTER SET REPRESENTED AS 1 BYTE = 1 CHARACTER LINE. 8 BYTES = 1 CHAR
00167 0001 CHARMEMEND = $37F8 ; CHARACTER SET MEMORY END ADDRESS
00168 0001 SCRNSAVEBASE = $5C00 ; TEMPORARY SCREEN SAVE AREA $5C00 - $5FFF
00169 0001
00170 0001 ;===============================================================================
00171 0001 ; CODE
00172 0001 ;===============================================================================
00173 0001
00174 0001 ;
00175 0001 ; PROGRAM : MAIN ENTRY POINT
00176 0001 ;
00177 0001 *=$1000
00178 1000 MAIN
00179 1000 A9 0E LDA COLORLIGHTBLUE
00180 1002 8D 20 D0 STA BORDERCOLOR
00181 1005 A9 06 LDA COLORBLUE
00182 1007 8D 21 D0 STA SCRNCOLOR
00183 100A A9 01 LDA COLORWHITE
00184 100C 8D 86 02 STA CURSORCOLOR
00185 100F
00186 100F 20 44 E5 JSR KRNL_CLRSCRN
00187 1012 20 31 11 JSR INIT
00188 1015
00189 1015 A2 00 LDX #$00
00190 1017
00191 1017 SHOWMAINSCRN
00192 1017 BD 00 40 LDA DATASCRNMAIN,X
00193 101A 9D 00 04 STA DISPLAYBASE,X
00194 101D BD 00 41 LDA DATASCRNMAIN+$100,X
00195 1020 9D 00 05 STA DISPLAYBASE+$100,X
00196 1023 BD 00 42 LDA DATASCRNMAIN+$200,X
00197 1026 9D 00 06 STA DISPLAYBASE+$200,X
00198 1029 BD 00 43 LDA DATASCRNMAIN+$300,X
00199 102C 9D 00 07 STA DISPLAYBASE+$300,X
00200 102F E8 INX
00201 1030 D0 E5 BNE SHOWMAINSCRN
00202 1032
00203 1032 A9 08 LDA KEYCBMSHIFT
00204 1034 20 D2 FF JSR KRNL_CHROUT ; DISABLE C=-SHIFT
00205 1037
00206 1037 SCANKEYS
00207 1037 20 9F FF JSR KRNL_SCNKEY
00208 103A 20 E4 FF JSR KRNL_GETIN
00209 103D C9 00 CMP #$00
00210 103F F0 F6 BEQ SCANKEYS
00211 1041
00212 1041 C9 55 CMP KEYU
00213 1043 F0 07 BEQ USEUPPERCASE
00214 1045
00215 1045 C9 4C CMP KEYL
00216 1047 F0 0E BEQ USELOWERCASE
00217 1049
00218 1049 4C 37 10 JMP SCANKEYS
00219 104C
00220 104C USEUPPERCASE
00221 104C A9 D0 LDA #>UPPERCHRROM ; COPY UPPER-CASE CHARS
00222 104E 8D 84 10 STA SRCCHRROM+2
00223 1051 8D E3 1B STA COPYROMCHARIDX+1 ; SET CORRECT CASE IN COPY ROM CHAR TO RAM CHAR ROUTINE
00224 1054 4C 77 10 JMP CPYROM
00225 1057
00226 1057 USELOWERCASE
00227 1057 A9 D8 LDA #>LOWERCHRROM ; COPY LOWER-CASE CHARS
00228 1059 8D 84 10 STA SRCCHRROM+2
00229 105C 8D E3 1B STA COPYROMCHARIDX+1 ; SET CORRECT CASE IN COPY ROM CHAR TO RAM CHAR ROUTINE
00230 105F
00231 105F A2 00 LDX #$00
00232 1061
00233 1061 CPYGRID1
00234 1061 BD 00 54 LDA DATACHARGRID,X
00235 1064 9D 90 05 STA SCRNGRIDADDR,X
00236 1067 E8 INX
00237 1068 D0 F7 BNE CPYGRID1
00238 106A
00239 106A A2 00 LDX #$00
00240 106C
00241 106C CPYGRID2
00242 106C BD 00 55 LDA DATACHARGRID+$100,X
00243 106F 9D 90 06 STA SCRNGRIDADDR+$100,X
00244 1072 E8 INX
00245 1073 E0 40 CPX #$40
00246 1075 D0 F5 BNE CPYGRID2
00247 1077
00248 1077 CPYROM
00249 1077 A9 7F LDA #$7F
00250 1079 8D 0D DC STA IRQCTLSTATREG
00251 107C
00252 107C A9 33 LDA #$33
00253 107E 85 01 STA PROCPORT
00254 1080
00255 1080 CPYCHRROM ; COPY CHARACTER DATA FROM $D000 OR $D800 INTO $3000-$3FFF
00256 1080 A2 00 LDX #$00
00257 1082
00258 1082 SRCCHRROM
00259 1082 BD 00 D0 LDA UPPERCHRROM,X
00260 1085
00261 1085 DESTCHRROM
00262 1085 9D 00 30 STA CHARMEMBASE,X
00263 1088 E8 INX
00264 1089 D0 F7 BNE SRCCHRROM
00265 108B
00266 108B EE 84 10 INC SRCCHRROM+2
00267 108E EE 87 10 INC DESTCHRROM+2
00268 1091 AD 84 10 LDA SRCCHRROM+2
00269 1094 C9 E0 CMP #>CHRROMEND
00270 1096 F0 03 BEQ JMP29
00271 1098 4C 80 10 JMP CPYCHRROM
00272 109B
00273 109B JMP29
00274 109B A9 D0 LDA #>UPPERCHRROM ; RESET SOURCE TO UPPER-CASE CHARS IN ROM
00275 109D 8D 84 10 STA SRCCHRROM+2
00276 10A0 A9 30 LDA #>CHARMEMBASE ; RESET DESTINATION TO CHAR-SET WORKING AREA
00277 10A2 8D 87 10 STA DESTCHRROM+2
00278 10A5 A9 37 LDA #$37
00279 10A7 85 01 STA PROCPORT
00280 10A9 A9 81 LDA #$81
00281 10AB 8D 0D DC STA IRQCTLSTATREG
00282 10AE
00283 10AE A9 20 LDA KEYSPACE
00284 10B0 A2 00 LDX #$00
00285 10B2
00286 10B2 LOOP19
00287 10B2 9D AE 04 STA MESSAGEAREAADDR,X
00288 10B5 E8 INX
00289 10B6 E0 19 CPX MESSAGEAREALEN
00290 10B8 D0 F8 BNE LOOP19
00291 10BA 20 DB 1A JSR SHOWCHARCURSOR
00292 10BD
00293 10BD MAINLOOP
00294 10BD A2 00 LDX #$00
00295 10BF
00296 10BF LOOPEDITCHARROW
00297 10BF 8A TXA
00298 10C0 48 PHA
00299 10C1 20 5D 23 JSR DRAWEDITROW
00300 10C4 68 PLA
00301 10C5 AA TAX
00302 10C6 E8 INX
00303 10C7 E0 08 CPX #$08
00304 10C9 D0 F4 BNE LOOPEDITCHARROW
00305 10CB
00306 10CB 38 SEC
00307 10CC A5 A8 LDA CHARMEMPOSLO
00308 10CE E9 08 SBC #$08
00309 10D0 85 A8 STA CHARMEMPOSLO
00310 10D2 A5 A9 LDA CHARMEMPOSHI
00311 10D4 E9 00 SBC #$00
00312 10D6 85 A9 STA CHARMEMPOSHI
00313 10D8
00314 10D8 MAINPROCESS
00315 10D8 20 00 24 JSR CHECKEDITSTICK
00316 10DB 20 B4 24 JSR MONITORFIREBTN
00317 10DE 20 92 23 JSR PRINTHEXROWS
00318 10E1 20 B7 1A JSR SHOWEDITCURSOR
00319 10E4
00320 10E4 20 9F FF JSR KRNL_SCNKEY
00321 10E7 20 E4 FF JSR KRNL_GETIN
00322 10EA C9 00 CMP #$00
00323 10EC F0 EA BEQ MAINPROCESS
00324 10EE
00325 10EE A2 00 LDX #$00
00326 10F0
00327 10F0 FINDCMD
00328 10F0 DD 0A 58 CMP MAINCOMMANDS,X ; FIND COMMAND INDEX FOR KEY PRESS
00329 10F3 F0 08 BEQ CALLCMD
00330 10F5 E8 INX
00331 10F6 E0 1A CPX NUMMAINCOMMANDS
00332 10F8 D0 F6 BNE FINDCMD
00333 10FA
00334 10FA 4C D8 10 JMP MAINPROCESS
00335 10FD
00336 10FD CALLCMD
00337 10FD BD 23 58 LDA CMDLOADDRS,X ; GET LO/HI FUNCTION POINTER FOR CORRESPONDING COMMAND INDEX
00338 1100 BC 3C 58 LDY CMDHIADDRS,X
00339 1103 8D 0A 11 STA CMDPOINTER+1
00340 1106 8C 0B 11 STY CMDPOINTER+2
00341 1109
00342 1109 CMDPOINTER
00343 1109 20 C8 24 JSR HOMECURSOR ; CALL FUNCTION REQUESTED BY USER - ADDRESS SET ABOVE
00344 110C
00345 110C A9 29 LDA #<EDITGRIDHOME
00346 110E 85 B8 STA WORKGRIDPOSLO
00347 1110 A9 04 LDA #>EDITGRIDHOME
00348 1112 85 B9 STA WORKGRIDPOSHI
00349 1114
00350 1114 AD 01 56 LDA EDITINGCHAR ; DISPLAY EDITING CHAR AND HEX VALUE (BELOW)
00351 1117 8D 8A 05 STA EDITINGCHARCODE
00352 111A 8D B2 05 STA EDITINGCHARPRT
00353 111D
00354 111D CE C2 23 DEC PRINTHEXBYTE+1 ; TODO: CHANGE HOW THIS OPERATES
00355 1120 A2 09 LDX EDITCHARHEXROW
00356 1122 A0 26 LDY EDITCHARHEXCOL
00357 1124 18 CLC
00358 1125 20 F0 FF JSR KRNL_PLOT ; POSITION PRINT CURSOR
00359 1128 20 C1 23 JSR PRINTHEXBYTE ; TO PRINT HEX VALUE OF EDITING CHAR
00360 112B EE C2 23 INC PRINTHEXBYTE+1 ; TODO: CHANGE HOW THIS OPERATES
00361 112E
00362 112E 4C BD 10 JMP MAINLOOP
00363 1131
00364 1131 ;===============================================================================
00365 1131 ; INITIALIZE FUNCTIONS
00366 1131 ;===============================================================================
00367 1131
00368 1131 ;
00369 1131 ; UTILITY FUNCTION : INITIALIZE PROGRAM VARIABLES
00370 1131 ;
00371 1131 ; INPUT:
00372 1131 ; N/A
00373 1131 ; OUTPUT:
00374 1131 ; N/A
00375 1131 ; USES:
00376 1131 ; A REG
00377 1131 ; X REG
00378 1131 ;
00379 1131 INIT
00380 1131 A9 00 LDA #<CHARMEMBASE
00381 1133 85 A8 STA CHARMEMPOSLO
00382 1135 A9 30 LDA #>CHARMEMBASE
00383 1137 85 A9 STA CHARMEMPOSHI
00384 1139
00385 1139 A9 29 LDA #<EDITGRIDHOME
00386 113B 85 B8 STA WORKGRIDPOSLO
00387 113D 85 AA STA EDITGRIDPOSLO
00388 113F A9 04 LDA #>EDITGRIDHOME
00389 1141 85 B9 STA WORKGRIDPOSHI
00390 1143 85 AB STA EDITGRIDPOSHI
00391 1145
00392 1145 A9 D1 LDA #<CHARSETHOME
00393 1147 85 BA STA CHARSETPOSLO
00394 1149 A9 06 LDA #>CHARSETHOME
00395 114B 85 BB STA CHARSETPOSHI
00396 114D
00397 114D A9 10 LDA #CURSORDELAY
00398 114F 8D 00 56 STA CURSORTIMER
00399 1152
00400 1152 A9 05 LDA CHARSTICKDELAY
00401 1154 8D 08 56 STA CHARSTICKCOUNT
00402 1157 A9 03 LDA EDITSTICKDELAY
00403 1159 8D 03 56 STA EDITSTICKCOUNT
00404 115C
00405 115C A9 00 LDA #$00
00406 115E 8D 01 56 STA EDITINGCHAR
00407 1161
00408 1161 A9 38 LDA KEY8
00409 1163 8D 06 56 STA STORAGEDEVNUM
00410 1166 8D D9 4D STA DATALOADDEVNUM
00411 1169
00412 1169 A9 0B LDA CHARCRSRHOMEROW
00413 116B 8D 15 1D STA CHARCURSORROW+1
00414 116E A9 01 LDA CHARCRSRHOMECOL
00415 1170 8D 17 1D STA CHARCURSORCOL+1
00416 1173
00417 1173 A9 01 LDA #COLORWHITE
00418 1175 20 79 11 JSR SETSCREENCOLOR
00419 1178 60 RTS
00420 1179
00421 1179 ;
00422 1179 ; UTILITY FUNCTION : SET SCREEN COLOUR ($D800 - $DFFF)
00423 1179 ;
00424 1179 ; INPUT:
00425 1179 ; A REG - COLOR
00426 1179 ; OUTPUT:
00427 1179 ; N/A
00428 1179 ; USES:
00429 1179 ; X REG
00430 1179 ;
00431 1179 SETSCREENCOLOR
00432 1179 A2 00 LDX #$00
00433 117B
00434 117B SETPAGECOLOR
00435 117B 9D 00 D8 STA LOWERCHRROM,X
00436 117E 9D 00 D9 STA LOWERCHRROM+$100,X
00437 1181 9D 00 DA STA LOWERCHRROM+$200,X
00438 1184 9D 00 DB STA LOWERCHRROM+$300,X
00439 1187 E8 INX
00440 1188 D0 F1 BNE SETPAGECOLOR
00441 118A 60 RTS
00442 118B ;===============================================================================
00443 118B ; EXIT PROGRAM (COLD START)
00444 118B ;===============================================================================
00445 118B
00446 118B EXITPROGRAM
00447 118B 78 SEI
00448 118C A9 31 LDA #<IRQSVCROUTINE
00449 118E 8D 14 03 STA IRQSVCLOADDR
00450 1191 A9 EA LDA #>IRQSVCROUTINE
00451 1193 8D 15 03 STA IRQSVCHIADDR
00452 1196
00453 1196 A9 79 LDA #$79
00454 1198 8D 19 D0 STA IRQSTATUSREG
00455 119B A9 F0 LDA #$F0
00456 119D 8D 1A D0 STA IRQCTLREG
00457 11A0 A9 01 LDA #$01
00458 11A2 8D 0E DC STA TIMERACTLREG
00459 11A5 58 CLI
00460 11A6
00461 11A6 A9 01 LDA #$01
00462 11A8 8D 08 80 STA CARTRIDGESIG ; PREVENT CARTRIDGE AUTO-START BY SPOILING CBM80 SIGNATURE
00463 11AB
00464 11AB 4C E2 FC JMP KRNL_COLDSTART
00465 11AE ;===============================================================================
00466 11AE ; COMMAND HANDLER: TOGGLE EDITING PIXEL ON/OFF
00467 11AE ;===============================================================================
00468 11AE
00469 11AE CHECKFIREBTN
00470 11AE AD 00 DC LDA JOYSTICKPORT2
00471 11B1 C9 6F CMP #$6F
00472 11B3 F0 01 BEQ PIXELINVERT
00473 11B5 60 RTS
00474 11B6
00475 11B6 PIXELINVERT
00476 11B6 A2 00 LDX #$00
00477 11B8 A1 AA LDA (EDITGRIDPOSLO,X)
00478 11BA C9 A0 CMP KEYFULLBLOCK ; PIXEL ON?
00479 11BC F0 07 BEQ CLRPIXEL
00480 11BE
00481 11BE A9 A0 LDA KEYFULLBLOCK ; SET PIXEL
00482 11C0 81 AA STA (EDITGRIDPOSLO,X)
00483 11C2 4C C9 11 JMP SHOWPIXEL
00484 11C5
00485 11C5 CLRPIXEL
00486 11C5 A9 20 LDA KEYSPACE ; CLEAR PIXEL
00487 11C7 81 AA STA (EDITGRIDPOSLO,X)
00488 11C9
00489 11C9 SHOWPIXEL
00490 11C9 EA NOP
00491 11CA EA NOP
00492 11CB EA NOP
00493 11CC
00494 11CC STOREDITGRID
00495 11CC A0 00 LDY #$00 ; CLEAR 8-BYTES IN-MEMORY OF THE CHAR READY FOR NEW VALUES
00496 11CE A9 00 LDA #$00
00497 11D0
00498 11D0 CLRMEMPIXEL
00499 11D0 91 A8 STA (CHARMEMPOSLO),Y
00500 11D2 C8 INY
00501 11D3 C0 08 CPY #$08
00502 11D5 D0 F9 BNE CLRMEMPIXEL
00503 11D7
00504 11D7 A9 29 LDA #<EDITGRIDHOME ; START AT TOP-LEFT OF DISPLAY 8*8 EDIT GRID
00505 11D9 85 B8 STA WORKGRIDPOSLO
00506 11DB A9 04 LDA #>EDITGRIDHOME
00507 11DD 85 B9 STA WORKGRIDPOSHI
00508 11DF
00509 11DF A2 00 LDX #$00
00510 11E1
00511 11E1 STORMEMPIXEL
00512 11E1 8A TXA
00513 11E2 48 PHA
00514 11E3 20 00 12 JSR SETMEMPIXEL
00515 11E6 68 PLA
00516 11E7 AA TAX
00517 11E8 E8 INX
00518 11E9 E0 08 CPX #$08
00519 11EB D0 F4 BNE STORMEMPIXEL
00520 11ED
00521 11ED 38 SEC ; SET CHARACTER MEMORY POINTER POSITIONS BACK TO CHAR START
00522 11EE A5 A8 LDA CHARMEMPOSLO
00523 11F0 E9 08 SBC #$08
00524 11F2 85 A8 STA CHARMEMPOSLO
00525 11F4 A5 A9 LDA CHARMEMPOSHI
00526 11F6 E9 00 SBC #$00
00527 11F8 85 A9 STA CHARMEMPOSHI
00528 11FA 60 RTS
00529 11FB
00530 11FB ;
00531 11FB ; UTILITY FUNCTION : SET PIXEL IN CHARACTER MEMORY FROM DISPLAY EDITING GRID
00532 11FB ;
00533 11FB ALIGN
00534 1200 SETMEMPIXEL
00535 1200 A0 80 LDY #$80
00536 1202
00537 1202 CHKGRIDPIXEL
00538 1202 A2 00 LDX #$00
00539 1204 A1 B8 LDA (WORKGRIDPOSLO,X)
00540 1206 C9 A0 CMP KEYFULLBLOCK ; IS THE PIXEL SET? REPRESENTING A '1', IGNORE IF CLEAR/'0'
00541 1208 D0 06 BNE NEXTPIXELPOS
00542 120A
00543 120A 98 TYA
00544 120B 18 CLC
00545 120C 61 A8 ADC (CHARMEMPOSLO,X)
00546 120E 81 A8 STA (CHARMEMPOSLO,X)
00547 1210
00548 1210 NEXTPIXELPOS
00549 1210 E6 B8 INC WORKGRIDPOSLO ; MOVE TO NEXT 'PIXEL' IN DISPLAY 8*8 EDIT GRID
00550 1212 D0 02 BNE NEXTPIXELCOL
00551 1214 E6 B9 INC WORKGRIDPOSHI
00552 1216
00553 1216 NEXTPIXELCOL
00554 1216 98 TYA
00555 1217 4A LSR
00556 1218 A8 TAY
00557 1219 D0 E7 BNE CHKGRIDPIXEL
00558 121B
00559 121B 18 CLC
00560 121C A5 B8 LDA WORKGRIDPOSLO ; MOVE TO NEXT ROW IN DISPLAY 8*8 EDIT GRID
00561 121E 69 20 ADC #$20
00562 1220 85 B8 STA WORKGRIDPOSLO
00563 1222 A5 B9 LDA WORKGRIDPOSHI
00564 1224 69 00 ADC #$00
00565 1226 85 B9 STA WORKGRIDPOSHI
00566 1228
00567 1228 E6 A8 INC CHARMEMPOSLO ; MOVE TO NEXT CHARACTER MEMORY POSITION
00568 122A D0 02 BNE EXITSETMEMPIXEL
00569 122C E6 A9 INC CHARMEMPOSHI
00570 122E
00571 122E EXITSETMEMPIXEL
00572 122E 60 RTS
00573 122F ;===============================================================================
00574 122F ; COMMAND HANDLER: FILL 20*6 CHARACTER GRID WITH SPACE OR SAME CHARACTER
00575 122F ;===============================================================================
00576 122F
00577 122F CLEARGRID206
00578 122F A9 20 LDA KEYSPACE
00579 1231 4C 37 12 JMP CPYCHARGRID206
00580 1234
00581 1234 FILLGRID206
00582 1234 AD 01 56 LDA EDITINGCHAR
00583 1237
00584 1237 CPYCHARGRID206
00585 1237 A2 00 LDX #$00
00586 1239
00587 1239 NEXTGRIDPOS
00588 1239 9D B9 05 STA SCRNGRIDHOME,X
00589 123C 9D E1 05 STA SCRNGRIDHOME+$28,X
00590 123F 9D 09 06 STA SCRNGRIDHOME+$50,X
00591 1242 9D 31 06 STA SCRNGRIDHOME+$78,X
00592 1245 9D 59 06 STA SCRNGRIDHOME+$A0,X
00593 1248 9D 81 06 STA SCRNGRIDHOME+$C8,X
00594 124B E8 INX
00595 124C E0 14 CPX #$14
00596 124E D0 E9 BNE NEXTGRIDPOS
00597 1250 60 RTS
00598 1251 ;===============================================================================
00599 1251 ; SCROLL EDITING CHARACTER COMMANDS
00600 1251 ;===============================================================================
00601 1251
00602 1251 ;
00603 1251 ; COMMAND HANDLER : SCROLL EDITING CHARACTER UP
00604 1251 ;
00605 1251 SCROLLCHARUP
00606 1251 A5 A8 LDA CHARMEMPOSLO
00607 1253 8D 6E 12 STA DATAIDX3+1
00608 1256 8D 79 12 STA DATAIDX4+1
00609 1259 8D 7C 12 STA DATAIDX5+1
00610 125C 8D 98 12 STA DATAIDX6+1
00611 125F A5 A9 LDA CHARMEMPOSHI
00612 1261 8D 6F 12 STA DATAIDX3+2
00613 1264 8D 7A 12 STA DATAIDX4+2
00614 1267 8D 7D 12 STA DATAIDX5+2
00615 126A 8D 99 12 STA DATAIDX6+2
00616 126D
00617 126D DATAIDX3
00618 126D AD 00 30 LDA CHARMEMBASE
00619 1270 8D 0A 56 STA CHARSCROLLSAVE
00620 1273 EE 79 12 INC DATAIDX4+1
00621 1276
00622 1276 A2 00 LDX #$00
00623 1278
00624 1278 DATAIDX4
00625 1278 BD 01 30 LDA CHARMEMBASE+1,X
00626 127B
00627 127B DATAIDX5
00628 127B 9D 00 30 STA CHARMEMBASE,X
00629 127E E8 INX
00630 127F E0 07 CPX #$07
00631 1281 D0 F5 BNE DATAIDX4
00632 1283
00633 1283 18 CLC
00634 1284 AD 98 12 LDA DATAIDX6+1
00635 1287 69 07 ADC #$07
00636 1289 8D 98 12 STA DATAIDX6+1
00637 128C AD 99 12 LDA DATAIDX6+2
00638 128F 69 00 ADC #$00
00639 1291 8D 99 12 STA DATAIDX6+2
00640 1294 AD 0A 56 LDA CHARSCROLLSAVE
00641 1297
00642 1297 DATAIDX6
00643 1297 8D 07 30 STA CHARMEMBASE+7
00644 129A 60 RTS
00645 129B
00646 129B ;
00647 129B ; COMMAND HANDLER : SCROLL EDITING CHARACTER DOWN
00648 129B ;
00649 129B SCROLLCHARDOWN
00650 129B A5 A8 LDA CHARMEMPOSLO
00651 129D 8D C9 12 STA DATAIDX9+1
00652 12A0 8D D4 12 STA DATAIDX10+1
00653 12A3 8D D7 12 STA DATAIDX11+1
00654 12A6 8D E0 12 STA DATAIDX12+1
00655 12A9 A5 A9 LDA CHARMEMPOSHI
00656 12AB 8D CA 12 STA DATAIDX9+2
00657 12AE 8D D5 12 STA DATAIDX10+2
00658 12B1 8D D8 12 STA DATAIDX11+2
00659 12B4 8D E1 12 STA DATAIDX12+2
00660 12B7 18 CLC
00661 12B8 AD C9 12 LDA DATAIDX9+1
00662 12BB 69 07 ADC #$07
00663 12BD 8D C9 12 STA DATAIDX9+1
00664 12C0 AD CA 12 LDA DATAIDX9+2
00665 12C3 69 00 ADC #$00
00666 12C5 8D CA 12 STA DATAIDX9+2
00667 12C8
00668 12C8 DATAIDX9
00669 12C8 AD 07 30 LDA CHARMEMBASE+7
00670 12CB 8D 0A 56 STA CHARSCROLLSAVE
00671 12CE EE D7 12 INC DATAIDX11+1
00672 12D1
00673 12D1 A2 06 LDX #$06
00674 12D3
00675 12D3 DATAIDX10
00676 12D3 BD 00 30 LDA CHARMEMBASE,X
00677 12D6
00678 12D6 DATAIDX11
00679 12D6 9D 01 30 STA CHARMEMBASE+1,X
00680 12D9 CA DEX
00681 12DA 10 F7 BPL DATAIDX10
00682 12DC
00683 12DC AD 0A 56 LDA CHARSCROLLSAVE
00684 12DF
00685 12DF DATAIDX12
00686 12DF 8D 00 30 STA CHARMEMBASE
00687 12E2 60 RTS
00688 12E3
00689 12E3 ;
00690 12E3 ; COMMAND HANDLER : SCROLL EDITING CHARACTER LEFT
00691 12E3 ;
00692 12E3 ALIGN
00693 1300 SCROLLCHARLEFT
00694 1300 A9 29 LDA #<EDITGRIDHOME
00695 1302 85 B8 STA WORKGRIDPOSLO
00696 1304 A9 04 LDA #>EDITGRIDHOME
00697 1306 85 B9 STA WORKGRIDPOSHI
00698 1308
00699 1308 A2 00 LDX #$00
00700 130A A0 00 LDY #$00
00701 130C
00702 130C LOOP16
00703 130C B1 B8 LDA (WORKGRIDPOSLO),Y
00704 130E 9D 2B 56 STA WORKINGCHAR,X
00705 1311 18 CLC
00706 1312 A5 B8 LDA WORKGRIDPOSLO
00707 1314 69 28 ADC #$28
00708 1316 85 B8 STA WORKGRIDPOSLO
00709 1318 A5 B9 LDA WORKGRIDPOSHI
00710 131A 69 00 ADC #$00
00711 131C 85 B9 STA WORKGRIDPOSHI
00712 131E E8 INX
00713 131F E0 08 CPX #$08
00714 1321 D0 E9 BNE LOOP16
00715 1323
00716 1323 A0 00 LDY #$00
00717 1325
00718 1325 LOOP17
00719 1325 A2 00 LDX #$00
00720 1327
00721 1327 DATAIDX22
00722 1327 BD 2A 04 LDA EDITGRIDHOME+1,X
00723 132A
00724 132A DATAIDX23
00725 132A 9D 29 04 STA EDITGRIDHOME,X
00726 132D E8 INX
00727 132E E0 07 CPX #$07
00728 1330 D0 F5 BNE DATAIDX22
00729 1332
00730 1332 18 CLC
00731 1333 AD 28 13 LDA DATAIDX22+1
00732 1336 69 28 ADC #$28
00733 1338 8D 28 13 STA DATAIDX22+1
00734 133B AD 29 13 LDA DATAIDX22+2
00735 133E 69 00 ADC #$00
00736 1340 8D 29 13 STA DATAIDX22+2
00737 1343 18 CLC
00738 1344 AD 2B 13 LDA DATAIDX23+1
00739 1347 69 28 ADC #$28
00740 1349 8D 2B 13 STA DATAIDX23+1
00741 134C AD 2C 13 LDA DATAIDX23+2
00742 134F 69 00 ADC #$00
00743 1351 8D 2C 13 STA DATAIDX23+2
00744 1354 C8 INY
00745 1355 C0 08 CPY #$08
00746 1357 D0 CC BNE LOOP17
00747 1359
00748 1359 A9 30 LDA #<EDITGRIDHOME+7
00749 135B 85 B8 STA WORKGRIDPOSLO
00750 135D A9 04 LDA #>EDITGRIDHOME
00751 135F 85 B9 STA WORKGRIDPOSHI
00752 1361
00753 1361 A2 00 LDX #$00
00754 1363 A0 00 LDY #$00
00755 1365
00756 1365 LOOP18
00757 1365 BD 2B 56 LDA WORKINGCHAR,X
00758 1368 91 B8 STA (WORKGRIDPOSLO),Y
00759 136A 18 CLC
00760 136B A5 B8 LDA WORKGRIDPOSLO
00761 136D 69 28 ADC #$28
00762 136F 85 B8 STA WORKGRIDPOSLO
00763 1371 A5 B9 LDA WORKGRIDPOSHI
00764 1373 69 00 ADC #$00
00765 1375 85 B9 STA WORKGRIDPOSHI
00766 1377 E8 INX
00767 1378 E0 08 CPX #$08
00768 137A D0 E9 BNE LOOP18
00769 137C
00770 137C 20 CC 11 JSR STOREDITGRID
00771 137F
00772 137F A9 2A LDA #<EDITGRIDHOME+1
00773 1381 8D 28 13 STA DATAIDX22+1
00774 1384 A9 29 LDA #<EDITGRIDHOME
00775 1386 8D 2B 13 STA DATAIDX23+1
00776 1389 A9 04 LDA #>EDITGRIDHOME
00777 138B 8D 29 13 STA DATAIDX22+2
00778 138E 8D 2C 13 STA DATAIDX23+2
00779 1391 60 RTS
00780 1392
00781 1392 ;
00782 1392 ; COMMAND HANDLER : SCROLL EDITING CHARACTER RIGHT
00783 1392 ;
00784 1392 ALIGN
00785 1400 SCROLLCHARRIGHT
00786 1400 A9 30 LDA #<EDITGRIDHOME+7
00787 1402 85 B8 STA WORKGRIDPOSLO
00788 1404 A9 04 LDA #>EDITGRIDHOME
00789 1406 85 B9 STA WORKGRIDPOSHI
00790 1408
00791 1408 A2 00 LDX #$00
00792 140A A0 00 LDY #$00
00793 140C
00794 140C LOOP3
00795 140C B1 B8 LDA (WORKGRIDPOSLO),Y
00796 140E 9D 2B 56 STA WORKINGCHAR,X
00797 1411 18 CLC
00798 1412 A5 B8 LDA WORKGRIDPOSLO
00799 1414 69 28 ADC #$28
00800 1416 85 B8 STA WORKGRIDPOSLO
00801 1418 A5 B9 LDA WORKGRIDPOSHI
00802 141A 69 00 ADC #$00
00803 141C 85 B9 STA WORKGRIDPOSHI
00804 141E E8 INX
00805 141F E0 08 CPX #$08
00806 1421 D0 E9 BNE LOOP3
00807 1423
00808 1423 A0 00 LDY #$00
00809 1425
00810 1425 LOOP4
00811 1425 A2 06 LDX #$06
00812 1427
00813 1427 DATAIDX26
00814 1427 BD 29 04 LDA EDITGRIDHOME,X
00815 142A
00816 142A DATAIDX27
00817 142A 9D 2A 04 STA EDITGRIDHOME+1,X
00818 142D CA DEX
00819 142E 10 F7 BPL DATAIDX26
00820 1430
00821 1430 EA NOP
00822 1431 EA NOP
00823 1432 18 CLC
00824 1433 AD 28 14 LDA DATAIDX26+1
00825 1436 69 28 ADC #$28
00826 1438 8D 28 14 STA DATAIDX26+1
00827 143B AD 29 14 LDA DATAIDX26+2
00828 143E 69 00 ADC #$00
00829 1440 8D 29 14 STA DATAIDX26+2
00830 1443 18 CLC
00831 1444 AD 2B 14 LDA DATAIDX27+1
00832 1447 69 28 ADC #$28
00833 1449 8D 2B 14 STA DATAIDX27+1
00834 144C AD 2C 14 LDA DATAIDX27+2
00835 144F 69 00 ADC #$00
00836 1451 8D 2C 14 STA DATAIDX27+2
00837 1454 C8 INY
00838 1455 C0 08 CPY #$08
00839 1457 D0 CC BNE LOOP4
00840 1459
00841 1459 A9 29 LDA #<EDITGRIDHOME
00842 145B 85 B8 STA WORKGRIDPOSLO
00843 145D A9 04 LDA #>EDITGRIDHOME
00844 145F 85 B9 STA WORKGRIDPOSHI
00845 1461
00846 1461 A2 00 LDX #$00
00847 1463 A0 00 LDY #$00
00848 1465
00849 1465 LOOP5
00850 1465 BD 2B 56 LDA WORKINGCHAR,X
00851 1468 91 B8 STA (WORKGRIDPOSLO),Y
00852 146A 18 CLC
00853 146B A5 B8 LDA WORKGRIDPOSLO
00854 146D 69 28 ADC #$28
00855 146F 85 B8 STA WORKGRIDPOSLO
00856 1471 A5 B9 LDA WORKGRIDPOSHI
00857 1473 69 00 ADC #$00
00858 1475 85 B9 STA WORKGRIDPOSHI
00859 1477 E8 INX
00860 1478 E0 08 CPX #$08
00861 147A D0 E9 BNE LOOP5
00862 147C
00863 147C 20 CC 11 JSR STOREDITGRID
00864 147F
00865 147F A9 29 LDA #<EDITGRIDHOME
00866 1481 8D 28 14 STA DATAIDX26+1
00867 1484 A9 2A LDA #<EDITGRIDHOME+1
00868 1486 8D 2B 14 STA DATAIDX27+1
00869 1489 A9 04 LDA #>EDITGRIDHOME
00870 148B 8D 29 14 STA DATAIDX26+2
00871 148E 8D 2C 14 STA DATAIDX27+2
00872 1491 60 RTS
00873 1492 ;===============================================================================
00874 1492 ; TRANSFER MODE COMMANDS
00875 1492 ;===============================================================================
00876 1492
00877 1492 ;
00878 1492 ; COMMAND HANDLER : SELECT NEXT CHARACTER IN CHARACTER SET
00879 1492 ;
00880 1492 SELECTNEXTCHR
00881 1492 A5 BA LDA CHARSETPOSLO
00882 1494 C9 DC CMP #<CHARSETEND
00883 1496 D0 21 BNE MOVENEXTCHR
00884 1498
00885 1498 A5 BB LDA CHARSETPOSHI
00886 149A C9 07 CMP #>CHARSETEND
00887 149C D0 1B BNE MOVENEXTCHR
00888 149E
00889 149E A9 D1 LDA #<CHARSETHOME
00890 14A0 85 BA STA CHARSETPOSLO
00891 14A2 A9 06 LDA #>CHARSETHOME
00892 14A4 85 BB STA CHARSETPOSHI
00893 14A6
00894 14A6 A2 00 LDX #$00
00895 14A8 AD 01 56 LDA EDITINGCHAR
00896 14AB 81 BA STA (CHARSETPOSLO,X)
00897 14AD A9 00 LDA #$00
00898 14AF 85 A8 STA CHARMEMPOSLO
00899 14B1 8D 01 56 STA EDITINGCHAR
00900 14B4 A9 30 LDA #>CHARMEMBASE
00901 14B6 85 A9 STA CHARMEMPOSHI
00902 14B8 60 RTS
00903 14B9
00904 14B9 MOVENEXTCHR
00905 14B9 A2 00 LDX #$00
00906 14BB
00907 14BB LOOP13
00908 14BB A5 BA LDA CHARSETPOSLO
00909 14BD
00910 14BD DATAIDX17
00911 14BD C9 F6 CMP #$F6
00912 14BF D0 11 BNE JMP21
00913 14C1
00914 14C1 A5 BB LDA CHARSETPOSHI
00915 14C3
00916 14C3 DATAIDX18
00917 14C3 C9 06 CMP #$06
00918 14C5 D0 0B BNE JMP21
00919 14C7
00920 14C7 A9 F6 LDA #$F6
00921 14C9 8D BE 14 STA DATAIDX17+1
00922 14CC A9 06 LDA #$06
00923 14CE 8D C4 14 STA DATAIDX18+1
00924 14D1 60 RTS
00925 14D2
00926 14D2 JMP21
00927 14D2 18 CLC
00928 14D3 AD BE 14 LDA DATAIDX17+1
00929 14D6 69 28 ADC #$28
00930 14D8 8D BE 14 STA DATAIDX17+1
00931 14DB AD C4 14 LDA DATAIDX18+1
00932 14DE 69 00 ADC #$00
00933 14E0 8D C4 14 STA DATAIDX18+1
00934 14E3 E8 INX
00935 14E4 E0 08 CPX #$08
00936 14E6 D0 D3 BNE LOOP13
00937 14E8
00938 14E8 A2 00 LDX #$00
00939 14EA AD 01 56 LDA EDITINGCHAR
00940 14ED 81 BA STA (CHARSETPOSLO,X)
00941 14EF A9 F6 LDA #$F6
00942 14F1 8D BE 14 STA DATAIDX17+1
00943 14F4 A9 06 LDA #$06
00944 14F6 8D C4 14 STA DATAIDX18+1
00945 14F9 18 CLC
00946 14FA A5 BA LDA CHARSETPOSLO
00947 14FC 69 01 ADC #$01
00948 14FE 85 BA STA CHARSETPOSLO
00949 1500 A5 BB LDA CHARSETPOSHI
00950 1502 69 00 ADC #$00
00951 1504 85 BB STA CHARSETPOSHI
00952 1506 18 CLC
00953 1507 A5 A8 LDA CHARMEMPOSLO
00954 1509 69 08 ADC #$08
00955 150B 85 A8 STA CHARMEMPOSLO
00956 150D A5 A9 LDA CHARMEMPOSHI
00957 150F 69 00 ADC #$00
00958 1511 85 A9 STA CHARMEMPOSHI
00959 1513 EE 01 56 INC EDITINGCHAR
00960 1516 60 RTS
00961 1517
00962 1517 ;
00963 1517 ; COMMAND HANDLER : SELECT PREVIOUS CHARACTER IN CHARACTER SET
00964 1517 ;
00965 1517 ALIGN
00966 1600 SELECTPREVCHR
00967 1600 A5 BA LDA CHARSETPOSLO ; AT START OF CHARACTER MAP?
00968 1602 C9 D1 CMP #<CHARSETHOME
00969 1604 D0 23 BNE JMP22
00970 1606
00971 1606 A5 BB LDA CHARSETPOSHI
00972 1608 C9 06 CMP #>CHARSETHOME
00973 160A D0 1D BNE JMP22
00974 160C
00975 160C A9 DC LDA #<CHARSETEND ; AT BEGINNING SO WRAP TO END OF CHARACTERS $07DC ON SCREEN
00976 160E 85 BA STA CHARSETPOSLO
00977 1610 A9 07 LDA #>CHARSETEND
00978 1612 85 BB STA CHARSETPOSHI
00979 1614 A2 00 LDX #$00
00980 1616 AD 01 56 LDA EDITINGCHAR
00981 1619 81 BA STA (CHARSETPOSLO,X)
00982 161B A9 FF LDA #$FF ; EDITING LAST CHAR - $FF
00983 161D 8D 01 56 STA EDITINGCHAR
00984 1620 A9 F8 LDA #<CHARMEMEND
00985 1622 85 A8 STA CHARMEMPOSLO
00986 1624 A9 37 LDA #>CHARMEMEND
00987 1626 85 A9 STA CHARMEMPOSHI
00988 1628 60 RTS
00989 1629
00990 1629 JMP22
00991 1629 A2 00 LDX #$00
00992 162B
00993 162B LOOP14
00994 162B A5 BA LDA CHARSETPOSLO ; START OF A ROW POSITION INSTEAD?
00995 162D
00996 162D DATAIDX19
00997 162D C9 D1 CMP #<CHARSETHOME
00998 162F D0 11 BNE JMP23
00999 1631