commit 450286e314cf07530b6a8725bc7067b931fe18b0 from: Sven M. Hallberg date: Thu Jun 11 18:40:26 2026 UTC LINEUTIL.B.11 - stub loader commit - 7889c72b765d5be3c74b02c0e6eaa2c2b5617b93 commit + 450286e314cf07530b6a8725bc7067b931fe18b0 blob - 143e4e55292eeace153b5dc41d4de2d974c90628 blob + d4e0ed969d1fa8a6067858f92b00864511750f4e Binary files LINEUTIL.B,PRG and LINEUTIL.B,PRG differ blob - e18f5e224f32a3f9ad284577c47d3c5a2b3a531c blob + a03ee2ebab0443b9fb2f5d1f4abb5d02b8327ee0 --- LINEUTIL.B.lst +++ LINEUTIL.B.lst @@ -8,12 +8,13 @@ 1010 REM 1000 TOP COMMENT 1011 REM 1100 SYMBOL DEFINITIONS 1015 REM 1500 VARIABLES & STATIC DATA -1020 REM 2000 LINECNT -1030 REM 3000 SUBROUTINES +1020 REM 2000 SUBROUTINES +1030 REM 3000 LINECNT 1050 REM 5000 LINECUT 1060 REM 6000 LINECAT 1064 REM 6400 LINECLP 1066 REM 6600 LINECHG +1090 REM 9000 BASIC STUB / LOADER 1099 REM 9900 ENTRY POINTS 1100 REM 1101 REM - SYMBOL DEFINITIONS - @@ -85,806 +86,808 @@ 1997 DATA .=, 50100: REM $C3B4 1998 REM 1999 REM -2000 DATA 'LINECNT -2005 DATA LDXZ, TXTTAB -2006 DATA LDYZ, TXTTAB+ -2007 DATA STXZ, P -2008 DATA STYZ, P+ -2009 DATA LDA#, 0 -2010 DATA STA, CNT -2011 DATA STA, CNT+ -2012 DATA STA, CNT.REM -2013 DATA STA, CNT.REM+ -2014 DATA STA, CNT.DATA -2015 DATA STA, CNT.DATA+ -2016 DATA STA, CNT.JUNK -2017 DATA STA, CNT.JUNK+ -2018 DATA STA, CNT.SPC -2019 DATA STA, CNT.SPC+ -2020 DATA 'LOOP -2021 DATA LDA#, 1 -2022 DATA TAY -2023 DATA LDA(Y, P -2024 DATA BNER, NOTDONE -2025 REM COUNT THE TERMINATING NULL PTR -2026 DATA CLC -2027 DATA LDA, CNT.JUNK -2028 DATA ADC#, 2 -2029 DATA STA, CNT.JUNK -2030 DATA LDA, CNT.JUNK+ -2031 DATA ADC#, 0 -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, CNT+ -2070 DATA 'LC0 -2080 REM COUNT DIFFERENT TYPES OF LINE -2090 REM 1. SKIP SPACES (UNNECESSARY!?) -2100 DATA LDA#, 3: REM FIRST CHR-1 -2101 DATA TAY -2105 DATA 'LC1 -2107 DATA INY: REM NEXT CHAR -2110 DATA LDA(Y, P: REM LOAD CHAR -2120 DATA BEQR, NEXT: REM END OF LINE -2130 DATA CMP#, $20: REM SPACE -2140 DATA BNER, LC1.1:REM EXIT LOOP -2141 DATA INC, CNT.SPC -2142 DATA BNER, LC1: REM NO OVERFLOW -2143 DATA INC, CNT.SPC+ -2148 DATA JMP, LC1: REM REPEAT -2149 DATA 'LC1.1 -2150 REM 2. CHECK TOKEN -2160 DATA CMP#, $8F: REM REM-TOKEN -2170 DATA BNER, LC2 -2180 DATA INC, CNT.REM -2181 DATA BNER, LC3 -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, CNT.DATA+ -2223 DATA JMP, LC3 -2229 REM 3. SCAN REST OF LINE -2230 DATA 'LC3 -2231 DATA INY: REM NEXT CHAR -2232 DATA LDA(Y, P: REM LOAD CHAR -2233 DATA BEQR, NEXT: REM END OF LINE -2235 DATA CMP#, $20: REM SPACE -2240 DATA BNER, LC3.1 -2241 DATA INC, CNT.SPC -2242 DATA BNER, LC3 -2243 DATA INC, CNT.SPC+ -2248 DATA JMP, LC3 -2250 DATA 'LC3.1 -2251 DATA CMP#, $22: REM QUOTE (") -2252 DATA BNER, LC3 -2260 DATA 'LC3.2: REM SKIP STRING -2261 DATA INY -2262 DATA LDA(Y, P: REM LOAD NXT CHR -2263 DATA BEQR, NEXT: REM END OF LINE -2265 DATA CMP#, $22 -2266 DATA BEQR, LC3: REM QUOTE CLOSED -2267 DATA JMP, LC3.2 -2400 DATA 'NEXT -2401 REM ACCUM. LINE LEN IN JUNK CTR -2410 DATA INY: REM COUNT ZERO -2411 DATA TYA -2412 DATA CLC -2413 DATA ADC, CNT.JUNK -2414 DATA STA, CNT.JUNK -2415 DATA LDA#, 0 -2416 DATA ADC, CNT.JUNK+ -2417 DATA STA, CNT.JUNK+ -2420 REM ADVANCE (DEREF) LINE PTR -2421 DATA LDA#, 0 -2422 DATA TAY -2423 DATA LDA(Y, P -2425 DATA TAX -2426 DATA INY -2427 DATA LDA(Y, P -2428 DATA TAY -2430 DATA STXZ, P -2431 DATA STYZ, P+ -2490 DATA JMP, LOOP -2500 DATA 'DONE -2501 REM PUSH "P" (251) PAST THE END -2502 DATA CLC -2503 DATA LDAZ, P -2504 DATA ADC#, 2 -2505 DATA STAZ, P -2506 DATA BCCR, DONE.1 -2507 DATA INCZ, P+ -2508 DATA 'DONE.1 -2509 REM CALCULATE TOTAL BYTES -2510 DATA SEC -2511 DATA LDAZ, P -2512 DATA SBCZ, TXTTAB -2513 DATA STA, CNT.BS -2514 DATA LDAZ, P+ -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, 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, CNT+ -2640 DATA JSR, PRINTNAT -2650 DATA LDX#, S.LINES -2651 DATA LDY#, S.LINES↑ -2652 DATA JSR, PUTSTR -2660 DATA LDX, CNT.REM -2661 DATA LDY, CNT.REM+ -2662 DATA JSR, PRINTNAT -2670 DATA LDX#, S.REM -2671 DATA LDY#, S.REM↑ -2672 DATA JSR, PUTSTR -2680 DATA LDX, CNT.DATA -2681 DATA LDY, CNT.DATA+ -2682 DATA JSR, PRINTNAT -2690 DATA LDX#, S.DATA -2691 DATA LDY#, S.DATA↑ -2692 DATA JSR, PUTSTR -2695 DATA LDA#, 13: REM CR -2696 DATA JSR, CHROUT -2700 DATA LDX, CNT.BS -2701 DATA LDY, CNT.BS+ -2702 DATA JSR, PRINTNAT -2710 DATA LDX#, S.BYTES -2711 DATA LDY#, S.BYTES↑ -2712 DATA JSR, PUTSTR -2720 DATA LDX, CNT.SPC -2721 DATA LDY, CNT.SPC+ -2722 DATA JSR, PRINTNAT -2725 DATA LDX#, S.SPC -2726 DATA LDY#, S.SPC↑ -2727 DATA JSR, PUTSTR -2730 DATA LDX, CNT.JUNK -2731 DATA LDY, CNT.JUNK+ -2732 DATA JSR, PRINTNAT -2735 DATA LDX#, S.JUNK -2736 DATA LDY#, S.JUNK↑ -2737 DATA JSR, PUTSTR -2990 DATA LDA#, 13: REM CR -2991 DATA JMP, CHROUT -3000 REM -3001 REM - SUBROUTINES - -3002 REM -3031 REM 3100 PUTSTR, PUTISTR, PUT*LN -3032 REM 3200 QUOTREM -3034 REM 3400 PRINTNAT -3036 REM 3600 GETSTR -3037 REM 3750 CMPLINENO -3038 REM 3800 ATOI -3040 REM 4000 READNAT -3041 REM 4100 MEMCPY -3042 REM 4200 GETSTASTO -3043 REM 4300 FINDLINE, FINDNEXT -3044 REM 4400 GETFILE -3045 REM 4500 FINDLAST,PUTNL,PRINTNATLN -3046 REM 4600 DELTAPPLY -3047 REM 4700 RELINK -3048 REM 4800 GETSTASTOLINE +2000 REM +2001 REM - SUBROUTINES - +2002 REM +2021 REM 2100 MEMCPY +2022 REM 2200 PUTSTR, PUTISTR, PUT*LN +2023 REM 2300 QUOTREM +2025 REM 2500 PRINTNAT +2027 REM 2700 GETSTR +2028 REM 2850 CMPLINENO +2029 REM 2900 ATOI +2031 REM 3100 READNAT +2032 REM 3200 GETSTASTO +2033 REM 3300 FINDLINE, FINDNEXT +2034 REM 3400 GETFILE +2035 REM 3500 FINDLAST,PUTNL,PRINTNATLN +2036 REM 3600 DELTAPPLY +2037 REM 3700 RELINK +2038 REM 3800 GETSTASTOLINE +2097 REM +2098 REM NB: . = 50100 = 49152 + 848 +2099 REM = $C3B4 = $C000 + $3B4 +2100 DATA 'MEMCPY +2101 REM +2102 REM P (251) IN: DST POINTER +2103 REM Q (253) IN: SRC POINTER +2104 REM Y.X IN: LEN !X=MSB! +2105 REM +2106 REM CLOBBERS: A, X, Y, T, P, Q +2107 REM +2108 REM NB: OVERLAP OKAY IF DST < SRC +2109 REM +2110 DATA STYZ, T: REM SAVE LO(LEN) +2111 DATA LDY#, 0 +2115 DATA CPX#, 0 +2116 DATA BEQR, MC3 +2130 DATA 'MC2: REM BLOCK COPY +2140 DATA LDA(Y, Q +2141 DATA STA(Y, P +2142 DATA INY +2145 DATA LDA(Y, Q: REM UNROLL (11%) +2146 DATA STA(Y, P +2147 DATA INY +2150 DATA BNER, MC2 +2160 DATA INCZ, P+ +2161 DATA INCZ, Q+ +2165 DATA DEX +2166 DATA BNER, MC2 +2170 DATA 'MC3: REM PARTIAL BLOCK +2175 DATA LDAZ, T: REM LO(LEN) +2176 DATA BEQR, MCRET +2180 DATA 'MC4 +2181 DATA LDA(Y, Q +2182 DATA STA(Y, P +2183 DATA INY +2184 DATA CPYZ, T +2185 DATA BCCR, MC4 +2190 DATA 'MCRET +2191 DATA RTS +2199 REM +2200 DATA 'PUTSTR +2201 REM +2202 REM X.Y IN: PTR TO NULL-TERM STR +2203 REM A OUT: LENGTH OF STRING +2204 REM +2205 REM CLOBBERS: A, 251-252 (P) +2206 REM +2210 DATA STXZ, P: REM USER ZP AREA +2211 DATA STYZ, P+ +2215 DATA LDY#, 0 +2220 DATA 'PSLOOP +2225 DATA LDA(Y, P +2226 DATA BEQR, PSEND +2227 DATA JSR, CHROUT +2228 DATA INY +2229 DATA JMP, PSLOOP +2230 DATA 'PSEND +2235 DATA TYA +2236 DATA LDYZ, P+ +2237 DATA RTS +2239 REM +2240 DATA 'PUTLN +2241 DATA LDA#, 13 +2242 DATA JMP, CHROUT +2243 REM +2245 DATA 'PUTSTRLN +2246 DATA JSR, PUTSTR +2247 DATA JMP, PUTLN +2248 REM +2250 DATA 'PUTISTR +2251 REM +2252 REM PRINT A STRING IMM BEHIND THE +2253 REM JSR. CONT AFTER THE NUL TERM. +2254 REM +2255 REM CLOBBERS: A, Y, P +2256 REM +2260 DATA PLA: REM LO BYTE +2261 DATA STAZ, P +2262 DATA PLA +2263 DATA STAZ, P+ +2264 DATA LDY#, 1: REM RET ADDR + 1 +2265 DATA JSR, PSLOOP +2268 DATA 'PISRET +2269 REM PUSH ADDR OF NUL AND RETURN +2270 DATA CLC +2271 DATA ADCZ, P +2272 DATA TAX +2273 DATA TYA: REM = P+ +2274 DATA ADC#, 0 +2275 DATA PHA +2276 DATA TXA +2277 DATA PHA +2278 DATA RTS +2279 REM +2280 DATA 'PUTISTRLN +2281 DATA PLA +2282 DATA STAZ, P +2283 DATA PLA +2284 DATA STAZ, P+ +2285 DATA LDY#, 1 +2286 DATA JSR, PSLOOP +2290 DATA TAX +2291 DATA JSR, PUTNL +2292 DATA TXA +2295 DATA JMP, PISRET +2299 REM +2300 DATA 'QUOTREM +2301 REM +2302 REM X.Y DIVIDEND (X LO, Y HI) +2303 REM 251.252 DIVISOR +2304 REM A RESULT: QUOTIENT +2305 REM X.Y RESULT: REMAINDER +2306 REM +2307 REM CLOBBERS: C, T +2308 REM +2309 REM +2310 DATA LDA#, 0 +2311 DATA STAZ, T +2320 DATA 'QR1 +2325 DATA SEC +2330 DATA TXA +2340 DATA SBCZ, P +2345 DATA TAX +2350 DATA TYA +2360 DATA SBCZ, P+ +2365 DATA TAY +2370 DATA BCCR, QR2 +2380 DATA INCZ, T +2390 DATA JMP, QR1 +2400 DATA 'QR2 +2410 DATA TXA +2412 DATA ADCZ, P +2414 DATA TAX +2416 DATA TYA +2418 DATA ADCZ, P+ +2420 DATA TAY +2422 DATA LDAZ, T +2423 DATA CLC +2424 DATA RTS +2490 REM +2500 DATA 'PRINTNAT +2501 REM +2502 REM X.Y IN: NUMBER TO PRINT +2503 REM +2504 REM CLOBBERS: A, X, Y, T, P +2505 REM +2510 DATA LDA#, 10000 +2511 DATA STAZ, P +2512 DATA LDA#, 10000↑ +2513 DATA STAZ, P+ +2520 DATA JSR, QUOTREM +2530 DATA ADC#, $30: REM "0" +2540 DATA JSR, CHROUT +2550 DATA LDA#, 1000 +2551 DATA STAZ, P +2552 DATA LDA#, 1000↑ +2553 DATA STAZ, P+ +2560 DATA JSR, QUOTREM +2570 DATA ADC#, $30 +2580 DATA JSR, CHROUT +2590 DATA LDA#, 100 +2591 DATA STAZ, P +2592 DATA LDA#, 0 +2593 DATA STAZ, P+ +2600 DATA JSR, QUOTREM +2610 DATA ADC#, $30 +2620 DATA JSR, CHROUT +2630 DATA LDA#, 10 +2631 DATA STAZ, P +2632 DATA LDA#, 0 +2633 DATA STAZ, P+ +2640 DATA JSR, QUOTREM +2650 DATA ADC#, $30 +2651 DATA JSR, CHROUT +2660 DATA TXA +2670 DATA ADC#, $30 +2671 DATA JSR, CHROUT +2680 DATA RTS +2699 REM +2700 DATA 'GETSTR +2701 REM +2702 REM X.Y IN/OUT: PTR TO STR BUF +2703 REM A OUT: LEN OF STRING +2704 REM +2705 REM CLOBBERS: T, P +2706 REM +2710 DATA STXZ, P +2711 DATA STYZ, P+ +2720 DATA LDY#, 0 +2725 DATA STYZ, BLNSW: REM CURSOR ON +2730 DATA 'GS1 +2735 DATA STYZ, T: REM SAVE Y +2740 DATA JSR, GETIN +2741 DATA BEQR, GS1 +2745 DATA LDYZ, T: REM RESTORE Y +2750 DATA CMP#, 13: REM CR +2751 DATA BEQR, GS3 +2760 DATA CMP#, 20: REM DEL +2761 DATA BNER, GS2 +2770 DATA TYA +2771 DATA BEQR, GS1 +2772 DATA DEY +2773 DATA LDA#, 20 +2774 DATA JSR, CHROUT +2775 DATA JMP, GS1 +2780 DATA 'GS2 +2781 DATA CMP#, 32: REM SPC +2782 DATA BCCR, GS1 +2783 DATA CMP#, 127: REM DEL +2784 DATA BCSR, GS1 +2790 DATA STA(Y, P +2791 DATA INY +2795 DATA JSR, CHROUT +2796 DATA JMP, GS1 +2800 DATA 'GS3 +2810 DATA LDA#, 0 +2820 DATA STA(Y, P +2821 DATA STYZ, T +2822 DATA LDA#, 1 +2823 DATA STAZ, BLNSW: REM CURSOR OFF +2824 DATA LDA#, 32: REM ERASE CRSR +2825 DATA JSR, CHROUT +2826 DATA LDA#, 13 +2827 DATA JSR, CHROUT +2830 DATA LDXZ, P +2831 DATA LDYZ, P+ +2832 DATA LDAZ, T +2833 DATA RTS +2849 REM +2850 DATA 'CMPLINENO +2851 REM +2852 REM X.Y IN: LINE NUMBER +2853 REM P IN: LINE POINTER +2854 REM +2855 REM CLOBBERS: Y, T +2856 REM +2860 DATA STYZ, T +2861 DATA LDY#, 1: REM HI(PNEXT) +2862 DATA LDA(Y, P +2863 DATA BNER, CLN1 +2864 DATA CLC: REM < +2865 DATA RTS +2870 DATA 'CLN1 +2871 DATA LDAZ, T +2872 DATA LDY#, 3 +2873 DATA CMP(Y, P +2874 DATA BCCR, CLNRET +2875 DATA BNER, CLNRET +2880 DATA TXA +2881 DATA DEY +2882 DATA CMP(Y, P +2890 DATA 'CLNRET +2891 DATA RTS +2899 REM +2900 DATA 'ATOI +2901 REM +2902 REM X.Y IN: PTR TO STR +2903 REM X.Y OUT: RESULT +2904 REM A OUT: LEN CONSUMED +2905 REM +2906 REM CLOBBERS: T, P, Q +2907 REM +2910 DATA STXZ, P +2911 DATA STYZ, P+ +2920 DATA LDX#, 0 +2921 DATA LDY#, 0 +2925 DATA STXZ, Q +2926 DATA STXZ, Q+ +2930 DATA 'AI1 +2940 DATA LDA(Y, P +2941 DATA BEQR, AI2 +2949 REM +2950 DATA CMP#, 48: REM "0" +2951 DATA BCCR, AI2 +2960 DATA CMP#, 58: REM "9" +2961 DATA BCSR, AI2 +2970 DATA SEC +2971 DATA SBC#, 48 +2980 DATA STAZ, T: REM SAVE DIGIT +2985 DATA LDAZ, Q: REM SAVE VALUE +2986 DATA LDXZ, Q+ +2990 DATA ASLZ, Q: REM DBL 2X +2991 DATA ROLZ, Q+ +2992 DATA ASLZ, Q: REM DBL 4X +2993 DATA ROLZ, Q+ +3000 DATA CLC: REM ADD 5X +3001 DATA ADCZ, Q +3002 DATA STAZ, Q +3003 DATA TXA +3004 DATA ADCZ, Q+ +3005 DATA STAZ, Q+ +3010 DATA ASLZ, Q: REM DBL 10X +3011 DATA ROLZ, Q+ +3020 DATA CLC: REM ADD DIGIT +3021 DATA LDAZ, T +3022 DATA ADCZ, Q +3023 DATA STAZ, Q +3024 DATA BCCR, AI3 +3025 DATA INCZ, Q+ +3026 DATA 'AI3 +3030 DATA INY +3040 DATA BNER, AI1 +3050 DATA 'AI2 +3055 DATA TYA +3056 DATA LDXZ, Q +3057 DATA LDYZ, Q+ +3060 DATA RTS 3099 REM -3100 DATA 'PUTSTR +3100 DATA 'READNAT 3101 REM -3102 REM X.Y IN: PTR TO NULL-TERM STR -3103 REM A OUT: LENGTH OF STRING +3102 REM X.Y OUT: RESULT +3103 REM A OUT: LENGTH CONSUMED 3104 REM -3105 REM CLOBBERS: A, 251-252 (P) -3106 REM -3110 DATA STXZ, P: REM USER ZP AREA -3111 DATA STYZ, P+ -3115 DATA LDY#, 0 -3120 DATA 'PSLOOP -3125 DATA LDA(Y, P -3126 DATA BEQR, PSEND -3127 DATA JSR, CHROUT -3128 DATA INY -3129 DATA JMP, PSLOOP -3130 DATA 'PSEND -3135 DATA TYA -3136 DATA LDYZ, P+ -3137 DATA RTS -3139 REM -3140 DATA 'PUTLN -3141 DATA LDA#, 13 -3142 DATA JMP, CHROUT -3143 REM -3145 DATA 'PUTSTRLN -3146 DATA JSR, PUTSTR -3147 DATA JMP, PUTLN -3148 REM -3150 DATA 'PUTISTR -3151 REM -3152 REM PRINT A STRING IMM BEHIND THE -3153 REM JSR. CONT AFTER THE NUL TERM. -3154 REM -3155 REM CLOBBERS: A, Y, P -3156 REM -3160 DATA PLA: REM LO BYTE -3161 DATA STAZ, P -3162 DATA PLA -3163 DATA STAZ, P+ -3164 DATA LDY#, 1: REM RET ADDR + 1 -3165 DATA JSR, PSLOOP -3168 DATA 'PISRET -3169 REM PUSH ADDR OF NUL AND RETURN -3170 DATA CLC -3171 DATA ADCZ, P -3172 DATA TAX -3173 DATA TYA: REM = P+ -3174 DATA ADC#, 0 -3175 DATA PHA -3176 DATA TXA -3177 DATA PHA -3178 DATA RTS -3179 REM -3180 DATA 'PUTISTRLN -3181 DATA PLA -3182 DATA STAZ, P -3183 DATA PLA -3184 DATA STAZ, P+ -3185 DATA LDY#, 1 -3186 DATA JSR, PSLOOP -3190 DATA TAX -3191 DATA JSR, PUTNL -3192 DATA TXA -3195 DATA JMP, PISRET +3110 DATA LDX#, BUF +3111 DATA LDY#, BUF↑ +3120 DATA JSR, GETSTR +3125 DATA JSR, ATOI +3126 DATA CMP#, 0: REM LEN -> FLAGS +3130 DATA RTS 3199 REM -3200 DATA 'QUOTREM +3200 DATA 'GETSTASTO 3201 REM -3202 REM X.Y DIVIDEND (X LO, Y HI) -3203 REM 251.252 DIVISOR -3204 REM A RESULT: QUOTIENT -3205 REM X.Y RESULT: REMAINDER +3202 REM X.Y OUT: NSTOP +3203 REM C,Z OUT: CMP NSTOP-NSTART +3204 REM +3205 REM CLOBBERS: A, X, Y, 2, P, Q 3206 REM -3207 REM CLOBBERS: C, T -3208 REM -3209 REM -3210 DATA LDA#, 0 -3211 DATA STAZ, T -3220 DATA 'QR1 -3225 DATA SEC -3230 DATA TXA -3240 DATA SBCZ, P -3245 DATA TAX -3250 DATA TYA -3260 DATA SBCZ, P+ -3265 DATA TAY -3270 DATA BCCR, QR2 -3280 DATA INCZ, T -3290 DATA JMP, QR1 -3300 DATA 'QR2 -3310 DATA TXA -3312 DATA ADCZ, P -3314 DATA TAX -3316 DATA TYA -3318 DATA ADCZ, P+ -3320 DATA TAY -3322 DATA LDAZ, T -3323 DATA CLC -3324 DATA RTS -3390 REM -3400 DATA 'PRINTNAT +3210 DATA LDX#, S.START +3211 DATA LDY#, S.START↑ +3212 DATA JSR, PUTSTR +3220 DATA JSR, READNAT +3221 DATA STX, NSTART +3222 DATA STY, NSTART+ +3230 DATA LDX#, S.STOP +3231 DATA LDY#, S.STOP↑ +3232 DATA JSR, PUTSTR +3240 DATA JSR, READNAT +3241 DATA STX, NSTOP +3242 DATA STY, NSTOP+ +3249 REM CMP NSTOP, NSTART +3250 DATA CPY, NSTART+ +3251 DATA BCCR, GSS1 +3252 DATA BNER, GSS1 +3253 DATA CPX, NSTART +3259 DATA 'GSS1 +3260 DATA RTS +3299 REM +3300 DATA 'FINDLINE +3301 REM +3302 REM X.Y IN: LINE NUMBER +3303 REM X.Y OUT: LINE POINTER +3304 REM P (251) OUT: -"- +3305 REM Q (253) OUT: PREV LINE (PTR) +3306 REM +3307 REM CLOBBERS: A, X, Y, P, Q, T, B +3308 REM +3310 DATA LDAZ, TXTTAB +3311 DATA STAZ, P: REM -> P +3312 DATA LDAZ, TXTTAB+ +3313 DATA STAZ, P+ +3315 DATA LDA#, 0: REM PREV PTR +3316 DATA STAZ, Q +3317 DATA STAZ, Q+ +3319 REM ... +3320 DATA 'FINDNEXT +3321 REM +3322 REM X.Y IN: LINE NUMBER +3323 REM X.Y OUT: LINE POINTER +3324 REM P (251) IN/OUT: -"- +3325 REM Q (253) IN/OUT: PREV LINE PTR +3326 REM +3327 REM CLOBBERS: A, X, Y, P, Q, T, B +3328 REM +3330 DATA STXZ, T +3331 DATA STYZ, B +3340 DATA 'FN3 +3350 DATA LDY#, 1: REM -> PNEXT HI +3351 DATA LDA(Y, P +3352 DATA BEQR, FN5: REM RETURN +3360 DATA LDY#, 3: REM -> LINENO HI +3361 DATA LDA(Y, P +3362 DATA CMPZ, B: REM HI BYTE +3363 DATA BCCR, FN4: REM A < M +3364 DATA BNER, FN5: REM A > M +3365 DATA DEY +3366 DATA LDA(Y, P +3367 DATA CMPZ, T: REM LO BYTE +3368 DATA BCCR, FN4 +3369 DATA JMP, FN5: REM RETURN +3370 DATA 'FN4: REM NEXT LINE +3375 DATA LDXZ, P +3376 DATA LDYZ, P+ +3377 DATA STXZ, Q +3378 DATA STYZ, Q+ +3380 DATA LDY#, 0 +3381 DATA LDA(Y, P +3382 DATA TAX +3383 DATA INY +3384 DATA LDA(Y, P +3385 DATA STXZ, P +3386 DATA STAZ, P+ +3389 DATA JMP, FN3 +3390 DATA 'FN5 +3391 DATA LDXZ, P +3392 DATA LDYZ, P+ +3393 DATA RTS +3399 REM +3400 DATA 'GETFILE 3401 REM -3402 REM X.Y IN: NUMBER TO PRINT +3402 REM A IN: LOGICAL FILE NUMBER 3403 REM -3404 REM CLOBBERS: A, X, Y, T, P +3404 REM CLOBBERS: A,X,Y,T,P,Q 3405 REM -3410 DATA LDA#, 10000 -3411 DATA STAZ, P -3412 DATA LDA#, 10000↑ -3413 DATA STAZ, P+ -3420 DATA JSR, QUOTREM -3430 DATA ADC#, $30: REM "0" -3440 DATA JSR, CHROUT -3450 DATA LDA#, 1000 -3451 DATA STAZ, P -3452 DATA LDA#, 1000↑ -3453 DATA STAZ, P+ -3460 DATA JSR, QUOTREM -3470 DATA ADC#, $30 -3480 DATA JSR, CHROUT -3490 DATA LDA#, 100 -3491 DATA STAZ, P -3492 DATA LDA#, 0 -3493 DATA STAZ, P+ -3500 DATA JSR, QUOTREM -3510 DATA ADC#, $30 -3520 DATA JSR, CHROUT -3530 DATA LDA#, 10 -3531 DATA STAZ, P -3532 DATA LDA#, 0 -3533 DATA STAZ, P+ -3540 DATA JSR, QUOTREM -3550 DATA ADC#, $30 -3551 DATA JSR, CHROUT -3560 DATA TXA -3570 DATA ADC#, $30 -3571 DATA JSR, CHROUT -3580 DATA RTS +3409 DATA PHA: REM SAVE FILE NO +3410 DATA LDX#, S.DRVBRA +3411 DATA LDY#, S.DRVBRA↑ +3412 DATA JSR, PUTSTR +3413 DATA LDAZ, FA: REM CURRENT DEV +3414 DATA CLC +3415 DATA ADC#, 48: REM XXX PRINTBYTE +3416 DATA JSR, CHROUT +3417 DATA LDX#, S.KETCOL +3418 DATA LDY#, S.KETCOL↑ +3419 DATA JSR, PUTSTR +3420 DATA JSR, READNAT +3421 DATA BNER, GF1: REM LEN <> 0 +3422 DATA LDXZ, FA: REM DEFAULT +3423 DATA 'GF1 +3424 DATA PLA: REM FILE NO +3425 DATA LDY#, 0: REM SEC ADDR +3426 DATA JSR, SETLFS +3430 DATA LDX#, S.FILE +3431 DATA LDY#, S.FILE↑ +3432 DATA JSR, PUTSTR +3433 DATA LDX#, BUF +3434 DATA LDY#, BUF↑ +3435 DATA JSR, GETSTR +3437 DATA JSR, SETNAM +3441 DATA RTS +3499 REM +3500 DATA 'FINDLAST +3501 REM +3502 REM X.Y OUT: PTR TO LAST LINE +3503 REM P (251) OUT: SAME +3504 REM +3505 REM CLOBBERS: A, X, Y, P, Q +3506 REM +3510 DATA LDXZ, TXTTAB +3511 DATA LDYZ, TXTTAB+ +3512 DATA STXZ, P +3513 DATA STYZ, P+ +3520 DATA LDY#, 1 +3521 DATA LDA(Y, P +3522 DATA BEQR, FL2: REM EMPTY PRG +3530 DATA 'FL1 +3531 DATA LDY#, 0 +3532 DATA LDA(Y, P +3533 DATA STAZ, Q +3534 DATA INY +3535 DATA LDA(Y, P +3536 DATA STAZ, Q+ +3540 DATA LDA(Y, Q +3541 DATA BEQR, FL2 +3550 DATA LDXZ, Q +3551 DATA LDYZ, Q+ +3552 DATA STXZ, P +3553 DATA STYZ, P+ +3555 DATA JMP, FL1 +3560 DATA 'FL2 +3570 DATA LDXZ, P +3571 DATA LDYZ, P+ +3572 DATA RTS +3579 REM +3580 DATA 'PUTNL +3581 DATA LDA#, 13 +3582 DATA JMP, CHROUT +3589 REM +3590 DATA 'PRINTNATLN +3591 DATA JSR, PRINTNAT +3592 DATA JMP, PUTNL 3599 REM -3600 DATA 'GETSTR +3600 DATA 'DELTAPPLY 3601 REM -3602 REM X.Y IN/OUT: PTR TO STR BUF -3603 REM A OUT: LEN OF STRING -3604 REM -3605 REM CLOBBERS: T, P -3606 REM -3610 DATA STXZ, P -3611 DATA STYZ, P+ -3620 DATA LDY#, 0 -3625 DATA STYZ, BLNSW: REM CURSOR ON -3630 DATA 'GS1 -3635 DATA STYZ, T: REM SAVE Y -3640 DATA JSR, GETIN -3641 DATA BEQR, GS1 -3645 DATA LDYZ, T: REM RESTORE Y -3650 DATA CMP#, 13: REM CR -3651 DATA BEQR, GS3 -3660 DATA CMP#, 20: REM DEL -3661 DATA BNER, GS2 -3670 DATA TYA -3671 DATA BEQR, GS1 -3672 DATA DEY -3673 DATA LDA#, 20 -3674 DATA JSR, CHROUT -3675 DATA JMP, GS1 -3680 DATA 'GS2 -3681 DATA CMP#, 32: REM SPC -3682 DATA BCCR, GS1 -3683 DATA CMP#, 127: REM DEL -3684 DATA BCSR, GS1 -3690 DATA STA(Y, P -3691 DATA INY -3695 DATA JSR, CHROUT -3696 DATA JMP, GS1 -3700 DATA 'GS3 -3710 DATA LDA#, 0 -3720 DATA STA(Y, P -3721 DATA STYZ, T -3722 DATA LDA#, 1 -3723 DATA STAZ, BLNSW: REM CURSOR OFF -3724 DATA LDA#, 32: REM ERASE CRSR -3725 DATA JSR, CHROUT -3726 DATA LDA#, 13 -3727 DATA JSR, CHROUT -3730 DATA LDXZ, P -3731 DATA LDYZ, P+ -3732 DATA LDAZ, T -3733 DATA RTS -3749 REM -3750 DATA 'CMPLINENO -3751 REM -3752 REM X.Y IN: LINE NUMBER -3753 REM P IN: LINE POINTER -3754 REM -3755 REM CLOBBERS: Y, T -3756 REM -3760 DATA STYZ, T -3761 DATA LDY#, 1: REM HI(PNEXT) -3762 DATA LDA(Y, P -3763 DATA BNER, CLN1 -3764 DATA CLC: REM < -3765 DATA RTS -3770 DATA 'CLN1 -3771 DATA LDAZ, T -3772 DATA LDY#, 3 -3773 DATA CMP(Y, P -3774 DATA BCCR, CLNRET -3775 DATA BNER, CLNRET -3780 DATA TXA -3781 DATA DEY -3782 DATA CMP(Y, P -3790 DATA 'CLNRET +3602 REM P (251) IN: PTR TO START LINE +3603 REM X.Y IN: PTR TO STOP LINE +3604 REM A IN: OFFSET TO MODIFY +3605 REM DELTA IN: VALUE TO ADD +3606 REM Q (253) OUT: COPY OF X.Y INPUT +3607 REM +3608 REM CLOBBERS: A,X,Y,P,Q,T,B +3609 REM +3610 DATA STXZ, Q +3611 DATA STYZ, Q+ +3612 DATA STAZ, B +3620 DATA 'DEA1 +3630 DATA LDAZ, P+ +3631 DATA CMPZ, Q+ +3632 DATA BCCR, DEA2: REM P < Q +3633 DATA BNER, DEA3: REM P > Q +3634 DATA LDAZ, P +3635 DATA CMPZ, Q +3636 DATA BCSR, DEA3 +3637 DATA 'DEA2 +3640 DATA LDY#, 1 +3641 DATA LDA(Y, P +3642 DATA BEQR, DEA3: REM DONE +3645 DATA STAZ, T: REM SAVE PNEXT (HI) +3646 DATA DEY +3647 DATA LDA(Y, P +3648 DATA TAX: REM SAVE PNEXT (LO) +3650 DATA LDYZ, B +3651 DATA LDA(Y, P +3660 DATA CLC +3661 DATA ADC, DELTA +3662 DATA STA(Y, P +3663 DATA INY +3664 DATA LDA(Y, P +3665 DATA ADC, DELTA+ +3666 DATA STA(Y, P +3680 DATA LDYZ, T +3681 DATA STXZ, P: REM NEXT LINE +3682 DATA STYZ, P+ +3690 DATA JMP, DEA1 +3691 DATA 'DEA3 +3692 DATA RTS +3699 REM +3700 DATA 'RELINK +3701 REM +3702 REM P IN: PTR TO START LINE +3703 REM Q IN: PTR TO STOP LINE +3704 REM P OUT: PTR BEYOND LAST LINE +3705 REM +3706 REM CLOBBERS: A, X, Y, T +3709 REM +3710 DATA 'RL1 +3711 DATA LDAZ, P+ +3712 DATA CMPZ, Q+ +3713 DATA BCCR, RL2 +3714 DATA BNER, RL4 +3715 DATA LDAZ, P +3716 DATA CMPZ, Q +3717 DATA BCSR, RL4: REM PSTOP REACHD +3720 DATA 'RL2 +3721 DATA LDY#, 1 +3722 DATA LDA(Y, P +3723 DATA BEQR, RL4: REM PAST LAST LN +3725 DATA LDY#, 3 +3730 DATA 'RL3: REM SCAN FOR NUL +3735 DATA INY +3740 DATA LDA(Y, P +3741 DATA BNER, RL3: REM NEXT CHAR +3742 DATA INY: REM GO PAST NUL +3750 DATA CLC: REM ADV POINTER +3751 DATA TYA +3752 DATA ADCZ, P +3753 DATA TAX +3754 DATA LDA#, 0 +3755 DATA ADCZ, P+ +3760 DATA LDY#, 1 +3761 DATA STA(Y, P +3762 DATA STAZ, T: REM SAVE HI BYTE +3763 DATA TXA +3764 DATA DEY +3765 DATA STA(Y, P +3766 DATA LDYZ, T +3770 DATA STXZ, P +3771 DATA STYZ, P+ +3780 DATA JMP, RL1: REM NEXT LINE +3790 DATA 'RL4 3791 DATA RTS 3799 REM -3800 DATA 'ATOI -3801 REM -3802 REM X.Y IN: PTR TO STR -3803 REM X.Y OUT: RESULT -3804 REM A OUT: LEN CONSUMED -3805 REM -3806 REM CLOBBERS: T, P, Q -3807 REM -3810 DATA STXZ, P -3811 DATA STYZ, P+ -3820 DATA LDX#, 0 -3821 DATA LDY#, 0 -3825 DATA STXZ, Q -3826 DATA STXZ, Q+ -3830 DATA 'AI1 -3840 DATA LDA(Y, P -3841 DATA BEQR, AI2 -3849 REM -3850 DATA CMP#, 48: REM "0" -3851 DATA BCCR, AI2 -3860 DATA CMP#, 58: REM "9" -3861 DATA BCSR, AI2 -3870 DATA SEC -3871 DATA SBC#, 48 -3880 DATA STAZ, T: REM SAVE DIGIT -3885 DATA LDAZ, Q: REM SAVE VALUE -3886 DATA LDXZ, Q+ -3890 DATA ASLZ, Q: REM DBL 2X -3891 DATA ROLZ, Q+ -3892 DATA ASLZ, Q: REM DBL 4X -3893 DATA ROLZ, Q+ -3900 DATA CLC: REM ADD 5X -3901 DATA ADCZ, Q -3902 DATA STAZ, Q -3903 DATA TXA -3904 DATA ADCZ, Q+ -3905 DATA STAZ, Q+ -3910 DATA ASLZ, Q: REM DBL 10X -3911 DATA ROLZ, Q+ -3920 DATA CLC: REM ADD DIGIT -3921 DATA LDAZ, T -3922 DATA ADCZ, Q -3923 DATA STAZ, Q -3924 DATA BCCR, AI3 -3925 DATA INCZ, Q+ -3926 DATA 'AI3 -3930 DATA INY -3940 DATA BNER, AI1 -3950 DATA 'AI2 -3955 DATA TYA -3956 DATA LDXZ, Q -3957 DATA LDYZ, Q+ -3960 DATA RTS +3800 DATA 'GETSTASTOLINE +3810 DATA JSR, GETSTASTO +3811 DATA BCCR, GSL1: REM STOP < START +3812 DATA BNER, GSL2: REM > +3820 DATA 'GSL1 +3821 DATA SEC: REM NSTART >= NSTOP +3822 DATA RTS +3825 DATA 'GSL2 +3830 REM LOCATE START LINE +3831 DATA LDX, NSTART +3832 DATA LDY, NSTART+ +3833 DATA JSR, FINDLINE +3834 DATA STX, PSTART +3835 DATA STY, PSTART+ +3840 REM SAVE PTR TO PRECEEDING LINE +3841 DATA LDXZ, Q +3842 DATA LDYZ, Q+ +3843 DATA STX, PPREV +3844 DATA STY, PPREV+ +3850 REM LOCATE STOP LINE +3851 DATA LDX, NSTOP +3852 DATA LDY, NSTOP+ +3853 DATA JSR, FINDNEXT +3854 DATA STX, PSTOP +3855 DATA STY, PSTOP+ +3860 REM SAVE PTR TO LAST LINE +3861 DATA LDXZ, Q +3862 DATA LDYZ, Q+ +3863 DATA STX, PLAST +3864 DATA STY, PLAST+ +3870 REM CALC. DELTA = PSTART - PSTOP +3871 DATA SEC +3872 DATA LDA, PSTART +3873 DATA SBC, PSTOP +3874 DATA STA, DELTA +3875 DATA LDA, PSTART+ +3876 DATA SBC, PSTOP+ +3877 DATA STA, DELTA+ +3880 DATA RTS 3999 REM -4000 DATA 'READNAT -4001 REM -4002 REM X.Y OUT: RESULT -4003 REM A OUT: LENGTH CONSUMED -4004 REM -4010 DATA LDX#, BUF -4011 DATA LDY#, BUF↑ -4020 DATA JSR, GETSTR -4025 DATA JSR, ATOI -4026 DATA CMP#, 0: REM LEN -> FLAGS -4030 DATA RTS -4099 REM -4100 DATA 'MEMCPY -4101 REM -4102 REM P (251) IN: DST POINTER -4103 REM Q (253) IN: SRC POINTER -4104 REM Y.X IN: LEN !X=MSB! -4105 REM -4106 REM CLOBBERS: A, X, Y, T, P, Q -4107 REM -4108 REM NB: OVERLAP OKAY IF DST < SRC -4109 REM -4110 DATA STYZ, T: REM SAVE LO(LEN) -4111 DATA LDY#, 0 -4115 DATA CPX#, 0 -4116 DATA BEQR, MC3 -4130 DATA 'MC2: REM BLOCK COPY -4140 DATA LDA(Y, Q -4141 DATA STA(Y, P -4142 DATA INY -4145 DATA LDA(Y, Q: REM UNROLL (11%) -4146 DATA STA(Y, P -4147 DATA INY -4150 DATA BNER, MC2 -4160 DATA INCZ, P+ -4161 DATA INCZ, Q+ -4165 DATA DEX -4166 DATA BNER, MC2 -4170 DATA 'MC3: REM PARTIAL BLOCK -4175 DATA LDAZ, T: REM LO(LEN) -4176 DATA BEQR, MCRET -4180 DATA 'MC4 -4181 DATA LDA(Y, Q -4182 DATA STA(Y, P -4183 DATA INY -4184 DATA CPYZ, T -4185 DATA BCCR, MC4 -4190 DATA 'MCRET -4191 DATA RTS -4199 REM -4200 DATA 'GETSTASTO -4201 REM -4202 REM X.Y OUT: NSTOP -4203 REM C,Z OUT: CMP NSTOP-NSTART -4204 REM -4205 REM CLOBBERS: A, X, Y, 2, P, Q -4206 REM -4210 DATA LDX#, S.START -4211 DATA LDY#, S.START↑ -4212 DATA JSR, PUTSTR -4220 DATA JSR, READNAT -4221 DATA STX, NSTART -4222 DATA STY, NSTART+ -4230 DATA LDX#, S.STOP -4231 DATA LDY#, S.STOP↑ -4232 DATA JSR, PUTSTR -4240 DATA JSR, READNAT -4241 DATA STX, NSTOP -4242 DATA STY, NSTOP+ -4249 REM CMP NSTOP, NSTART -4250 DATA CPY, NSTART+ -4251 DATA BCCR, GSS1 -4252 DATA BNER, GSS1 -4253 DATA CPX, NSTART -4259 DATA 'GSS1 -4260 DATA RTS -4299 REM -4300 DATA 'FINDLINE -4301 REM -4302 REM X.Y IN: LINE NUMBER -4303 REM X.Y OUT: LINE POINTER -4304 REM P (251) OUT: -"- -4305 REM Q (253) OUT: PREV LINE (PTR) -4306 REM -4307 REM CLOBBERS: A, X, Y, P, Q, T, B -4308 REM -4310 DATA LDAZ, TXTTAB -4311 DATA STAZ, P: REM -> P -4312 DATA LDAZ, TXTTAB+ -4313 DATA STAZ, P+ -4315 DATA LDA#, 0: REM PREV PTR -4316 DATA STAZ, Q -4317 DATA STAZ, Q+ -4319 REM ... -4320 DATA 'FINDNEXT -4321 REM -4322 REM X.Y IN: LINE NUMBER -4323 REM X.Y OUT: LINE POINTER -4324 REM P (251) IN/OUT: -"- -4325 REM Q (253) IN/OUT: PREV LINE PTR -4326 REM -4327 REM CLOBBERS: A, X, Y, P, Q, T, B -4328 REM -4330 DATA STXZ, T -4331 DATA STYZ, B -4340 DATA 'FN3 -4350 DATA LDY#, 1: REM -> PNEXT HI -4351 DATA LDA(Y, P -4352 DATA BEQR, FN5: REM RETURN -4360 DATA LDY#, 3: REM -> LINENO HI -4361 DATA LDA(Y, P -4362 DATA CMPZ, B: REM HI BYTE -4363 DATA BCCR, FN4: REM A < M -4364 DATA BNER, FN5: REM A > M -4365 DATA DEY -4366 DATA LDA(Y, P -4367 DATA CMPZ, T: REM LO BYTE -4368 DATA BCCR, FN4 -4369 DATA JMP, FN5: REM RETURN -4370 DATA 'FN4: REM NEXT LINE -4375 DATA LDXZ, P -4376 DATA LDYZ, P+ -4377 DATA STXZ, Q -4378 DATA STYZ, Q+ -4380 DATA LDY#, 0 -4381 DATA LDA(Y, P -4382 DATA TAX -4383 DATA INY -4384 DATA LDA(Y, P -4385 DATA STXZ, P -4386 DATA STAZ, P+ -4389 DATA JMP, FN3 -4390 DATA 'FN5 -4391 DATA LDXZ, P -4392 DATA LDYZ, P+ -4393 DATA RTS -4399 REM -4400 DATA 'GETFILE -4401 REM -4402 REM A IN: LOGICAL FILE NUMBER -4403 REM -4404 REM CLOBBERS: A,X,Y,T,P,Q -4405 REM -4409 DATA PHA: REM SAVE FILE NO -4410 DATA LDX#, S.DRVBRA -4411 DATA LDY#, S.DRVBRA↑ -4412 DATA JSR, PUTSTR -4413 DATA LDAZ, FA: REM CURRENT DEV -4414 DATA CLC -4415 DATA ADC#, 48: REM XXX PRINTBYTE -4416 DATA JSR, CHROUT -4417 DATA LDX#, S.KETCOL -4418 DATA LDY#, S.KETCOL↑ -4419 DATA JSR, PUTSTR -4420 DATA JSR, READNAT -4421 DATA BNER, GF1: REM LEN <> 0 -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, SETLFS -4430 DATA LDX#, S.FILE -4431 DATA LDY#, S.FILE↑ -4432 DATA JSR, PUTSTR -4433 DATA LDX#, BUF -4434 DATA LDY#, BUF↑ -4435 DATA JSR, GETSTR -4437 DATA JSR, SETNAM -4441 DATA RTS -4499 REM -4500 DATA 'FINDLAST -4501 REM -4502 REM X.Y OUT: PTR TO LAST LINE -4503 REM P (251) OUT: SAME -4504 REM -4505 REM CLOBBERS: A, X, Y, P, Q -4506 REM -4510 DATA LDXZ, TXTTAB -4511 DATA LDYZ, TXTTAB+ -4512 DATA STXZ, P -4513 DATA STYZ, P+ -4520 DATA LDY#, 1 -4521 DATA LDA(Y, P -4522 DATA BEQR, FL2: REM EMPTY PRG -4530 DATA 'FL1 -4531 DATA LDY#, 0 -4532 DATA LDA(Y, P -4533 DATA STAZ, Q -4534 DATA INY -4535 DATA LDA(Y, P -4536 DATA STAZ, Q+ -4540 DATA LDA(Y, Q -4541 DATA BEQR, FL2 -4550 DATA LDXZ, Q -4551 DATA LDYZ, Q+ -4552 DATA STXZ, P -4553 DATA STYZ, P+ -4555 DATA JMP, FL1 -4560 DATA 'FL2 -4570 DATA LDXZ, P -4571 DATA LDYZ, P+ -4572 DATA RTS -4579 REM -4580 DATA 'PUTNL -4581 DATA LDA#, 13 -4582 DATA JMP, CHROUT -4589 REM -4590 DATA 'PRINTNATLN -4591 DATA JSR, PRINTNAT -4592 DATA JMP, PUTNL -4599 REM -4600 DATA 'DELTAPPLY -4601 REM -4602 REM P (251) IN: PTR TO START LINE -4603 REM X.Y IN: PTR TO STOP LINE -4604 REM A IN: OFFSET TO MODIFY -4605 REM DELTA IN: VALUE TO ADD -4606 REM Q (253) OUT: COPY OF X.Y INPUT -4607 REM -4608 REM CLOBBERS: A,X,Y,P,Q,T,B -4609 REM -4610 DATA STXZ, Q -4611 DATA STYZ, Q+ -4612 DATA STAZ, B -4620 DATA 'DEA1 -4630 DATA LDAZ, P+ -4631 DATA CMPZ, Q+ -4632 DATA BCCR, DEA2: REM P < Q -4633 DATA BNER, DEA3: REM P > Q -4634 DATA LDAZ, P -4635 DATA CMPZ, Q -4636 DATA BCSR, DEA3 -4637 DATA 'DEA2 -4640 DATA LDY#, 1 -4641 DATA LDA(Y, P -4642 DATA BEQR, DEA3: REM DONE -4645 DATA STAZ, T: REM SAVE PNEXT (HI) -4646 DATA DEY -4647 DATA LDA(Y, P -4648 DATA TAX: REM SAVE PNEXT (LO) -4650 DATA LDYZ, B -4651 DATA LDA(Y, P -4660 DATA CLC -4661 DATA ADC, DELTA -4662 DATA STA(Y, P -4663 DATA INY -4664 DATA LDA(Y, P -4665 DATA ADC, DELTA+ -4666 DATA STA(Y, P -4680 DATA LDYZ, T -4681 DATA STXZ, P: REM NEXT LINE -4682 DATA STYZ, P+ -4690 DATA JMP, DEA1 -4691 DATA 'DEA3 -4692 DATA RTS -4699 REM -4700 DATA 'RELINK -4701 REM -4702 REM P IN: PTR TO START LINE -4703 REM Q IN: PTR TO STOP LINE -4704 REM P OUT: PTR BEYOND LAST LINE -4705 REM -4706 REM CLOBBERS: A, X, Y, T -4709 REM -4710 DATA 'RL1 -4711 DATA LDAZ, P+ -4712 DATA CMPZ, Q+ -4713 DATA BCCR, RL2 -4714 DATA BNER, RL4 -4715 DATA LDAZ, P -4716 DATA CMPZ, Q -4717 DATA BCSR, RL4: REM PSTOP REACHD -4720 DATA 'RL2 -4721 DATA LDY#, 1 -4722 DATA LDA(Y, P -4723 DATA BEQR, RL4: REM PAST LAST LN -4725 DATA LDY#, 3 -4730 DATA 'RL3: REM SCAN FOR NUL -4735 DATA INY -4740 DATA LDA(Y, P -4741 DATA BNER, RL3: REM NEXT CHAR -4742 DATA INY: REM GO PAST NUL -4750 DATA CLC: REM ADV POINTER -4751 DATA TYA -4752 DATA ADCZ, P -4753 DATA TAX -4754 DATA LDA#, 0 -4755 DATA ADCZ, P+ -4760 DATA LDY#, 1 -4761 DATA STA(Y, P -4762 DATA STAZ, T: REM SAVE HI BYTE -4763 DATA TXA -4764 DATA DEY -4765 DATA STA(Y, P -4766 DATA LDYZ, T -4770 DATA STXZ, P -4771 DATA STYZ, P+ -4780 DATA JMP, RL1: REM NEXT LINE -4790 DATA 'RL4 -4791 DATA RTS -4799 REM -4800 DATA 'GETSTASTOLINE -4810 DATA JSR, GETSTASTO -4811 DATA BCCR, GSL1: REM STOP < START -4812 DATA BNER, GSL2: REM > -4820 DATA 'GSL1 -4821 DATA SEC: REM NSTART >= NSTOP -4822 DATA RTS -4825 DATA 'GSL2 -4830 REM LOCATE START LINE -4831 DATA LDX, NSTART -4832 DATA LDY, NSTART+ -4833 DATA JSR, FINDLINE -4834 DATA STX, PSTART -4835 DATA STY, PSTART+ -4840 REM SAVE PTR TO PRECEEDING LINE -4841 DATA LDXZ, Q -4842 DATA LDYZ, Q+ -4843 DATA STX, PPREV -4844 DATA STY, PPREV+ -4850 REM LOCATE STOP LINE -4851 DATA LDX, NSTOP -4852 DATA LDY, NSTOP+ -4853 DATA JSR, FINDNEXT -4854 DATA STX, PSTOP -4855 DATA STY, PSTOP+ -4860 REM SAVE PTR TO LAST LINE -4861 DATA LDXZ, Q -4862 DATA LDYZ, Q+ -4863 DATA STX, PLAST -4864 DATA STY, PLAST+ -4870 REM CALC. DELTA = PSTART - PSTOP -4871 DATA SEC -4872 DATA LDA, PSTART -4873 DATA SBC, PSTOP -4874 DATA STA, DELTA -4875 DATA LDA, PSTART+ -4876 DATA SBC, PSTOP+ -4877 DATA STA, DELTA+ -4880 DATA RTS -4999 REM +4000 DATA 'LINECNT +4005 DATA LDXZ, TXTTAB +4006 DATA LDYZ, TXTTAB+ +4007 DATA STXZ, P +4008 DATA STYZ, P+ +4009 DATA LDA#, 0 +4010 DATA STA, CNT +4011 DATA STA, CNT+ +4012 DATA STA, CNT.REM +4013 DATA STA, CNT.REM+ +4014 DATA STA, CNT.DATA +4015 DATA STA, CNT.DATA+ +4016 DATA STA, CNT.JUNK +4017 DATA STA, CNT.JUNK+ +4018 DATA STA, CNT.SPC +4019 DATA STA, CNT.SPC+ +4020 DATA 'LOOP +4021 DATA LDA#, 1 +4022 DATA TAY +4023 DATA LDA(Y, P +4024 DATA BNER, NOTDONE +4025 REM COUNT THE TERMINATING NULL PTR +4026 DATA CLC +4027 DATA LDA, CNT.JUNK +4028 DATA ADC#, 2 +4029 DATA STA, CNT.JUNK +4030 DATA LDA, CNT.JUNK+ +4031 DATA ADC#, 0 +4032 DATA STA, CNT.JUNK+ +4034 DATA JMP, DONE: REM FAR BRANCH +4035 DATA 'NOTDONE +4040 DATA INC, CNT +4050 DATA BNER, LC0 +4060 DATA INC, CNT+ +4070 DATA 'LC0 +4080 REM COUNT DIFFERENT TYPES OF LINE +4090 REM 1. SKIP SPACES (UNNECESSARY!?) +4100 DATA LDA#, 3: REM FIRST CHR-1 +4101 DATA TAY +4105 DATA 'LC1 +4107 DATA INY: REM NEXT CHAR +4110 DATA LDA(Y, P: REM LOAD CHAR +4120 DATA BEQR, NEXT: REM END OF LINE +4130 DATA CMP#, $20: REM SPACE +4140 DATA BNER, LC1.1:REM EXIT LOOP +4141 DATA INC, CNT.SPC +4142 DATA BNER, LC1: REM NO OVERFLOW +4143 DATA INC, CNT.SPC+ +4148 DATA JMP, LC1: REM REPEAT +4149 DATA 'LC1.1 +4150 REM 2. CHECK TOKEN +4160 DATA CMP#, $8F: REM REM-TOKEN +4170 DATA BNER, LC2 +4180 DATA INC, CNT.REM +4181 DATA BNER, LC3 +4182 DATA INC, CNT.REM+ +4183 DATA JMP, LC3 +4190 DATA 'LC2 +4200 DATA CMP#, $83: REM DATA-TOKEN +4210 DATA BNER, LC3 +4220 DATA INC, CNT.DATA +4221 DATA BNER, LC3 +4222 DATA INC, CNT.DATA+ +4223 DATA JMP, LC3 +4229 REM 3. SCAN REST OF LINE +4230 DATA 'LC3 +4231 DATA INY: REM NEXT CHAR +4232 DATA LDA(Y, P: REM LOAD CHAR +4233 DATA BEQR, NEXT: REM END OF LINE +4235 DATA CMP#, $20: REM SPACE +4240 DATA BNER, LC3.1 +4241 DATA INC, CNT.SPC +4242 DATA BNER, LC3 +4243 DATA INC, CNT.SPC+ +4248 DATA JMP, LC3 +4250 DATA 'LC3.1 +4251 DATA CMP#, $22: REM QUOTE (") +4252 DATA BNER, LC3 +4260 DATA 'LC3.2: REM SKIP STRING +4261 DATA INY +4262 DATA LDA(Y, P: REM LOAD NXT CHR +4263 DATA BEQR, NEXT: REM END OF LINE +4265 DATA CMP#, $22 +4266 DATA BEQR, LC3: REM QUOTE CLOSED +4267 DATA JMP, LC3.2 +4400 DATA 'NEXT +4401 REM ACCUM. LINE LEN IN JUNK CTR +4410 DATA INY: REM COUNT ZERO +4411 DATA TYA +4412 DATA CLC +4413 DATA ADC, CNT.JUNK +4414 DATA STA, CNT.JUNK +4415 DATA LDA#, 0 +4416 DATA ADC, CNT.JUNK+ +4417 DATA STA, CNT.JUNK+ +4420 REM ADVANCE (DEREF) LINE PTR +4421 DATA LDA#, 0 +4422 DATA TAY +4423 DATA LDA(Y, P +4425 DATA TAX +4426 DATA INY +4427 DATA LDA(Y, P +4428 DATA TAY +4430 DATA STXZ, P +4431 DATA STYZ, P+ +4490 DATA JMP, LOOP +4500 DATA 'DONE +4501 REM PUSH "P" (251) PAST THE END +4502 DATA CLC +4503 DATA LDAZ, P +4504 DATA ADC#, 2 +4505 DATA STAZ, P +4506 DATA BCCR, DONE.1 +4507 DATA INCZ, P+ +4508 DATA 'DONE.1 +4509 REM CALCULATE TOTAL BYTES +4510 DATA SEC +4511 DATA LDAZ, P +4512 DATA SBCZ, TXTTAB +4513 DATA STA, CNT.BS +4514 DATA LDAZ, P+ +4515 DATA SBCZ, TXTTAB+ +4516 DATA STA, CNT.BS+ +4520 REM CALCULATE JUNK = BS - "JUNK" +4525 DATA SEC +4527 DATA LDA, CNT.BS +4530 DATA SBC, CNT.JUNK +4535 DATA STA, CNT.JUNK +4540 DATA LDA, CNT.BS+ +4550 DATA SBC, CNT.JUNK+ +4560 DATA STA, CNT.JUNK+ +4600 REM PRINT COUNTERS AND EXIT +4620 DATA LDX, CNT +4630 DATA LDY, CNT+ +4640 DATA JSR, PRINTNAT +4650 DATA LDX#, S.LINES +4651 DATA LDY#, S.LINES↑ +4652 DATA JSR, PUTSTR +4660 DATA LDX, CNT.REM +4661 DATA LDY, CNT.REM+ +4662 DATA JSR, PRINTNAT +4670 DATA LDX#, S.REM +4671 DATA LDY#, S.REM↑ +4672 DATA JSR, PUTSTR +4680 DATA LDX, CNT.DATA +4681 DATA LDY, CNT.DATA+ +4682 DATA JSR, PRINTNAT +4690 DATA LDX#, S.DATA +4691 DATA LDY#, S.DATA↑ +4692 DATA JSR, PUTSTR +4695 DATA LDA#, 13: REM CR +4696 DATA JSR, CHROUT +4700 DATA LDX, CNT.BS +4701 DATA LDY, CNT.BS+ +4702 DATA JSR, PRINTNAT +4710 DATA LDX#, S.BYTES +4711 DATA LDY#, S.BYTES↑ +4712 DATA JSR, PUTSTR +4720 DATA LDX, CNT.SPC +4721 DATA LDY, CNT.SPC+ +4722 DATA JSR, PRINTNAT +4725 DATA LDX#, S.SPC +4726 DATA LDY#, S.SPC↑ +4727 DATA JSR, PUTSTR +4730 DATA LDX, CNT.JUNK +4731 DATA LDY, CNT.JUNK+ +4732 DATA JSR, PRINTNAT +4735 DATA LDX#, S.JUNK +4736 DATA LDY#, S.JUNK↑ +4737 DATA JSR, PUTSTR +4990 DATA LDA#, 13: REM CR +4991 DATA JMP, CHROUT 5000 DATA 'LINECUT 5001 DATA JSR, PUTISTRLN 5002 DATA .DSZ, "=DELETE LINES" @@ -1196,6 +1199,48 @@ 6765 DATA LDY#, S.ABORT↑ 6766 DATA JSR, PUTSTRLN 6767 DATA RTS +9000 REM +9001 REM BASIC STUB / LOADER +9002 REM +9008 DATA .=, $C000: REM 256 BYTE BUF +9009 REM +9011 DATA .DW, $F00, .DW, 1 +9012 DATA .DB, $9E: REM SYS +9013 DATA .DSZ, " 2100": REM 2049 + 51 9019 REM +9021 DATA .DW, $F00, .DW, 2 +9022 DATA .DB, $99: REM PRINT +9023 DATA .DB, $20 $22: REM ' "' +9024 DATA .DSZ, "LINEUTILS AT 500XX" +9029 REM +9031 DATA .DW, $F00, .DW, 3 +9032 DATA .DB, $A2: REM NEW +9033 DATA .DSZ, "" +9039 REM +9041 DATA .DW, 0 +9049 REM +9095 DATA .LIM, $C033: REM $C000 + 51 +9096 DATA .=, $C033: +9100 REM DST = $C000 +9110 DATA LDX#, 0 +9111 DATA LDY#, $C0 +9112 DATA STXZ, P +9113 DATA STYZ, P+ +9120 REM SRC = $801 +9121 DATA LDX#, 1 +9122 DATA LDY#, 8 +9123 DATA STXZ, Q +9124 DATA STYZ, Q+ +9130 REM LEN = VARTAB - $801 +9131 DATA SEC +9132 DATA LDAZ, VARTAB +9133 DATA SBC#, 1 +9134 DATA TAY +9135 DATA LDAZ, VARTAB+ +9136 DATA SBC#, 8 +9137 DATA TAX +9190 REM MEMCPY (TAIL CALL) +9191 DATA JMP, $BB5: REM $801 + $3B4 +9199 DATA .LIM, $C100 9900 REM 9901 REM ENTRY POINTS: $C350 - $C3B4 9902 REM