psave JSR testdi JSR gtstrA JSR chkcma JSR gtintB LDA &2A STA &54 LDA &2B STA &55 JSR chkcma JSR gtintB LDA &2A STA &56 LDA &2B STA &57 JSR cendB JSR fndlm2 LDA #&80 LDX #0 LDY #6 JSR &FFCE CMP #0 BEQ cntsve TAY LDX #0 LDA &55 CMP &57 BCC psvlp LDA &54 CMP &56 BCS endpsv psvlp LDA (&54,X) JSR &FFD4 INC &54 BNE psvov INC &55 psvov LDA &54 CMP &56 BNE psvlp LDA &55 CMP &57 BNE psvlp endpsv LDA #13 JSR &FFD4 LDA #255 JSR &FFD4 LDA #0 JSR &FFCE RTS cntsve JMP CLFLBK evdmp RTS vdump LDA #0 STA &15 JSR getchA CMP #'~' BEQ vdmphx DEC &1B JMP vdmpov vdmphx DEC &15 vdmpov JSR cendB LDA #'A'-1 STA &59 vdmpnl INC &59 LDA &59 CMP #'z'+1 BCS evdmp ASL STA &5A LDA #4 STA &5B vdmppt LDY #1 LDA (&5A),Y BEQ vdmpnl TAX DEY LDA (&5A),Y STA &5A STX &5B LDA &59 STA &600 LDY #2 LDX #0 vdmpnc LDA (&5A),Y BEQ vdmpne STA &601,X INX INY BNE vdmpnc vdmpne INX STX &36 LDY #0 vdmpl LDA &600,Y JSR &FFEE INY CPY &36 BNE vdmpl CMP #'(' BEQ vdmpar LDA #'=' JSR &FFEE LDX #eval JSR clbROM BEQ vdmpst TAY LDX #cntost JSR clbROM JSR vdmpr JSR &FFE7 JMP vdmppt vdmpst LDA #'"' JSR &FFEE JSR vdmpr LDA #'"' JSR &FFEE JSR &FFE7 JMP vdmppt vdmpr LDA &15 BPL vdmpro LDA #'&' JSR &FFEE vdmpro LDX #&FF vdmprl INX CPX &36 BEQ evdmpr LDA &600,X JSR vdmpco JSR &FFEE JMP vdmprl evdmpr RTS vdmpco CMP #32 BCC vdmpcc CMP #127 BCS vdmpcc RTS vdmpcc TAY TXA PHA LDA #'<' JSR &FFEE STY &2A LDA #0 STA &2B JSR plnum0 PLA TAX LDA #'>' RTS vdmpar INY INY LDA (&5A),Y STA &5C DEC &5C INY TYA CLC ADC &5A STA &5D LDA &5B ADC #0 STA &5E LDY #0 STY &2C STY &2D dmarlp LDA (&5D),Y INY SEC SBC #1 STA &2A LDA (&5D),Y SBC #0 STA &2B TYA PHA LDY #&40 LDX #cntost JSR clbROM JSR vdmpr PLA TAY INY CPY &5C BCS edarlp LDA #',' JSR &FFEE JMP dmarlp edarlp JSR pflmss STR ") " BRK JMP vdmppt eidump RTS idump LDA #0 STA &15 JSR getchA CMP #'~' BEQ idmphx DEC &1B JMP idmpov idmphx DEC &15 idmpov JSR cendB LDA #255 STA &59 idumpl INC &59 LDA &59 CMP #27 BEQ eidump ASL ASL STA &5A LDA #4 STA &5B LDA &59 ORA #&40 JSR &FFEE LDA #'%' JSR &FFEE LDA #'=' JSR &FFEE LDY #0 idmpl2 LDA (&5A),Y STA &2A,Y INY CPY #4 BNE idmpl2 LDY #&40 LDX #cntost JSR clbROM JSR vdmpr JSR &FFE7 JMP idumpl cassyn JMP clsynt case JSR gtintA JSR getchB CMP #&8C BNE cassyn LDA &2B ORA &2C ORA &2D BNE casels LDX &2A BEQ casels LDY &1B caslp LDA (&19),Y INY CMP #13 BEQ casels CMP #&3A BEQ casels CMP #&8B BEQ casels CMP #&F2 BNE caslp DEX BNE caslp DEY STY &1B casfnd JSR getchB CMP #&F2 BNE casnpc JSR csexpc caslp2 JSR getchB CMP #13 BNE caslp2 DEC &1B JMP cendB casnpc CBRK DFB 29 ASC "No such PROC" BRK casels LDY &1B caslp3 LDA (&19),Y INY CMP #&8B BEQ caself CMP #13 BNE caslp3 CBRK DFB 64 ASC "CASE range" BRK caself LDA &19 STA &B LDA &1A STA &C STY &A LDX #exelse JMP clbROM csexpc LDX #exproc JMP clbROM mgntfn JMP CLFLBK merge JSR testdi JSR gtstrA JSR cendB LDX #0 LDY #6 LDA #&40 JSR &FFCE TAY BEQ mgntfn STY &60 JSR &FFD7 CMP #13 BEQ mgeok JMP nbasfl mgeok LDX #&FF mglp INX LDY &60 JSR &FFD7 BCS mgeof STA &700,X CMP #13 BNE mglp CPX #4 BCC mglp LDA &700 STA &2B LDA &701 STA &2A LDA #13 JSR &FFEE JSR plnum5 LDA &700 STA &2B LDA &701 STA &2A JSR srchln BCS ntnwl JSR pflmss STR " Overwritten" BRK LDA &700 STA &55 STA &57 LDA &701 STA &54 STA &56 JSR fndlm2 JSR eraslp ntnwl LDA &700 STA &2B LDA &701 STA &2A LDY #3 LDX #inslin JSR clbROM JMP mgeok mgeof JSR &FFE7 LDY &60 LDA #0 JMP &FFCE find JSR testdi JSR fdstr1 JSR cendB LDA #0 STA &54 JMP fndrpl fdstr1 JSR gtstrA LDA &36 CMP #100 BCS fndlng LDA #0 STA &37 LDA #6 STA &38 LDY #&FF STY &3C INY STY &3B LDA &600 CMP #'`' BNE fdstro LDX #0 fdtokl LDA &601,X STA &600,X INX CMP #13 BNE fdtokl LDX #tklne0 JSR clbROM fdstro LDA #&E6 STA &2A LDA #&5E STA &2B LDA #&60 STA &2C LDA &20E PHA LDA #&2A STA &20E LDA &20F PHA LDA #0 STA &20F STA &5E LDY #0 fdstrl LDA &600,Y STA &680,Y PHA LDX #ptoken JSR clbROM INY PLA CMP #13 BNE fdstrl DEY STY &55 PLA STA &20F PLA STA &20E DEC &5E RTS fndlng CBRK DFB 19 ASC "String too long" BRK esrch RTS fndrpl LDA #4 STA &56 LDA #0 STA &57 STA &5F STA &5D LDA &18 STA &58 JSR settop frmain BIT &FF BMI esrch LDY #1 LDA (&57),Y BMI esrch LDY &56 JSR instr BCS samlin JMP snxtln samlin STY &59 LDA &5F BNE srcpa LDY #1 LDA (&57),Y STA &2B INY LDA (&57),Y STA &2A JSR plnum5 INC &5F srcpa JSR srcp2 LDA #'[' JSR &FFEE LDA &59 CLC ADC &55 STA &59 JSR srcp2 LDA #']' JSR &FFEE LDA &54 BEQ fndcnt JMP jrpcnt fndcnt JMP frmain srcp2 LDY &56 CPY &59 BCS epfind LDA (&57),Y CMP #'"' BNE srcnq LDA &5D EOR #1 STA &5D LDA #'"' srcnq PHA LDA &5D BEQ srcpt PLA JSR &FFEE JMP srcpov srcpt PLA CMP #&8D BNE srcnl JSR gttkln JSR plnum0 INC &56 INC &56 INC &56 JMP srcpov srcnl LDX #ptoken JSR clbROM srcpov INC &56 JMP srcp2 epfind RTS snxtln LDY &5F BEQ fndnwl LDY #4 pelie LDA (&57),Y INY CMP #13 BNE pelie DEY STY &59 JSR srcp2 JSR &FFE7 fndnwl LDY #3 LDA (&57),Y CLC ADC &57 STA &57 LDA &58 ADC #0 STA &58 LDA #4 STA &56 LDA #0 STA &5F JMP frmain jrpcnt JMP repcnt grepl JSR testdi JSR repstr JSR cendB LDA #128 STA &54 JMP fndrpl srepl JSR testdi JSR repstr JSR cendB LDA #129 STA &54 JMP fndrpl repstr JSR fdstr1 JSR chkcma JSR gtstrB LDA &36 CMP #100 BCC rpstro JMP fndlng rpstro LDY #&FF STY &3C INY STY &3B LDA #0 STA &37 LDA #6 STA &38 LDA &600 CMP #'`' BNE rpsto2 LDX #0 rpstdl LDA &601,X STA &600,X INX CMP #13 BNE rpstdl LDX #tklne0 JSR clbROM rpsto2 LDX #0 repstl LDA &600,X INX CMP #13 BNE repstl DEX STX &5A RTS repcnt CMP #128 BEQ replac JSR &FFE0 AND #223 CMP #'Y' BEQ replac JSR delrep JSR srcp2 JMP frmain delrep LDY &5E INY LDA #127 delrpl JSR &FFEE DEY BPL delrpl LDA &56 SEC SBC &55 STA &56 RTS replac JSR delrep LDY #0 LDX #0 replc1 LDA (&57),Y STA &700,X INX INY CPY &56 BNE replc1 LDA &5A BEQ repovr LDY #0 replc2 LDA &600,Y STA &700,X INX INY CPY &5A BNE replc2 repovr LDA &55 CLC ADC &56 TAY replc3 LDA (&57),Y STA &700,X INX INY CMP #13 BNE replc3 LDA &702 STA &2A LDA &701 STA &2B LDY #4 LDX #inslin JSR clbROM LDA &59 SEC SBC &55 CLC ADC &5A STA &59 JSR srcp2 repe JMP fndcnt instr DEY STY &2A instrl LDX #0 LDY &2A instl2 INY INC &2A LDA (&57),Y CMP #13 BEQ einstr CMP &680,X BNE instrl INX LDA &55 CMP #1 BEQ instok instl3 INY LDA (&57),Y CMP #13 BEQ einstr CMP &680,X BNE instrl INX CPX &55 BNE instl3 INY TYA SEC SBC &55 TAY instok SEC RTS einstr CLC RTS gttkln LDY &56 INY LDA (&57),Y ASL ASL TAX AND #&C0 INY EOR (&57),Y STA &2A TXA ASL ASL INY EOR (&57),Y STA &2B RTS cmline LDA &12 SEC SBC #2 STA mtop LDA &13 SBC #0 STA mtop+1 LDA &18 STA mbase1+1 LDY #0 STY mbase1 STY mflag JSR mscan1 LDA &18 STA mbase1+1 STA mbase2+1 LDY #0 STY mbase1 STY mbase2 JSR mscan2 JSR mlnend RTS mscan1 JSR mchktp BEQ emscn1 JSR mscn2 LDY #0 BEQ mscan1 emscn1 RTS mscn2 INY LDX mflag BEQ mnchng LDX #0 STX mflag LDA (mbase1),Y ORA #&80 STA (mbase1),Y mnchng INY INY mnxtbt INY LDA (mbase1),Y CMP #13 BNE mtests mnxtln TYA CLC ADC mbase1 STA mbase1 BCC ms2 INC mbase1+1 ms2 RTS mtests CMP #'"' BNE mtstrm JSR mstrng BEQ mnxtbt mtstrm CMP #&F4 BEQ mflgln CMP #&8B ; ELSE ACTS AS IF REM BEQ mflgln mtsstr CMP #'*' BNE mtsdta JSR mchkos BEQ mflgln BNE mnxtbt mtsdta CMP #&DC BNE testif JSR mkline mflgln INC mflag LDY #3 LDA (mbase1),Y TAY BNE mnxtln testif CMP #&E7 BEQ mflgup mtston CMP #&EE BNE mtsdef mflgup INC mflag BNE mnxtbt mtsdef CMP #&DD BNE mtlntk JSR mkline BNE mnxtbt mtlntk CMP #&8D BNE mtscas JSR mlntok JMP mnxtbt mtscas STY &2A CMP #'C' BNE mntcas INY LDA (mbase1),Y CMP #'A' BNE mntcas INY LDA (mbase1),Y CMP #'S' BNE mntcas INY LDA (mbase1),Y CMP #'E' BEQ mtscs2 CMP #'.' BNE mntcas mtscs2 INY LDA (mbase1),Y CMP #'=' BEQ mntcas CMP #32 BEQ mtscs2 JMP mflgup mntcas LDY &2A JMP mnxtbt mkline STY mynew LDY #1 LDA (mbase1),Y ORA #&80 STA (mbase1),Y LDY mynew RTS mstrng INY LDA (mbase1),Y CMP #13 BEQ missq CMP #&22 BNE mstrng RTS missq DEY CMP #13 RTS mchkos CPY #4 BEQ echkos STY myold DEY mc1 LDA (mbase1),Y CMP #58 BEQ mc2 CMP #&F5 ; REPEAT IS OK BEQ mc2 CMP #32 BNE mc2 DEY CPY #3 BNE mc1 mc2 PHP LDY myold PLP echkos RTS mlntok INY LDA (mbase1),Y STA mwork AND #&30 ASL A ASL A STA mwork+1 INY LDA (mbase1),Y EOR mwork+1 STA &2A LDA mwork ASL A ASL A ASL A ASL A STA mwork+1 INY LDA (mbase1),Y EOR mwork+1 ORA #&80 STA &2B LDA mbase1 STA mbase2 LDA mbase1+1 STA mbase2+1 STY myold LDY #2 LDA (mbase1),Y CMP &2A DEY LDA (mbase1),Y ORA #&80 SBC &2B BCC mno LDA &18 STA mbase1+1 DEY STY mbase1 mmatch LDY #2 LDA (mbase1),Y CMP &2A BNE mno DEY LDA (mbase1),Y ORA #&80 CMP &2B BEQ myes mno LDY #3 LDA (mbase1),Y TAY JSR mnxtln LDA mbase1+1 CMP mtop+1 BCC mmatch LDA mbase1 CMP mtop BCS mnolin JMP mmatch myes STA (mbase1),Y mnolin LDY myold LDA mbase2 STA mbase1 LDA mbase2+1 STA mbase1+1 RTS mscan2 JSR mchktp BNE mlnbld RTS mlnbld LDY #0 STY mynew LDA (mbase1),Y JSR mupdte AND #&7F JSR mupdte JSR mupdte mcode JSR mwhlln JSR mchktp BEQ mendln LDY #1 LDA (mbase1),Y BMI mstpln LDY #3 LDA (mbase1),Y SEC SBC #4 ADC mynew BCS mstpln LDA #&3A BNE mcode mstpln JSR mendln JMP mscan2 mendln LDA mynew LDY #3 STA (mbase2),Y CLC ADC mbase2 STA mbase2 BCC me1 INC mbase2+1 me1 RTS mwhlln JSR mupdte CMP #13 BNE mwhlln JMP mnxtln mupdte INY STY myold LDY mynew STA (mbase2),Y INY STY mynew LDY myold LDA (mbase1),Y RTS mchktp LDA mbase1 CMP mtop BNE mnteql LDA mbase1+1 CMP mtop+1 mnteql RTS mlnend LDY #0 LDA #13 STA (mbase2),Y INY LDA #255 STA (mbase2),Y TYA SEC ADC mbase2 STA &12 LDA mbase2+1 ADC #0 STA &13 RTS mline JSR testdi JSR cendA JSR settop LDA &12 SEC SBC #0 STA &2A PHA LDA &13 SBC &18 STA &2B PHA BNE mlc LDA &2A CMP #2 BNE mlc PLA PLA JMP noprgm mlc JSR pflmss ASC "OLD program size = " BRK JSR plnum0 JSR &FFE7 JSR pflmss ASC "Multiline..." DW 13 JSR pack JSR cmline JSR pflmss ASC "Compacting.." DW 13 JSR pack PLA STA &2B PLA STA &2A LDA &12 SEC SBC #0 STA &2C LDA &13 SBC &18 STA &2D LDA &2A SEC SBC &2C STA &2A LDA &2B SBC &2D STA &2B JSR pflmss ASC "Bytes saved = " BRK JSR plnum0 JSR &FFE7 LDA &2C STA &2A LDA &2D STA &2B JSR pflmss ASC "NEW program size = " BRK JSR plnum0 JSR &FFE7 LDX #Bimmed JMP clbROM syntax JSR testdi JSR gtstrA JSR cendB LDA &600 CMP #'%' BNE syncom DEC &36 LDA #>vartab STA &39 LDA #table STA &39 LDA #scrx LDY #scry LDY #