commit a818d5ffd729b0b3c9253d30d20a32964634607e from: Sven M. Hallberg date: Sun May 31 18:14:04 2026 UTC LINEUTIL.B.4 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