-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy patheditor.1
646 lines (646 loc) · 9.01 KB
/
editor.1
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
.PAG 'SCREEN EDITOR'
MAXCHR=88
NWRAP=4 ;MAX NUMBER OF PHYSICAL LINES PER LOGICAL LINE
;UNDEFINED FUNCTION ENTRY
;
; UNDEFD LDX #0
; UNDEF2 LDA UNMSG,X
; JSR PRT
; INX
; CPX #UNMSG2-UNMSG
; BNE UNDEF2
; SEC
; RTS
;
; UNMSG .BYT $D,'?ADVANCED FUNCTION NOT AVAILABLE',$D
; UNMSG2
;
;RETURN ADDRESS OF 6522
;
IOBASE LDX #<D1ORB
LDY #>D1ORB
RTS
;
;RETURN MAX ROWS,COLS OF SCREEN
;
SCRORG LDX #LLEN
LDY #23
RTS
;
;READ/PLOT CURSOR POSITION
;
PLOT BCS PLOT10
STX TBLX
STY PNTR
JSR STUPT
PLOT10 LDX TBLX
LDY PNTR
RTS
.SKI 5
;INITIALIZE I/O
;
CINT
;
; CHECK FOR EXPANSION RAM
; ESTABLISH SCREEN MEMORY
;
JSR PANIC ;SET UP VIC
;
LDA HIBASE ;GET SCREEN BASE
AND #$FD ;GET RID OF .5K BOUNDRY
ASL A ;SET IT UP FOR THE VIC
ASL A
ORA #$80
STA VICREG+5 ;POINT THE VIC AT THE NEW SCREEN
;
LDA HIBASE ;CHECK FOR .5K BOUNDARY
AND #$02
BEQ NOHALF ;BRANCH IF ON 1K BOUNDARY
LDA #$80 ;ELSE SET .5K BIT IN VIC
ORA VICREG+2
STA VICREG+2
NOHALF
LDA #0 ;MAKE SURE WE'RE IN PET MODE
STA MODE
STA BLNON ;WE DONT HAVE A GOOD CHAR FROM THE SCREEN YET
LDA #<SHFLOG ;SET SHIFT LOGIC INDIRECTS
STA KEYLOG
LDA #>SHFLOG
STA KEYLOG+1
LDA #10
STA XMAX ;MAXIMUM TYPE AHEAD BUFFER SIZE
STA DELAY
LDA #BLUE
STA COLOR
LDA #4
STA KOUNT ;DELAY BETWEEN KEY REPEATS
LDA #$C
STA BLNCT
STA BLNSW
CLSR LDA HIBASE ;FILL HI BYTE PTR TABLE
ORA #$80
TAY
LDA #0
TAX
LPS1 STY LDTB1,X
CLC
ADC #LLEN
BCC LPS2
INY ;CARRY BUMP HI BYTE
LPS2 INX
CPX #NLINES+1 ;DONE # OF LINES?
BNE LPS1 ;NO...
LDA #$FF ;TAG END OF LINE TABLE
STA LDTB1,X
LDX #NLINES-1 ;CLEAR FROM THE BOTTOM LINE UP
CLEAR1 JSR CLRLN ;SEE SCROLL ROUTINES
DEX
BPL CLEAR1
.SKI 5
;HOME FUNCTION
;
NXTD LDY #0
STY PNTR ;LEFT COLUMN
STY TBLX ;TOP LINE
;
;MOVE CURSOR TO TBLX,PNTR
;
STUPT
LDX TBLX ;GET CURENT LINE INDEX
LDA PNTR ;GET CHARACTER POINTER
FNDSTR LDY LDTB1,X ;FIND BEGINING OF LINE
BMI STOK ;BRANCH IF START FOUND
CLC
ADC #LLEN ;ADJUST POINTER
STA PNTR
DEX
BPL FNDSTR
;
STOK
LDA LDTB1,X
AND #$03 ;GET RID OF GARBAGE
ORA HIBASE ;OR IN HIGH ORDER BITS
STA PNT+1
LDA LDTB2,X
STA PNT
;
LDA #LLEN-1
INX
FNDEND LDY LDTB1,X
BMI STDONE
CLC
ADC #LLEN
INX
BPL FNDEND
STDONE
STA LNMX
RTS
.SKI 5
;PANIC NMI ENTRY
;
VPAN JSR PANIC ;FIX VIC SCREEN
JMP NXTD ;HOME CURSOR
.SKI 5
PANIC LDA #3 ;RESET DEFAULT I/O
STA DFLTO
LDA #0
STA DFLTN
.SKI 5
;INIT VIC
;
INITV LDX #$10
PX4 LDA TVIC-1,X
STA VICREG-1,X
DEX
BNE PX4
RTS
.SKI 5
;
;REMOVE CHARACTER FROM QUEUE
;
LP2 LDY KEYD
LDX #0
LP1 LDA KEYD+1,X
STA KEYD,X
INX
CPX NDX
BNE LP1
DEC NDX
TYA
CLI
CLC ;GOOD RETURN
RTS
LOOP4 JSR PRT
LOOP3 LDA NDX
STA BLNSW
STA AUTODN ;TURN ON AUTO SCROLL DOWN
BEQ LOOP3
SEI
LDA BLNON
BEQ LP21
LDA GDBLN
LDX GDCOL ;RESTORE ORIGINAL COLOR
LDY #0
STY BLNON
JSR DSPP
LP21 JSR LP2
CMP #$83 ;RUN KEY?
BNE LP22
LDX #9
SEI
STX NDX
LP23 LDA RUNTB-1,X
STA KEYD-1,X
DEX
BNE LP23
BEQ LOOP3
LP22 CMP #$D
BNE LOOP4
LDY LNMX
STY CRSW
CLP5 LDA (PNT)Y
CMP #'
BNE CLP6
DEY
BNE CLP5
CLP6 INY
STY INDX
LDY #0
STY AUTODN ;TURN OFF AUTO SCROLL DOWN
STY PNTR
STY QTSW
LDA LSXP
BMI LOP5
LDX TBLX
JSR FINDST ;FIND 1ST PHYSICAL LINE
CPX LSXP
BNE LOP5
BNE LOP5
LDA LSTP
STA PNTR
CMP INDX
BCC LOP5
BCS CLP2
.SKI 5
;INPUT A LINE UNTIL CARRIAGE RETURN
;
LOOP5 TYA
PHA
TXA
PHA
LDA CRSW
BEQ LOOP3
LOP5 LDY PNTR
LDA (PNT)Y
.BYT $EA,$EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA,$EA
.BYT $EA,$EA
.BYT $EA
.BYT $EA
.BYT $EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA,$EA
.BYT $EA,$EA
NOTONE
STA DATA
LOP51 AND #$3F
ASL DATA
BIT DATA
BPL LOP54
ORA #$80
LOP54 BCC LOP52
LDX QTSW
BNE LOP53
LOP52 BVS LOP53
ORA #$40
LOP53 INC PNTR
JSR QTSWC
CPY INDX
BNE CLP1
CLP2 LDA #0
STA CRSW
LDA #$D
LDX DFLTN ;FIX GETS FROM SCREEN
CPX #3 ;IS IT THE SCREEN?
BEQ CLP2A
LDX DFLTO
CPX #3
BEQ CLP21
CLP2A JSR PRT
CLP21 LDA #$D
CLP1 STA DATA
PLA
TAX
PLA
TAY
LDA DATA
CMP #$DE ;IS IT <PI> ?
BNE CLP7
LDA #$FF
CLP7 CLC
RTS
.SKI 5
QTSWC CMP #$22
BNE QTSWL
LDA QTSW
EOR #$1
STA QTSW
LDA #$22
QTSWL RTS
.SKI 5
NXT33 ORA #$40
NXT3 LDX RVS
BEQ NVS
NC3 ORA #$80
NVS LDX INSRT
BEQ NVS1
DEC INSRT
NVS1 LDX COLOR PUT COLOR ON SCREEN
JSR DSPP
JSR WLOGIC ;CHECK FOR WRAPAROUND
LOOP2 PLA
TAY
LDA INSRT
BEQ LOP2
LSR QTSW
LOP2 PLA
TAX
PLA
CLC ;GOOD RETURN
CLI
RTS
.PAG
WLOGIC
JSR CHKDWN ;MAYBE WE SHOULD WE INCREMENT TBLX
INC PNTR ;BUMP CHARCTER POINTER
LDA LNMX ;
CMP PNTR ;IF LNMX IS LESS THAN PNTR
BCS WLGRTS ;BRANCH IF LNMX>=PNTR
CMP #MAXCHR-1 ;PAST MAX CHARACTERS
BEQ WLOG10 ;BRANCH IF SO
LDA AUTODN ;SHOULD WE AUTO SCROLL DOWN?
BEQ WLOG20 ;BRANCH IF NOT
JMP BMT1 ;ELSE DECIDE WHICH WAY TO SCROLL
.SKIP 3
WLOG20
LDX TBLX ;SEE IF WE SHOULD SCROLL DOWN
CPX #NLINES
BCC WLOG30 ;BRANCH IF NOT
JSR SCROL ;ELSE DO THE SCROL UP
DEC TBLX ;AND ADJUST CURENT LINE#
LDX TBLX
WLOG30 ASL LDTB1,X ;WRAP THE LINE
LSR LDTB1,X
JMP PATCHX ;DO THE FIX FOR RUN MODE WRAP
PATOUT ;PATCH RE-ENTRY POINT
ADC #LLEN
STA LNMX
FINDST
LDA LDTB1,X ;IS THIS THE FIRST LINE?
BMI FINX ;BRANCH IF SO
DEX ;ELSE BACKUP 1
BNE FINDST
FINX
JMP SETPNT ;MAKE SURE PNT IS RIGHT
WLOG10 DEC TBLX
JSR NXLN
LDA #0
STA PNTR ;POINT TO FIRST BYTE
WLGRTS RTS
.PAG
BKLN LDX TBLX
BNE BKLN1
STX PNTR
PLA
PLA
BNE LOOP2
;
BKLN1 DEX
STX TBLX
JSR STUPT
LDY LNMX
STY PNTR
RTS
.SKI 5
;PRINT ROUTINE
;
PRT PHA
STA DATA
TXA
PHA
TYA
PHA
LDA #0
STA CRSW
LDY PNTR
LDA DATA
BPL *+5
JMP NXTX
CMP #$D
BNE NJT1
JMP NXT1
NJT1 CMP #'
BCC NTCN
CMP #$60 ;LOWER CASE?
BCC NJT8 ;NO...
AND #$DF ;YES...MAKE SCREEN LOWER
BNE NJT9 ;ALWAYS
NJT8 AND #$3F
NJT9 JSR QTSWC
JMP NXT3
NTCN LDX INSRT
BEQ CNC3X
JMP NC3
CNC3X CMP #$14
BNE NTCN1
TYA
BNE BAK1UP
JSR BKLN
JMP BK2
BAK1UP JSR CHKBAK ;SHOULD WE DEC TBLX
DEY
STY PNTR
BK1 JSR SCOLOR ;FIX COLOR PTRS
BK15 INY
LDA (PNT)Y
DEY
STA (PNT)Y
INY
LDA (USER)Y
DEY
STA (USER)Y
INY
CPY LNMX
BNE BK15
BK2 LDA #'
STA (PNT)Y
LDA COLOR
STA (USER)Y
BPL JPL3
NTCN1 LDX QTSW
BEQ NC3W
CNC3 JMP NC3
NC3W CMP #$12
BNE NC1
STA RVS
NC1 CMP #$13
BNE NC2
JSR NXTD
NC2 CMP #$1D
BNE NCX2
INY
JSR CHKDWN
STY PNTR
DEY
CPY LNMX
BCC NCZ2
DEC TBLX
JSR NXLN
LDY #0
JPL4 STY PNTR
NCZ2 JMP LOOP2
NCX2 CMP #$11
BNE COLR1
CLC
TYA
ADC #LLEN
TAY
INC TBLX
CMP LNMX
BCC JPL4
BEQ JPL4
DEC TBLX
CURS10 SBC #LLEN
BCC GOTDWN
STA PNTR
BNE CURS10
GOTDWN JSR NXLN
JPL3 JMP LOOP2
COLR1 JSR CHKCOL ;CHECK FOR A COLOR
JMP LOWER ;WAS JMP LOOP2
.SKI 3
;CHECK COLOR
;
.SKI 5
;SHIFTED KEYS
;
NXTX .BYT $EA,$EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA,$EA
.BYT $EA,$EA
.BYT $EA
.BYT $EA
.BYT $EA,$EA
;
.BYT $EA,$EA
;
.BYT $EA,$EA,$EA
KEEPIT
AND #$7F
CMP #$7F
BNE NXTX1
LDA #$5E
NXTX1 .BYT $EA,$EA
.BYT $EA,$EA
.BYT $EA,$EA
NXTXA
CMP #$20 ;IS IT A FUNCTION KEY
BCC UHUH
JMP NXT33
UHUH
CMP #$D
BNE UP5
JMP NXT1
UP5 LDX QTSW
BNE UP6
CMP #$14
BNE UP9
LDY LNMX
LDA (PNT)Y
CMP #'
BNE INS3
CPY PNTR
BNE INS1
INS3 CPY #MAXCHR-1
BEQ INSEXT ;EXIT IF LINE TOO LONG
JSR NEWLIN ;SCROLL DOWN 1
INS1 LDY LNMX
JSR SCOLOR
INS2 DEY
LDA (PNT)Y
INY
STA (PNT)Y
DEY
LDA (USER)Y
INY
STA (USER)Y
DEY
CPY PNTR
BNE INS2
LDA #$20
STA (PNT)Y
LDA COLOR
STA (USER)Y
INC INSRT
INSEXT JMP LOOP2
UP9 LDX INSRT
BEQ UP2
UP6 ORA #$40
JMP NC3
UP2 CMP #$11
BNE NXT2
LDX TBLX
BEQ JPL2
DEC TBLX
LDA PNTR
SEC
SBC #LLEN
BCC UPALIN
STA PNTR
BPL JPL2
UPALIN JSR STUPT
BNE JPL2
NXT2 CMP #$12
BNE NXT6
LDA #0
STA RVS
NXT6 CMP #$1D
BNE NXT61
TYA
BEQ BAKBAK
JSR CHKBAK
DEY
STY PNTR
JMP LOOP2
BAKBAK JSR BKLN
JMP LOOP2
NXT61 CMP #$13
BNE SCCL
JSR CLSR
JPL2 JMP LOOP2
SCCL
ORA #$80 ;MAKE IT UPPER CASE
JSR CHKCOL ;TRY FOR COLOR
JMP UPPER ;WAS JMP LOOP2
;
NXLN LSR LSXP
LDX TBLX
NXLN2 INX
CPX #NLINES ;OFF BOTTOM?
BNE NXLN1 ;NO...
JSR SCROL ;YES...SCROLL
NXLN1 LDA LDTB1,X ;DOUBLE LINE?
BPL NXLN2 ;YES...SCROLL AGAIN
STX TBLX
JMP STUPT
NXT1
LDX #0
STX INSRT
STX RVS
STX QTSW
STX PNTR
JSR NXLN
JPL5 JMP LOOP2
;
;
; CHECK FOR A DECREMENT TBLX
;
CHKBAK LDX #NWRAP
LDA #0
CHKLUP CMP PNTR
BEQ BACK
CLC
ADC #LLEN
DEX
BNE CHKLUP
RTS
;
BACK DEC TBLX
RTS
;
; CHECK FOR INCREMENT TBLX
;
CHKDWN LDX #NWRAP
LDA #LLEN-1
DWNCHK CMP PNTR
BEQ DNLINE
CLC
ADC #LLEN
DEX
BNE DWNCHK
RTS
;
DNLINE LDX TBLX
CPX #NLINES
BEQ DWNBYE
INC TBLX
;
DWNBYE RTS
.SKI2
CHKCOL
LDX #7 ;THERE'S 8 COLORS
CHK1A CMP COLTAB,X
BEQ CHK1B
DEX
BPL CHK1A
RTS
;
CHK1B
STX COLOR ;CHANGE THE COLOR
RTS
COLTAB
;BLK,WHT,RED,CYAN,MAGENTA,GRN,BLUE,YELLOW
.BYT $90,$05,$1C,$9F,$9C,$1E,$1F,$9E
;********************************
; THE FOLLOWING TABLE SERVES TO
; CONVERT TO AND FROM SCREEN CODE
; TO KASCII. IT IS IMPLEMENTED FOR
; TESTING ONLY. IT COULD BE IMPROVED
; TO REDUCE CODE AND SPEED BY AN
; ALGORITHM
;
;*********************************
.END