Commit Diff


commit - 604985fff53a8b294b083d0edde3cdcb70a46cfc
commit + a818d5ffd729b0b3c9253d30d20a32964634607e
blob - 233780dc2f1d7a621bd37396919e4741cd3a0526
blob + 6b8d83420498126b8fafe2d41aed1485164f430a
Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ
blob - 9e604aedf27456965a03b2ec3306fa3dc707b213
blob + f44362a35f3657799cb9ee508a4fc93acaea5d88
--- LINEUTIL.B.lst
+++ LINEUTIL.B.lst
@@ -1,361 +1,3 @@
-0 REM BASASM - A SIMPLISTIC ASSEMBLER
-1 REM MADE IN BASIC. PESCO 2026
-2 REM
-3 REM  10 VARIABLES    700 *SAVE TO PRG
-4 REM 100 LOAD OPCODES 720 *PRINT SEQ F
-5 REM 130 SUBROUTINES  740 *MEMSTAT
-6 REM 200 MAIN LOOP    750 *READ IO ERR
-7 REM 300 FORWARD REFS 800 *HEXDUMP MEM
-8 REM 400 .DIRECTIVES  900 OPCODE TABLE
-9 REM                 1000 ASSEMBLY PGM
-10 O = 49152    :REM STARTING POSITION
-11 P = O        :REM CURRENT POSITION
-13 UN = 0       :REM UNDEF SYMBOL COUNT
-20 MN% = 150    :REM MNEMONIC MAX
-21 DIM MN$(MN%) :REM INST MNEMONICS
-22 DIM OP%(MN%) :REM INST OPCODES
-23 DIM LN%(MN%) :REM OPERAND LENGTHS
-24 DIM MI%(26)  :REM ALPH. MNEM. INDEX
-25 SY% = 0      :REM SYMBOL COUNT
-26 SM% = 511    :REM SYMBOL MAX
-27 DIM SY$(SM%) :REM SYMBOL NAMES
-28 DIM SY(SM%)  :REM SYMBOL VALUES
-30 PA% = 0      :REM PATCH COUNT
-31 PM% = 255    :REM PATCH MAX
-32 DIM PA(PM%)  :REM PATCH POSITION
-33 DIM PA%(PM%) :REM PATCH LENGTH
-34 DIM PA$(PM%) :REM PATCH MODE (INST)
-35 DIM PS(PM%)  :REM PATCH SYMBOL (IDX)
-99 REM
-100 REM - READ OPCODE TABLE FROM DATA -
-105 PRINT "LOAD OPCODES...";
-107 I = 0: A = 0
-110 READ O%: IF O% = -1 THEN 125
-112 OP%(I) = O%
-115 READ MN$(I), X%: LN%(I) = X% - 1
-117 B = ASC(MN$(I)) - 64
-118 IF B = A THEN 120
-119 A = A + 1: MI%(A) = I: GOTO 118
-120 I = I + 1: GOTO 110
-125 PRINT: IF I = MN% + 1 THEN 200
-127 PRINT "INVALID OPCODE DATA": END
-128 REM
-129 REM SUB: PARSE NUMBER, DEC OR HEX
-130 A = VAL(A$)
-132 IF LEFT$(A$,1) <> "$" THEN RETURN
-138 A$ = MID$(A$,2)
-139 IF A$ = "" THEN RETURN
-140 A = A * 16 + ASC(A$) - 48
-145 IF ASC(A$) > 64 THEN A = A - 7
-146 GOTO 138
-148 REM
-149 REM SUB: PARSE OPERAND, SYM OR NUM
-150 IF ASC(A$) > 64 THEN 152  :REM "A"
-151 A% = 0: GOTO 130  :REM PARSE NUM
-152 PRINT "["; A$; "] ";
-155 GOSUB 170: IF SY(A) <> -1 THEN 160
-157 A% = 1: RETURN :REM FAIL; A = IDX
-160 A = SY(A)      :REM GET SYM. VALUE
-165 A% = 0: RETURN :REM SUCCESS
-168 REM
-169 REM SUB: LOOK UP SYMBOL
-170 A = 0
-171 IF A = SY% THEN 174    :REM NOT FND
-172 IF SY$(A) = A$ THEN RETURN
-173 A = A + 1: GOTO 171
-174 IF SY% < SM% + 1 THEN 176
-175 PRINT "TOO MANY SYMBOLS": END
-176 SY% = SY% + 1: UN = UN + 1
-177 SY$(A) = A$: SY(A) = -1: RETURN
-178 REM
-179 REM SUB: DEFINE SYMBOL
-180 GOSUB 170
-181 IF SY(A) = -1 THEN UN = UN - 1
-182 SY(A) = P: RETURN
-188 REM
-189 REM SUB: WRITE OPERAND
-190 IF M$ = "R" THEN A = A - P - 1
-191 IF L% < 1 THEN RETURN
-192 FOR J = 0 TO L% - 1
-193 R=A: A=INT(A/256): R=R-A*256 :REM/Q
-194 POKE P + J, R
-195 PRINT MID$(STR$(R), 2); "CLOSE";
-196 NEXT: RETURN
-199 REM
-200 REM - ASSEMBLE REST OF DATA -
-201 P=O: UN=0: SY%=0: PA%=0
-205 PRINT "ASSEMBLE..."
-210 READ M$
-211 IF ASC(M$) = 46 THEN 410 :REM "."
-215 IF ASC(M$) = 39 THEN 223 :REM "'"
-216 IF ASC(M$) = 36 THEN 219 :REM "$"
-217 IF ASC(M$) < 48 THEN 240 :REM "0"
-218 IF ASC(M$) > 57 THEN 240 :REM "9"
-219 A$ = M$: GOSUB 130       :REM NUM
-220 C = A: L% = 0: GOTO 270
-223 A$ = MID$(M$,2): GOSUB 180
-225 PRINT P; TAB(12); M$ :REM SYMDEF
-227 GOTO 210
-230 REM SEARCH FOR MNEMONIC
-240 A = ASC(M$) - 64
-242 FOR I = MI%(A) TO MN%
-245 IF MN$(I) = M$ THEN 260
-250 NEXT
-255 PRINT P; " UNKNOWN", M$: END
-260 C = OP%(I): L% = LN%(I)
-265 REM OUTPUT CODE
-270 PRINT P; C; TAB(13); M$; " ";
-275 POKE P, C: P = P + 1
-276 M$ = MID$(M$, 4) :REM ADDRESS MODE
-277 IF L% > 0 THEN GOSUB 290
-279 PRINT: GOTO 210
-288 REM
-289 REM SUB: OUTPUT OPERAND
-290 READ A$: GOSUB 150 :REM PARSE -> A
-291 IF A% = 0 THEN 295
-292 GOSUB 390  :REM RECORD PATCH
-293 A = 0      :REM DUMMY VALUE
-294 IF M$ = "R" THEN A = P   :REM -> 0
-295 GOSUB 190  :REM WRITE OPERAND
-296 P = P + L%
-297 RETURN
-298 REM
-299 REM - AFTER END OF INPUT -
-300 PRINT "PATCH FWD REFS..."
-305 GOSUB 370  :REM PATCH FWD REFS
-310 IF UN = 0 THEN 340
-320 PRINT "UNDEFINED SYMBOLS:"
-325 FOR I = 0 TO SY%
-330 IF SY(I) = -1 THEN PRINT SY$(I),;
-335 NEXT: PRINT
-340 END
-368 REM
-369 REM SUB: PATCH FWD SYMBOL REFS
-370 IF PA% = 0 THEN RETURN
-371 FOR I = 0 TO PA% - 1
-372 P = PA(I): L% = PA%(I)
-373 A = PS(I): M$ = PA$(I)
-374 IF SY(A) = -1 THEN 378
-375 PRINT P + 1; TAB(13);
-376 PRINT "["; SY$(A); "] ";
-377 A = SY(A): GOSUB 190: PRINT
-378 NEXT
-380 FOR I = PA% - 1 TO 0 STEP -1
-382 IF SY(PS(I)) <> -1 THEN RETURN
-384 NEXT: RETURN
-388 REM
-389 REM SUB: RECORD SYM REF TO PATCH
-390 IF PA% <= PM% THEN 392
-391 PRINT "TOO MANY FWD REFS": END
-392 PA(PA%) = P: PA%(PA%) = L%
-393 PA(PA%) = P: PA%(PA%) = L%
-394 PS(PA%) = A: PA$(PA%) = M$
-395 PA% = PA% + 1: RETURN
-400 REM
-401 REM - ASSEMBLER DIRECTIVES -
-408 REM
-409 REM DISPATCH
-410 PRINT P; TAB(12); M$;
-420 IF M$ = ".DW" THEN 550
-430 IF M$ = ".DB" THEN 530
-440 IF M$ = ".DS" THEN 570
-441 IF M$ = ".DSZ" THEN 570
-445 IF M$ = ".DZ" THEN 580
-450 IF M$ = ".=" THEN 520
-490 IF M$ = ".END" THEN 510
-495 PRINT "  UNRECOGNIZED"
-496 END
-499 GOTO 210 :REM HDLRS RET HERE
-500 REM
-509 REM .END - TERMINATE INPUT
-510 PRINT: GOTO 300
-518 REM
-519 REM .=   - CHANGE CURRENT POSITION
-520 READ A$: GOSUB 150: PRINT A
-521 P = A
-522 GOTO 499
-528 REM
-529 REM .DB  - OUTPUT RAW DATA BYTE
-530 M$ = "": L% = 1: GOSUB 290
-531 PRINT: GOTO 499
-548 REM
-549 REM .DW  - OUTPUT 2-BYTE WORD
-550 M$ = "": L% = 2: GOSUB 290
-551 PRINT: GOTO 499
-567 REM
-568 REM .DS - OUTPUT PETSCII STRING
-569 REM .DSZ - OUTPUT ZERO-TERMINATED
-570 READ A$
-571 IF A$ = "" THEN 575
-572 X = ASC(A$): PRINT STR$(X);
-573 POKE P,X: P=P+1: A$ = MID$(A$,2)
-574 GOTO 571
-575 IF M$ = ".DS" THEN 577
-576 PRINT " 0";: POKE P,0: P=P+1
-577 PRINT: GOTO 499
-578 REM
-579 REM .DZ - OUTPUT N ZERO BYTES
-580 READ A$: GOSUB 150: N=A
-582 IF A <= 0 THEN PRINT N: GOTO 499
-584 POKE P,0: P=P+1
-586 A=A-1: GOTO 582
-699 REM
-700 REM *RUN 700* WRITE MEM TO PRG FILE
-701 REM
-702 FA = PEEK(186)  :REM CURRENT DEVICE
-703 PRINT "DRIVE ["; FA; "]";
-704 D=0: INPUT D: IF D=0 THEN D=FA
-705 INPUT "FILE"; F$
-706 INPUT "START"; A$: GOSUB 130: P=A
-707 INPUT "STOP"; A$: GOSUB 830: Q=A
-708 PRINT "LOAD ["; P; "]";
-709 A$="": INPUT A$: GOSUB 130: L=A
-710 IF L=0 THEN L=P
-713 OPEN 1,D,2, F$ + ",PRG,W"
-714 H = INT(L / 256): L = L - H*256
-715 PRINT# 1, CHR$(L); CHR$(H);
-716 IF P >= Q THEN CLOSE 1: END
-717 PRINT# 1, CHR$(PEEK(P));
-718 P=P+1: GOTO 716
-719 REM
-720 REM *RUN 720* PRINT SEQ FILE
-721 REM
-722 INPUT "DRIVE"; D
-723 IF D=0 THEN D = PEEK(186)
-724 INPUT "FILE"; F$
-728 OPEN 1,D,2,F$ + ",SEQ,R"
-729 IF ST THEN CLOSE 1: END
-732 GET# 1, A$: PRINT A$;: GOTO 729
-737 REM
-738 REM *RUN 740* PRINT MEM STATS/PTRS
-739 REM
-740 PRINT 43,"TXTTAB",PEEK(43)+PEEK(44)*256
-741 PRINT 45,"VARTAB",PEEK(45)+PEEK(46)*256
-742 PRINT 47,"ARYTAB",PEEK(47)+PEEK(48)*256
-743 PRINT 49,"STREND",PEEK(49)+PEEK(50)*256
-744 PRINT 51,"FRETOP",PEEK(51)+PEEK(52)*256
-745 PRINT 53,"FRESPC",PEEK(53)+PEEK(54)*256
-746 PRINT 55,"MEMSIZ",PEEK(55)+PEEK(56)*256
-747 END
-748 REM *RUN 750* READ IO ERROR CHANNEL
-749 REM
-750 FA = PEEK(186)
-751 PRINT "DRIVE [";FA;"]";: INPUT A$
-752 A=FA: IF A$ <>"" THEN A=VAL(A$)
-753 OPEN 15, A, 15
-754 INPUT# 15, A, B$, C, D
-755 CLOSE 15
-756 PRINT A; B$; C; D
-757 END
-799 REM
-800 REM *RUN 800* HEXDUMP MEMORY
-801 REM
-802 INPUT "START"; A$: GOSUB 130: P=A
-803 INPUT "STOP "; A$: GOSUB 830: Q=A
-804 IF P >= Q THEN PRINT: END
-805 X=P: IF X > 32767 THEN X=X-65536
-806 IF X AND 7 THEN 809
-807 PRINT "  "; S$: S$ = ""
-808 PRINT MID$(STR$(P),2); TAB(5)
-809 X = PEEK(P): C$ = CHR$(X)
-810 IF X < 32 OR X > 93 THEN C$ = " "
-811 S$ = S$ + C$
-812 H = INT(X/16): L = X AND 15
-813 IF H=0 THEN H=32: GOTO 815
-814 H = 48+H: IF H > 57 THEN H = H+7
-815 L = 48+L: IF L > 57 THEN L = L+7
-816 PRINT " "; CHR$(H); CHR$(L);
-817 P=P+1: GOTO 804
-828 REM
-829 REM SUB: PARSE NUM OR OFFSET (+N)
-830 IF LEFT$(A$,1) <> "+" THEN 130
-831 A = A + VAL(MID$(A$,2))
-832 RETURN
-899 REM
-901 REM - OPCODE TABLE -
-902 REM
-910 DATA 6,  ASLZ, 2, 10, ASLA, 1
-911 DATA 14, ASL,  3, 22, ASLZX,2
-912 DATA 30, ASLX, 3, 33, AND(X,2
-913 DATA 37, ANDZ, 2, 41, AND#, 2
-914 DATA 45, AND,  3, 49, AND(Y,2
-915 DATA 53, ANDZX,2, 61, ANDX, 3
-916 DATA 97, ADC(X,2, 101,ADCZ, 2
-917 DATA 105,ADC#, 2, 109,ADC,  3
-918 DATA 113,ADC(Y,2, 117,ADCZX,2
-919 DATA 121,ADCY, 3, 125,ADCX, 3
-920 DATA 57, ANDY, 3
-921 DATA 0,  BRK,  1, 16, BPLR, 2
-922 DATA 36, BITZ, 2, 44, BIT,  3
-923 DATA 48, BMIR, 2, 80, BVCR, 2
-924 DATA 112,BVSR, 2, 144,BCCR, 2
-925 DATA 176,BCSR, 2, 208,BNER, 2
-926 DATA 240,BEQR, 2
-927 DATA 24, CLC,  1, 88, CLI,  1
-928 DATA 184,CLV,  1, 192,CPY#, 2
-929 DATA 193,CMP(X,2, 196,CPYZ, 2
-930 DATA 197,CMPZ, 2, 201,CMP#, 2
-931 DATA 204,CPY,  3, 205,CMP,  3
-932 DATA 209,CMP(Y,2, 213,CMPZX,2
-933 DATA 216,CLD,  1, 217,CMPY, 3
-934 DATA 221,CMPX, 3, 224,CPX#, 2
-935 DATA 228,CPXZ, 2, 236,CPX,  3
-936 DATA 136,DEY,  1, 198,DECZ, 2
-937 DATA 202,DEX,  1, 206,DEC,  3
-938 DATA 214,DECZX,2, 222,DECX, 3
-939 DATA 65, EOR(X,2, 69, EORZ, 2
-940 DATA 73, EOR#, 2, 77, EOR,  3
-941 DATA 81, EOR(Y,2, 85, EORZX,2
-942 DATA 89, EORY, 3, 93, EORX, 3
-943 DATA 200,INY,  1, 230,INCZ, 2
-944 DATA 232,INX,  1, 238,INC,  3
-945 DATA 246,INCZX,2, 254,INCX, 3
-946 DATA 32, JSR,  3, 76, JMP,  3
-947 DATA 108,JMP(, 3
-948 DATA 70, LSRZ, 2, 74, LSRA, 1
-949 DATA 78, LSR,  3, 86, LSRZX,2
-950 DATA 94, LSRX, 3, 160,LDY#, 2
-951 DATA 161,LDA(X,2, 162,LDX#, 2
-952 DATA 164,LDYZ, 2, 165,LDAZ, 2
-953 DATA 166,LDXZ, 2, 169,LDA#, 2
-954 DATA 172,LDY,  3, 173,LDA,  3
-955 DATA 174,LDX,  3, 177,LDA(Y,2
-956 DATA 180,LDYZX,2, 181,LDAZX,2
-957 DATA 182,LDXZY,2, 185,LDAY, 3
-958 DATA 188,LDYX, 3, 189,LDAX, 3
-959 DATA 190,LDXY, 3
-960 DATA 234,NOP,  1
-961 DATA 1,  ORA(X,2, 5,  ORAZ, 2
-962 DATA 9,  ORA#, 2, 13, ORA,  3
-963 DATA 17, ORA(Y,2, 21, ORAZX,2
-964 DATA 25, ORAY, 3, 29, ORAX, 3
-965 DATA 8,  PHP,  1, 40, PLP,  1
-966 DATA 72, PHA,  1, 104,PLA,  1
-967 DATA 38, ROLZ, 2, 42, ROLA, 1
-968 DATA 46, ROL,  3, 62, ROLX, 3
-969 DATA 64, RTI,  1, 96, RTS,  1
-970 DATA 102,RORZ, 2, 106,ROLA, 1
-971 DATA 110,ROR,  3, 118,RORZX,2
-972 DATA 126,RORX, 3, 54, ROLZX,2
-973 DATA 120,SEI,  1, 133,STAZ, 2
-974 DATA 134,STXZ, 2, 140,STY,  3
-975 DATA 141,STA,  3, 142,STX,  3
-976 DATA 145,STA(Y,2, 148,STYZX,2
-977 DATA 149,STAZX,2, 150,STXZY,2
-978 DATA 153,STAY, 3, 157,STAX, 3
-979 DATA 225,SBC(X,2, 229,SBCZ, 2
-980 DATA 233,SBC#, 2, 237,SBC,  3
-981 DATA 241,SBC(Y,2, 245,SBCZX,2
-982 DATA 248,SED,  1, 249,SBCY, 3
-983 DATA 253,SBCX, 3, 56, SEC,  1
-984 DATA 129,STA(X,2, 132,STYZ, 2
-985 DATA 138,TXA,  1, 152,TYA,  1
-986 DATA 154,TXS,  1, 168,TAY,  1
-987 DATA 170,TAX,  1, 186,TSX,  1
-990 DATA -1
-991 REM
-992 REM = APPEND PROGRAM CODE BELOW =
-999 REM
 1000 REM
 1001 REM =LINEUTIL=
 1002 REM LINE-ORIENTED TOOLS TO EASE
@@ -376,22 +18,38 @@
 1500 REM
 1501 REM - SYMBOL DEFINITIONS -
 1502 REM
+1510 DATA CHROUT=, $FFD2
+1520 DATA GETIN=,  $FFE4
+1530 DATA SETLFS=, $FFBA
+1540 DATA SETNAM=, $FFBD
+1550 DATA LOAD=,   $FFD5
+1560 DATA SAVE=,   $FFD8
+1600 DATA TXTTAB=, 43
+1601 DATA VARTAB=, 45
+1602 DATA ARYTAB=, 47
+1603 DATA STREND=, 49
+1604 DATA FRETOP=, 51
+1605 DATA FRESPC=, 53
+1606 DATA MEMSIZ=, 55
+1610 DATA FA=,     186: REM CURRENT DEV
+1620 DATA BLNSW=,  204: REM CURSOR BLNK
+1999 REM
 2000 DATA 'LINECNT
-2001 DATA  LDXZ, 43:  REM TXTTAB
-2002 DATA  LDYZ, 44
+2001 DATA  LDXZ, TXTTAB
+2002 DATA  LDYZ, TXTTAB+
 2003 DATA  STXZ, 251
 2004 DATA  STYZ, 252
 2005 DATA  LDA#, 0
 2006 DATA  STA, CNT
-2007 DATA  STA, $C401: REM XXX CNT+
+2007 DATA  STA, CNT+
 2008 DATA  STA, CNT.REM
-2009 DATA  STA, $C403: REM XXX +
+2009 DATA  STA, CNT.REM+
 2010 DATA  STA, CNT.DATA
-2011 DATA  STA, $C405: REM XXX +
+2011 DATA  STA, CNT.DATA+
 2012 DATA  STA, CNT.JUNK
-2013 DATA  STA, $C407: REM XXX +
+2013 DATA  STA, CNT.JUNK+
 2014 DATA  STA, CNT.SPC
-2015 DATA  STA, $C409: REM XXX +
+2015 DATA  STA, CNT.SPC+
 2020 DATA 'LOOP
 2021 DATA  LDA#, 1
 2022 DATA  TAY
@@ -402,14 +60,14 @@
 2027 DATA  LDA, CNT.JUNK
 2028 DATA  ADC#, 2
 2029 DATA  STA, CNT.JUNK
-2030 DATA  LDA, $C407: REM XXX +
+2030 DATA  LDA, CNT.JUNK+
 2031 DATA  ADC#, 0
-2032 DATA  STA, $C407
+2032 DATA  STA, CNT.JUNK+
 2034 DATA  JMP, DONE:  REM FAR BRANCH
 2035 DATA 'NOTDONE
 2040 DATA  INC, CNT
 2050 DATA  BNER, LC0
-2060 DATA  INC, $C401: REM XXX CNT+
+2060 DATA  INC, CNT+
 2070 DATA 'LC0
 2080 REM COUNT DIFFERENT TYPES OF LINE
 2090 REM 1. SKIP SPACES (UNNECESSARY!?)
@@ -423,7 +81,7 @@
 2140 DATA  BNER, LC1.1:REM EXIT LOOP
 2141 DATA  INC, CNT.SPC
 2142 DATA  BNER, LC1:  REM NO OVERFLOW
-2143 DATA  INC, $C409: REM XXX +
+2143 DATA  INC, CNT.SPC+
 2148 DATA  JMP, LC1:   REM REPEAT
 2149 DATA 'LC1.1
 2150 REM 2. CHECK TOKEN
@@ -431,14 +89,14 @@
 2170 DATA  BNER, LC2
 2180 DATA  INC, CNT.REM
 2181 DATA  BNER, LC3
-2182 DATA  INC, $C403: REM XXX +
+2182 DATA  INC, CNT.REM+
 2183 DATA  JMP, LC3
 2190 DATA 'LC2
 2200 DATA  CMP#, $83:  REM DATA-TOKEN
 2210 DATA  BNER, LC3
 2220 DATA  INC, CNT.DATA
 2221 DATA  BNER, LC3
-2222 DATA  INC, $C405: REM XXX +
+2222 DATA  INC, CNT.DATA+
 2223 DATA  JMP, LC3
 2229 REM 3. SCAN REST OF LINE
 2230 DATA 'LC3
@@ -449,7 +107,7 @@
 2240 DATA  BNER, LC3.1
 2241 DATA  INC, CNT.SPC
 2242 DATA  BNER, LC3
-2243 DATA  INC, $C409: REM XXX +
+2243 DATA  INC, CNT.SPC+
 2248 DATA  JMP, LC3
 2250 DATA 'LC3.1
 2251 DATA  CMP#, $22:  REM QUOTE (")
@@ -469,8 +127,8 @@
 2413 DATA  ADC, CNT.JUNK
 2414 DATA  STA, CNT.JUNK
 2415 DATA  LDA#, 0
-2416 DATA  ADC, $C407: REM XXX +
-2417 DATA  STA, $C407
+2416 DATA  ADC, CNT.JUNK+
+2417 DATA  STA, CNT.JUNK+
 2420 REM ADVANCE (DEREF) LINE PTR
 2421 DATA  LDA#, 0
 2422 DATA  TAY
@@ -494,60 +152,60 @@
 2509 REM CALCULATE TOTAL BYTES
 2510 DATA  SEC
 2511 DATA  LDAZ, 251
-2512 DATA  SBCZ, 43
+2512 DATA  SBCZ, TXTTAB
 2513 DATA  STA, CNT.BS
 2514 DATA  LDAZ, 252
-2515 DATA  SBCZ, 44
-2516 DATA  STA, $C40B: REM XXX +
+2515 DATA  SBCZ, TXTTAB+
+2516 DATA  STA, CNT.BS+
 2520 REM CALCULATE JUNK = BS - "JUNK"
 2525 DATA  SEC
 2527 DATA  LDA, CNT.BS
 2530 DATA  SBC, CNT.JUNK
 2535 DATA  STA, CNT.JUNK
-2540 DATA  LDA, $C40B: REM XXX BS+
-2550 DATA  SBC, $C407: REM XXX JUNK+
-2560 DATA  STA, $C407
+2540 DATA  LDA, CNT.BS+
+2550 DATA  SBC, CNT.JUNK+
+2560 DATA  STA, CNT.JUNK+
 2600 REM PRINT COUNTERS AND EXIT
 2620 DATA  LDX, CNT
-2630 DATA  LDY, $C401: REM XXX CNT+
+2630 DATA  LDY, CNT+
 2640 DATA  JSR, PRINTNAT
 2650 DATA  LDX#, S.LINES
-2651 DATA  LDY#, $C5: REM XXX HI
+2651 DATA  LDY#, S.LINES^
 2652 DATA  JSR, PUTSTR
 2660 DATA  LDX, CNT.REM
-2661 DATA  LDY, $C403: REM XXX +
+2661 DATA  LDY, CNT.REM+
 2662 DATA  JSR, PRINTNAT
 2670 DATA  LDX#, S.REM
-2671 DATA  LDY#, $C5: REM XXX HI
+2671 DATA  LDY#, S.REM^
 2672 DATA  JSR, PUTSTR
 2680 DATA  LDX, CNT.DATA
-2681 DATA  LDY, $C405: REM XXX +
+2681 DATA  LDY, CNT.DATA+
 2682 DATA  JSR, PRINTNAT
 2690 DATA  LDX#, S.DATA
-2691 DATA  LDY#, $C5: REM XXX HI
+2691 DATA  LDY#, S.DATA^
 2692 DATA  JSR, PUTSTR
 2695 DATA  LDA#, 13: REM CR
-2696 DATA  JSR, $FFD2: REM CHROUT
+2696 DATA  JSR, CHROUT
 2700 DATA  LDX, CNT.BS
-2701 DATA  LDY, $C40B: REM XXX +
+2701 DATA  LDY, CNT.BS+
 2702 DATA  JSR, PRINTNAT
 2710 DATA  LDX#, S.BYTES
-2711 DATA  LDY#, $C5: REM XXX HI
+2711 DATA  LDY#, S.BYTES^
 2712 DATA  JSR, PUTSTR
 2720 DATA  LDX, CNT.SPC
-2721 DATA  LDY, $C409: REM XXX +
+2721 DATA  LDY, CNT.SPC+
 2722 DATA  JSR, PRINTNAT
 2725 DATA  LDX#, S.SPC
-2726 DATA  LDY#, $C5: REM XXX HI
+2726 DATA  LDY#, S.SPC^
 2727 DATA  JSR, PUTSTR
 2730 DATA  LDX, CNT.JUNK
-2731 DATA  LDY, $C407: REM XXX +
+2731 DATA  LDY, CNT.JUNK+
 2732 DATA  JSR, PRINTNAT
 2735 DATA  LDX#, S.JUNK
-2736 DATA  LDY#, $C5: REM XXX HI
+2736 DATA  LDY#, S.JUNK^
 2737 DATA  JSR, PUTSTR
 2990 DATA  LDA#, 13: REM CR
-2991 DATA  JMP, $FFD2: REM XXX CHROUT
+2991 DATA  JMP, CHROUT
 3000 REM
 3001 REM - SUBROUTINES -
 3002 REM
@@ -576,7 +234,7 @@
 3120 DATA 'PS1
 3130 DATA  LDA(Y, 251
 3135 DATA  BEQR, PS2
-3140 DATA  JSR, $FFD2:  REM CHROUT
+3140 DATA  JSR, CHROUT
 3150 DATA  INY
 3160 DATA  JMP, PS1
 3170 DATA 'PS2
@@ -624,37 +282,37 @@
 3403 REM
 3404 REM CLOBBERS: A, X, Y, 2, 251-252
 3405 REM
-3410 DATA  LDA#, 16:    REM 10000...
+3410 DATA  LDA#, 10000
 3411 DATA  STAZ, 251
-3412 DATA  LDA#, 39
+3412 DATA  LDA#, 10000^
 3413 DATA  STAZ, 252
 3420 DATA  JSR, QUOTREM
 3430 DATA  ADC#, $30:   REM "0"
-3440 DATA  JSR, $FFD2:  REM CHROUT
-3450 DATA  LDA#, 232:   REM 1000...
+3440 DATA  JSR, CHROUT
+3450 DATA  LDA#, 1000
 3451 DATA  STAZ, 251
-3452 DATA  LDA#, 3
+3452 DATA  LDA#, 1000^
 3453 DATA  STAZ, 252
 3460 DATA  JSR, QUOTREM
 3470 DATA  ADC#, $30
-3480 DATA  JSR, $FFD2
-3490 DATA  LDA#, 100:   REM 100...
+3480 DATA  JSR, CHROUT
+3490 DATA  LDA#, 100
 3491 DATA  STAZ, 251
 3492 DATA  LDA#, 0
 3493 DATA  STAZ, 252
 3500 DATA  JSR, QUOTREM
 3510 DATA  ADC#, $30
-3520 DATA  JSR, $FFD2
-3530 DATA  LDA#, 10:    REM 10...
+3520 DATA  JSR, CHROUT
+3530 DATA  LDA#, 10
 3531 DATA  STAZ, 251
 3532 DATA  LDA#, 0
 3533 DATA  STAZ, 252
 3540 DATA  JSR, QUOTREM
 3550 DATA  ADC#, $30
-3551 DATA  JSR, $FFD2
-3560 DATA  TXA:         REM 1...
+3551 DATA  JSR, CHROUT
+3560 DATA  TXA
 3570 DATA  ADC#, $30
-3571 DATA  JSR, $FFD2
+3571 DATA  JSR, CHROUT
 3580 DATA  RTS
 3599 REM
 3600 DATA 'GETSTR
@@ -667,10 +325,10 @@
 3610 DATA  STXZ, 251
 3611 DATA  STYZ, 252
 3620 DATA  LDY#, 0
-3625 DATA  STYZ, 204:  REM CURSOR ON
+3625 DATA  STYZ, BLNSW: REM CURSOR ON
 3630 DATA 'GS1
 3635 DATA  STYZ, 2:    REM SAVE Y
-3640 DATA  JSR, $FFE4: REM GETIN
+3640 DATA  JSR, GETIN
 3641 DATA  BEQR, GS1
 3645 DATA  LDYZ, 2:    REM RESTORE Y
 3650 DATA  CMP#, 13:   REM CR
@@ -681,7 +339,7 @@
 3671 DATA  BEQR, GS1
 3672 DATA  DEY
 3673 DATA  LDA#, 20
-3674 DATA  JSR, $FFD2: REM CHROUT
+3674 DATA  JSR, CHROUT
 3675 DATA  JMP, GS1
 3680 DATA 'GS2
 3681 DATA  CMP#, 32:   REM SPC
@@ -690,18 +348,18 @@
 3684 DATA  BCSR, GS1
 3690 DATA  STA(Y, 251
 3691 DATA  INY
-3695 DATA  JSR, $FFD2
+3695 DATA  JSR, CHROUT
 3696 DATA  JMP, GS1
 3700 DATA 'GS3
 3710 DATA  LDA#, 0
 3720 DATA  STA(Y, 251
 3721 DATA  STYZ, 2
 3722 DATA  LDA#, 1
-3723 DATA  STAZ, 204:  REM CURSOR OFF
+3723 DATA  STAZ, BLNSW: REM CURSOR OFF
 3724 DATA  LDA#, 32:   REM ERASE CRSR
-3725 DATA  JSR, $FFD2
+3725 DATA  JSR, CHROUT
 3726 DATA  LDA#, 13
-3727 DATA  JSR, $FFD2
+3727 DATA  JSR, CHROUT
 3730 DATA  LDAZ, 2
 3731 DATA  LDXZ, 251
 3732 DATA  LDYZ, 252
@@ -767,7 +425,7 @@
 4003 REM A    OUT: LENGTH CONSUMED
 4004 REM
 4010 DATA  LDX#, BUF
-4011 DATA  LDY#, $C7: REM XXX HI
+4011 DATA  LDY#, BUF^
 4020 DATA  JSR, GETSTR
 4025 DATA  JSR, ATOI
 4026 DATA  CMP#, 0:   REM LEN -> FLAGS
@@ -821,19 +479,19 @@
 4204 REM CLOBBERS: A, X, Y, 2, 251-254
 4205 REM
 4210 DATA  LDX#, S.START
-4211 DATA  LDY#, $C5: REM XXX HI
+4211 DATA  LDY#, S.START^
 4212 DATA  JSR, PUTSTR
 4220 DATA  JSR, READNAT
 4221 DATA  STX, NSTART
-4222 DATA  STY, $C40D: REM XXX +
+4222 DATA  STY, NSTART+
 4230 DATA  LDX#, S.STOP
-4231 DATA  LDY#, $C5: REM XXX HI
+4231 DATA  LDY#, S.STOP^
 4232 DATA  JSR, PUTSTR
 4240 DATA  JSR, READNAT
 4241 DATA  STX, NSTOP
-4242 DATA  STY, $C40F: REM XXX +
+4242 DATA  STY, NSTOP+
 4249 REM CMP NSTOP, NSTART
-4250 DATA  CPY, $C40D: REM XXX NSTART+
+4250 DATA  CPY, NSTART+
 4251 DATA  BCCR, GSS1
 4252 DATA  BNER, GSS1
 4253 DATA  CPX, NSTART
@@ -848,9 +506,9 @@
 4305 REM
 4306 REM CLOBBERS: A, X, Y, 251-254
 4307 REM
-4310 DATA  LDAZ, 43:   REM TXTTAB
+4310 DATA  LDAZ, TXTTAB
 4311 DATA  STAZ, 251:  REM -> 251
-4312 DATA  LDAZ, 44
+4312 DATA  LDAZ, TXTTAB+
 4313 DATA  STAZ, 252
 4319 REM ...
 4320 DATA 'FINDNEXT
@@ -899,29 +557,29 @@
 4405 REM
 4409 DATA  PHA:        REM SAVE FILE NO
 4410 DATA  LDX#, S.DRVBRA
-4411 DATA  LDY#, $C5: REM XXX HI
+4411 DATA  LDY#, S.DRVBRA^
 4412 DATA  JSR, PUTSTR
-4413 DATA  LDAZ, 186: REM CURRENT DEV
+4413 DATA  LDAZ, FA:  REM CURRENT DEV
 4414 DATA  CLC
 4415 DATA  ADC#, 48:  REM XXX PRINTBYTE
-4416 DATA  JSR, $FFD2: REM CHROUT
+4416 DATA  JSR, CHROUT
 4417 DATA  LDX#, S.KETCOL
-4418 DATA  LDY#, $C5: REM XXX HI
+4418 DATA  LDY#, S.KETCOL^
 4419 DATA  JSR, PUTSTR
 4420 DATA  JSR, READNAT
 4421 DATA  BNER, GF1:  REM LEN <> 0
-4422 DATA  LDXZ, 186:  REM DEFAULT
+4422 DATA  LDXZ, FA:   REM DEFAULT
 4423 DATA 'GF1
 4424 DATA  PLA:        REM FILE NO
 4425 DATA  LDY#, 0:    REM SEC ADDR
-4426 DATA  JSR, $FFBA: REM SETLFS
+4426 DATA  JSR, SETLFS
 4430 DATA  LDX#, S.FILE
-4431 DATA  LDY#, $C5: REM XXX HI
+4431 DATA  LDY#, S.FILE^
 4432 DATA  JSR, PUTSTR
 4433 DATA  LDX#, BUF
-4434 DATA  LDY#, $C7: REM XXX HI
+4434 DATA  LDY#, BUF^
 4435 DATA  JSR, GETSTR
-4437 DATA  JSR, $FFBD: REM SETNAM
+4437 DATA  JSR, SETNAM
 4440 DATA  RTS
 4499 REM
 4500 DATA 'FINDLAST
@@ -931,8 +589,8 @@
 4504 REM
 4505 REM CLOBBERS: A, X, Y, 251-254
 4506 REM
-4510 DATA  LDXZ, 43:   REM TXTTAB
-4511 DATA  LDYZ, 44
+4510 DATA  LDXZ, TXTTAB
+4511 DATA  LDYZ, TXTTAB+
 4512 DATA  STXZ, 251
 4513 DATA  STYZ, 252
 4520 DATA  LDY#, 1
@@ -959,7 +617,7 @@
 4579 REM
 4580 DATA 'PUTNL
 4581 DATA  LDA#, 13
-4582 DATA  JMP, $FFD2: REM CHROUT
+4582 DATA  JMP, CHROUT
 4589 REM
 4590 DATA 'PRINTNATLN
 4591 DATA  JSR, PRINTNAT
@@ -977,7 +635,7 @@
 5030 DATA 'LCU2
 5060 REM LOCATE START -> PTR IN 251
 5061 DATA  LDX, NSTART
-5062 DATA  LDY, $C40D: REM XXX NSTART+
+5062 DATA  LDY, NSTART+
 5063 DATA  JSR, FINDLINE
 5064 DATA  TXA
 5065 DATA  PHA
@@ -985,7 +643,7 @@
 5067 DATA  PHA
 5070 REM LOCATE STOP LINE -> PTR IN 253
 5071 DATA  LDX, NSTOP
-5072 DATA  LDY, $C40F: REM XXX NSTOP+
+5072 DATA  LDY, NSTOP+
 5073 DATA  JSR, FINDNEXT
 5074 DATA  STXZ, 253
 5075 DATA  STYZ, 254
@@ -1000,12 +658,12 @@
 5253 DATA  STA, DELTA
 5254 DATA  LDAZ, 254
 5255 DATA  SBCZ, 252
-5256 DATA  STA, $C411: REM XXX DELTA+
+5256 DATA  STA, DELTA+
 5260 REM SCAN AFTER STOP, ADJUST PTRS
 5270 DATA  LDXZ, 253
 5271 DATA  LDYZ, 254
 5280 DATA  STX, TMP:   REM SAVE PSTOP
-5281 DATA  STY, $C413: REM XXX +
+5281 DATA  STY, TMP+
 5290 DATA 'LCU9
 5300 DATA  LDY#, 1
 5301 DATA  LDA(Y, 253
@@ -1019,7 +677,7 @@
 5341 DATA  INY
 5350 DATA  LDA(Y, 253
 5351 DATA  STAZ, 2: REM SAVE HI(PNEXT)
-5360 DATA  SBC, $C411: REM XXX DELTA+
+5360 DATA  SBC, DELTA+
 5370 DATA  STA(Y, 253
 5380 DATA  LDYZ, 2
 5381 DATA  STXZ, 253: REM NEXT LINE
@@ -1027,40 +685,40 @@
 5390 DATA  JMP, LCU9
 5391 DATA 'LCU10
 5392 DATA  LDX, TMP: REM SAVED PSTOP
-5393 DATA  LDY, $C413: REM XXX +
+5393 DATA  LDY, TMP+
 5394 DATA  STXZ, 253
 5395 DATA  STYZ, 254
 5400 REM COPY THE REMAINING DATA DOWN
 5410 DATA  SEC:    REM LEN=STREND-PSTOP
-5411 DATA  LDAZ, 49
+5411 DATA  LDAZ, STREND
 5412 DATA  SBCZ, 253
 5413 DATA  TAY:       REM Y = LO BYTE!
-5414 DATA  LDAZ, 50
+5414 DATA  LDAZ, STREND+
 5415 DATA  SBCZ, 254
 5416 DATA  TAX:       REM X = HI BYTE!
 5420 DATA  JSR, MEMCPY
 5430 REM ADJUST VARTAB, ARYTAB, STREND
 5440 DATA  SEC
-5441 DATA  LDAZ, 45:  REM VARTAB
+5441 DATA  LDAZ, VARTAB
 5442 DATA  SBC, DELTA
-5443 DATA  STAZ, 45
-5444 DATA  LDAZ, 46
-5445 DATA  SBC, $C411: REM XXX +
-5446 DATA  STAZ, 46
+5443 DATA  STAZ, VARTAB
+5444 DATA  LDAZ, VARTAB+
+5445 DATA  SBC, DELTA+
+5446 DATA  STAZ, VARTAB+
 5450 DATA  SEC
-5451 DATA  LDAZ, 47:  REM ARYTAB
+5451 DATA  LDAZ, ARYTAB
 5452 DATA  SBC, DELTA
-5453 DATA  STAZ, 47
-5454 DATA  LDAZ, 48
-5455 DATA  SBC, $C411: REM XXX +
-5456 DATA  STAZ, 48
+5453 DATA  STAZ, ARYTAB
+5454 DATA  LDAZ, ARYTAB+
+5455 DATA  SBC, DELTA+
+5456 DATA  STAZ, ARYTAB+
 5460 DATA  SEC
-5461 DATA  LDAZ, 49:  REM STREND
+5461 DATA  LDAZ, STREND
 5462 DATA  SBC, DELTA
-5463 DATA  STAZ, 49
-5464 DATA  LDAZ, 50
-5465 DATA  SBC, $C411: REM XXX +
-5466 DATA  STAZ, 50
+5463 DATA  STAZ, STREND
+5464 DATA  LDAZ, STREND+
+5465 DATA  SBC, DELTA+
+5466 DATA  STAZ, STREND+
 5470 DATA  RTS
 5999 REM
 6000 DATA 'LINECAT
@@ -1084,19 +742,19 @@
 6030 DATA  LDA#, 1:    REM FILE NO
 6031 DATA  JSR, GETFILE
 6040 DATA  SEC
-6041 DATA  LDAZ, 45:   REM VARTAB
+6041 DATA  LDAZ, VARTAB
 6042 DATA  SBC#, 2:    REM CUT NULL OFF
 6043 DATA  STAZ, 251:  REM PSTART
 6044 DATA  TAX
-6045 DATA  LDAZ, 46
+6045 DATA  LDAZ, VARTAB+
 6046 DATA  SBC#, 0
 6047 DATA  STAZ, 252
 6048 DATA  TAY
 6049 DATA  LDA#, 0:    REM L/V
-6050 DATA  JSR, $FFD5: REM LOAD
+6050 DATA  JSR, LOAD
 6051 DATA  BCCR, LCA1.1
 6055 DATA  LDX#, S.ERROR
-6056 DATA  LDY#, $C5: REM XXX HI
+6056 DATA  LDY#, S.ERROR^
 6057 DATA  JSR, PUTSTR
 6058 DATA  RTS
 6060 DATA 'LCA1.1
@@ -1149,12 +807,12 @@
 6189 REM ADJUST VARTAB &C AND RET PSTOP
 6190 DATA  LDXZ, 253
 6191 DATA  LDYZ, 254
-6192 DATA  STXZ, 45:   REM VARTAB
-6193 DATA  STYZ, 46
-6194 DATA  STXZ, 47:   REM ARYTAB
-6195 DATA  STYZ, 48
-6196 DATA  STXZ, 49:   REM STREND
-6197 DATA  STYZ, 50
+6192 DATA  STXZ, VARTAB
+6193 DATA  STYZ, VARTAB+
+6194 DATA  STXZ, ARYTAB
+6195 DATA  STYZ, ARYTAB+
+6196 DATA  STXZ, STREND
+6197 DATA  STYZ, STREND+
 6198 DATA  RTS
 6200 DATA 'LCACHK
 6210 REM COMPARE VS LAST LINE NUMBER
@@ -1177,10 +835,10 @@
 6244 DATA  INY
 6245 DATA  STA(Y, 251
 6270 DATA  LDX#, S.ECLASH
-6271 DATA  LDY#, $C5: REM XXX HI
+6271 DATA  LDY#, S.ECLASH^
 6272 DATA  JSR, PUTSTR
 6280 DATA  LDX#, S.ABORT
-6281 DATA  LDY#, $C5: REM XXX HI
+6281 DATA  LDY#, S.ABORT^
 6282 DATA  JSR, PUTSTR
 6283 DATA  RTS
 6290 DATA 'LCACOK
@@ -1191,15 +849,15 @@
 6411 DATA  BCCR, LCLRET
 6412 DATA  BEQR, LCLRET
 6420 DATA  LDX, NSTART
-6421 DATA  LDY, $C40D: REM XXX +
+6421 DATA  LDY, NSTART+
 6425 DATA  JSR, FINDLINE
 6430 DATA  TXA
 6431 DATA  PHA
 6432 DATA  TYA
 6433 DATA  PHA
 6440 DATA  LDX, NSTOP
-6441 DATA  LDY, $C40F: REM XXX +
-6442 DATA  JSR, FINDLINE: REM XXX FNEXT
+6441 DATA  LDY, NSTOP+
+6442 DATA  JSR, FINDNEXT
 6445 DATA  TXA
 6446 DATA  PHA
 6447 DATA  TYA
@@ -1235,7 +893,7 @@
 6480 DATA  ADCZ, 254
 6481 DATA  TAY
 6482 DATA  LDA#, 251
-6483 DATA  JSR, $FFD8: REM SAVE
+6483 DATA  JSR, SAVE
 6484 DATA  LDY#, 1
 6485 DATA  PLA:        REM PNEXT HI
 6486 DATA  STA(Y, 253: REM -> PSTOP[1]
@@ -1244,7 +902,7 @@
 6489 DATA  STA(Y, 253: REM -> PSTOP[0]
 6490 DATA  BCCR, LCLRET
 6491 DATA  LDX#, S.ERROR
-6492 DATA  LDY#, $C5: REM XXX HI
+6492 DATA  LDY#, S.ERROR^
 6493 DATA  JSR, PUTSTR
 6495 DATA 'LCLRET
 6496 DATA  RTS