Home » Archimedes archive » Acorn User » AU 1997-10 A.adf » Extras » Apple][e/PD/PIC/!PICbasic/!RunImage
Apple][e/PD/PIC/!PICbasic/!RunImage
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1997-10 A.adf » Extras |
Filename: | Apple][e/PD/PIC/!PICbasic/!RunImage |
Read OK: | ✔ |
File size: | 5633 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM PIC 16CXX series assembler 20REM Accepts tokenised BASIC files 30PRINT"PIC Assembler V0.98 (C)SPROW 1997"' 40*KEY 9 CHAIN"ADFS::RiscHD.$.Language.BasicV.PICs.K2Project.K2sauce" 50: 60REM Globals to reset on power up,the rest are reset for each new file 70source$="":REM The filename to read from 80loaded%=FALSE:REM Boolean flag as to whether a valid program is 'loaded' 90opcount%=0:REM No. PIC opcodes in DATA statements 100keycount%=8:REM Number of supported direct mode commands 110PROCreset:REM These are all reset for every file too 120: 130REM Count the table length 140REPEAT:READbit$,mnemonic$,meaning$:opcount%=opcount%+1:UNTILmnemonic$="[[[" 150RESTORE 160allow%=128 170DIM bit$(opcount%),mnemonic$(opcount%),meaning$(opcount%+keycount%) 180DIM jumpto%(28),token$(127),keyword$(keycount%) 190DIM string$(allow% DIV8),integer%(allow% DIV4),real(allow%),name$(allow%*2) 200: 210FORdata%=1TOopcount% 220READbit$(data%),mnemonic$(data%),meaning$(data%) 230IFLEFT$(mnemonic$(data%),1)<>delta$ THENjumpto%(1+ASC(delta$)-64)=data%:jumpto%(ASC(LEFT$(mnemonic$(data%),1))-64)=data%:delta$=LEFT$(mnemonic$(data%),1) 240NEXT:REM Build a table linking 1st mnemonic letters to array elements 250: 260REPEAT 270READtoken$:tokennum%=EVAL("&"+LEFT$(token$,2)) 280token$(tokennum%-128)=RIGHT$(token$,LEN(token$)-2) 290UNTILLEFT$(token$,2)="FF" 300: 310FORdata%=1TOkeycount% 320READkeyword$(data%),meaning$(opcount%+data%) 330NEXT 340: 350ONERRORREPORT:PRINTERL:CLOSE#0 360REPEAT 370INPUTLINE">"command$ 380command$=FNstripleft(command$):found%=FALSE 390IFLEFT$(command$,4)="HELP" THENfound%=FNhelp(RIGHT$(command$,LEN(command$)-4)) 400IFLEFT$(command$,5)="CHAIN" THENfound%=FNchain(RIGHT$(command$,LEN(command$)-5)) 410IFLEFT$(command$,4)="LOAD" THENfound%=FNload(RIGHT$(command$,LEN(command$)-4)):found%=TRUE 420IFLEFT$(command$,4)="LIST" THENfound%=FNlist(RIGHT$(command$,LEN(command$)-4)) 430IFLEFT$(command$,4)="QUIT" THENfound%=FNquit(RIGHT$(command$,LEN(command$)-4)) 440IFLEFT$(command$,3)="RUN" THENfound%=FNrun(RIGHT$(command$,LEN(command$)-3)) 450IFLEFT$(command$,3)="CLS" THENfound%=FNcls(RIGHT$(command$,LEN(command$)-3)):found%=TRUE 460IFLEFT$(command$,4)="STOP" THENfound%=NOT(FNstop(RIGHT$(command$,LEN(command$)-4))) 470IFLEFT$(command$,1)="*" THENfound%=TRUE:OSCLI(RIGHT$(command$,LEN(command$)-1)) 480IFfound%=FALSE ANDLENcommand$>0 THENPRINT'"Command not supported" 490UNTILFNnowild(command$," ")="QUIT" 500END 510: 520DEFFNquit(parameter$) 530IFFNnowild(parameter$," ")<>"" THENPRINT'"Syntax error":=TRUE 540OSCLI("SAVE from098 "+STR$~(code%)+" +"+STR$~(2*FNfindvalue("P%"))+" 0 FFFFF800") 550=TRUE 560: 570DEFFNrun(parameter$) 580IFFNnowild(parameter$," ")<>"" THENPRINT'"Syntax error":=TRUE 590IFloaded%=FALSE THENPRINT'"No program loaded":=TRUE 600=FNchain(CHR$34+source$+CHR$34) 610: 620DEFFNhelp(parameter$) 630LOCALdata%,found%,mnemonic$ 640parameter$=FNnowild(parameter$," ") 650REM Asking for help in general 660IFparameter$="" THENPRINT"Help is available on the following:"'"HELP <assembler mnemonic>"'"HELP <command>"'"HELP .":=TRUE 670REM Look through keywords first 680IFparameter$="." THENVDU14:PRINT"Help with direct mode keywords:" 690FORdata%=1TOkeycount% 700IFparameter$=LEFT$(keyword$(data%),LEN(parameter$)) ORparameter$="." THENPRINTkeyword$(data%);" - ";meaning$(opcount%+data%):found%=TRUE:REM All help support 710NEXT 720REM Is it a mnemonic? 730IFparameter$="." THENPRINT'"Help with the assembler:" 740parameter$=FNucase(parameter$) 750FORdata%=1TO(opcount%-1) 760mnemonic$=FNfindwild(1,mnemonic$(data%)," ") 770IFparameter$=LEFT$(mnemonic$,LEN(parameter$)) ORparameter$="." THENPRINTmnemonic$(data%);" - ";meaning$(data%):found%=TRUE:REM All help support 780NEXT 790IFfound%=FALSE THENPRINT'"No help available on that topic" ELSEVDU15 800=TRUE 810: 820DEFFNload(parameter$) 830parameter$=FNstripright(FNstripleft(parameter$)):PROCreset 840REM Check for opening ditto 850IFLEFT$(parameter$,1)<>CHR$34 THENPRINT'"No such variable":=FALSE 860REM Check for closing ditto 870lastditto%=INSTR(RIGHT$(parameter$,LEN(parameter$)-1),CHR$34) 880IFlastditto%=0 THENPRINT'"Missing "+CHR$34:=FALSE 890REM Look for anymore text on the line 900IF(lastditto%+1)<>LENparameter$ THENPRINT'"Syntax error":=FALSE 910in%=OPENIN MID$(parameter$,2,LEN(parameter$)-2) 920IFin%=0 THENPRINT'"File not found":=FALSE 930IFBGET#in%<>13 THENPRINT'"Bad program":loaded%=FALSE:CLOSE#in%:=FALSE 940PTR#in%=(EXT#in%)-1 950IFBGET#in%<>255 THENPRINT'"Bad program":loaded%=FALSE:CLOSE#in%:=FALSE 960loaded%=TRUE:CLOSE#in%:source$=MID$(parameter$,2,LEN(parameter$)-2) 970=TRUE 980: 990DEFFNlist(parameter$) 1000REM List a program onto the screen 1010LOCALlinenum$,linenum%,minline%,maxline%,rangehi$,rangelo$,byte% 1020IFloaded%=FALSE THENPRINT'"No program loaded":=TRUE 1030REM Read any options given 1040parameter$=FNnowild(parameter$," ") 1050rangelo$=FNfindwild(1,parameter$,","):rangehi$=FNfindwild(2+LENrangelo$,parameter$,",") 1060REM Now work out which lines are reqd 1070IFrangehi$="" ANDINSTR(parameter$,",")=0 THENrangehi$=rangelo$ 1080IFrangehi$="" ANDINSTR(parameter$,",")<>0 THENrangehi$="&8000" 1090IFparameter$="," THENrangelo$="0" 1100IFrangehi$+rangelo$="" THENmaxline%=&8000 ELSEminline%=EVALrangelo$:maxline%=EVALrangehi$ 1110pointer%=1:in%=OPENINsource$:PTR#in%=1:VDU11:REM Backup one line,and skip past opening &0D 1120REPEAT 1130byte%=BGET#in%:REM The hi byte of the line number 1140linenum%=(byte%*256)+BGET#in%:linenum$=STRING$(5-LEN(STR$(linenum%))," ")+STR$(linenum%) 1150REM BeEVALsilent if not in listing range 1160IF(linenum%>=minline%)AND(linenum%<=maxline%) THENPRINT'linenum$; 1170pointer%=pointer%+3:PTR#in%=pointer% 1180IF(linenum%<minline%)OR(linenum%>maxline%) THENREPEAT:byte%=BGET#in%:UNTILbyte%=13:PTR#in%=PTR#in%-1:pointer%=PTR#in% 1190REPEAT 1200byte%=BGET#in% 1210IFbyte%<127 THENVDUbyte% ELSEPRINT;FNunpacktoken(byte%); 1220pointer%=pointer%+1 1230UNTILbyte%=13 ORpointer%>=(EXT#in%-1) 1240UNTILpointer%>=(EXT#in%-1) ORlinenum%>maxline% 1250PRINT:CLOSE#in% 1260=TRUE 1270: 1280DEFFNchain(parameter$) 1290LOCALwork$,result%,maxline%,data%,length% 1300IFFNload(parameter$)=FALSE THEN=TRUE 1310in%=OPENINsource$:length%=(EXT#in%)-2:maxline%=1 1320REM Now,repeatedly select the interpretter 1330REPEAT 1340 work$="":PTR#in%=PTR#in%+2+SGNmaxline%:maxline%=BGET#in%-4 1350 FORdata%=1TOmaxline%:work$=work$+CHR$(BGET#in%):NEXT 1360 IFINSTR("[]",LEFT$(work$,1))<>0 THENinasm%=SGN(ASCwork$-ASC"]") 1370 IFinasm%=FALSE THENresult%=FNinbasic(work$) ELSEresult%=FNinasm(work$) 1380UNTILPTR#in%=length% ORresult%=0 1390CLOSE#in% 1400=TRUE 1410: 1420REM ****INTERPRETTERS**** 1430: 1440DEFFNinbasic(string$) 1450REM Only keywords allowed outside assembler are REM,FOR,TO,STEP,DIM,NEXT,CLS,STOP,END 1460LOCALbyte%,token$,work$ 1470byte%=ASC(LEFT$(string$,1)) 1480work$=FNfindwild(1,string$,":") 1490IFbyte%>127 ANDbyte%<>&8D THENtoken$=FNunpacktoken(byte%) ELSEtoken$=CHR$byte% 1500IFtoken$="REM" ORINSTR(":]"+CHR$13,token$)<>0 THEN=TRUE:REM Empty and comment line support 1510IFtoken$="=" THENPRINT'"No FN":=FALSE 1520IFLENtoken$=1 THENPROCassignvariable(work$):=TRUE 1530IFtoken$="NEXT" THEN=FNnext(work$) 1540IFtoken$="FOR" THEN=FNfor(work$) 1550IFtoken$="DIM" THEN=FNdim(work$) 1560IFtoken$="CLS" THEN=FNcls(work$) 1570IFtoken$="STOP" THEN=FNstop(work$) 1580IFtoken$="END" THEN=FALSE ELSEPRINT'"Command not supported":=FALSE 1590: 1600DEFFNcls(string$) 1610work$=FNnowild(RIGHT$(string$,LENstring$-1)," ") 1620IFwork$<>"" THENPRINT'"Syntax error":=FALSE ELSECLS:=TRUE 1630: 1640DEFFNstop(string$) 1650work$=FNnowild(RIGHT$(string$,LENstring$-1)," ") 1660IFwork$<>"" THENPRINT'"Syntax error" ELSEPRINT'"STOP" 1670=FALSE 1680: 1690DEFFNnext(string$) 1700LOCALstep%,limit%,for%,name$,work$ 1710REM Check for 'NEXT,' and 'NEXT <variable>' constructs 1720work$=FNnowild(RIGHT$(string$,LENstring$-1)," ") 1730IFfor$="" ORINSTR(work$,",")<>0 THENPRINT'"No FOR":=FALSE 1740name$=FNfindwild(1,for$,",") 1750IFwork$<>"" ANDname$<>work$ THENPRINT'"Can't Match FOR":=FALSE 1760REM Get the FOR parameters from the stack 1770limit%=EVAL(FNfindwild(2+LENname$,for$,":")) 1780step%=EVAL(FNfindwild(3+LENname$+LEN(STR$limit%),for$,";")) 1790pointer%=EVAL(RIGHT$(for$,LENfor$-INSTR(for$,";"))) 1800for%=FNfindvalue(name$)+step% 1810PROCassignvariable(name$+"="+STR$(for%)) 1820IFfor%>limit% THENfor$="":pointer%=PTR#in% ELSEPTR#in%=pointer% 1830=TRUE 1840: 1850DEFFNfor(string$) 1860LOCALlimit%,step%,lttr$ 1870REM Assume a STEP of 1 if not told otherwise 1880IFfor$<>"" THENPRINT'"Too many FORs":=FALSE 1890IFINSTR(string$,CHR$&88)=0 THENstring$=string$+CHR$&88+"1" 1900IFINSTR(string$,CHR$&B8)=0 THENPRINT'"No TO":=FALSE 1910string$=FNstripleft(RIGHT$(string$,LENstring$-1)) 1920REM Add variable to table and FOR stack 1930lttr$=FNfindwild(1,string$,CHR$&B8):PROCassignvariable(lttr$) 1940limit%=FNsetnum(FNfindwild(2+LEN(lttr$),string$,CHR$&88)) 1950step%=FNsetnum(RIGHT$(string$,LENstring$-INSTR(string$,CHR$&88))) 1960REM Of the form "variable,limit.step;addr" 1970for$=FNfindwild(1,string$,"=")+","+STR$limit%+":"+STR$step%+";"+STR$PTR#in% 1980=TRUE 1990: 2000DEFFNdim(string$) 2010REM Reserve memory,returning TRUE if successful 2020LOCALname$,amount$ 2030string$=FNstripleft(RIGHT$(string$,LENstring$-1)) 2040name$=FNfindwild(1,string$,"% "):REM Either is the separator 2050IFMID$(string$,1+LENname$,1)="%" THENname$=name$+"%" 2060amount$=FNfindwild(1+LENname$,string$,":") 2070IFname$="" ANDamount$="" THENPRINT'"Bad DIM":=FALSE 2080IFname$="" ORamount$="" THENPRINT'"No such variable":=FALSE 2090DIMcode% 2*FNsetnum(amount$):REM Get twice as much due to 14 bit program bus 2100PROCassignvariable(name$+"="+STR$code%) 2110=TRUE 2120: 2130DEFFNinasm(string$) 2140LOCALdata%,byte%,found%,initial%,mnemonic$,work$ 2150REM Tokens found inside the assembler are merely unpacked 2160FORdata%=1TOLENstring$ 2170byte%=ASC(MID$(string$,data%,1)) 2180IFbyte%>127 ANDbyte%<>&8D THENstring$=LEFT$(string$,data%-1)+FNunpacktoken(byte%)+RIGHT$(string$,LENstring$-data%) 2190NEXT 2200IFLEFT$(string$,1)="." THEN=FNassignlabel(string$) 2210IFLEFT$(string$,1)="[" THENstring$=RIGHT$(string$,LENstring$-1) 2220work$=FNucase(string$):REM Speeds up mnemonic testing later 2230IFINSTR(work$,"OPT")=1 THEN=FNoption(string$) 2240IFINSTR(work$,"EQU")=1 THENPRINT'"Silly":=FALSE:REM Not allowed data on the program bus,silly 2250initial%=ASC(LEFT$(work$,1)) 2260IFinitial%>ASC"Z" ORinitial%<ASC"A" THEN=TRUE:REM Empty and comment line support 2270REM Use lookup table until 'mnemonic$=string in program',then work out the parameters 2280found%=jumpto%(initial%-64)-1 2290REPEAT:found%=found%+1 2300mnemonic$=LEFT$(mnemonic$(found%),INSTR(mnemonic$(found%)," ")-1) 2310UNTILmnemonic$=LEFT$(work$,LEN(mnemonic$)) ORfound%=jumpto%(1+initial%-64) 2320IFmnemonic$<>LEFT$(work$,LEN(mnemonic$)) THENPRINT'"No such mnemonic":=FALSE 2330=FNasmparms(found%,string$) 2340: 2350DEFFNasmparms(pointer%,string$) 2360LOCALwork$,length%,parameter$,number%,byte$,lttr$ 2370REM Isolate the parameters,if any 2380length%=LEN(FNfindwild(1,mnemonic$(pointer%)," ")) 2390parameter$=FNstripleft(RIGHT$(string$,LENstring$-length%)) 2400REM Instructions requiring literals NEED to have a hash after them 2410IFMID$(mnemonic$(pointer%),4,2)="LW" ANDLEFT$(parameter$,1)<>"#" THENPRINT'"Missing #":=FALSE 2420REM Based on the template,how many parameters SHOULD there be 2430lttr$=FNnowild(RIGHT$(mnemonic$(pointer%),3)," ,") 2440number%=LENlttr$:parameter$=FNnowild(parameter$,"#") 2450IFnumber%=2 ANDINSTR(parameter$,",")=0 THENPRINT'"Missing ,":=FALSE 2460IFnumber%<>0 ANDFNnowild(parameter$," ")="" THENPRINT'"No such variable":=FALSE 2470IF(option%AND1)<>1 THEN=FNtomemory("0","") 2480byte$=FNnowild(bit$(pointer%)," ") 2490REM Now interpret and substitute the values 2500IFnumber%=2 THENwork$=FNfindwild(1,parameter$,","):byte$=FNoverlay(FNsetnum(work$),LEFT$(lttr$,1),byte$) 2510IFnumber%<>0 THENwork$=FNfindwild(number%+LENwork$,parameter$,"\:"):byte$=FNoverlay(FNsetnum(work$),MID$(lttr$,number%,1),byte$) 2520=FNtomemory(byte$,string$) 2530: 2540DEFFNtomemory(byte$,string$) 2550REM Alter pseudo pointers and put in memory 2560PROCassignvariable("P%=P%+1"):PROCassignvariable("O%=O%+1") 2570IFstring$="" THEN=TRUE 2580LOCALbyte% 2590byte%=FNsetbin(byte$):P%=FNfindvalue("P%")-1 2600REM Show the object & source 2610PRINTFNpad(4,STR$~P%);" ";FNpad(4,STR$~(byte%));" ";FNfindwild(1,string$,"\") 2620IFINSTR(string$,"\")<>0 THENPRINTSPC(11);"\";RIGHT$(string$,LENstring$-INSTR(string$,"\")) 2630REM Calculate where it goes in normal 8 bit terms 2640?(code%+(P%*2))=byte% MOD256:?(code%+(P%*2)+1)=byte% DIV256 2650=TRUE 2660: 2670DEFFNoption(string$) 2680REM This is just used to control printing at present 2690option%=FNfindvalue(RIGHT$(string$,LENstring$-3)) 2700IFoption%>7 THENPRINT'"Bad option":=FALSE 2710=TRUE 2720: 2730REM ****GENERAL UTILITIES**** 2740: 2750DEFPROCreset 2760REM These are reset every time a new file is loaded 2770pointer%=0:REM Is where in the BASIC file we are 2780inasm%=FALSE:REM Boolean flag as to whether in BASIC or inside []'s 2790for$="":REM Holds details of the FOR...NEXT loop 2800code%=0:REM Where the result is held in memory 2810s%=0:i%=0:r%=0:n%=0:REM None yet 2820delta$="@":REM Holds the 1st letter of the last mnemonic change found 2830option%=0:REM Assembler option 'OPT' 2840ENDPROC 2850: 2860DEFPROCdump 2870LOCALs%,i%,r%,data% 2880IFn%=0 THENENDPROC 2890PRINT"There are ";n%;" variables defined..." 2900REPEAT 2910PRINTname$(data%);" is a"; 2920IFRIGHT$(name$(data%),1)="$" THENPRINT" string=",string$(s%):s%=s%+1 2930IFRIGHT$(name$(data%),1)="%" THENPRINT"n integer=",integer%(i%):i%=i%+1 2940IFRIGHT$(name$(data%),1)<>"$" ANDRIGHT$(name$(data%),1)<>"%" THENPRINT" real number=",real(r%):r%=r%+1 2950data%=data%+1 2960UNTILdata%=n% 2970ENDPROC 2980: 2990DEFFNcount(lttr$,string$) 3000REM Returns the maximum number allowed for a parameter 3010LOCALdata%,length% 3020FORdata%=1TOLEN(string$) 3030IFMID$(string$,data%,1)=lttr$ THENlength%=length%+1 3040NEXT 3050=length% 3060: 3070DEFFNunpacktoken(tokennum%) 3080REM Convert token to meaningful text 3090LOCALbyte%,data%,mask% 3100IFtokennum%<>&8D THEN=token$(tokennum%-128) 3110REM It was a line number 3120byte%=BGET#in% 3130data%=(byte% AND(32+16))*4:REM Shift up 2 places and discard 3140data%=data% EOR BGET#in% 3150mask%=(byte% AND(8+4))*16:REM Shift up 2 places more and discard 3160mask%=mask% EOR BGET#in% 3170=data%+(mask%*256) 3180: 3190REM ****STRING UTILITIES**** 3200: 3210DEFFNpad(length%,string$) 3220=STRING$(length%-LENstring$,"0")+string$ 3230: 3240DEFFNfindwild(pointer%,string$,separator$) 3250REM Find all the text from pointer% to the chosen separator(s) 3260LOCALlength%,found%,data% 3270FORdata%=pointer%TOLENstring$ 3280IFINSTR(separator$,MID$(string$,data%,1))<>0 ANDfound%=FALSE THENfound%=data% 3290NEXT 3300IFfound%=FALSE THENfound%=LENstring$+1:REM Not found at all 3310=MID$(string$,pointer%,found%-pointer%) 3320: 3330DEFFNpophex(string$,pointer%) 3340REM Gets the hex number that follows 3350LOCALdata%,length% 3360FORdata%=(pointer%+1)TOLENstring$ 3370IFlength%=0 ANDINSTR("0123456789ABCDEF",MID$(string$,data%,1))=0 THENlength%=data% 3380NEXT 3390=MID$(string$,pointer%,length%-pointer%) 3400: 3410DEFFNstripright(string$) 3420REM Performs RTRIM$ 3430LOCALdata%,pointer% 3440FORdata%=LEN(string$)TO1 STEP-1 3450IFpointer%=0 ANDMID$(string$,data%,1)<>" " THENpointer%=data% 3460NEXT 3470=LEFT$(string$,pointer%) 3480: 3490DEFFNstripleft(string$) 3500REM Performs LTRIM$ 3510LOCALdata%,pointer% 3520FORdata%=1TOLEN(string$) 3530IFpointer%=0 ANDMID$(string$,data%,1)<>" " THENpointer%=data% 3540NEXT 3550=RIGHT$(string$,LEN(string$)-pointer%+1) 3560: 3570DEFFNnowild(string$,separator$) 3580REM Gets rid of ALL occurences of the chosen separator(s) 3590LOCALwork$,data% 3600FORdata%=1TOLENstring$ 3610IFINSTR(separator$,MID$(string$,data%,1))=0 THENwork$=work$+MID$(string$,data%,1) 3620NEXT 3630=work$ 3640: 3650DEFFNucase(string$) 3660REM Alphabetics => upper case (ASCii values of a,z are 97,122) 3670LOCALdata%,work$,byte% 3680FORdata%=1TOLEN(string$) 3690byte%=ASC(MID$(string$,data%,1))AND&DF 3700IFbyte%>ASC"Z" ORbyte%<ASC"A" THENwork$=work$+MID$(string$,data%,1) ELSEwork$=work$+CHR$byte% 3710NEXT 3720=work$ 3730: 3740REM ****NUMERICAL UTILITIES**** 3750: 3760DEFFNoverlay(over%,lttr$,string$) 3770REM Overlays the binary conversion of over% in lttr$'s place 3780LOCALbinary$,data% 3790FORdata%=(FNcount(lttr$,string$)-1)TO0STEP-1 3800binary$=binary$+STR$(SGN(over%AND(2^data%))) 3810NEXT 3820=LEFT$(string$,INSTR(string$,lttr$)-1)+binary$+RIGHT$(string$,LEN(string$)-INSTR(string$,lttr$)-LEN(binary$)+1) 3830: 3840DEFFNfindvalue(string$) 3850IFRIGHT$(string$,1)="$" THEN=string$(FNallocate(string$)) 3860IFRIGHT$(string$,1)="%" THEN=integer%(FNallocate(string$)) 3870=real(FNallocate(string$)) 3880: 3890DEFPROCassignvariable(string$) 3900REM Used to define variables outside the assembler 3910LOCALdata%,lttr$,work$ 3920work$=FNstripleft(FNfindwild(1,string$,"=")) 3930work$=FNstripright(work$):REM Now contains the variable name 3940REM First,search for absolutely forbidden characters 3950FORdata%=1TO(LEN(work$)-1) 3960lttr$=MID$(work$,data%,1) 3970IFINSTR(CHR$34+" !#%&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ORASClttr$>122 THENPRINT'"Mistake":ENDPROC 3980NEXT 3990REM Now,check it doesn't start with any of these 4000lttr$=LEFT$(work$,1) 4010IFINSTR("0123456789",lttr$)<>0 THENPRINT'"Syntax error":ENDPROC 4020IFlttr$="$" THENPRINT'"Don't use the '$' operator":ENDPROC 4030REM Guess the type time 4040lttr$=RIGHT$(work$,1) 4050IFINSTR(CHR$34+" !#&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ORASClttr$>122 THENPRINT'"Mistake":ENDPROC 4060REM Locate/create slot passing 'string$' as the expression 4070string$=RIGHT$(string$,LEN(string$)-INSTR(string$,"=")) 4080IFlttr$="$" THENstring$(FNallocate(work$))=FNsetstr(string$) 4090IFlttr$="%" THENinteger%(FNallocate(work$))=FNsetnum(string$) 4100IFlttr$<>"%" ANDlttr$<>"$" THENreal(FNallocate(work$))=FNsetnum(string$) 4110ENDPROC 4120: 4130DEFFNassignlabel(string$) 4140REM Used by the assembler to assign labels 4150LOCALdata%,lttr$,work$ 4160string$=FNstripleft(RIGHT$(string$,LEN(string$)-1)) 4170IF(option%AND1)=1 THENPRINTFNpad(4,STR$~FNfindvalue("P%"));SPC(7);".";string$:=TRUE 4180string$=FNstripright(string$) 4190REM First,search for absolutely forbidden characters 4200FORdata%=1TO(LEN(string$)-1) 4210lttr$=MID$(string$,data%,1) 4220IFINSTR(CHR$34+" !#%&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ORASClttr$>122 THENPRINT'"Mistake":=FALSE 4230NEXT 4240REM Now,check it doesn't start with any of these 4250IFINSTR("$0123456789",LEFT$(string$,1))<>0 THENPRINT'"Syntax error":=FALSE 4260REM And it can't end with a dollar 4270lttr$=RIGHT$(string$,1) 4280IFlttr$="$" THENPRINT'"Type mismatch":=FALSE 4290IFINSTR(CHR$34+" !#&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 THENPRINT'"Mistake":=FALSE 4300work$=string$+"="+STR$(FNfindvalue("P%")):REM Means work$ contains "name=P%" now 4310IFlttr$="%" THENinteger%(FNallocate(string$))=FNsetnum(work$) ELSEreal(FNallocate(string$))=FNsetnum(work$) 4320=TRUE 4330: 4340DEFFNsetnum(string$) 4350REM Returns a number evaluation including binary 4360string$=RIGHT$(string$,LEN(string$)-INSTR(string$,"=")) 4370string$=FNnowild(string$," ") 4380IFLEFT$(string$,1)="%" THEN=FNsetbin(string$) 4390=EVAL(FNexpandnum(string$)) 4400: 4410DEFFNsetstr(string$) 4420REM Returns a string evaluation 4430=EVAL(FNexpandstr(string$)) 4440: 4450DEFFNsetbin(string$) 4460REM Returns binary => decimal 4470LOCALdata%,result%,lttr$ 4480REM accepts nos. with or without leading '%' symbol 4490string$=FNnowild(RIGHT$(string$,LEN(string$)-INSTR(string$,"%"))," ") 4500IFLENstring$>14 THENPRINT'"Too big":=0 4510IFLENstring$=0 THENPRINT'"Bad Binary":=0 4520FORdata%=1TOLENstring$ 4530lttr$=MID$(string$,data%,1) 4540IFlttr$="1" THENresult%=result%OR(2^(LENstring$-data%)) 4550NEXT 4560=result% 4570: 4580DEFFNallocate(string$) 4590REM Return the slot number if found,or allocate a new one if NOT found 4600LOCALdata%,sFind%,iFind%,rFind%,type%,found% 4610sFind%=TRUE:iFind%=TRUE:rFind%=TRUE:found%=TRUE 4620type%=ASC"r":REM Assume a real number 4630IFRIGHT$(string$,1)="$" THENtype%=ASC"s" 4640IFRIGHT$(string$,1)="%" THENtype%=ASC"i" 4650FORdata%=0TOn% 4660rFind%=rFind%+1:REM Assume a real number 4670IFRIGHT$(name$(data%),1)="$" THENsFind%=sFind%+1:rFind%=rFind%-1 4680IFRIGHT$(name$(data%),1)="%" THENiFind%=iFind%+1:rFind%=rFind%-1 4690IFstring$=name$(data%) THENfound%=EVAL(CHR$type%+"Find%") 4700NEXT 4710IFfound%<>TRUE THEN=found% 4720name$(n%)=string$:n%=n%+1 4730IFtype%=ASC"s" THENs%=s%+1:=s%-1:REM s% points to NEXT free slot 4740IFtype%=ASC"i" THENi%=i%+1:=i%-1:REM i% points to NEXT free slot 4750r%=r%+1:=r%-1:REM r% points to NEXT free slot 4760: 4770DEFFNexpandstr(string$) 4780REM Substitutes variables from my list to numbers 4790REM Not yet!! 4800=string$ 4810: 4820DEFFNexpandnum(string$) 4830REM Substitute in numbers and my variables 4840LOCALpointer%,result$,work$,byte$ 4850pointer%=1 4860REPEAT 4870byte$=MID$(string$,pointer%,1) 4880IFbyte$="&" THENwork$=FNpophex(string$,pointer%):pointer%=pointer%+LENwork$ 4890IFbyte$="%" THENwork$=STR$(FNsetbin(RIGHT$(string$,LENstring$-pointer%))):pointer%=LENstring$+1 4900IFASC(byte$)>127 THENwork$=FNunpacktoken(ASCbyte$):pointer%=pointer%+1 4910IFINSTR("0123456789^()*-+/. ",byte$)<>0 THENwork$=byte$:pointer%=pointer%+1 4920IFINSTR("0123456789&%^()*-+/. ",byte$)=0 THENwork$=FNfindwild(pointer%,string$,"^*-+/ "):pointer%=pointer%+LENwork$:work$=STR$(FNfindvalue(work$)) 4930result$=result$+work$ 4940UNTILpointer%>LENstring$ 4950=result$ 4960: 4970REM ****TABLES OF TEMPLATES**** 4980: 4990REM Mnemonics allowed,where f=file,d=destination,b=bit pattern,k=constant 5000DATA"00 0111 dfff ffff","ADDWF f,d","Add W and f" 5010DATA"00 0101 dfff ffff","ANDWF f,d","AND W and f" 5020DATA"11 111x kkkk kkkk","ADDLW k ","Add literal to W" 5030DATA"11 1001 kkkk kkkk","ANDLW k ","And literal and W" 5040DATA"01 00bb bfff ffff","BCF f,b","Bit clear f" 5050DATA"01 01bb bfff ffff","BSF f,b","Bit set f" 5060DATA"01 10bb bfff ffff","BTFSC f,b","Bit test,skip if clear " 5070DATA"01 11bb bfff ffff","BTFSS f,b","Bit test,skip if set" 5080DATA"10 0kkk kkkk kkkk","CALL k ","Call subroutine" 5090DATA"00 0000 0110 0100","CLRWDT ","Clear watch dog timer" 5100DATA"00 0001 0xxx xxxx","CLRW ","Clear W" 5110DATA"00 0001 1fff ffff","CLRF f ","Clear f" 5120DATA"00 1001 dfff ffff","COMF f,d","Complement f" 5130DATA"00 1011 dfff ffff","DECFSZ f,d","Decrement f, skip if zero" 5140DATA"00 0011 dfff ffff","DECF f,d","Decrement f" 5150DATA"10 1kkk kkkk kkkk","GOTO k ","Goto address k" 5160DATA"11 1000 kkkk kkkk","IORLW k ","Inclusive OR literal and W" 5170DATA"00 1111 dfff ffff","INCFSZ f,d","Increment f,skip if zero" 5180DATA"00 1010 dfff ffff","INCF f,d","Increment f" 5190DATA"00 0100 dfff ffff","IORWF f,d","Inclusive OR W and f" 5200DATA"00 1000 dfff ffff","MOVF f,d","Move f" 5210DATA"00 0000 1fff ffff","MOVWF f ","Move W to f" 5220DATA"11 00xx kkkk kkkk","MOVLW k ","Move Literal to W" 5230DATA"00 0000 0xx0 0000","NOP ","No operation" 5240DATA"00 0000 0110 0010","OPTION ","Load OPTION register with W" 5250DATA"00 1101 dfff ffff","RLF f,d","Rotate left f" 5260DATA"00 1100 dfff ffff","RRF f,d","Rotate right f" 5270DATA"00 0000 0000 1001","RETFIE ","Return from Interrupt" 5280DATA"11 01xx kkkk kkkk","RETLW k ","Return with literal in W" 5290DATA"00 0000 0000 1000","RETURN ","Return from subroutine" 5300DATA"00 0010 dfff ffff","SUBWF f,d","Subtract W from f" 5310DATA"00 1110 dfff ffff","SWAPF f,d","Swap left & right nybbles of f" 5320DATA"00 0000 0110 0011","SLEEP ","Go into stand by mode" 5330DATA"11 110x kkkk kkkk","SUBLW k ","Subtract W from literal" 5340DATA"00 0000 0110 0fff","TRIS f ","Tristate port f" 5350DATA"00 0110 dfff ffff","XORWF f,d","Exclusive OR W and f" 5360DATA"11 1010 kkkk kkkk","XORLW k ","Exclusive OR literal and W" 5370DATA"[[[","[[[","EOT marker CHR$91 is ASC'Z'+1 which is a '['" 5380: 5390REM BASIC II tokens 5400DATA "80AND","81DIV","82EOR","83MOD","84OR","85ERROR","86LINE","87OFF","88STEP","89SPC" 5410DATA "8ATAB","8BELSE","8CTHEN","8EOPENIN","8FPTR","90PAGE","91TIME","92LOMEM","93HIMEM" 5420DATA "94ABS","95ACS","96ADVAL","97ASC","98ASN","99ATN","9ABGET","9BCOS","9CCOUNT","9DDEG" 5430DATA "9EERL","9FERR","A0EVAL","A1EXP","A2EXT","A3FALSE","A4FN","A5GET","A6INKEY","A7INSTR(" 5440DATA "A8INT","A9LEN","AALN","ABLOG","ACNOT","ADOPENUP","AEOPENOUT","AFPI","B0POINT(","B1POS" 5450DATA "B2RAD","B3RND","B4SGN","B5SIN","B6SQR","B7TAN","B8TO","B9TRUE","BAUSR","BBVAL" 5460DATA "BCVPOS","BDCHR$","BEGET$","BFINKEY$","C0LEFT$(","C1MID$(","C2RIGHT$(","C3STR$" 5470DATA "C4STRING$(","C5EOF","C6AUTO","C7DELETE","C8LOAD","C9LIST","CANEW","CBOLD","CCRENUMBER" 5480DATA "CDSAVE","CFPTR","D0PAGE","D1TIME","D2LOMEM","D3HIMEM","D4SOUND","D5BPUT","D6CALL" 5490DATA "D7CHAIN","D8CLEAR","D9CLOSE","DACLG","DBCLS","DCDATA","DDDEF","DEDIM","DFDRAW","E0END" 5500DATA "E1ENDPROC","E2ENVELOPE","E3FOR","E4GOSUB","E5GOTO","E6GCOL","E7IF","E8INPUT","E9LET" 5510DATA "EALOCAL","EBMODE","ECMOVE","EDNEXT","EEON","EFVDU","F0PLOT","F1PRINT","F2PROC","F3READ" 5520DATA "F4REM","F5REPEAT","F6REPORT","F7RESTORE","F8RETURN","F9RUN","FASTOP","FBCOLOUR","FCTRACE" 5530DATA "FDUNTIL","FEWIDTH","FFOSCLI" 5540: 5550REM Direct mode keywords 5560DATA HELP,"Gives details of available help" 5570DATA CHAIN"filename","Loads and assembles the PIC source code" 5580DATA LOAD"filename","Loads the PIC source code" 5590DATA "LIST [<from><,to>]","Optionally list program <from>...<to>" 5600DATA RUN,"Clears variables then executes program" 5610DATA QUIT,"Ends the PIC assembler" 5620DATA CLS,"Clears the screen" 5630DATA STOP,"Stops what's happening"
� PIC 16CXX series assembler #� Accepts tokenised BASIC files )�"PIC Assembler V0.98 (C)SPROW 1997"' (G*KEY 9 CHAIN"ADFS::RiscHD.$.Language.BasicV.PICs.K2Project.K2sauce" 2: <G� Globals to reset on power up,the rest are reset for each new file F*source$="":� The filename to read from PFloaded%=�:� Boolean flag as to whether a valid program is 'loaded' Z3opcount%=0:� No. PIC opcodes in DATA statements d:keycount%=8:� Number of supported direct mode commands n3�reset:� These are all reset for every file too x: �� Count the table length �C�:�bit$,mnemonic$,meaning$:opcount%=opcount%+1:�mnemonic$="[[[" �� �allow%=128 �E� bit$(opcount%),mnemonic$(opcount%),meaning$(opcount%+keycount%) �1� jumpto%(28),token$(127),keyword$(keycount%) �I� string$(allow% �8),integer%(allow% �4),real(allow%),name$(allow%*2) �: ��data%=1�opcount% �1�bit$(data%),mnemonic$(data%),meaning$(data%) ��mnemonic$(data%),1)<>delta$ �jumpto%(1+�(delta$)-64)=data%:jumpto%(�(�mnemonic$(data%),1))-64)=data%:delta$=�mnemonic$(data%),1) �D�:� Build a table linking 1st mnemonic letters to array elements �: � '�token$:tokennum%=�("&"+�token$,2)) .token$(tokennum%-128)=�token$,�(token$)-2) "��token$,2)="FF" ,: 6�data%=1�keycount% @-�keyword$(data%),meaning$(opcount%+data%) J� T: ^�:�:�#0 h� r�">"command$ |*command$=�stripleft(command$):found%=� �@�command$,4)="HELP" �found%=�help(�command$,�(command$)-4)) �B�command$,5)="CHAIN" �found%=�chain(�command$,�(command$)-5)) �I�command$,4)="LOAD" �found%=�load(�command$,�(command$)-4)):found%=� �@�command$,4)="LIST" �found%=�list(�command$,�(command$)-4)) �@�command$,4)="QUIT" �found%=�quit(�command$,�(command$)-4)) �>�command$,3)="RUN" �found%=�run(�command$,�(command$)-3)) �G�command$,3)="CLS" �found%=�cls(�command$,�(command$)-3)):found%=� �C�command$,4)="STOP" �found%=�(�stop(�command$,�(command$)-4))) �;�command$,1)="*" �found%=�:�(�command$,�(command$)-1)) �5�found%=� ��command$>0 ��'"Command not supported" �!��nowild(command$," ")="QUIT" �� �: ݤquit(parameter$) 5�nowild(parameter$," ")<>"" ��'"Syntax error":=� J�("SAVE from098 "+�~(code%)+" +"+�~(2*�findvalue("P%"))+" 0 FFFFF800") &=� 0: :ݤrun(parameter$) D5�nowild(parameter$," ")<>"" ��'"Syntax error":=� N(�loaded%=� ��'"No program loaded":=� X=�chain(�34+source$+�34) b: lݤhelp(parameter$) v�data%,found%,mnemonic$ �¶meter$=�nowild(parameter$," ") � � Asking for help in general �s�parameter$="" ��"Help is available on the following:"'"HELP <assembler mnemonic>"'"HELP <command>"'"HELP .":=� �!� Look through keywords first �;�parameter$="." ��14:�"Help with direct mode keywords:" ��data%=1�keycount% ���parameter$=�keyword$(data%),�(parameter$)) �parameter$="." ��keyword$(data%);" - ";meaning$(opcount%+data%):found%=�:� All help support �� �� Is it a mnemonic? �1�parameter$="." ��'"Help with the assembler:" �!parameter$=�ucase(parameter$) ��data%=1�(opcount%-1) �/mnemonic$=�findwild(1,mnemonic$(data%)," ") ~�parameter$=�mnemonic$,�(parameter$)) �parameter$="." ��mnemonic$(data%);" - ";meaning$(data%):found%=�:� All help support � 7�found%=� ��'"No help available on that topic" ��15 =� *: 4ݤload(parameter$) >9parameter$=�stripright(�stripleft(parameter$)):�reset H� Check for opening ditto R1�parameter$,1)<>�34 ��'"No such variable":=� \� Check for closing ditto f1lastditto%=��parameter$,�(parameter$)-1),�34) p&�lastditto%=0 ��'"Missing "+�34:=� z'� Look for anymore text on the line �5�(lastditto%+1)<>�parameter$ ��'"Syntax error":=� �(in%=� �parameter$,2,�(parameter$)-2) �!�in%=0 ��'"File not found":=� �2�#in%<>13 ��'"Bad program":loaded%=�:�#in%:=� ��#in%=(�#in%)-1 �3�#in%<>255 ��'"Bad program":loaded%=�:�#in%:=� �:loaded%=�:�#in%:source$=�parameter$,2,�(parameter$)-2) �=� �: �ݤlist(parameter$) �$� List a program onto the screen �@�linenum$,linenum%,minline%,maxline%,rangehi$,rangelo$,byte% �(�loaded%=� ��'"No program loaded":=� � Read any options given ¶meter$=�nowild(parameter$," ") Wrangelo$=�findwild(1,parameter$,","):rangehi$=�findwild(2+�rangelo$,parameter$,",") $'� Now work out which lines are reqd .7�rangehi$="" ��parameter$,",")=0 �rangehi$=rangelo$ 87�rangehi$="" ��parameter$,",")<>0 �rangehi$="&8000" B!�parameter$="," �rangelo$="0" LP�rangehi$+rangelo$="" �maxline%=&8000 �minline%=�rangelo$:maxline%=�rangehi$ VSpointer%=1:in%=�source$:�#in%=1:�11:� Backup one line,and skip past opening &0D `� j0byte%=�#in%:� The hi byte of the line number tJlinenum%=(byte%*256)+�#in%:linenum$=�5-�(�(linenum%))," ")+�(linenum%) ~'� Be�silent if not in listing range �;�(linenum%>=minline%)�(linenum%<=maxline%) ��'linenum$; �&pointer%=pointer%+3:�#in%=pointer% �b�(linenum%<minline%)�(linenum%>maxline%) ��:byte%=�#in%:�byte%=13:�#in%=�#in%-1:pointer%=�#in% �� �byte%=�#in% �.�byte%<127 ��byte% ��;�unpacktoken(byte%); �pointer%=pointer%+1 �"�byte%=13 �pointer%>=(�#in%-1) �+�pointer%>=(�#in%-1) �linenum%>maxline% ��:�#in% �=� �: ݤchain(parameter$) )�work$,result%,maxline%,data%,length% �load(parameter$)=� �=� -in%=�source$:length%=(�#in%)-2:maxline%=1 (,� Now,repeatedly select the interpretter 2� <6 work$="":�#in%=�#in%+2+�maxline%:maxline%=�#in%-4 F- �data%=1�maxline%:work$=work$+�(�#in%):� P0 �"[]",�work$,1))<>0 �inasm%=�(�work$-�"]") Z> �inasm%=� �result%=�inbasic(work$) �result%=�inasm(work$) d��#in%=length% �result%=0 n �#in% x=� �: �� ****INTERPRETTERS**** �: �ݤinbasic(string$) �W� Only keywords allowed outside assembler are REM,FOR,TO,STEP,DIM,NEXT,CLS,STOP,END ��byte%,token$,work$ �byte%=�(�string$,1)) �"work$=�findwild(1,string$,":") �E�byte%>127 �byte%<>&8D �token$=�unpacktoken(byte%) �token$=�byte% �L�token$="REM" ��":]"+�13,token$)<>0 �=�:� Empty and comment line support ��token$="=" ��'"No FN":=� �)�token$=1 ��assignvariable(work$):=� �!�token$="NEXT" �=�next(work$) �token$="FOR" �=�for(work$) �token$="DIM" �=�dim(work$) �token$="CLS" �=�cls(work$) "!�token$="STOP" �=�stop(work$) ,3�token$="END" �=� ��'"Command not supported":=� 6: @ݤcls(string$) J+work$=�nowild(�string$,�string$-1)," ") T)�work$<>"" ��'"Syntax error":=� ��:=� ^: hݤstop(string$) r+work$=�nowild(�string$,�string$-1)," ") |*�work$<>"" ��'"Syntax error" ��'"STOP" �=� �: �ݤnext(string$) �"�step%,limit%,for%,name$,work$ �8� Check for 'NEXT,' and 'NEXT <variable>' constructs �+work$=�nowild(�string$,�string$-1)," ") �+�for$="" ��work$,",")<>0 ��'"No FOR":=� �name$=�findwild(1,for$,",") �4�work$<>"" �name$<>work$ ��'"Can't Match FOR":=� �+� Get the FOR parameters from the stack �*limit%=�(�findwild(2+�name$,for$,":")) �4step%=�(�findwild(3+�name$+�(�limit%),for$,";")) �'pointer%=�(�for$,�for$-�for$,";"))) for%=�findvalue(name$)+step% &�assignvariable(name$+"="+�(for%)) 8�for%>limit% �for$="":pointer%=�#in% ��#in%=pointer% &=� 0: :ݤfor(string$) D�limit%,step%,lttr$ N.� Assume a STEP of 1 if not told otherwise X#�for$<>"" ��'"Too many FORs":=� b/�string$,�&88)=0 �string$=string$+�&88+"1" l#�string$,�&B8)=0 ��'"No TO":=� v,string$=�stripleft(�string$,�string$-1)) �)� Add variable to table and FOR stack �:lttr$=�findwild(1,string$,�&B8):�assignvariable(lttr$) �6limit%=�setnum(�findwild(2+�(lttr$),string$,�&88)) �4step%=�setnum(�string$,�string$-�string$,�&88))) �,� Of the form "variable,limit.step;addr" �Cfor$=�findwild(1,string$,"=")+","+�limit%+":"+�step%+";"+Ï#in% �=� �: �ݤdim(string$) �1� Reserve memory,returning TRUE if successful ��name$,amount$ �,string$=�stripleft(�string$,�string$-1)) �=name$=�findwild(1,string$,"% "):� Either is the separator .�string$,1+�name$,1)="%" �name$=name$+"%" +amount$=�findwild(1+�name$,string$,":") )�name$="" �amount$="" ��'"Bad DIM":=� 2�name$="" �amount$="" ��'"No such variable":=� *K�code% 2*�setnum(amount$):� Get twice as much due to 14 bit program bus 4%�assignvariable(name$+"="+�code%) >=� H: Rݤinasm(string$) \0�data%,byte%,found%,initial%,mnemonic$,work$ f;� Tokens found inside the assembler are merely unpacked p�data%=1��string$ zbyte%=�(�string$,data%,1)) �b�byte%>127 �byte%<>&8D �string$=�string$,data%-1)+�unpacktoken(byte%)+�string$,�string$-data%) �� �,�string$,1)="." �=�assignlabel(string$) �2�string$,1)="[" �string$=�string$,�string$-1) �<work$=�ucase(string$):� Speeds up mnemonic testing later �'�work$,"OPT")=1 �=�option(string$) �N�work$,"EQU")=1 ��'"Silly":=�:� Not allowed data on the program bus,silly �initial%=�(�work$,1)) �F�initial%>�"Z" �initial%<�"A" �=�:� Empty and comment line support �W� Use lookup table until 'mnemonic$=string in program',then work out the parameters �!found%=jumpto%(initial%-64)-1 ��:found%=found%+1 �;mnemonic$=�mnemonic$(found%),�mnemonic$(found%)," ")-1) B�mnemonic$=�work$,�(mnemonic$)) �found%=jumpto%(1+initial%-64) =�mnemonic$<>�work$,�(mnemonic$)) ��'"No such mnemonic":=� =�asmparms(found%,string$) $: . ݤasmparms(pointer%,string$) 81�work$,length%,parameter$,number%,byte$,lttr$ B#� Isolate the parameters,if any L3length%=�(�findwild(1,mnemonic$(pointer%)," ")) V5parameter$=�stripleft(�string$,�string$-length%)) `D� Instructions requiring literals NEED to have a hash after them jJ�mnemonic$(pointer%),4,2)="LW" ��parameter$,1)<>"#" ��'"Missing #":=� t?� Based on the template,how many parameters SHOULD there be ~/lttr$=�nowild(�mnemonic$(pointer%),3)," ,") �5number%=�lttr$:parameter$=�nowild(parameter$,"#") �4�number%=2 ��parameter$,",")=0 ��'"Missing ,":=� �D�number%<>0 ��nowild(parameter$," ")="" ��'"No such variable":=� �'�(option%�1)<>1 �=�tomemory("0","") �%byte$=�nowild(bit$(pointer%)," ") �-� Now interpret and substitute the values �`�number%=2 �work$=�findwild(1,parameter$,","):byte$=�overlay(�setnum(work$),�lttr$,1),byte$) �w�number%<>0 �work$=�findwild(number%+�work$,parameter$,"\:"):byte$=�overlay(�setnum(work$),�lttr$,number%,1),byte$) �=�tomemory(byte$,string$) �: �ݤtomemory(byte$,string$) �-� Alter pseudo pointers and put in memory 9�assignvariable("P%=P%+1"):�assignvariable("O%=O%+1") �string$="" �=� �byte% .byte%=�setbin(byte$):P%=�findvalue("P%")-1 (� Show the object & source 2E�pad(4,�~P%);" ";�pad(4,�~(byte%));" ";�findwild(1,string$,"\") <B�string$,"\")<>0 ��(11);"\";�string$,�string$-�string$,"\")) F3� Calculate where it goes in normal 8 bit terms P;?(code%+(P%*2))=byte% �256:?(code%+(P%*2)+1)=byte% �256 Z=� d: nݤoption(string$) x6� This is just used to control printing at present �,option%=�findvalue(�string$,�string$-3)) �!�option%>7 ��'"Bad option":=� �=� �: �� ****GENERAL UTILITIES**** �: ���reset �5� These are reset every time a new file is loaded �2pointer%=0:� Is where in the BASIC file we are �Ainasm%=�:� Boolean flag as to whether in BASIC or inside []'s �2for$="":� Holds details of the FOR...NEXT loop �0code%=0:� Where the result is held in memory �"s%=0:i%=0:r%=0:n%=0:� None yet Gdelta$="@":� Holds the 1st letter of the last mnemonic change found &option%=0:� Assembler option 'OPT' � ": , ��dump 6�s%,i%,r%,data% @�n%=0 �� J,�"There are ";n%;" variables defined..." T� ^�name$(data%);" is a"; h:��name$(data%),1)="$" ��" string=",string$(s%):s%=s%+1 r=��name$(data%),1)="%" ��"n integer=",integer%(i%):i%=i%+1 |T��name$(data%),1)<>"$" ��name$(data%),1)<>"%" ��" real number=",real(r%):r%=r%+1 �data%=data%+1 � �data%=n% �� �: �ݤcount(lttr$,string$) �8� Returns the maximum number allowed for a parameter ��data%,length% ��data%=1��(string$) �/�string$,data%,1)=lttr$ �length%=length%+1 �� �=length% �: �ݤunpacktoken(tokennum%) &� Convert token to meaningful text �byte%,data%,mask% +�tokennum%<>&8D �=token$(tokennum%-128) &� It was a line number 0byte%=�#in% :<data%=(byte% �(32+16))*4:� Shift up 2 places and discard Ddata%=data% � �#in% N@mask%=(byte% �(8+4))*16:� Shift up 2 places more and discard Xmask%=mask% � �#in% b=data%+(mask%*256) l: v� ****STRING UTILITIES**** �: �ݤpad(length%,string$) �#=�length%-�string$,"0")+string$ �: �+ݤfindwild(pointer%,string$,separator$) �@� Find all the text from pointer% to the chosen separator(s) ��length%,found%,data% ��data%=pointer%��string$ �>�separator$,�string$,data%,1))<>0 �found%=� �found%=data% �� �3�found%=� �found%=�string$+1:� Not found at all �'=�string$,pointer%,found%-pointer%) �: ݤpophex(string$,pointer%) &� Gets the hex number that follows �data%,length% �data%=(pointer%+1)��string$ *G�length%=0 ��"0123456789ABCDEF",�string$,data%,1))=0 �length%=data% 4� >(=�string$,pointer%,length%-pointer%) H: Rݤstripright(string$) \� Performs RTRIM$ f�data%,pointer% p�data%=�(string$)�1 �-1 z7�pointer%=0 ��string$,data%,1)<>" " �pointer%=data% �� �=�string$,pointer%) �: �ݤstripleft(string$) �� Performs LTRIM$ ��data%,pointer% ��data%=1��(string$) �7�pointer%=0 ��string$,data%,1)<>" " �pointer%=data% �� �$=�string$,�(string$)-pointer%+1) �: � ݤnowild(string$,separator$) �;� Gets rid of ALL occurences of the chosen separator(s) �work$,data% �data%=1��string$ D�separator$,�string$,data%,1))=0 �work$=work$+�string$,data%,1) $� . =work$ 8: Bݤucase(string$) L@� Alphabetics => upper case (ASCii values of a,z are 97,122) V�data%,work$,byte% `�data%=1��(string$) j"byte%=�(�string$,data%,1))�&DF tN�byte%>�"Z" �byte%<�"A" �work$=work$+�string$,data%,1) �work$=work$+�byte% ~� � =work$ �: �!� ****NUMERICAL UTILITIES**** �: �"ݤoverlay(over%,lttr$,string$) �>� Overlays the binary conversion of over% in lttr$'s place ��binary$,data% �)�data%=(�count(lttr$,string$)-1)�0�-1 �)binary$=binary$+�(�(over%�(2^data%))) �� �Z=�string$,�string$,lttr$)-1)+binary$+�string$,�(string$)-�string$,lttr$)-�(binary$)+1) �: ݤfindvalue(string$) 2��string$,1)="$" �=string$(�allocate(string$)) 3��string$,1)="%" �=integer%(�allocate(string$)) =real(�allocate(string$)) (: 2��assignvariable(string$) <4� Used to define variables outside the assembler F�data%,lttr$,work$ P.work$=�stripleft(�findwild(1,string$,"=")) Z=work$=�stripright(work$):� Now contains the variable name d6� First,search for absolutely forbidden characters n�data%=1�(�(work$)-1) xlttr$=�work$,data%,1) �K秽34+" !#%&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ��lttr$>122 ��'"Mistake":� �� �2� Now,check it doesn't start with any of these �lttr$=�work$,1) �0�"0123456789",lttr$)<>0 ��'"Syntax error":� �0�lttr$="$" ��'"Don't use the '$' operator":� �� Guess the type time �lttr$=�work$,1) �J秽34+" !#&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ��lttr$>122 ��'"Mistake":� �<� Locate/create slot passing 'string$' as the expression �.string$=�string$,�(string$)-�string$,"=")) �:�lttr$="$" �string$(�allocate(work$))=�setstr(string$) �;�lttr$="%" �integer%(�allocate(work$))=�setnum(string$) D�lttr$<>"%" �lttr$<>"$" �real(�allocate(work$))=�setnum(string$) � : "ݤassignlabel(string$) ,,� Used by the assembler to assign labels 6�data%,lttr$,work$ @.string$=�stripleft(�string$,�(string$)-1)) JC�(option%�1)=1 ��pad(4,�~�findvalue("P%"));�(7);".";string$:=� T string$=�stripright(string$) ^6� First,search for absolutely forbidden characters h�data%=1�(�(string$)-1) rlttr$=�string$,data%,1) |L秽34+" !#%&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ��lttr$>122 ��'"Mistake":=� �� �2� Now,check it doesn't start with any of these �8�"$0123456789",�string$,1))<>0 ��'"Syntax error":=� �$� And it can't end with a dollar �lttr$=�string$,1) �$�lttr$="$" ��'"Type mismatch":=� �?秽34+" !#&'()*+,-./:;<=>?@[\]^`",lttr$)<>0 ��'"Mistake":=� �Nwork$=string$+"="+�(�findvalue("P%")):� Means work$ contains "name=P%" now �d�lttr$="%" �integer%(�allocate(string$))=�setnum(work$) �real(�allocate(string$))=�setnum(work$) �=� �: �ݤsetnum(string$) �2� Returns a number evaluation including binary .string$=�string$,�(string$)-�string$,"=")) string$=�nowild(string$," ") '�string$,1)="%" �=�setbin(string$) &=�(�expandnum(string$)) 0: :ݤsetstr(string$) D!� Returns a string evaluation N=�(�expandstr(string$)) X: bݤsetbin(string$) l� Returns binary => decimal v�data%,result%,lttr$ �5� accepts nos. with or without leading '%' symbol �;string$=�nowild(�string$,�(string$)-�string$,"%"))," ") � �string$>14 ��'"Too big":=0 �"�string$=0 ��'"Bad Binary":=0 ��data%=1��string$ �lttr$=�string$,data%,1) �4�lttr$="1" �result%=result%�(2^(�string$-data%)) �� �=result% �: �ݤallocate(string$) �H� Return the slot number if found,or allocate a new one if NOT found �,�data%,sFind%,iFind%,rFind%,type%,found% 'sFind%=�:iFind%=�:rFind%=�:found%=� %type%=�"r":� Assume a real number ��string$,1)="$" �type%=�"s" ��string$,1)="%" �type%=�"i" *�data%=0�n% 4*rFind%=rFind%+1:� Assume a real number >:��name$(data%),1)="$" �sFind%=sFind%+1:rFind%=rFind%-1 H:��name$(data%),1)="%" �iFind%=iFind%+1:rFind%=rFind%-1 R3�string$=name$(data%) �found%=�(�type%+"Find%") \� f�found%<>� �=found% pname$(n%)=string$:n%=n%+1 z<�type%=�"s" �s%=s%+1:=s%-1:� s% points to NEXT free slot �<�type%=�"i" �i%=i%+1:=i%-1:� i% points to NEXT free slot �/r%=r%+1:=r%-1:� r% points to NEXT free slot �: �ݤexpandstr(string$) �3� Substitutes variables from my list to numbers �� Not yet!! �=string$ �: �ݤexpandnum(string$) �,� Substitute in numbers and my variables �!�pointer%,result$,work$,byte$ �pointer%=1 �� byte$=�string$,pointer%,1) H�byte$="&" �work$=�pophex(string$,pointer%):pointer%=pointer%+�work$ Q�byte$="%" �work$=�(�setbin(�string$,�string$-pointer%))):pointer%=�string$+1 $A�(byte$)>127 �work$=�unpacktoken(�byte$):pointer%=pointer%+1 .F�"0123456789^()*-+/. ",byte$)<>0 �work$=byte$:pointer%=pointer%+1 8��"0123456789&%^()*-+/. ",byte$)=0 �work$=�findwild(pointer%,string$,"^*-+/ "):pointer%=pointer%+�work$:work$=�(�findvalue(work$)) Bresult$=result$+work$ L�pointer%>�string$ V=result$ `: j!� ****TABLES OF TEMPLATES**** t: ~K� Mnemonics allowed,where f=file,d=destination,b=bit pattern,k=constant �3�"00 0111 dfff ffff","ADDWF f,d","Add W and f" �3�"00 0101 dfff ffff","ANDWF f,d","AND W and f" �8�"11 111x kkkk kkkk","ADDLW k ","Add literal to W" �9�"11 1001 kkkk kkkk","ANDLW k ","And literal and W" �3�"01 00bb bfff ffff","BCF f,b","Bit clear f" �1�"01 01bb bfff ffff","BSF f,b","Bit set f" �@�"01 10bb bfff ffff","BTFSC f,b","Bit test,skip if clear " �<�"01 11bb bfff ffff","BTFSS f,b","Bit test,skip if set" �7�"10 0kkk kkkk kkkk","CALL k ","Call subroutine" �=�"00 0000 0110 0100","CLRWDT ","Clear watch dog timer" �/�"00 0001 0xxx xxxx","CLRW ","Clear W" �/�"00 0001 1fff ffff","CLRF f ","Clear f" 4�"00 1001 dfff ffff","COMF f,d","Complement f" A�"00 1011 dfff ffff","DECFSZ f,d","Decrement f, skip if zero" 3�"00 0011 dfff ffff","DECF f,d","Decrement f" 7�"10 1kkk kkkk kkkk","GOTO k ","Goto address k" (B�"11 1000 kkkk kkkk","IORLW k ","Inclusive OR literal and W" 2@�"00 1111 dfff ffff","INCFSZ f,d","Increment f,skip if zero" <3�"00 1010 dfff ffff","INCF f,d","Increment f" F<�"00 0100 dfff ffff","IORWF f,d","Inclusive OR W and f" P.�"00 1000 dfff ffff","MOVF f,d","Move f" Z3�"00 0000 1fff ffff","MOVWF f ","Move W to f" d9�"11 00xx kkkk kkkk","MOVLW k ","Move Literal to W" n4�"00 0000 0xx0 0000","NOP ","No operation" xC�"00 0000 0110 0010","OPTION ","Load OPTION register with W" �5�"00 1101 dfff ffff","RLF f,d","Rotate left f" �6�"00 1100 dfff ffff","RRF f,d","Rotate right f" �=�"00 0000 0000 1001","RETFIE ","Return from Interrupt" �@�"11 01xx kkkk kkkk","RETLW k ","Return with literal in W" �>�"00 0000 0000 1000","RETURN ","Return from subroutine" �9�"00 0010 dfff ffff","SUBWF f,d","Subtract W from f" �F�"00 1110 dfff ffff","SWAPF f,d","Swap left & right nybbles of f" �=�"00 0000 0110 0011","SLEEP ","Go into stand by mode" �?�"11 110x kkkk kkkk","SUBLW k ","Subtract W from literal" �7�"00 0000 0110 0fff","TRIS f ","Tristate port f" �<�"00 0110 dfff ffff","XORWF f,d","Exclusive OR W and f" �B�"11 1010 kkkk kkkk","XORLW k ","Exclusive OR literal and W" �?�"[[[","[[[","EOT marker CHR$91 is ASC'Z'+1 which is a '['" : � BASIC II tokens X� "80AND","81DIV","82EOR","83MOD","84OR","85ERROR","86LINE","87OFF","88STEP","89SPC" "X� "8ATAB","8BELSE","8CTHEN","8EOPENIN","8FPTR","90PAGE","91TIME","92LOMEM","93HIMEM" ,Z� "94ABS","95ACS","96ADVAL","97ASC","98ASN","99ATN","9ABGET","9BCOS","9CCOUNT","9DDEG" 6\� "9EERL","9FERR","A0EVAL","A1EXP","A2EXT","A3FALSE","A4FN","A5GET","A6INKEY","A7INSTR(" @]� "A8INT","A9LEN","AALN","ABLOG","ACNOT","ADOPENUP","AEOPENOUT","AFPI","B0POINT(","B1POS" JU� "B2RAD","B3RND","B4SGN","B5SIN","B6SQR","B7TAN","B8TO","B9TRUE","BAUSR","BBVAL" TU� "BCVPOS","BDCHR$","BEGET$","BFINKEY$","C0LEFT$(","C1MID$(","C2RIGHT$(","C3STR$" ^]� "C4STRING$(","C5EOF","C6AUTO","C7DELETE","C8LOAD","C9LIST","CANEW","CBOLD","CCRENUMBER" hX� "CDSAVE","CFPTR","D0PAGE","D1TIME","D2LOMEM","D3HIMEM","D4SOUND","D5BPUT","D6CALL" r]� "D7CHAIN","D8CLEAR","D9CLOSE","DACLG","DBCLS","DCDATA","DDDEF","DEDIM","DFDRAW","E0END" |[� "E1ENDPROC","E2ENVELOPE","E3FOR","E4GOSUB","E5GOTO","E6GCOL","E7IF","E8INPUT","E9LET" �^� "EALOCAL","EBMODE","ECMOVE","EDNEXT","EEON","EFVDU","F0PLOT","F1PRINT","F2PROC","F3READ" �`� "F4REM","F5REPEAT","F6REPORT","F7RESTORE","F8RETURN","F9RUN","FASTOP","FBCOLOUR","FCTRACE" �#� "FDUNTIL","FEWIDTH","FFOSCLI" �: �� Direct mode keywords �,� HELP,"Gives details of available help" �?� CHAIN"filename","Loads and assembles the PIC source code" �0� LOAD"filename","Loads the PIC source code" �B� "LIST [<from><,to>]","Optionally list program <from>...<to>" �2� RUN,"Clears variables then executes program" �#� QUIT,"Ends the PIC assembler" �� CLS,"Clears the screen" �#� STOP,"Stops what's happening" �
00000000 0d 00 0a 20 f4 20 50 49 43 20 31 36 43 58 58 20 |... . PIC 16CXX | 00000010 73 65 72 69 65 73 20 61 73 73 65 6d 62 6c 65 72 |series assembler| 00000020 0d 00 14 23 f4 20 41 63 63 65 70 74 73 20 74 6f |...#. Accepts to| 00000030 6b 65 6e 69 73 65 64 20 42 41 53 49 43 20 66 69 |kenised BASIC fi| 00000040 6c 65 73 0d 00 1e 29 f1 22 50 49 43 20 41 73 73 |les...)."PIC Ass| 00000050 65 6d 62 6c 65 72 20 56 30 2e 39 38 20 28 43 29 |embler V0.98 (C)| 00000060 53 50 52 4f 57 20 31 39 39 37 22 27 0d 00 28 47 |SPROW 1997"'..(G| 00000070 2a 4b 45 59 20 39 20 43 48 41 49 4e 22 41 44 46 |*KEY 9 CHAIN"ADF| 00000080 53 3a 3a 52 69 73 63 48 44 2e 24 2e 4c 61 6e 67 |S::RiscHD.$.Lang| 00000090 75 61 67 65 2e 42 61 73 69 63 56 2e 50 49 43 73 |uage.BasicV.PICs| 000000a0 2e 4b 32 50 72 6f 6a 65 63 74 2e 4b 32 73 61 75 |.K2Project.K2sau| 000000b0 63 65 22 0d 00 32 05 3a 0d 00 3c 47 f4 20 47 6c |ce"..2.:..<G. Gl| 000000c0 6f 62 61 6c 73 20 74 6f 20 72 65 73 65 74 20 6f |obals to reset o| 000000d0 6e 20 70 6f 77 65 72 20 75 70 2c 74 68 65 20 72 |n power up,the r| 000000e0 65 73 74 20 61 72 65 20 72 65 73 65 74 20 66 6f |est are reset fo| 000000f0 72 20 65 61 63 68 20 6e 65 77 20 66 69 6c 65 0d |r each new file.| 00000100 00 46 2a 73 6f 75 72 63 65 24 3d 22 22 3a f4 20 |.F*source$="":. | 00000110 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 74 6f 20 |The filename to | 00000120 72 65 61 64 20 66 72 6f 6d 0d 00 50 46 6c 6f 61 |read from..PFloa| 00000130 64 65 64 25 3d a3 3a f4 20 42 6f 6f 6c 65 61 6e |ded%=.:. Boolean| 00000140 20 66 6c 61 67 20 61 73 20 74 6f 20 77 68 65 74 | flag as to whet| 00000150 68 65 72 20 61 20 76 61 6c 69 64 20 70 72 6f 67 |her a valid prog| 00000160 72 61 6d 20 69 73 20 27 6c 6f 61 64 65 64 27 0d |ram is 'loaded'.| 00000170 00 5a 33 6f 70 63 6f 75 6e 74 25 3d 30 3a f4 20 |.Z3opcount%=0:. | 00000180 4e 6f 2e 20 50 49 43 20 6f 70 63 6f 64 65 73 20 |No. PIC opcodes | 00000190 69 6e 20 44 41 54 41 20 73 74 61 74 65 6d 65 6e |in DATA statemen| 000001a0 74 73 0d 00 64 3a 6b 65 79 63 6f 75 6e 74 25 3d |ts..d:keycount%=| 000001b0 38 3a f4 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 |8:. Number of su| 000001c0 70 70 6f 72 74 65 64 20 64 69 72 65 63 74 20 6d |pported direct m| 000001d0 6f 64 65 20 63 6f 6d 6d 61 6e 64 73 0d 00 6e 33 |ode commands..n3| 000001e0 f2 72 65 73 65 74 3a f4 20 54 68 65 73 65 20 61 |.reset:. These a| 000001f0 72 65 20 61 6c 6c 20 72 65 73 65 74 20 66 6f 72 |re all reset for| 00000200 20 65 76 65 72 79 20 66 69 6c 65 20 74 6f 6f 0d | every file too.| 00000210 00 78 05 3a 0d 00 82 1c f4 20 43 6f 75 6e 74 20 |.x.:..... Count | 00000220 74 68 65 20 74 61 62 6c 65 20 6c 65 6e 67 74 68 |the table length| 00000230 0d 00 8c 43 f5 3a f3 62 69 74 24 2c 6d 6e 65 6d |...C.:.bit$,mnem| 00000240 6f 6e 69 63 24 2c 6d 65 61 6e 69 6e 67 24 3a 6f |onic$,meaning$:o| 00000250 70 63 6f 75 6e 74 25 3d 6f 70 63 6f 75 6e 74 25 |pcount%=opcount%| 00000260 2b 31 3a fd 6d 6e 65 6d 6f 6e 69 63 24 3d 22 5b |+1:.mnemonic$="[| 00000270 5b 5b 22 0d 00 96 05 f7 0d 00 a0 0e 61 6c 6c 6f |[[".........allo| 00000280 77 25 3d 31 32 38 0d 00 aa 45 de 20 62 69 74 24 |w%=128...E. bit$| 00000290 28 6f 70 63 6f 75 6e 74 25 29 2c 6d 6e 65 6d 6f |(opcount%),mnemo| 000002a0 6e 69 63 24 28 6f 70 63 6f 75 6e 74 25 29 2c 6d |nic$(opcount%),m| 000002b0 65 61 6e 69 6e 67 24 28 6f 70 63 6f 75 6e 74 25 |eaning$(opcount%| 000002c0 2b 6b 65 79 63 6f 75 6e 74 25 29 0d 00 b4 31 de |+keycount%)...1.| 000002d0 20 6a 75 6d 70 74 6f 25 28 32 38 29 2c 74 6f 6b | jumpto%(28),tok| 000002e0 65 6e 24 28 31 32 37 29 2c 6b 65 79 77 6f 72 64 |en$(127),keyword| 000002f0 24 28 6b 65 79 63 6f 75 6e 74 25 29 0d 00 be 49 |$(keycount%)...I| 00000300 de 20 73 74 72 69 6e 67 24 28 61 6c 6c 6f 77 25 |. string$(allow%| 00000310 20 81 38 29 2c 69 6e 74 65 67 65 72 25 28 61 6c | .8),integer%(al| 00000320 6c 6f 77 25 20 81 34 29 2c 72 65 61 6c 28 61 6c |low% .4),real(al| 00000330 6c 6f 77 25 29 2c 6e 61 6d 65 24 28 61 6c 6c 6f |low%),name$(allo| 00000340 77 25 2a 32 29 0d 00 c8 05 3a 0d 00 d2 15 e3 64 |w%*2)....:.....d| 00000350 61 74 61 25 3d 31 b8 6f 70 63 6f 75 6e 74 25 0d |ata%=1.opcount%.| 00000360 00 dc 31 f3 62 69 74 24 28 64 61 74 61 25 29 2c |..1.bit$(data%),| 00000370 6d 6e 65 6d 6f 6e 69 63 24 28 64 61 74 61 25 29 |mnemonic$(data%)| 00000380 2c 6d 65 61 6e 69 6e 67 24 28 64 61 74 61 25 29 |,meaning$(data%)| 00000390 0d 00 e6 86 e7 c0 6d 6e 65 6d 6f 6e 69 63 24 28 |......mnemonic$(| 000003a0 64 61 74 61 25 29 2c 31 29 3c 3e 64 65 6c 74 61 |data%),1)<>delta| 000003b0 24 20 8c 6a 75 6d 70 74 6f 25 28 31 2b 97 28 64 |$ .jumpto%(1+.(d| 000003c0 65 6c 74 61 24 29 2d 36 34 29 3d 64 61 74 61 25 |elta$)-64)=data%| 000003d0 3a 6a 75 6d 70 74 6f 25 28 97 28 c0 6d 6e 65 6d |:jumpto%(.(.mnem| 000003e0 6f 6e 69 63 24 28 64 61 74 61 25 29 2c 31 29 29 |onic$(data%),1))| 000003f0 2d 36 34 29 3d 64 61 74 61 25 3a 64 65 6c 74 61 |-64)=data%:delta| 00000400 24 3d c0 6d 6e 65 6d 6f 6e 69 63 24 28 64 61 74 |$=.mnemonic$(dat| 00000410 61 25 29 2c 31 29 0d 00 f0 44 ed 3a f4 20 42 75 |a%),1)...D.:. Bu| 00000420 69 6c 64 20 61 20 74 61 62 6c 65 20 6c 69 6e 6b |ild a table link| 00000430 69 6e 67 20 31 73 74 20 6d 6e 65 6d 6f 6e 69 63 |ing 1st mnemonic| 00000440 20 6c 65 74 74 65 72 73 20 74 6f 20 61 72 72 61 | letters to arra| 00000450 79 20 65 6c 65 6d 65 6e 74 73 0d 00 fa 05 3a 0d |y elements....:.| 00000460 01 04 05 f5 0d 01 0e 27 f3 74 6f 6b 65 6e 24 3a |.......'.token$:| 00000470 74 6f 6b 65 6e 6e 75 6d 25 3d a0 28 22 26 22 2b |tokennum%=.("&"+| 00000480 c0 74 6f 6b 65 6e 24 2c 32 29 29 0d 01 18 2e 74 |.token$,2))....t| 00000490 6f 6b 65 6e 24 28 74 6f 6b 65 6e 6e 75 6d 25 2d |oken$(tokennum%-| 000004a0 31 32 38 29 3d c2 74 6f 6b 65 6e 24 2c a9 28 74 |128)=.token$,.(t| 000004b0 6f 6b 65 6e 24 29 2d 32 29 0d 01 22 14 fd c0 74 |oken$)-2).."...t| 000004c0 6f 6b 65 6e 24 2c 32 29 3d 22 46 46 22 0d 01 2c |oken$,2)="FF"..,| 000004d0 05 3a 0d 01 36 16 e3 64 61 74 61 25 3d 31 b8 6b |.:..6..data%=1.k| 000004e0 65 79 63 6f 75 6e 74 25 0d 01 40 2d f3 6b 65 79 |eycount%..@-.key| 000004f0 77 6f 72 64 24 28 64 61 74 61 25 29 2c 6d 65 61 |word$(data%),mea| 00000500 6e 69 6e 67 24 28 6f 70 63 6f 75 6e 74 25 2b 64 |ning$(opcount%+d| 00000510 61 74 61 25 29 0d 01 4a 05 ed 0d 01 54 05 3a 0d |ata%)..J....T.:.| 00000520 01 5e 0e ee 85 f6 3a f1 9e 3a d9 23 30 0d 01 68 |.^....:..:.#0..h| 00000530 05 f5 0d 01 72 11 e8 86 22 3e 22 63 6f 6d 6d 61 |....r...">"comma| 00000540 6e 64 24 0d 01 7c 2a 63 6f 6d 6d 61 6e 64 24 3d |nd$..|*command$=| 00000550 a4 73 74 72 69 70 6c 65 66 74 28 63 6f 6d 6d 61 |.stripleft(comma| 00000560 6e 64 24 29 3a 66 6f 75 6e 64 25 3d a3 0d 01 86 |nd$):found%=....| 00000570 40 e7 c0 63 6f 6d 6d 61 6e 64 24 2c 34 29 3d 22 |@..command$,4)="| 00000580 48 45 4c 50 22 20 8c 66 6f 75 6e 64 25 3d a4 68 |HELP" .found%=.h| 00000590 65 6c 70 28 c2 63 6f 6d 6d 61 6e 64 24 2c a9 28 |elp(.command$,.(| 000005a0 63 6f 6d 6d 61 6e 64 24 29 2d 34 29 29 0d 01 90 |command$)-4))...| 000005b0 42 e7 c0 63 6f 6d 6d 61 6e 64 24 2c 35 29 3d 22 |B..command$,5)="| 000005c0 43 48 41 49 4e 22 20 8c 66 6f 75 6e 64 25 3d a4 |CHAIN" .found%=.| 000005d0 63 68 61 69 6e 28 c2 63 6f 6d 6d 61 6e 64 24 2c |chain(.command$,| 000005e0 a9 28 63 6f 6d 6d 61 6e 64 24 29 2d 35 29 29 0d |.(command$)-5)).| 000005f0 01 9a 49 e7 c0 63 6f 6d 6d 61 6e 64 24 2c 34 29 |..I..command$,4)| 00000600 3d 22 4c 4f 41 44 22 20 8c 66 6f 75 6e 64 25 3d |="LOAD" .found%=| 00000610 a4 6c 6f 61 64 28 c2 63 6f 6d 6d 61 6e 64 24 2c |.load(.command$,| 00000620 a9 28 63 6f 6d 6d 61 6e 64 24 29 2d 34 29 29 3a |.(command$)-4)):| 00000630 66 6f 75 6e 64 25 3d b9 0d 01 a4 40 e7 c0 63 6f |found%=....@..co| 00000640 6d 6d 61 6e 64 24 2c 34 29 3d 22 4c 49 53 54 22 |mmand$,4)="LIST"| 00000650 20 8c 66 6f 75 6e 64 25 3d a4 6c 69 73 74 28 c2 | .found%=.list(.| 00000660 63 6f 6d 6d 61 6e 64 24 2c a9 28 63 6f 6d 6d 61 |command$,.(comma| 00000670 6e 64 24 29 2d 34 29 29 0d 01 ae 40 e7 c0 63 6f |nd$)-4))...@..co| 00000680 6d 6d 61 6e 64 24 2c 34 29 3d 22 51 55 49 54 22 |mmand$,4)="QUIT"| 00000690 20 8c 66 6f 75 6e 64 25 3d a4 71 75 69 74 28 c2 | .found%=.quit(.| 000006a0 63 6f 6d 6d 61 6e 64 24 2c a9 28 63 6f 6d 6d 61 |command$,.(comma| 000006b0 6e 64 24 29 2d 34 29 29 0d 01 b8 3e e7 c0 63 6f |nd$)-4))...>..co| 000006c0 6d 6d 61 6e 64 24 2c 33 29 3d 22 52 55 4e 22 20 |mmand$,3)="RUN" | 000006d0 8c 66 6f 75 6e 64 25 3d a4 72 75 6e 28 c2 63 6f |.found%=.run(.co| 000006e0 6d 6d 61 6e 64 24 2c a9 28 63 6f 6d 6d 61 6e 64 |mmand$,.(command| 000006f0 24 29 2d 33 29 29 0d 01 c2 47 e7 c0 63 6f 6d 6d |$)-3))...G..comm| 00000700 61 6e 64 24 2c 33 29 3d 22 43 4c 53 22 20 8c 66 |and$,3)="CLS" .f| 00000710 6f 75 6e 64 25 3d a4 63 6c 73 28 c2 63 6f 6d 6d |ound%=.cls(.comm| 00000720 61 6e 64 24 2c a9 28 63 6f 6d 6d 61 6e 64 24 29 |and$,.(command$)| 00000730 2d 33 29 29 3a 66 6f 75 6e 64 25 3d b9 0d 01 cc |-3)):found%=....| 00000740 43 e7 c0 63 6f 6d 6d 61 6e 64 24 2c 34 29 3d 22 |C..command$,4)="| 00000750 53 54 4f 50 22 20 8c 66 6f 75 6e 64 25 3d ac 28 |STOP" .found%=.(| 00000760 a4 73 74 6f 70 28 c2 63 6f 6d 6d 61 6e 64 24 2c |.stop(.command$,| 00000770 a9 28 63 6f 6d 6d 61 6e 64 24 29 2d 34 29 29 29 |.(command$)-4)))| 00000780 0d 01 d6 3b e7 c0 63 6f 6d 6d 61 6e 64 24 2c 31 |...;..command$,1| 00000790 29 3d 22 2a 22 20 8c 66 6f 75 6e 64 25 3d b9 3a |)="*" .found%=.:| 000007a0 ff 28 c2 63 6f 6d 6d 61 6e 64 24 2c a9 28 63 6f |.(.command$,.(co| 000007b0 6d 6d 61 6e 64 24 29 2d 31 29 29 0d 01 e0 35 e7 |mmand$)-1))...5.| 000007c0 66 6f 75 6e 64 25 3d a3 20 80 a9 63 6f 6d 6d 61 |found%=. ..comma| 000007d0 6e 64 24 3e 30 20 8c f1 27 22 43 6f 6d 6d 61 6e |nd$>0 ..'"Comman| 000007e0 64 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 22 |d not supported"| 000007f0 0d 01 ea 21 fd a4 6e 6f 77 69 6c 64 28 63 6f 6d |...!..nowild(com| 00000800 6d 61 6e 64 24 2c 22 20 22 29 3d 22 51 55 49 54 |mand$," ")="QUIT| 00000810 22 0d 01 f4 05 e0 0d 01 fe 05 3a 0d 02 08 16 dd |".........:.....| 00000820 a4 71 75 69 74 28 70 61 72 61 6d 65 74 65 72 24 |.quit(parameter$| 00000830 29 0d 02 12 35 e7 a4 6e 6f 77 69 6c 64 28 70 61 |)...5..nowild(pa| 00000840 72 61 6d 65 74 65 72 24 2c 22 20 22 29 3c 3e 22 |rameter$," ")<>"| 00000850 22 20 8c f1 27 22 53 79 6e 74 61 78 20 65 72 72 |" ..'"Syntax err| 00000860 6f 72 22 3a 3d b9 0d 02 1c 4a ff 28 22 53 41 56 |or":=....J.("SAV| 00000870 45 20 66 72 6f 6d 30 39 38 20 22 2b c3 7e 28 63 |E from098 "+.~(c| 00000880 6f 64 65 25 29 2b 22 20 2b 22 2b c3 7e 28 32 2a |ode%)+" +"+.~(2*| 00000890 a4 66 69 6e 64 76 61 6c 75 65 28 22 50 25 22 29 |.findvalue("P%")| 000008a0 29 2b 22 20 30 20 46 46 46 46 46 38 30 30 22 29 |)+" 0 FFFFF800")| 000008b0 0d 02 26 06 3d b9 0d 02 30 05 3a 0d 02 3a 15 dd |..&.=...0.:..:..| 000008c0 a4 72 75 6e 28 70 61 72 61 6d 65 74 65 72 24 29 |.run(parameter$)| 000008d0 0d 02 44 35 e7 a4 6e 6f 77 69 6c 64 28 70 61 72 |..D5..nowild(par| 000008e0 61 6d 65 74 65 72 24 2c 22 20 22 29 3c 3e 22 22 |ameter$," ")<>""| 000008f0 20 8c f1 27 22 53 79 6e 74 61 78 20 65 72 72 6f | ..'"Syntax erro| 00000900 72 22 3a 3d b9 0d 02 4e 28 e7 6c 6f 61 64 65 64 |r":=...N(.loaded| 00000910 25 3d a3 20 8c f1 27 22 4e 6f 20 70 72 6f 67 72 |%=. ..'"No progr| 00000920 61 6d 20 6c 6f 61 64 65 64 22 3a 3d b9 0d 02 58 |am loaded":=...X| 00000930 1c 3d a4 63 68 61 69 6e 28 bd 33 34 2b 73 6f 75 |.=.chain(.34+sou| 00000940 72 63 65 24 2b bd 33 34 29 0d 02 62 05 3a 0d 02 |rce$+.34)..b.:..| 00000950 6c 16 dd a4 68 65 6c 70 28 70 61 72 61 6d 65 74 |l...help(paramet| 00000960 65 72 24 29 0d 02 76 1b ea 64 61 74 61 25 2c 66 |er$)..v..data%,f| 00000970 6f 75 6e 64 25 2c 6d 6e 65 6d 6f 6e 69 63 24 0d |ound%,mnemonic$.| 00000980 02 80 26 70 61 72 61 6d 65 74 65 72 24 3d a4 6e |..¶meter$=.n| 00000990 6f 77 69 6c 64 28 70 61 72 61 6d 65 74 65 72 24 |owild(parameter$| 000009a0 2c 22 20 22 29 0d 02 8a 20 f4 20 41 73 6b 69 6e |," ")... . Askin| 000009b0 67 20 66 6f 72 20 68 65 6c 70 20 69 6e 20 67 65 |g for help in ge| 000009c0 6e 65 72 61 6c 0d 02 94 73 e7 70 61 72 61 6d 65 |neral...s.parame| 000009d0 74 65 72 24 3d 22 22 20 8c f1 22 48 65 6c 70 20 |ter$="" .."Help | 000009e0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 |is available on | 000009f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 22 27 |the following:"'| 00000a00 22 48 45 4c 50 20 3c 61 73 73 65 6d 62 6c 65 72 |"HELP <assembler| 00000a10 20 6d 6e 65 6d 6f 6e 69 63 3e 22 27 22 48 45 4c | mnemonic>"'"HEL| 00000a20 50 20 3c 63 6f 6d 6d 61 6e 64 3e 22 27 22 48 45 |P <command>"'"HE| 00000a30 4c 50 20 2e 22 3a 3d b9 0d 02 9e 21 f4 20 4c 6f |LP .":=....!. Lo| 00000a40 6f 6b 20 74 68 72 6f 75 67 68 20 6b 65 79 77 6f |ok through keywo| 00000a50 72 64 73 20 66 69 72 73 74 0d 02 a8 3b e7 70 61 |rds first...;.pa| 00000a60 72 61 6d 65 74 65 72 24 3d 22 2e 22 20 8c ef 31 |rameter$="." ..1| 00000a70 34 3a f1 22 48 65 6c 70 20 77 69 74 68 20 64 69 |4:."Help with di| 00000a80 72 65 63 74 20 6d 6f 64 65 20 6b 65 79 77 6f 72 |rect mode keywor| 00000a90 64 73 3a 22 0d 02 b2 16 e3 64 61 74 61 25 3d 31 |ds:".....data%=1| 00000aa0 b8 6b 65 79 63 6f 75 6e 74 25 0d 02 bc 8c e7 70 |.keycount%.....p| 00000ab0 61 72 61 6d 65 74 65 72 24 3d c0 6b 65 79 77 6f |arameter$=.keywo| 00000ac0 72 64 24 28 64 61 74 61 25 29 2c a9 28 70 61 72 |rd$(data%),.(par| 00000ad0 61 6d 65 74 65 72 24 29 29 20 84 70 61 72 61 6d |ameter$)) .param| 00000ae0 65 74 65 72 24 3d 22 2e 22 20 8c f1 6b 65 79 77 |eter$="." ..keyw| 00000af0 6f 72 64 24 28 64 61 74 61 25 29 3b 22 20 2d 20 |ord$(data%);" - | 00000b00 22 3b 6d 65 61 6e 69 6e 67 24 28 6f 70 63 6f 75 |";meaning$(opcou| 00000b10 6e 74 25 2b 64 61 74 61 25 29 3a 66 6f 75 6e 64 |nt%+data%):found| 00000b20 25 3d b9 3a f4 20 41 6c 6c 20 68 65 6c 70 20 73 |%=.:. All help s| 00000b30 75 70 70 6f 72 74 0d 02 c6 05 ed 0d 02 d0 17 f4 |upport..........| 00000b40 20 49 73 20 69 74 20 61 20 6d 6e 65 6d 6f 6e 69 | Is it a mnemoni| 00000b50 63 3f 0d 02 da 31 e7 70 61 72 61 6d 65 74 65 72 |c?...1.parameter| 00000b60 24 3d 22 2e 22 20 8c f1 27 22 48 65 6c 70 20 77 |$="." ..'"Help w| 00000b70 69 74 68 20 74 68 65 20 61 73 73 65 6d 62 6c 65 |ith the assemble| 00000b80 72 3a 22 0d 02 e4 21 70 61 72 61 6d 65 74 65 72 |r:"...!parameter| 00000b90 24 3d a4 75 63 61 73 65 28 70 61 72 61 6d 65 74 |$=.ucase(paramet| 00000ba0 65 72 24 29 0d 02 ee 19 e3 64 61 74 61 25 3d 31 |er$).....data%=1| 00000bb0 b8 28 6f 70 63 6f 75 6e 74 25 2d 31 29 0d 02 f8 |.(opcount%-1)...| 00000bc0 2f 6d 6e 65 6d 6f 6e 69 63 24 3d a4 66 69 6e 64 |/mnemonic$=.find| 00000bd0 77 69 6c 64 28 31 2c 6d 6e 65 6d 6f 6e 69 63 24 |wild(1,mnemonic$| 00000be0 28 64 61 74 61 25 29 2c 22 20 22 29 0d 03 02 7e |(data%)," ")...~| 00000bf0 e7 70 61 72 61 6d 65 74 65 72 24 3d c0 6d 6e 65 |.parameter$=.mne| 00000c00 6d 6f 6e 69 63 24 2c a9 28 70 61 72 61 6d 65 74 |monic$,.(paramet| 00000c10 65 72 24 29 29 20 84 70 61 72 61 6d 65 74 65 72 |er$)) .parameter| 00000c20 24 3d 22 2e 22 20 8c f1 6d 6e 65 6d 6f 6e 69 63 |$="." ..mnemonic| 00000c30 24 28 64 61 74 61 25 29 3b 22 20 2d 20 22 3b 6d |$(data%);" - ";m| 00000c40 65 61 6e 69 6e 67 24 28 64 61 74 61 25 29 3a 66 |eaning$(data%):f| 00000c50 6f 75 6e 64 25 3d b9 3a f4 20 41 6c 6c 20 68 65 |ound%=.:. All he| 00000c60 6c 70 20 73 75 70 70 6f 72 74 0d 03 0c 05 ed 0d |lp support......| 00000c70 03 16 37 e7 66 6f 75 6e 64 25 3d a3 20 8c f1 27 |..7.found%=. ..'| 00000c80 22 4e 6f 20 68 65 6c 70 20 61 76 61 69 6c 61 62 |"No help availab| 00000c90 6c 65 20 6f 6e 20 74 68 61 74 20 74 6f 70 69 63 |le on that topic| 00000ca0 22 20 8b ef 31 35 0d 03 20 06 3d b9 0d 03 2a 05 |" ..15.. .=...*.| 00000cb0 3a 0d 03 34 16 dd a4 6c 6f 61 64 28 70 61 72 61 |:..4...load(para| 00000cc0 6d 65 74 65 72 24 29 0d 03 3e 39 70 61 72 61 6d |meter$)..>9param| 00000cd0 65 74 65 72 24 3d a4 73 74 72 69 70 72 69 67 68 |eter$=.striprigh| 00000ce0 74 28 a4 73 74 72 69 70 6c 65 66 74 28 70 61 72 |t(.stripleft(par| 00000cf0 61 6d 65 74 65 72 24 29 29 3a f2 72 65 73 65 74 |ameter$)):.reset| 00000d00 0d 03 48 1d f4 20 43 68 65 63 6b 20 66 6f 72 20 |..H.. Check for | 00000d10 6f 70 65 6e 69 6e 67 20 64 69 74 74 6f 0d 03 52 |opening ditto..R| 00000d20 31 e7 c0 70 61 72 61 6d 65 74 65 72 24 2c 31 29 |1..parameter$,1)| 00000d30 3c 3e bd 33 34 20 8c f1 27 22 4e 6f 20 73 75 63 |<>.34 ..'"No suc| 00000d40 68 20 76 61 72 69 61 62 6c 65 22 3a 3d a3 0d 03 |h variable":=...| 00000d50 5c 1d f4 20 43 68 65 63 6b 20 66 6f 72 20 63 6c |\.. Check for cl| 00000d60 6f 73 69 6e 67 20 64 69 74 74 6f 0d 03 66 31 6c |osing ditto..f1l| 00000d70 61 73 74 64 69 74 74 6f 25 3d a7 c2 70 61 72 61 |astditto%=..para| 00000d80 6d 65 74 65 72 24 2c a9 28 70 61 72 61 6d 65 74 |meter$,.(paramet| 00000d90 65 72 24 29 2d 31 29 2c bd 33 34 29 0d 03 70 26 |er$)-1),.34)..p&| 00000da0 e7 6c 61 73 74 64 69 74 74 6f 25 3d 30 20 8c f1 |.lastditto%=0 ..| 00000db0 27 22 4d 69 73 73 69 6e 67 20 22 2b bd 33 34 3a |'"Missing "+.34:| 00000dc0 3d a3 0d 03 7a 27 f4 20 4c 6f 6f 6b 20 66 6f 72 |=...z'. Look for| 00000dd0 20 61 6e 79 6d 6f 72 65 20 74 65 78 74 20 6f 6e | anymore text on| 00000de0 20 74 68 65 20 6c 69 6e 65 0d 03 84 35 e7 28 6c | the line...5.(l| 00000df0 61 73 74 64 69 74 74 6f 25 2b 31 29 3c 3e a9 70 |astditto%+1)<>.p| 00000e00 61 72 61 6d 65 74 65 72 24 20 8c f1 27 22 53 79 |arameter$ ..'"Sy| 00000e10 6e 74 61 78 20 65 72 72 6f 72 22 3a 3d a3 0d 03 |ntax error":=...| 00000e20 8e 28 69 6e 25 3d 8e 20 c1 70 61 72 61 6d 65 74 |.(in%=. .paramet| 00000e30 65 72 24 2c 32 2c a9 28 70 61 72 61 6d 65 74 65 |er$,2,.(paramete| 00000e40 72 24 29 2d 32 29 0d 03 98 21 e7 69 6e 25 3d 30 |r$)-2)...!.in%=0| 00000e50 20 8c f1 27 22 46 69 6c 65 20 6e 6f 74 20 66 6f | ..'"File not fo| 00000e60 75 6e 64 22 3a 3d a3 0d 03 a2 32 e7 9a 23 69 6e |und":=....2..#in| 00000e70 25 3c 3e 31 33 20 8c f1 27 22 42 61 64 20 70 72 |%<>13 ..'"Bad pr| 00000e80 6f 67 72 61 6d 22 3a 6c 6f 61 64 65 64 25 3d a3 |ogram":loaded%=.| 00000e90 3a d9 23 69 6e 25 3a 3d a3 0d 03 ac 13 cf 23 69 |:.#in%:=......#i| 00000ea0 6e 25 3d 28 a2 23 69 6e 25 29 2d 31 0d 03 b6 33 |n%=(.#in%)-1...3| 00000eb0 e7 9a 23 69 6e 25 3c 3e 32 35 35 20 8c f1 27 22 |..#in%<>255 ..'"| 00000ec0 42 61 64 20 70 72 6f 67 72 61 6d 22 3a 6c 6f 61 |Bad program":loa| 00000ed0 64 65 64 25 3d a3 3a d9 23 69 6e 25 3a 3d a3 0d |ded%=.:.#in%:=..| 00000ee0 03 c0 3a 6c 6f 61 64 65 64 25 3d b9 3a d9 23 69 |..:loaded%=.:.#i| 00000ef0 6e 25 3a 73 6f 75 72 63 65 24 3d c1 70 61 72 61 |n%:source$=.para| 00000f00 6d 65 74 65 72 24 2c 32 2c a9 28 70 61 72 61 6d |meter$,2,.(param| 00000f10 65 74 65 72 24 29 2d 32 29 0d 03 ca 06 3d b9 0d |eter$)-2)....=..| 00000f20 03 d4 05 3a 0d 03 de 16 dd a4 6c 69 73 74 28 70 |...:......list(p| 00000f30 61 72 61 6d 65 74 65 72 24 29 0d 03 e8 24 f4 20 |arameter$)...$. | 00000f40 4c 69 73 74 20 61 20 70 72 6f 67 72 61 6d 20 6f |List a program o| 00000f50 6e 74 6f 20 74 68 65 20 73 63 72 65 65 6e 0d 03 |nto the screen..| 00000f60 f2 40 ea 6c 69 6e 65 6e 75 6d 24 2c 6c 69 6e 65 |.@.linenum$,line| 00000f70 6e 75 6d 25 2c 6d 69 6e 6c 69 6e 65 25 2c 6d 61 |num%,minline%,ma| 00000f80 78 6c 69 6e 65 25 2c 72 61 6e 67 65 68 69 24 2c |xline%,rangehi$,| 00000f90 72 61 6e 67 65 6c 6f 24 2c 62 79 74 65 25 0d 03 |rangelo$,byte%..| 00000fa0 fc 28 e7 6c 6f 61 64 65 64 25 3d a3 20 8c f1 27 |.(.loaded%=. ..'| 00000fb0 22 4e 6f 20 70 72 6f 67 72 61 6d 20 6c 6f 61 64 |"No program load| 00000fc0 65 64 22 3a 3d b9 0d 04 06 1c f4 20 52 65 61 64 |ed":=...... Read| 00000fd0 20 61 6e 79 20 6f 70 74 69 6f 6e 73 20 67 69 76 | any options giv| 00000fe0 65 6e 0d 04 10 26 70 61 72 61 6d 65 74 65 72 24 |en...¶meter$| 00000ff0 3d a4 6e 6f 77 69 6c 64 28 70 61 72 61 6d 65 74 |=.nowild(paramet| 00001000 65 72 24 2c 22 20 22 29 0d 04 1a 57 72 61 6e 67 |er$," ")...Wrang| 00001010 65 6c 6f 24 3d a4 66 69 6e 64 77 69 6c 64 28 31 |elo$=.findwild(1| 00001020 2c 70 61 72 61 6d 65 74 65 72 24 2c 22 2c 22 29 |,parameter$,",")| 00001030 3a 72 61 6e 67 65 68 69 24 3d a4 66 69 6e 64 77 |:rangehi$=.findw| 00001040 69 6c 64 28 32 2b a9 72 61 6e 67 65 6c 6f 24 2c |ild(2+.rangelo$,| 00001050 70 61 72 61 6d 65 74 65 72 24 2c 22 2c 22 29 0d |parameter$,",").| 00001060 04 24 27 f4 20 4e 6f 77 20 77 6f 72 6b 20 6f 75 |.$'. Now work ou| 00001070 74 20 77 68 69 63 68 20 6c 69 6e 65 73 20 61 72 |t which lines ar| 00001080 65 20 72 65 71 64 0d 04 2e 37 e7 72 61 6e 67 65 |e reqd...7.range| 00001090 68 69 24 3d 22 22 20 80 a7 70 61 72 61 6d 65 74 |hi$="" ..paramet| 000010a0 65 72 24 2c 22 2c 22 29 3d 30 20 8c 72 61 6e 67 |er$,",")=0 .rang| 000010b0 65 68 69 24 3d 72 61 6e 67 65 6c 6f 24 0d 04 38 |ehi$=rangelo$..8| 000010c0 37 e7 72 61 6e 67 65 68 69 24 3d 22 22 20 80 a7 |7.rangehi$="" ..| 000010d0 70 61 72 61 6d 65 74 65 72 24 2c 22 2c 22 29 3c |parameter$,",")<| 000010e0 3e 30 20 8c 72 61 6e 67 65 68 69 24 3d 22 26 38 |>0 .rangehi$="&8| 000010f0 30 30 30 22 0d 04 42 21 e7 70 61 72 61 6d 65 74 |000"..B!.paramet| 00001100 65 72 24 3d 22 2c 22 20 8c 72 61 6e 67 65 6c 6f |er$="," .rangelo| 00001110 24 3d 22 30 22 0d 04 4c 50 e7 72 61 6e 67 65 68 |$="0"..LP.rangeh| 00001120 69 24 2b 72 61 6e 67 65 6c 6f 24 3d 22 22 20 8c |i$+rangelo$="" .| 00001130 6d 61 78 6c 69 6e 65 25 3d 26 38 30 30 30 20 8b |maxline%=&8000 .| 00001140 6d 69 6e 6c 69 6e 65 25 3d a0 72 61 6e 67 65 6c |minline%=.rangel| 00001150 6f 24 3a 6d 61 78 6c 69 6e 65 25 3d a0 72 61 6e |o$:maxline%=.ran| 00001160 67 65 68 69 24 0d 04 56 53 70 6f 69 6e 74 65 72 |gehi$..VSpointer| 00001170 25 3d 31 3a 69 6e 25 3d 8e 73 6f 75 72 63 65 24 |%=1:in%=.source$| 00001180 3a cf 23 69 6e 25 3d 31 3a ef 31 31 3a f4 20 42 |:.#in%=1:.11:. B| 00001190 61 63 6b 75 70 20 6f 6e 65 20 6c 69 6e 65 2c 61 |ackup one line,a| 000011a0 6e 64 20 73 6b 69 70 20 70 61 73 74 20 6f 70 65 |nd skip past ope| 000011b0 6e 69 6e 67 20 26 30 44 0d 04 60 05 f5 0d 04 6a |ning &0D..`....j| 000011c0 30 62 79 74 65 25 3d 9a 23 69 6e 25 3a f4 20 54 |0byte%=.#in%:. T| 000011d0 68 65 20 68 69 20 62 79 74 65 20 6f 66 20 74 68 |he hi byte of th| 000011e0 65 20 6c 69 6e 65 20 6e 75 6d 62 65 72 0d 04 74 |e line number..t| 000011f0 4a 6c 69 6e 65 6e 75 6d 25 3d 28 62 79 74 65 25 |Jlinenum%=(byte%| 00001200 2a 32 35 36 29 2b 9a 23 69 6e 25 3a 6c 69 6e 65 |*256)+.#in%:line| 00001210 6e 75 6d 24 3d c4 35 2d a9 28 c3 28 6c 69 6e 65 |num$=.5-.(.(line| 00001220 6e 75 6d 25 29 29 2c 22 20 22 29 2b c3 28 6c 69 |num%))," ")+.(li| 00001230 6e 65 6e 75 6d 25 29 0d 04 7e 27 f4 20 42 65 a0 |nenum%)..~'. Be.| 00001240 73 69 6c 65 6e 74 20 69 66 20 6e 6f 74 20 69 6e |silent if not in| 00001250 20 6c 69 73 74 69 6e 67 20 72 61 6e 67 65 0d 04 | listing range..| 00001260 88 3b e7 28 6c 69 6e 65 6e 75 6d 25 3e 3d 6d 69 |.;.(linenum%>=mi| 00001270 6e 6c 69 6e 65 25 29 80 28 6c 69 6e 65 6e 75 6d |nline%).(linenum| 00001280 25 3c 3d 6d 61 78 6c 69 6e 65 25 29 20 8c f1 27 |%<=maxline%) ..'| 00001290 6c 69 6e 65 6e 75 6d 24 3b 0d 04 92 26 70 6f 69 |linenum$;...&poi| 000012a0 6e 74 65 72 25 3d 70 6f 69 6e 74 65 72 25 2b 33 |nter%=pointer%+3| 000012b0 3a cf 23 69 6e 25 3d 70 6f 69 6e 74 65 72 25 0d |:.#in%=pointer%.| 000012c0 04 9c 62 e7 28 6c 69 6e 65 6e 75 6d 25 3c 6d 69 |..b.(linenum%<mi| 000012d0 6e 6c 69 6e 65 25 29 84 28 6c 69 6e 65 6e 75 6d |nline%).(linenum| 000012e0 25 3e 6d 61 78 6c 69 6e 65 25 29 20 8c f5 3a 62 |%>maxline%) ..:b| 000012f0 79 74 65 25 3d 9a 23 69 6e 25 3a fd 62 79 74 65 |yte%=.#in%:.byte| 00001300 25 3d 31 33 3a cf 23 69 6e 25 3d 8f 23 69 6e 25 |%=13:.#in%=.#in%| 00001310 2d 31 3a 70 6f 69 6e 74 65 72 25 3d 8f 23 69 6e |-1:pointer%=.#in| 00001320 25 0d 04 a6 05 f5 0d 04 b0 0f 62 79 74 65 25 3d |%.........byte%=| 00001330 9a 23 69 6e 25 0d 04 ba 2e e7 62 79 74 65 25 3c |.#in%.....byte%<| 00001340 31 32 37 20 8c ef 62 79 74 65 25 20 8b f1 3b a4 |127 ..byte% ..;.| 00001350 75 6e 70 61 63 6b 74 6f 6b 65 6e 28 62 79 74 65 |unpacktoken(byte| 00001360 25 29 3b 0d 04 c4 17 70 6f 69 6e 74 65 72 25 3d |%);....pointer%=| 00001370 70 6f 69 6e 74 65 72 25 2b 31 0d 04 ce 22 fd 62 |pointer%+1...".b| 00001380 79 74 65 25 3d 31 33 20 84 70 6f 69 6e 74 65 72 |yte%=13 .pointer| 00001390 25 3e 3d 28 a2 23 69 6e 25 2d 31 29 0d 04 d8 2b |%>=(.#in%-1)...+| 000013a0 fd 70 6f 69 6e 74 65 72 25 3e 3d 28 a2 23 69 6e |.pointer%>=(.#in| 000013b0 25 2d 31 29 20 84 6c 69 6e 65 6e 75 6d 25 3e 6d |%-1) .linenum%>m| 000013c0 61 78 6c 69 6e 65 25 0d 04 e2 0b f1 3a d9 23 69 |axline%.....:.#i| 000013d0 6e 25 0d 04 ec 06 3d b9 0d 04 f6 05 3a 0d 05 00 |n%....=.....:...| 000013e0 17 dd a4 63 68 61 69 6e 28 70 61 72 61 6d 65 74 |...chain(paramet| 000013f0 65 72 24 29 0d 05 0a 29 ea 77 6f 72 6b 24 2c 72 |er$)...).work$,r| 00001400 65 73 75 6c 74 25 2c 6d 61 78 6c 69 6e 65 25 2c |esult%,maxline%,| 00001410 64 61 74 61 25 2c 6c 65 6e 67 74 68 25 0d 05 14 |data%,length%...| 00001420 1c e7 a4 6c 6f 61 64 28 70 61 72 61 6d 65 74 65 |...load(paramete| 00001430 72 24 29 3d a3 20 8c 3d b9 0d 05 1e 2d 69 6e 25 |r$)=. .=....-in%| 00001440 3d 8e 73 6f 75 72 63 65 24 3a 6c 65 6e 67 74 68 |=.source$:length| 00001450 25 3d 28 a2 23 69 6e 25 29 2d 32 3a 6d 61 78 6c |%=(.#in%)-2:maxl| 00001460 69 6e 65 25 3d 31 0d 05 28 2c f4 20 4e 6f 77 2c |ine%=1..(,. Now,| 00001470 72 65 70 65 61 74 65 64 6c 79 20 73 65 6c 65 63 |repeatedly selec| 00001480 74 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 74 |t the interprett| 00001490 65 72 0d 05 32 05 f5 0d 05 3c 36 20 77 6f 72 6b |er..2....<6 work| 000014a0 24 3d 22 22 3a cf 23 69 6e 25 3d 8f 23 69 6e 25 |$="":.#in%=.#in%| 000014b0 2b 32 2b b4 6d 61 78 6c 69 6e 65 25 3a 6d 61 78 |+2+.maxline%:max| 000014c0 6c 69 6e 65 25 3d 9a 23 69 6e 25 2d 34 0d 05 46 |line%=.#in%-4..F| 000014d0 2d 20 e3 64 61 74 61 25 3d 31 b8 6d 61 78 6c 69 |- .data%=1.maxli| 000014e0 6e 65 25 3a 77 6f 72 6b 24 3d 77 6f 72 6b 24 2b |ne%:work$=work$+| 000014f0 bd 28 9a 23 69 6e 25 29 3a ed 0d 05 50 30 20 e7 |.(.#in%):...P0 .| 00001500 a7 22 5b 5d 22 2c c0 77 6f 72 6b 24 2c 31 29 29 |."[]",.work$,1))| 00001510 3c 3e 30 20 8c 69 6e 61 73 6d 25 3d b4 28 97 77 |<>0 .inasm%=.(.w| 00001520 6f 72 6b 24 2d 97 22 5d 22 29 0d 05 5a 3e 20 e7 |ork$-."]")..Z> .| 00001530 69 6e 61 73 6d 25 3d a3 20 8c 72 65 73 75 6c 74 |inasm%=. .result| 00001540 25 3d a4 69 6e 62 61 73 69 63 28 77 6f 72 6b 24 |%=.inbasic(work$| 00001550 29 20 8b 72 65 73 75 6c 74 25 3d a4 69 6e 61 73 |) .result%=.inas| 00001560 6d 28 77 6f 72 6b 24 29 0d 05 64 1d fd 8f 23 69 |m(work$)..d...#i| 00001570 6e 25 3d 6c 65 6e 67 74 68 25 20 84 72 65 73 75 |n%=length% .resu| 00001580 6c 74 25 3d 30 0d 05 6e 09 d9 23 69 6e 25 0d 05 |lt%=0..n..#in%..| 00001590 78 06 3d b9 0d 05 82 05 3a 0d 05 8c 1b f4 20 2a |x.=.....:..... *| 000015a0 2a 2a 2a 49 4e 54 45 52 50 52 45 54 54 45 52 53 |***INTERPRETTERS| 000015b0 2a 2a 2a 2a 0d 05 96 05 3a 0d 05 a0 16 dd a4 69 |****....:......i| 000015c0 6e 62 61 73 69 63 28 73 74 72 69 6e 67 24 29 0d |nbasic(string$).| 000015d0 05 aa 57 f4 20 4f 6e 6c 79 20 6b 65 79 77 6f 72 |..W. Only keywor| 000015e0 64 73 20 61 6c 6c 6f 77 65 64 20 6f 75 74 73 69 |ds allowed outsi| 000015f0 64 65 20 61 73 73 65 6d 62 6c 65 72 20 61 72 65 |de assembler are| 00001600 20 52 45 4d 2c 46 4f 52 2c 54 4f 2c 53 54 45 50 | REM,FOR,TO,STEP| 00001610 2c 44 49 4d 2c 4e 45 58 54 2c 43 4c 53 2c 53 54 |,DIM,NEXT,CLS,ST| 00001620 4f 50 2c 45 4e 44 0d 05 b4 17 ea 62 79 74 65 25 |OP,END.....byte%| 00001630 2c 74 6f 6b 65 6e 24 2c 77 6f 72 6b 24 0d 05 be |,token$,work$...| 00001640 18 62 79 74 65 25 3d 97 28 c0 73 74 72 69 6e 67 |.byte%=.(.string| 00001650 24 2c 31 29 29 0d 05 c8 22 77 6f 72 6b 24 3d a4 |$,1))..."work$=.| 00001660 66 69 6e 64 77 69 6c 64 28 31 2c 73 74 72 69 6e |findwild(1,strin| 00001670 67 24 2c 22 3a 22 29 0d 05 d2 45 e7 62 79 74 65 |g$,":")...E.byte| 00001680 25 3e 31 32 37 20 80 62 79 74 65 25 3c 3e 26 38 |%>127 .byte%<>&8| 00001690 44 20 8c 74 6f 6b 65 6e 24 3d a4 75 6e 70 61 63 |D .token$=.unpac| 000016a0 6b 74 6f 6b 65 6e 28 62 79 74 65 25 29 20 8b 74 |ktoken(byte%) .t| 000016b0 6f 6b 65 6e 24 3d bd 62 79 74 65 25 0d 05 dc 4c |oken$=.byte%...L| 000016c0 e7 74 6f 6b 65 6e 24 3d 22 52 45 4d 22 20 84 a7 |.token$="REM" ..| 000016d0 22 3a 5d 22 2b bd 31 33 2c 74 6f 6b 65 6e 24 29 |":]"+.13,token$)| 000016e0 3c 3e 30 20 8c 3d b9 3a f4 20 45 6d 70 74 79 20 |<>0 .=.:. Empty | 000016f0 61 6e 64 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 |and comment line| 00001700 20 73 75 70 70 6f 72 74 0d 05 e6 1d e7 74 6f 6b | support.....tok| 00001710 65 6e 24 3d 22 3d 22 20 8c f1 27 22 4e 6f 20 46 |en$="=" ..'"No F| 00001720 4e 22 3a 3d a3 0d 05 f0 29 e7 a9 74 6f 6b 65 6e |N":=....)..token| 00001730 24 3d 31 20 8c f2 61 73 73 69 67 6e 76 61 72 69 |$=1 ..assignvari| 00001740 61 62 6c 65 28 77 6f 72 6b 24 29 3a 3d b9 0d 05 |able(work$):=...| 00001750 fa 21 e7 74 6f 6b 65 6e 24 3d 22 4e 45 58 54 22 |.!.token$="NEXT"| 00001760 20 8c 3d a4 6e 65 78 74 28 77 6f 72 6b 24 29 0d | .=.next(work$).| 00001770 06 04 1f e7 74 6f 6b 65 6e 24 3d 22 46 4f 52 22 |....token$="FOR"| 00001780 20 8c 3d a4 66 6f 72 28 77 6f 72 6b 24 29 0d 06 | .=.for(work$)..| 00001790 0e 1f e7 74 6f 6b 65 6e 24 3d 22 44 49 4d 22 20 |...token$="DIM" | 000017a0 8c 3d a4 64 69 6d 28 77 6f 72 6b 24 29 0d 06 18 |.=.dim(work$)...| 000017b0 1f e7 74 6f 6b 65 6e 24 3d 22 43 4c 53 22 20 8c |..token$="CLS" .| 000017c0 3d a4 63 6c 73 28 77 6f 72 6b 24 29 0d 06 22 21 |=.cls(work$).."!| 000017d0 e7 74 6f 6b 65 6e 24 3d 22 53 54 4f 50 22 20 8c |.token$="STOP" .| 000017e0 3d a4 73 74 6f 70 28 77 6f 72 6b 24 29 0d 06 2c |=.stop(work$)..,| 000017f0 33 e7 74 6f 6b 65 6e 24 3d 22 45 4e 44 22 20 8c |3.token$="END" .| 00001800 3d a3 20 8b f1 27 22 43 6f 6d 6d 61 6e 64 20 6e |=. ..'"Command n| 00001810 6f 74 20 73 75 70 70 6f 72 74 65 64 22 3a 3d a3 |ot supported":=.| 00001820 0d 06 36 05 3a 0d 06 40 12 dd a4 63 6c 73 28 73 |..6.:..@...cls(s| 00001830 74 72 69 6e 67 24 29 0d 06 4a 2b 77 6f 72 6b 24 |tring$)..J+work$| 00001840 3d a4 6e 6f 77 69 6c 64 28 c2 73 74 72 69 6e 67 |=.nowild(.string| 00001850 24 2c a9 73 74 72 69 6e 67 24 2d 31 29 2c 22 20 |$,.string$-1)," | 00001860 22 29 0d 06 54 29 e7 77 6f 72 6b 24 3c 3e 22 22 |")..T).work$<>""| 00001870 20 8c f1 27 22 53 79 6e 74 61 78 20 65 72 72 6f | ..'"Syntax erro| 00001880 72 22 3a 3d a3 20 8b db 3a 3d b9 0d 06 5e 05 3a |r":=. ..:=...^.:| 00001890 0d 06 68 13 dd a4 73 74 6f 70 28 73 74 72 69 6e |..h...stop(strin| 000018a0 67 24 29 0d 06 72 2b 77 6f 72 6b 24 3d a4 6e 6f |g$)..r+work$=.no| 000018b0 77 69 6c 64 28 c2 73 74 72 69 6e 67 24 2c a9 73 |wild(.string$,.s| 000018c0 74 72 69 6e 67 24 2d 31 29 2c 22 20 22 29 0d 06 |tring$-1)," ")..| 000018d0 7c 2a e7 77 6f 72 6b 24 3c 3e 22 22 20 8c f1 27 ||*.work$<>"" ..'| 000018e0 22 53 79 6e 74 61 78 20 65 72 72 6f 72 22 20 8b |"Syntax error" .| 000018f0 f1 27 22 53 54 4f 50 22 0d 06 86 06 3d a3 0d 06 |.'"STOP"....=...| 00001900 90 05 3a 0d 06 9a 13 dd a4 6e 65 78 74 28 73 74 |..:......next(st| 00001910 72 69 6e 67 24 29 0d 06 a4 22 ea 73 74 65 70 25 |ring$)...".step%| 00001920 2c 6c 69 6d 69 74 25 2c 66 6f 72 25 2c 6e 61 6d |,limit%,for%,nam| 00001930 65 24 2c 77 6f 72 6b 24 0d 06 ae 38 f4 20 43 68 |e$,work$...8. Ch| 00001940 65 63 6b 20 66 6f 72 20 27 4e 45 58 54 2c 27 20 |eck for 'NEXT,' | 00001950 61 6e 64 20 27 4e 45 58 54 20 3c 76 61 72 69 61 |and 'NEXT <varia| 00001960 62 6c 65 3e 27 20 63 6f 6e 73 74 72 75 63 74 73 |ble>' constructs| 00001970 0d 06 b8 2b 77 6f 72 6b 24 3d a4 6e 6f 77 69 6c |...+work$=.nowil| 00001980 64 28 c2 73 74 72 69 6e 67 24 2c a9 73 74 72 69 |d(.string$,.stri| 00001990 6e 67 24 2d 31 29 2c 22 20 22 29 0d 06 c2 2b e7 |ng$-1)," ")...+.| 000019a0 66 6f 72 24 3d 22 22 20 84 a7 77 6f 72 6b 24 2c |for$="" ..work$,| 000019b0 22 2c 22 29 3c 3e 30 20 8c f1 27 22 4e 6f 20 46 |",")<>0 ..'"No F| 000019c0 4f 52 22 3a 3d a3 0d 06 cc 1f 6e 61 6d 65 24 3d |OR":=.....name$=| 000019d0 a4 66 69 6e 64 77 69 6c 64 28 31 2c 66 6f 72 24 |.findwild(1,for$| 000019e0 2c 22 2c 22 29 0d 06 d6 34 e7 77 6f 72 6b 24 3c |,",")...4.work$<| 000019f0 3e 22 22 20 80 6e 61 6d 65 24 3c 3e 77 6f 72 6b |>"" .name$<>work| 00001a00 24 20 8c f1 27 22 43 61 6e 27 74 20 4d 61 74 63 |$ ..'"Can't Matc| 00001a10 68 20 46 4f 52 22 3a 3d a3 0d 06 e0 2b f4 20 47 |h FOR":=....+. G| 00001a20 65 74 20 74 68 65 20 46 4f 52 20 70 61 72 61 6d |et the FOR param| 00001a30 65 74 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 |eters from the s| 00001a40 74 61 63 6b 0d 06 ea 2a 6c 69 6d 69 74 25 3d a0 |tack...*limit%=.| 00001a50 28 a4 66 69 6e 64 77 69 6c 64 28 32 2b a9 6e 61 |(.findwild(2+.na| 00001a60 6d 65 24 2c 66 6f 72 24 2c 22 3a 22 29 29 0d 06 |me$,for$,":"))..| 00001a70 f4 34 73 74 65 70 25 3d a0 28 a4 66 69 6e 64 77 |.4step%=.(.findw| 00001a80 69 6c 64 28 33 2b a9 6e 61 6d 65 24 2b a9 28 c3 |ild(3+.name$+.(.| 00001a90 6c 69 6d 69 74 25 29 2c 66 6f 72 24 2c 22 3b 22 |limit%),for$,";"| 00001aa0 29 29 0d 06 fe 27 70 6f 69 6e 74 65 72 25 3d a0 |))...'pointer%=.| 00001ab0 28 c2 66 6f 72 24 2c a9 66 6f 72 24 2d a7 66 6f |(.for$,.for$-.fo| 00001ac0 72 24 2c 22 3b 22 29 29 29 0d 07 08 20 66 6f 72 |r$,";")))... for| 00001ad0 25 3d a4 66 69 6e 64 76 61 6c 75 65 28 6e 61 6d |%=.findvalue(nam| 00001ae0 65 24 29 2b 73 74 65 70 25 0d 07 12 26 f2 61 73 |e$)+step%...&.as| 00001af0 73 69 67 6e 76 61 72 69 61 62 6c 65 28 6e 61 6d |signvariable(nam| 00001b00 65 24 2b 22 3d 22 2b c3 28 66 6f 72 25 29 29 0d |e$+"="+.(for%)).| 00001b10 07 1c 38 e7 66 6f 72 25 3e 6c 69 6d 69 74 25 20 |..8.for%>limit% | 00001b20 8c 66 6f 72 24 3d 22 22 3a 70 6f 69 6e 74 65 72 |.for$="":pointer| 00001b30 25 3d 8f 23 69 6e 25 20 8b cf 23 69 6e 25 3d 70 |%=.#in% ..#in%=p| 00001b40 6f 69 6e 74 65 72 25 0d 07 26 06 3d b9 0d 07 30 |ointer%..&.=...0| 00001b50 05 3a 0d 07 3a 12 dd a4 66 6f 72 28 73 74 72 69 |.:..:...for(stri| 00001b60 6e 67 24 29 0d 07 44 17 ea 6c 69 6d 69 74 25 2c |ng$)..D..limit%,| 00001b70 73 74 65 70 25 2c 6c 74 74 72 24 0d 07 4e 2e f4 |step%,lttr$..N..| 00001b80 20 41 73 73 75 6d 65 20 61 20 53 54 45 50 20 6f | Assume a STEP o| 00001b90 66 20 31 20 69 66 20 6e 6f 74 20 74 6f 6c 64 20 |f 1 if not told | 00001ba0 6f 74 68 65 72 77 69 73 65 0d 07 58 23 e7 66 6f |otherwise..X#.fo| 00001bb0 72 24 3c 3e 22 22 20 8c f1 27 22 54 6f 6f 20 6d |r$<>"" ..'"Too m| 00001bc0 61 6e 79 20 46 4f 52 73 22 3a 3d a3 0d 07 62 2f |any FORs":=...b/| 00001bd0 e7 a7 73 74 72 69 6e 67 24 2c bd 26 38 38 29 3d |..string$,.&88)=| 00001be0 30 20 8c 73 74 72 69 6e 67 24 3d 73 74 72 69 6e |0 .string$=strin| 00001bf0 67 24 2b bd 26 38 38 2b 22 31 22 0d 07 6c 23 e7 |g$+.&88+"1"..l#.| 00001c00 a7 73 74 72 69 6e 67 24 2c bd 26 42 38 29 3d 30 |.string$,.&B8)=0| 00001c10 20 8c f1 27 22 4e 6f 20 54 4f 22 3a 3d a3 0d 07 | ..'"No TO":=...| 00001c20 76 2c 73 74 72 69 6e 67 24 3d a4 73 74 72 69 70 |v,string$=.strip| 00001c30 6c 65 66 74 28 c2 73 74 72 69 6e 67 24 2c a9 73 |left(.string$,.s| 00001c40 74 72 69 6e 67 24 2d 31 29 29 0d 07 80 29 f4 20 |tring$-1))...). | 00001c50 41 64 64 20 76 61 72 69 61 62 6c 65 20 74 6f 20 |Add variable to | 00001c60 74 61 62 6c 65 20 61 6e 64 20 46 4f 52 20 73 74 |table and FOR st| 00001c70 61 63 6b 0d 07 8a 3a 6c 74 74 72 24 3d a4 66 69 |ack...:lttr$=.fi| 00001c80 6e 64 77 69 6c 64 28 31 2c 73 74 72 69 6e 67 24 |ndwild(1,string$| 00001c90 2c bd 26 42 38 29 3a f2 61 73 73 69 67 6e 76 61 |,.&B8):.assignva| 00001ca0 72 69 61 62 6c 65 28 6c 74 74 72 24 29 0d 07 94 |riable(lttr$)...| 00001cb0 36 6c 69 6d 69 74 25 3d a4 73 65 74 6e 75 6d 28 |6limit%=.setnum(| 00001cc0 a4 66 69 6e 64 77 69 6c 64 28 32 2b a9 28 6c 74 |.findwild(2+.(lt| 00001cd0 74 72 24 29 2c 73 74 72 69 6e 67 24 2c bd 26 38 |tr$),string$,.&8| 00001ce0 38 29 29 0d 07 9e 34 73 74 65 70 25 3d a4 73 65 |8))...4step%=.se| 00001cf0 74 6e 75 6d 28 c2 73 74 72 69 6e 67 24 2c a9 73 |tnum(.string$,.s| 00001d00 74 72 69 6e 67 24 2d a7 73 74 72 69 6e 67 24 2c |tring$-.string$,| 00001d10 bd 26 38 38 29 29 29 0d 07 a8 2c f4 20 4f 66 20 |.&88)))...,. Of | 00001d20 74 68 65 20 66 6f 72 6d 20 22 76 61 72 69 61 62 |the form "variab| 00001d30 6c 65 2c 6c 69 6d 69 74 2e 73 74 65 70 3b 61 64 |le,limit.step;ad| 00001d40 64 72 22 0d 07 b2 43 66 6f 72 24 3d a4 66 69 6e |dr"...Cfor$=.fin| 00001d50 64 77 69 6c 64 28 31 2c 73 74 72 69 6e 67 24 2c |dwild(1,string$,| 00001d60 22 3d 22 29 2b 22 2c 22 2b c3 6c 69 6d 69 74 25 |"=")+","+.limit%| 00001d70 2b 22 3a 22 2b c3 73 74 65 70 25 2b 22 3b 22 2b |+":"+.step%+";"+| 00001d80 c3 8f 23 69 6e 25 0d 07 bc 06 3d b9 0d 07 c6 05 |..#in%....=.....| 00001d90 3a 0d 07 d0 12 dd a4 64 69 6d 28 73 74 72 69 6e |:......dim(strin| 00001da0 67 24 29 0d 07 da 31 f4 20 52 65 73 65 72 76 65 |g$)...1. Reserve| 00001db0 20 6d 65 6d 6f 72 79 2c 72 65 74 75 72 6e 69 6e | memory,returnin| 00001dc0 67 20 54 52 55 45 20 69 66 20 73 75 63 63 65 73 |g TRUE if succes| 00001dd0 73 66 75 6c 0d 07 e4 12 ea 6e 61 6d 65 24 2c 61 |sful.....name$,a| 00001de0 6d 6f 75 6e 74 24 0d 07 ee 2c 73 74 72 69 6e 67 |mount$...,string| 00001df0 24 3d a4 73 74 72 69 70 6c 65 66 74 28 c2 73 74 |$=.stripleft(.st| 00001e00 72 69 6e 67 24 2c a9 73 74 72 69 6e 67 24 2d 31 |ring$,.string$-1| 00001e10 29 29 0d 07 f8 3d 6e 61 6d 65 24 3d a4 66 69 6e |))...=name$=.fin| 00001e20 64 77 69 6c 64 28 31 2c 73 74 72 69 6e 67 24 2c |dwild(1,string$,| 00001e30 22 25 20 22 29 3a f4 20 45 69 74 68 65 72 20 69 |"% "):. Either i| 00001e40 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0d |s the separator.| 00001e50 08 02 2e e7 c1 73 74 72 69 6e 67 24 2c 31 2b a9 |.....string$,1+.| 00001e60 6e 61 6d 65 24 2c 31 29 3d 22 25 22 20 8c 6e 61 |name$,1)="%" .na| 00001e70 6d 65 24 3d 6e 61 6d 65 24 2b 22 25 22 0d 08 0c |me$=name$+"%"...| 00001e80 2b 61 6d 6f 75 6e 74 24 3d a4 66 69 6e 64 77 69 |+amount$=.findwi| 00001e90 6c 64 28 31 2b a9 6e 61 6d 65 24 2c 73 74 72 69 |ld(1+.name$,stri| 00001ea0 6e 67 24 2c 22 3a 22 29 0d 08 16 29 e7 6e 61 6d |ng$,":")...).nam| 00001eb0 65 24 3d 22 22 20 80 61 6d 6f 75 6e 74 24 3d 22 |e$="" .amount$="| 00001ec0 22 20 8c f1 27 22 42 61 64 20 44 49 4d 22 3a 3d |" ..'"Bad DIM":=| 00001ed0 a3 0d 08 20 32 e7 6e 61 6d 65 24 3d 22 22 20 84 |... 2.name$="" .| 00001ee0 61 6d 6f 75 6e 74 24 3d 22 22 20 8c f1 27 22 4e |amount$="" ..'"N| 00001ef0 6f 20 73 75 63 68 20 76 61 72 69 61 62 6c 65 22 |o such variable"| 00001f00 3a 3d a3 0d 08 2a 4b de 63 6f 64 65 25 20 32 2a |:=...*K.code% 2*| 00001f10 a4 73 65 74 6e 75 6d 28 61 6d 6f 75 6e 74 24 29 |.setnum(amount$)| 00001f20 3a f4 20 47 65 74 20 74 77 69 63 65 20 61 73 20 |:. Get twice as | 00001f30 6d 75 63 68 20 64 75 65 20 74 6f 20 31 34 20 62 |much due to 14 b| 00001f40 69 74 20 70 72 6f 67 72 61 6d 20 62 75 73 0d 08 |it program bus..| 00001f50 34 25 f2 61 73 73 69 67 6e 76 61 72 69 61 62 6c |4%.assignvariabl| 00001f60 65 28 6e 61 6d 65 24 2b 22 3d 22 2b c3 63 6f 64 |e(name$+"="+.cod| 00001f70 65 25 29 0d 08 3e 06 3d b9 0d 08 48 05 3a 0d 08 |e%)..>.=...H.:..| 00001f80 52 14 dd a4 69 6e 61 73 6d 28 73 74 72 69 6e 67 |R...inasm(string| 00001f90 24 29 0d 08 5c 30 ea 64 61 74 61 25 2c 62 79 74 |$)..\0.data%,byt| 00001fa0 65 25 2c 66 6f 75 6e 64 25 2c 69 6e 69 74 69 61 |e%,found%,initia| 00001fb0 6c 25 2c 6d 6e 65 6d 6f 6e 69 63 24 2c 77 6f 72 |l%,mnemonic$,wor| 00001fc0 6b 24 0d 08 66 3b f4 20 54 6f 6b 65 6e 73 20 66 |k$..f;. Tokens f| 00001fd0 6f 75 6e 64 20 69 6e 73 69 64 65 20 74 68 65 20 |ound inside the | 00001fe0 61 73 73 65 6d 62 6c 65 72 20 61 72 65 20 6d 65 |assembler are me| 00001ff0 72 65 6c 79 20 75 6e 70 61 63 6b 65 64 0d 08 70 |rely unpacked..p| 00002000 15 e3 64 61 74 61 25 3d 31 b8 a9 73 74 72 69 6e |..data%=1..strin| 00002010 67 24 0d 08 7a 1e 62 79 74 65 25 3d 97 28 c1 73 |g$..z.byte%=.(.s| 00002020 74 72 69 6e 67 24 2c 64 61 74 61 25 2c 31 29 29 |tring$,data%,1))| 00002030 0d 08 84 62 e7 62 79 74 65 25 3e 31 32 37 20 80 |...b.byte%>127 .| 00002040 62 79 74 65 25 3c 3e 26 38 44 20 8c 73 74 72 69 |byte%<>&8D .stri| 00002050 6e 67 24 3d c0 73 74 72 69 6e 67 24 2c 64 61 74 |ng$=.string$,dat| 00002060 61 25 2d 31 29 2b a4 75 6e 70 61 63 6b 74 6f 6b |a%-1)+.unpacktok| 00002070 65 6e 28 62 79 74 65 25 29 2b c2 73 74 72 69 6e |en(byte%)+.strin| 00002080 67 24 2c a9 73 74 72 69 6e 67 24 2d 64 61 74 61 |g$,.string$-data| 00002090 25 29 0d 08 8e 05 ed 0d 08 98 2c e7 c0 73 74 72 |%)........,..str| 000020a0 69 6e 67 24 2c 31 29 3d 22 2e 22 20 8c 3d a4 61 |ing$,1)="." .=.a| 000020b0 73 73 69 67 6e 6c 61 62 65 6c 28 73 74 72 69 6e |ssignlabel(strin| 000020c0 67 24 29 0d 08 a2 32 e7 c0 73 74 72 69 6e 67 24 |g$)...2..string$| 000020d0 2c 31 29 3d 22 5b 22 20 8c 73 74 72 69 6e 67 24 |,1)="[" .string$| 000020e0 3d c2 73 74 72 69 6e 67 24 2c a9 73 74 72 69 6e |=.string$,.strin| 000020f0 67 24 2d 31 29 0d 08 ac 3c 77 6f 72 6b 24 3d a4 |g$-1)...<work$=.| 00002100 75 63 61 73 65 28 73 74 72 69 6e 67 24 29 3a f4 |ucase(string$):.| 00002110 20 53 70 65 65 64 73 20 75 70 20 6d 6e 65 6d 6f | Speeds up mnemo| 00002120 6e 69 63 20 74 65 73 74 69 6e 67 20 6c 61 74 65 |nic testing late| 00002130 72 0d 08 b6 27 e7 a7 77 6f 72 6b 24 2c 22 4f 50 |r...'..work$,"OP| 00002140 54 22 29 3d 31 20 8c 3d a4 6f 70 74 69 6f 6e 28 |T")=1 .=.option(| 00002150 73 74 72 69 6e 67 24 29 0d 08 c0 4e e7 a7 77 6f |string$)...N..wo| 00002160 72 6b 24 2c 22 45 51 55 22 29 3d 31 20 8c f1 27 |rk$,"EQU")=1 ..'| 00002170 22 53 69 6c 6c 79 22 3a 3d a3 3a f4 20 4e 6f 74 |"Silly":=.:. Not| 00002180 20 61 6c 6c 6f 77 65 64 20 64 61 74 61 20 6f 6e | allowed data on| 00002190 20 74 68 65 20 70 72 6f 67 72 61 6d 20 62 75 73 | the program bus| 000021a0 2c 73 69 6c 6c 79 0d 08 ca 19 69 6e 69 74 69 61 |,silly....initia| 000021b0 6c 25 3d 97 28 c0 77 6f 72 6b 24 2c 31 29 29 0d |l%=.(.work$,1)).| 000021c0 08 d4 46 e7 69 6e 69 74 69 61 6c 25 3e 97 22 5a |..F.initial%>."Z| 000021d0 22 20 84 69 6e 69 74 69 61 6c 25 3c 97 22 41 22 |" .initial%<."A"| 000021e0 20 8c 3d b9 3a f4 20 45 6d 70 74 79 20 61 6e 64 | .=.:. Empty and| 000021f0 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 20 73 75 | comment line su| 00002200 70 70 6f 72 74 0d 08 de 57 f4 20 55 73 65 20 6c |pport...W. Use l| 00002210 6f 6f 6b 75 70 20 74 61 62 6c 65 20 75 6e 74 69 |ookup table unti| 00002220 6c 20 27 6d 6e 65 6d 6f 6e 69 63 24 3d 73 74 72 |l 'mnemonic$=str| 00002230 69 6e 67 20 69 6e 20 70 72 6f 67 72 61 6d 27 2c |ing in program',| 00002240 74 68 65 6e 20 77 6f 72 6b 20 6f 75 74 20 74 68 |then work out th| 00002250 65 20 70 61 72 61 6d 65 74 65 72 73 0d 08 e8 21 |e parameters...!| 00002260 66 6f 75 6e 64 25 3d 6a 75 6d 70 74 6f 25 28 69 |found%=jumpto%(i| 00002270 6e 69 74 69 61 6c 25 2d 36 34 29 2d 31 0d 08 f2 |nitial%-64)-1...| 00002280 15 f5 3a 66 6f 75 6e 64 25 3d 66 6f 75 6e 64 25 |..:found%=found%| 00002290 2b 31 0d 08 fc 3b 6d 6e 65 6d 6f 6e 69 63 24 3d |+1...;mnemonic$=| 000022a0 c0 6d 6e 65 6d 6f 6e 69 63 24 28 66 6f 75 6e 64 |.mnemonic$(found| 000022b0 25 29 2c a7 6d 6e 65 6d 6f 6e 69 63 24 28 66 6f |%),.mnemonic$(fo| 000022c0 75 6e 64 25 29 2c 22 20 22 29 2d 31 29 0d 09 06 |und%)," ")-1)...| 000022d0 42 fd 6d 6e 65 6d 6f 6e 69 63 24 3d c0 77 6f 72 |B.mnemonic$=.wor| 000022e0 6b 24 2c a9 28 6d 6e 65 6d 6f 6e 69 63 24 29 29 |k$,.(mnemonic$))| 000022f0 20 84 66 6f 75 6e 64 25 3d 6a 75 6d 70 74 6f 25 | .found%=jumpto%| 00002300 28 31 2b 69 6e 69 74 69 61 6c 25 2d 36 34 29 0d |(1+initial%-64).| 00002310 09 10 3d e7 6d 6e 65 6d 6f 6e 69 63 24 3c 3e c0 |..=.mnemonic$<>.| 00002320 77 6f 72 6b 24 2c a9 28 6d 6e 65 6d 6f 6e 69 63 |work$,.(mnemonic| 00002330 24 29 29 20 8c f1 27 22 4e 6f 20 73 75 63 68 20 |$)) ..'"No such | 00002340 6d 6e 65 6d 6f 6e 69 63 22 3a 3d a3 0d 09 1a 1e |mnemonic":=.....| 00002350 3d a4 61 73 6d 70 61 72 6d 73 28 66 6f 75 6e 64 |=.asmparms(found| 00002360 25 2c 73 74 72 69 6e 67 24 29 0d 09 24 05 3a 0d |%,string$)..$.:.| 00002370 09 2e 20 dd a4 61 73 6d 70 61 72 6d 73 28 70 6f |.. ..asmparms(po| 00002380 69 6e 74 65 72 25 2c 73 74 72 69 6e 67 24 29 0d |inter%,string$).| 00002390 09 38 31 ea 77 6f 72 6b 24 2c 6c 65 6e 67 74 68 |.81.work$,length| 000023a0 25 2c 70 61 72 61 6d 65 74 65 72 24 2c 6e 75 6d |%,parameter$,num| 000023b0 62 65 72 25 2c 62 79 74 65 24 2c 6c 74 74 72 24 |ber%,byte$,lttr$| 000023c0 0d 09 42 23 f4 20 49 73 6f 6c 61 74 65 20 74 68 |..B#. Isolate th| 000023d0 65 20 70 61 72 61 6d 65 74 65 72 73 2c 69 66 20 |e parameters,if | 000023e0 61 6e 79 0d 09 4c 33 6c 65 6e 67 74 68 25 3d a9 |any..L3length%=.| 000023f0 28 a4 66 69 6e 64 77 69 6c 64 28 31 2c 6d 6e 65 |(.findwild(1,mne| 00002400 6d 6f 6e 69 63 24 28 70 6f 69 6e 74 65 72 25 29 |monic$(pointer%)| 00002410 2c 22 20 22 29 29 0d 09 56 35 70 61 72 61 6d 65 |," "))..V5parame| 00002420 74 65 72 24 3d a4 73 74 72 69 70 6c 65 66 74 28 |ter$=.stripleft(| 00002430 c2 73 74 72 69 6e 67 24 2c a9 73 74 72 69 6e 67 |.string$,.string| 00002440 24 2d 6c 65 6e 67 74 68 25 29 29 0d 09 60 44 f4 |$-length%))..`D.| 00002450 20 49 6e 73 74 72 75 63 74 69 6f 6e 73 20 72 65 | Instructions re| 00002460 71 75 69 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 |quiring literals| 00002470 20 4e 45 45 44 20 74 6f 20 68 61 76 65 20 61 20 | NEED to have a | 00002480 68 61 73 68 20 61 66 74 65 72 20 74 68 65 6d 0d |hash after them.| 00002490 09 6a 4a e7 c1 6d 6e 65 6d 6f 6e 69 63 24 28 70 |.jJ..mnemonic$(p| 000024a0 6f 69 6e 74 65 72 25 29 2c 34 2c 32 29 3d 22 4c |ointer%),4,2)="L| 000024b0 57 22 20 80 c0 70 61 72 61 6d 65 74 65 72 24 2c |W" ..parameter$,| 000024c0 31 29 3c 3e 22 23 22 20 8c f1 27 22 4d 69 73 73 |1)<>"#" ..'"Miss| 000024d0 69 6e 67 20 23 22 3a 3d a3 0d 09 74 3f f4 20 42 |ing #":=...t?. B| 000024e0 61 73 65 64 20 6f 6e 20 74 68 65 20 74 65 6d 70 |ased on the temp| 000024f0 6c 61 74 65 2c 68 6f 77 20 6d 61 6e 79 20 70 61 |late,how many pa| 00002500 72 61 6d 65 74 65 72 73 20 53 48 4f 55 4c 44 20 |rameters SHOULD | 00002510 74 68 65 72 65 20 62 65 0d 09 7e 2f 6c 74 74 72 |there be..~/lttr| 00002520 24 3d a4 6e 6f 77 69 6c 64 28 c2 6d 6e 65 6d 6f |$=.nowild(.mnemo| 00002530 6e 69 63 24 28 70 6f 69 6e 74 65 72 25 29 2c 33 |nic$(pointer%),3| 00002540 29 2c 22 20 2c 22 29 0d 09 88 35 6e 75 6d 62 65 |)," ,")...5numbe| 00002550 72 25 3d a9 6c 74 74 72 24 3a 70 61 72 61 6d 65 |r%=.lttr$:parame| 00002560 74 65 72 24 3d a4 6e 6f 77 69 6c 64 28 70 61 72 |ter$=.nowild(par| 00002570 61 6d 65 74 65 72 24 2c 22 23 22 29 0d 09 92 34 |ameter$,"#")...4| 00002580 e7 6e 75 6d 62 65 72 25 3d 32 20 80 a7 70 61 72 |.number%=2 ..par| 00002590 61 6d 65 74 65 72 24 2c 22 2c 22 29 3d 30 20 8c |ameter$,",")=0 .| 000025a0 f1 27 22 4d 69 73 73 69 6e 67 20 2c 22 3a 3d a3 |.'"Missing ,":=.| 000025b0 0d 09 9c 44 e7 6e 75 6d 62 65 72 25 3c 3e 30 20 |...D.number%<>0 | 000025c0 80 a4 6e 6f 77 69 6c 64 28 70 61 72 61 6d 65 74 |..nowild(paramet| 000025d0 65 72 24 2c 22 20 22 29 3d 22 22 20 8c f1 27 22 |er$," ")="" ..'"| 000025e0 4e 6f 20 73 75 63 68 20 76 61 72 69 61 62 6c 65 |No such variable| 000025f0 22 3a 3d a3 0d 09 a6 27 e7 28 6f 70 74 69 6f 6e |":=....'.(option| 00002600 25 80 31 29 3c 3e 31 20 8c 3d a4 74 6f 6d 65 6d |%.1)<>1 .=.tomem| 00002610 6f 72 79 28 22 30 22 2c 22 22 29 0d 09 b0 25 62 |ory("0","")...%b| 00002620 79 74 65 24 3d a4 6e 6f 77 69 6c 64 28 62 69 74 |yte$=.nowild(bit| 00002630 24 28 70 6f 69 6e 74 65 72 25 29 2c 22 20 22 29 |$(pointer%)," ")| 00002640 0d 09 ba 2d f4 20 4e 6f 77 20 69 6e 74 65 72 70 |...-. Now interp| 00002650 72 65 74 20 61 6e 64 20 73 75 62 73 74 69 74 75 |ret and substitu| 00002660 74 65 20 74 68 65 20 76 61 6c 75 65 73 0d 09 c4 |te the values...| 00002670 60 e7 6e 75 6d 62 65 72 25 3d 32 20 8c 77 6f 72 |`.number%=2 .wor| 00002680 6b 24 3d a4 66 69 6e 64 77 69 6c 64 28 31 2c 70 |k$=.findwild(1,p| 00002690 61 72 61 6d 65 74 65 72 24 2c 22 2c 22 29 3a 62 |arameter$,","):b| 000026a0 79 74 65 24 3d a4 6f 76 65 72 6c 61 79 28 a4 73 |yte$=.overlay(.s| 000026b0 65 74 6e 75 6d 28 77 6f 72 6b 24 29 2c c0 6c 74 |etnum(work$),.lt| 000026c0 74 72 24 2c 31 29 2c 62 79 74 65 24 29 0d 09 ce |tr$,1),byte$)...| 000026d0 77 e7 6e 75 6d 62 65 72 25 3c 3e 30 20 8c 77 6f |w.number%<>0 .wo| 000026e0 72 6b 24 3d a4 66 69 6e 64 77 69 6c 64 28 6e 75 |rk$=.findwild(nu| 000026f0 6d 62 65 72 25 2b a9 77 6f 72 6b 24 2c 70 61 72 |mber%+.work$,par| 00002700 61 6d 65 74 65 72 24 2c 22 5c 3a 22 29 3a 62 79 |ameter$,"\:"):by| 00002710 74 65 24 3d a4 6f 76 65 72 6c 61 79 28 a4 73 65 |te$=.overlay(.se| 00002720 74 6e 75 6d 28 77 6f 72 6b 24 29 2c c1 6c 74 74 |tnum(work$),.ltt| 00002730 72 24 2c 6e 75 6d 62 65 72 25 2c 31 29 2c 62 79 |r$,number%,1),by| 00002740 74 65 24 29 0d 09 d8 1d 3d a4 74 6f 6d 65 6d 6f |te$)....=.tomemo| 00002750 72 79 28 62 79 74 65 24 2c 73 74 72 69 6e 67 24 |ry(byte$,string$| 00002760 29 0d 09 e2 05 3a 0d 09 ec 1d dd a4 74 6f 6d 65 |)....:......tome| 00002770 6d 6f 72 79 28 62 79 74 65 24 2c 73 74 72 69 6e |mory(byte$,strin| 00002780 67 24 29 0d 09 f6 2d f4 20 41 6c 74 65 72 20 70 |g$)...-. Alter p| 00002790 73 65 75 64 6f 20 70 6f 69 6e 74 65 72 73 20 61 |seudo pointers a| 000027a0 6e 64 20 70 75 74 20 69 6e 20 6d 65 6d 6f 72 79 |nd put in memory| 000027b0 0d 0a 00 39 f2 61 73 73 69 67 6e 76 61 72 69 61 |...9.assignvaria| 000027c0 62 6c 65 28 22 50 25 3d 50 25 2b 31 22 29 3a f2 |ble("P%=P%+1"):.| 000027d0 61 73 73 69 67 6e 76 61 72 69 61 62 6c 65 28 22 |assignvariable("| 000027e0 4f 25 3d 4f 25 2b 31 22 29 0d 0a 0a 13 e7 73 74 |O%=O%+1").....st| 000027f0 72 69 6e 67 24 3d 22 22 20 8c 3d b9 0d 0a 14 0a |ring$="" .=.....| 00002800 ea 62 79 74 65 25 0d 0a 1e 2e 62 79 74 65 25 3d |.byte%....byte%=| 00002810 a4 73 65 74 62 69 6e 28 62 79 74 65 24 29 3a 50 |.setbin(byte$):P| 00002820 25 3d a4 66 69 6e 64 76 61 6c 75 65 28 22 50 25 |%=.findvalue("P%| 00002830 22 29 2d 31 0d 0a 28 1e f4 20 53 68 6f 77 20 74 |")-1..(.. Show t| 00002840 68 65 20 6f 62 6a 65 63 74 20 26 20 73 6f 75 72 |he object & sour| 00002850 63 65 0d 0a 32 45 f1 a4 70 61 64 28 34 2c c3 7e |ce..2E..pad(4,.~| 00002860 50 25 29 3b 22 20 22 3b a4 70 61 64 28 34 2c c3 |P%);" ";.pad(4,.| 00002870 7e 28 62 79 74 65 25 29 29 3b 22 20 20 22 3b a4 |~(byte%));" ";.| 00002880 66 69 6e 64 77 69 6c 64 28 31 2c 73 74 72 69 6e |findwild(1,strin| 00002890 67 24 2c 22 5c 22 29 0d 0a 3c 42 e7 a7 73 74 72 |g$,"\")..<B..str| 000028a0 69 6e 67 24 2c 22 5c 22 29 3c 3e 30 20 8c f1 89 |ing$,"\")<>0 ...| 000028b0 28 31 31 29 3b 22 5c 22 3b c2 73 74 72 69 6e 67 |(11);"\";.string| 000028c0 24 2c a9 73 74 72 69 6e 67 24 2d a7 73 74 72 69 |$,.string$-.stri| 000028d0 6e 67 24 2c 22 5c 22 29 29 0d 0a 46 33 f4 20 43 |ng$,"\"))..F3. C| 000028e0 61 6c 63 75 6c 61 74 65 20 77 68 65 72 65 20 69 |alculate where i| 000028f0 74 20 67 6f 65 73 20 69 6e 20 6e 6f 72 6d 61 6c |t goes in normal| 00002900 20 38 20 62 69 74 20 74 65 72 6d 73 0d 0a 50 3b | 8 bit terms..P;| 00002910 3f 28 63 6f 64 65 25 2b 28 50 25 2a 32 29 29 3d |?(code%+(P%*2))=| 00002920 62 79 74 65 25 20 83 32 35 36 3a 3f 28 63 6f 64 |byte% .256:?(cod| 00002930 65 25 2b 28 50 25 2a 32 29 2b 31 29 3d 62 79 74 |e%+(P%*2)+1)=byt| 00002940 65 25 20 81 32 35 36 0d 0a 5a 06 3d b9 0d 0a 64 |e% .256..Z.=...d| 00002950 05 3a 0d 0a 6e 15 dd a4 6f 70 74 69 6f 6e 28 73 |.:..n...option(s| 00002960 74 72 69 6e 67 24 29 0d 0a 78 36 f4 20 54 68 69 |tring$)..x6. Thi| 00002970 73 20 69 73 20 6a 75 73 74 20 75 73 65 64 20 74 |s is just used t| 00002980 6f 20 63 6f 6e 74 72 6f 6c 20 70 72 69 6e 74 69 |o control printi| 00002990 6e 67 20 61 74 20 70 72 65 73 65 6e 74 0d 0a 82 |ng at present...| 000029a0 2c 6f 70 74 69 6f 6e 25 3d a4 66 69 6e 64 76 61 |,option%=.findva| 000029b0 6c 75 65 28 c2 73 74 72 69 6e 67 24 2c a9 73 74 |lue(.string$,.st| 000029c0 72 69 6e 67 24 2d 33 29 29 0d 0a 8c 21 e7 6f 70 |ring$-3))...!.op| 000029d0 74 69 6f 6e 25 3e 37 20 8c f1 27 22 42 61 64 20 |tion%>7 ..'"Bad | 000029e0 6f 70 74 69 6f 6e 22 3a 3d a3 0d 0a 96 06 3d b9 |option":=.....=.| 000029f0 0d 0a a0 05 3a 0d 0a aa 1f f4 20 2a 2a 2a 2a 47 |....:..... ****G| 00002a00 45 4e 45 52 41 4c 20 55 54 49 4c 49 54 49 45 53 |ENERAL UTILITIES| 00002a10 2a 2a 2a 2a 0d 0a b4 05 3a 0d 0a be 0b dd f2 72 |****....:......r| 00002a20 65 73 65 74 0d 0a c8 35 f4 20 54 68 65 73 65 20 |eset...5. These | 00002a30 61 72 65 20 72 65 73 65 74 20 65 76 65 72 79 20 |are reset every | 00002a40 74 69 6d 65 20 61 20 6e 65 77 20 66 69 6c 65 20 |time a new file | 00002a50 69 73 20 6c 6f 61 64 65 64 0d 0a d2 32 70 6f 69 |is loaded...2poi| 00002a60 6e 74 65 72 25 3d 30 3a f4 20 49 73 20 77 68 65 |nter%=0:. Is whe| 00002a70 72 65 20 69 6e 20 74 68 65 20 42 41 53 49 43 20 |re in the BASIC | 00002a80 66 69 6c 65 20 77 65 20 61 72 65 0d 0a dc 41 69 |file we are...Ai| 00002a90 6e 61 73 6d 25 3d a3 3a f4 20 42 6f 6f 6c 65 61 |nasm%=.:. Boolea| 00002aa0 6e 20 66 6c 61 67 20 61 73 20 74 6f 20 77 68 65 |n flag as to whe| 00002ab0 74 68 65 72 20 69 6e 20 42 41 53 49 43 20 6f 72 |ther in BASIC or| 00002ac0 20 69 6e 73 69 64 65 20 5b 5d 27 73 0d 0a e6 32 | inside []'s...2| 00002ad0 66 6f 72 24 3d 22 22 3a f4 20 48 6f 6c 64 73 20 |for$="":. Holds | 00002ae0 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 46 |details of the F| 00002af0 4f 52 2e 2e 2e 4e 45 58 54 20 6c 6f 6f 70 0d 0a |OR...NEXT loop..| 00002b00 f0 30 63 6f 64 65 25 3d 30 3a f4 20 57 68 65 72 |.0code%=0:. Wher| 00002b10 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 |e the result is | 00002b20 68 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 0d 0a |held in memory..| 00002b30 fa 22 73 25 3d 30 3a 69 25 3d 30 3a 72 25 3d 30 |."s%=0:i%=0:r%=0| 00002b40 3a 6e 25 3d 30 3a f4 20 4e 6f 6e 65 20 79 65 74 |:n%=0:. None yet| 00002b50 0d 0b 04 47 64 65 6c 74 61 24 3d 22 40 22 3a f4 |...Gdelta$="@":.| 00002b60 20 48 6f 6c 64 73 20 74 68 65 20 31 73 74 20 6c | Holds the 1st l| 00002b70 65 74 74 65 72 20 6f 66 20 74 68 65 20 6c 61 73 |etter of the las| 00002b80 74 20 6d 6e 65 6d 6f 6e 69 63 20 63 68 61 6e 67 |t mnemonic chang| 00002b90 65 20 66 6f 75 6e 64 0d 0b 0e 26 6f 70 74 69 6f |e found...&optio| 00002ba0 6e 25 3d 30 3a f4 20 41 73 73 65 6d 62 6c 65 72 |n%=0:. Assembler| 00002bb0 20 6f 70 74 69 6f 6e 20 27 4f 50 54 27 0d 0b 18 | option 'OPT'...| 00002bc0 05 e1 0d 0b 22 05 3a 0d 0b 2c 0a dd f2 64 75 6d |....".:..,...dum| 00002bd0 70 0d 0b 36 13 ea 73 25 2c 69 25 2c 72 25 2c 64 |p..6..s%,i%,r%,d| 00002be0 61 74 61 25 0d 0b 40 0c e7 6e 25 3d 30 20 8c e1 |ata%..@..n%=0 ..| 00002bf0 0d 0b 4a 2c f1 22 54 68 65 72 65 20 61 72 65 20 |..J,."There are | 00002c00 22 3b 6e 25 3b 22 20 76 61 72 69 61 62 6c 65 73 |";n%;" variables| 00002c10 20 64 65 66 69 6e 65 64 2e 2e 2e 22 0d 0b 54 05 | defined..."..T.| 00002c20 f5 0d 0b 5e 1a f1 6e 61 6d 65 24 28 64 61 74 61 |...^..name$(data| 00002c30 25 29 3b 22 20 69 73 20 61 22 3b 0d 0b 68 3a e7 |%);" is a";..h:.| 00002c40 c2 6e 61 6d 65 24 28 64 61 74 61 25 29 2c 31 29 |.name$(data%),1)| 00002c50 3d 22 24 22 20 8c f1 22 20 73 74 72 69 6e 67 3d |="$" .." string=| 00002c60 22 2c 73 74 72 69 6e 67 24 28 73 25 29 3a 73 25 |",string$(s%):s%| 00002c70 3d 73 25 2b 31 0d 0b 72 3d e7 c2 6e 61 6d 65 24 |=s%+1..r=..name$| 00002c80 28 64 61 74 61 25 29 2c 31 29 3d 22 25 22 20 8c |(data%),1)="%" .| 00002c90 f1 22 6e 20 69 6e 74 65 67 65 72 3d 22 2c 69 6e |."n integer=",in| 00002ca0 74 65 67 65 72 25 28 69 25 29 3a 69 25 3d 69 25 |teger%(i%):i%=i%| 00002cb0 2b 31 0d 0b 7c 54 e7 c2 6e 61 6d 65 24 28 64 61 |+1..|T..name$(da| 00002cc0 74 61 25 29 2c 31 29 3c 3e 22 24 22 20 80 c2 6e |ta%),1)<>"$" ..n| 00002cd0 61 6d 65 24 28 64 61 74 61 25 29 2c 31 29 3c 3e |ame$(data%),1)<>| 00002ce0 22 25 22 20 8c f1 22 20 72 65 61 6c 20 6e 75 6d |"%" .." real num| 00002cf0 62 65 72 3d 22 2c 72 65 61 6c 28 72 25 29 3a 72 |ber=",real(r%):r| 00002d00 25 3d 72 25 2b 31 0d 0b 86 11 64 61 74 61 25 3d |%=r%+1....data%=| 00002d10 64 61 74 61 25 2b 31 0d 0b 90 0d fd 64 61 74 61 |data%+1.....data| 00002d20 25 3d 6e 25 0d 0b 9a 05 e1 0d 0b a4 05 3a 0d 0b |%=n%.........:..| 00002d30 ae 1a dd a4 63 6f 75 6e 74 28 6c 74 74 72 24 2c |....count(lttr$,| 00002d40 73 74 72 69 6e 67 24 29 0d 0b b8 38 f4 20 52 65 |string$)...8. Re| 00002d50 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 |turns the maximu| 00002d60 6d 20 6e 75 6d 62 65 72 20 61 6c 6c 6f 77 65 64 |m number allowed| 00002d70 20 66 6f 72 20 61 20 70 61 72 61 6d 65 74 65 72 | for a parameter| 00002d80 0d 0b c2 12 ea 64 61 74 61 25 2c 6c 65 6e 67 74 |.....data%,lengt| 00002d90 68 25 0d 0b cc 17 e3 64 61 74 61 25 3d 31 b8 a9 |h%.....data%=1..| 00002da0 28 73 74 72 69 6e 67 24 29 0d 0b d6 2f e7 c1 73 |(string$).../..s| 00002db0 74 72 69 6e 67 24 2c 64 61 74 61 25 2c 31 29 3d |tring$,data%,1)=| 00002dc0 6c 74 74 72 24 20 8c 6c 65 6e 67 74 68 25 3d 6c |lttr$ .length%=l| 00002dd0 65 6e 67 74 68 25 2b 31 0d 0b e0 05 ed 0d 0b ea |ength%+1........| 00002de0 0c 3d 6c 65 6e 67 74 68 25 0d 0b f4 05 3a 0d 0b |.=length%....:..| 00002df0 fe 1c dd a4 75 6e 70 61 63 6b 74 6f 6b 65 6e 28 |....unpacktoken(| 00002e00 74 6f 6b 65 6e 6e 75 6d 25 29 0d 0c 08 26 f4 20 |tokennum%)...&. | 00002e10 43 6f 6e 76 65 72 74 20 74 6f 6b 65 6e 20 74 6f |Convert token to| 00002e20 20 6d 65 61 6e 69 6e 67 66 75 6c 20 74 65 78 74 | meaningful text| 00002e30 0d 0c 12 16 ea 62 79 74 65 25 2c 64 61 74 61 25 |.....byte%,data%| 00002e40 2c 6d 61 73 6b 25 0d 0c 1c 2b e7 74 6f 6b 65 6e |,mask%...+.token| 00002e50 6e 75 6d 25 3c 3e 26 38 44 20 8c 3d 74 6f 6b 65 |num%<>&8D .=toke| 00002e60 6e 24 28 74 6f 6b 65 6e 6e 75 6d 25 2d 31 32 38 |n$(tokennum%-128| 00002e70 29 0d 0c 26 1a f4 20 49 74 20 77 61 73 20 61 20 |)..&.. It was a | 00002e80 6c 69 6e 65 20 6e 75 6d 62 65 72 0d 0c 30 0f 62 |line number..0.b| 00002e90 79 74 65 25 3d 9a 23 69 6e 25 0d 0c 3a 3c 64 61 |yte%=.#in%..:<da| 00002ea0 74 61 25 3d 28 62 79 74 65 25 20 80 28 33 32 2b |ta%=(byte% .(32+| 00002eb0 31 36 29 29 2a 34 3a f4 20 53 68 69 66 74 20 75 |16))*4:. Shift u| 00002ec0 70 20 32 20 70 6c 61 63 65 73 20 61 6e 64 20 64 |p 2 places and d| 00002ed0 69 73 63 61 72 64 0d 0c 44 17 64 61 74 61 25 3d |iscard..D.data%=| 00002ee0 64 61 74 61 25 20 82 20 9a 23 69 6e 25 0d 0c 4e |data% . .#in%..N| 00002ef0 40 6d 61 73 6b 25 3d 28 62 79 74 65 25 20 80 28 |@mask%=(byte% .(| 00002f00 38 2b 34 29 29 2a 31 36 3a f4 20 53 68 69 66 74 |8+4))*16:. Shift| 00002f10 20 75 70 20 32 20 70 6c 61 63 65 73 20 6d 6f 72 | up 2 places mor| 00002f20 65 20 61 6e 64 20 64 69 73 63 61 72 64 0d 0c 58 |e and discard..X| 00002f30 17 6d 61 73 6b 25 3d 6d 61 73 6b 25 20 82 20 9a |.mask%=mask% . .| 00002f40 23 69 6e 25 0d 0c 62 16 3d 64 61 74 61 25 2b 28 |#in%..b.=data%+(| 00002f50 6d 61 73 6b 25 2a 32 35 36 29 0d 0c 6c 05 3a 0d |mask%*256)..l.:.| 00002f60 0c 76 1e f4 20 2a 2a 2a 2a 53 54 52 49 4e 47 20 |.v.. ****STRING | 00002f70 55 54 49 4c 49 54 49 45 53 2a 2a 2a 2a 0d 0c 80 |UTILITIES****...| 00002f80 05 3a 0d 0c 8a 1a dd a4 70 61 64 28 6c 65 6e 67 |.:......pad(leng| 00002f90 74 68 25 2c 73 74 72 69 6e 67 24 29 0d 0c 94 23 |th%,string$)...#| 00002fa0 3d c4 6c 65 6e 67 74 68 25 2d a9 73 74 72 69 6e |=.length%-.strin| 00002fb0 67 24 2c 22 30 22 29 2b 73 74 72 69 6e 67 24 0d |g$,"0")+string$.| 00002fc0 0c 9e 05 3a 0d 0c a8 2b dd a4 66 69 6e 64 77 69 |...:...+..findwi| 00002fd0 6c 64 28 70 6f 69 6e 74 65 72 25 2c 73 74 72 69 |ld(pointer%,stri| 00002fe0 6e 67 24 2c 73 65 70 61 72 61 74 6f 72 24 29 0d |ng$,separator$).| 00002ff0 0c b2 40 f4 20 46 69 6e 64 20 61 6c 6c 20 74 68 |..@. Find all th| 00003000 65 20 74 65 78 74 20 66 72 6f 6d 20 70 6f 69 6e |e text from poin| 00003010 74 65 72 25 20 74 6f 20 74 68 65 20 63 68 6f 73 |ter% to the chos| 00003020 65 6e 20 73 65 70 61 72 61 74 6f 72 28 73 29 0d |en separator(s).| 00003030 0c bc 19 ea 6c 65 6e 67 74 68 25 2c 66 6f 75 6e |....length%,foun| 00003040 64 25 2c 64 61 74 61 25 0d 0c c6 1c e3 64 61 74 |d%,data%.....dat| 00003050 61 25 3d 70 6f 69 6e 74 65 72 25 b8 a9 73 74 72 |a%=pointer%..str| 00003060 69 6e 67 24 0d 0c d0 3e e7 a7 73 65 70 61 72 61 |ing$...>..separa| 00003070 74 6f 72 24 2c c1 73 74 72 69 6e 67 24 2c 64 61 |tor$,.string$,da| 00003080 74 61 25 2c 31 29 29 3c 3e 30 20 80 66 6f 75 6e |ta%,1))<>0 .foun| 00003090 64 25 3d a3 20 8c 66 6f 75 6e 64 25 3d 64 61 74 |d%=. .found%=dat| 000030a0 61 25 0d 0c da 05 ed 0d 0c e4 33 e7 66 6f 75 6e |a%........3.foun| 000030b0 64 25 3d a3 20 8c 66 6f 75 6e 64 25 3d a9 73 74 |d%=. .found%=.st| 000030c0 72 69 6e 67 24 2b 31 3a f4 20 4e 6f 74 20 66 6f |ring$+1:. Not fo| 000030d0 75 6e 64 20 61 74 20 61 6c 6c 0d 0c ee 27 3d c1 |und at all...'=.| 000030e0 73 74 72 69 6e 67 24 2c 70 6f 69 6e 74 65 72 25 |string$,pointer%| 000030f0 2c 66 6f 75 6e 64 25 2d 70 6f 69 6e 74 65 72 25 |,found%-pointer%| 00003100 29 0d 0c f8 05 3a 0d 0d 02 1e dd a4 70 6f 70 68 |)....:......poph| 00003110 65 78 28 73 74 72 69 6e 67 24 2c 70 6f 69 6e 74 |ex(string$,point| 00003120 65 72 25 29 0d 0d 0c 26 f4 20 47 65 74 73 20 74 |er%)...&. Gets t| 00003130 68 65 20 68 65 78 20 6e 75 6d 62 65 72 20 74 68 |he hex number th| 00003140 61 74 20 66 6f 6c 6c 6f 77 73 0d 0d 16 12 ea 64 |at follows.....d| 00003150 61 74 61 25 2c 6c 65 6e 67 74 68 25 0d 0d 20 20 |ata%,length%.. | 00003160 e3 64 61 74 61 25 3d 28 70 6f 69 6e 74 65 72 25 |.data%=(pointer%| 00003170 2b 31 29 b8 a9 73 74 72 69 6e 67 24 0d 0d 2a 47 |+1)..string$..*G| 00003180 e7 6c 65 6e 67 74 68 25 3d 30 20 80 a7 22 30 31 |.length%=0 .."01| 00003190 32 33 34 35 36 37 38 39 41 42 43 44 45 46 22 2c |23456789ABCDEF",| 000031a0 c1 73 74 72 69 6e 67 24 2c 64 61 74 61 25 2c 31 |.string$,data%,1| 000031b0 29 29 3d 30 20 8c 6c 65 6e 67 74 68 25 3d 64 61 |))=0 .length%=da| 000031c0 74 61 25 0d 0d 34 05 ed 0d 0d 3e 28 3d c1 73 74 |ta%..4....>(=.st| 000031d0 72 69 6e 67 24 2c 70 6f 69 6e 74 65 72 25 2c 6c |ring$,pointer%,l| 000031e0 65 6e 67 74 68 25 2d 70 6f 69 6e 74 65 72 25 29 |ength%-pointer%)| 000031f0 0d 0d 48 05 3a 0d 0d 52 19 dd a4 73 74 72 69 70 |..H.:..R...strip| 00003200 72 69 67 68 74 28 73 74 72 69 6e 67 24 29 0d 0d |right(string$)..| 00003210 5c 15 f4 20 50 65 72 66 6f 72 6d 73 20 52 54 52 |\.. Performs RTR| 00003220 49 4d 24 0d 0d 66 13 ea 64 61 74 61 25 2c 70 6f |IM$..f..data%,po| 00003230 69 6e 74 65 72 25 0d 0d 70 1b e3 64 61 74 61 25 |inter%..p..data%| 00003240 3d a9 28 73 74 72 69 6e 67 24 29 b8 31 20 88 2d |=.(string$).1 .-| 00003250 31 0d 0d 7a 37 e7 70 6f 69 6e 74 65 72 25 3d 30 |1..z7.pointer%=0| 00003260 20 80 c1 73 74 72 69 6e 67 24 2c 64 61 74 61 25 | ..string$,data%| 00003270 2c 31 29 3c 3e 22 20 22 20 8c 70 6f 69 6e 74 65 |,1)<>" " .pointe| 00003280 72 25 3d 64 61 74 61 25 0d 0d 84 05 ed 0d 0d 8e |r%=data%........| 00003290 17 3d c0 73 74 72 69 6e 67 24 2c 70 6f 69 6e 74 |.=.string$,point| 000032a0 65 72 25 29 0d 0d 98 05 3a 0d 0d a2 18 dd a4 73 |er%)....:......s| 000032b0 74 72 69 70 6c 65 66 74 28 73 74 72 69 6e 67 24 |tripleft(string$| 000032c0 29 0d 0d ac 15 f4 20 50 65 72 66 6f 72 6d 73 20 |)..... Performs | 000032d0 4c 54 52 49 4d 24 0d 0d b6 13 ea 64 61 74 61 25 |LTRIM$.....data%| 000032e0 2c 70 6f 69 6e 74 65 72 25 0d 0d c0 17 e3 64 61 |,pointer%.....da| 000032f0 74 61 25 3d 31 b8 a9 28 73 74 72 69 6e 67 24 29 |ta%=1..(string$)| 00003300 0d 0d ca 37 e7 70 6f 69 6e 74 65 72 25 3d 30 20 |...7.pointer%=0 | 00003310 80 c1 73 74 72 69 6e 67 24 2c 64 61 74 61 25 2c |..string$,data%,| 00003320 31 29 3c 3e 22 20 22 20 8c 70 6f 69 6e 74 65 72 |1)<>" " .pointer| 00003330 25 3d 64 61 74 61 25 0d 0d d4 05 ed 0d 0d de 24 |%=data%........$| 00003340 3d c2 73 74 72 69 6e 67 24 2c a9 28 73 74 72 69 |=.string$,.(stri| 00003350 6e 67 24 29 2d 70 6f 69 6e 74 65 72 25 2b 31 29 |ng$)-pointer%+1)| 00003360 0d 0d e8 05 3a 0d 0d f2 20 dd a4 6e 6f 77 69 6c |....:... ..nowil| 00003370 64 28 73 74 72 69 6e 67 24 2c 73 65 70 61 72 61 |d(string$,separa| 00003380 74 6f 72 24 29 0d 0d fc 3b f4 20 47 65 74 73 20 |tor$)...;. Gets | 00003390 72 69 64 20 6f 66 20 41 4c 4c 20 6f 63 63 75 72 |rid of ALL occur| 000033a0 65 6e 63 65 73 20 6f 66 20 74 68 65 20 63 68 6f |ences of the cho| 000033b0 73 65 6e 20 73 65 70 61 72 61 74 6f 72 28 73 29 |sen separator(s)| 000033c0 0d 0e 06 10 ea 77 6f 72 6b 24 2c 64 61 74 61 25 |.....work$,data%| 000033d0 0d 0e 10 15 e3 64 61 74 61 25 3d 31 b8 a9 73 74 |.....data%=1..st| 000033e0 72 69 6e 67 24 0d 0e 1a 44 e7 a7 73 65 70 61 72 |ring$...D..separ| 000033f0 61 74 6f 72 24 2c c1 73 74 72 69 6e 67 24 2c 64 |ator$,.string$,d| 00003400 61 74 61 25 2c 31 29 29 3d 30 20 8c 77 6f 72 6b |ata%,1))=0 .work| 00003410 24 3d 77 6f 72 6b 24 2b c1 73 74 72 69 6e 67 24 |$=work$+.string$| 00003420 2c 64 61 74 61 25 2c 31 29 0d 0e 24 05 ed 0d 0e |,data%,1)..$....| 00003430 2e 0a 3d 77 6f 72 6b 24 0d 0e 38 05 3a 0d 0e 42 |..=work$..8.:..B| 00003440 14 dd a4 75 63 61 73 65 28 73 74 72 69 6e 67 24 |...ucase(string$| 00003450 29 0d 0e 4c 40 f4 20 41 6c 70 68 61 62 65 74 69 |)..L@. Alphabeti| 00003460 63 73 20 3d 3e 20 75 70 70 65 72 20 63 61 73 65 |cs => upper case| 00003470 20 28 41 53 43 69 69 20 76 61 6c 75 65 73 20 6f | (ASCii values o| 00003480 66 20 61 2c 7a 20 61 72 65 20 39 37 2c 31 32 32 |f a,z are 97,122| 00003490 29 0d 0e 56 16 ea 64 61 74 61 25 2c 77 6f 72 6b |)..V..data%,work| 000034a0 24 2c 62 79 74 65 25 0d 0e 60 17 e3 64 61 74 61 |$,byte%..`..data| 000034b0 25 3d 31 b8 a9 28 73 74 72 69 6e 67 24 29 0d 0e |%=1..(string$)..| 000034c0 6a 22 62 79 74 65 25 3d 97 28 c1 73 74 72 69 6e |j"byte%=.(.strin| 000034d0 67 24 2c 64 61 74 61 25 2c 31 29 29 80 26 44 46 |g$,data%,1)).&DF| 000034e0 0d 0e 74 4e e7 62 79 74 65 25 3e 97 22 5a 22 20 |..tN.byte%>."Z" | 000034f0 84 62 79 74 65 25 3c 97 22 41 22 20 8c 77 6f 72 |.byte%<."A" .wor| 00003500 6b 24 3d 77 6f 72 6b 24 2b c1 73 74 72 69 6e 67 |k$=work$+.string| 00003510 24 2c 64 61 74 61 25 2c 31 29 20 8b 77 6f 72 6b |$,data%,1) .work| 00003520 24 3d 77 6f 72 6b 24 2b bd 62 79 74 65 25 0d 0e |$=work$+.byte%..| 00003530 7e 05 ed 0d 0e 88 0a 3d 77 6f 72 6b 24 0d 0e 92 |~......=work$...| 00003540 05 3a 0d 0e 9c 21 f4 20 2a 2a 2a 2a 4e 55 4d 45 |.:...!. ****NUME| 00003550 52 49 43 41 4c 20 55 54 49 4c 49 54 49 45 53 2a |RICAL UTILITIES*| 00003560 2a 2a 2a 0d 0e a6 05 3a 0d 0e b0 22 dd a4 6f 76 |***....:..."..ov| 00003570 65 72 6c 61 79 28 6f 76 65 72 25 2c 6c 74 74 72 |erlay(over%,lttr| 00003580 24 2c 73 74 72 69 6e 67 24 29 0d 0e ba 3e f4 20 |$,string$)...>. | 00003590 4f 76 65 72 6c 61 79 73 20 74 68 65 20 62 69 6e |Overlays the bin| 000035a0 61 72 79 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f |ary conversion o| 000035b0 66 20 6f 76 65 72 25 20 69 6e 20 6c 74 74 72 24 |f over% in lttr$| 000035c0 27 73 20 70 6c 61 63 65 0d 0e c4 12 ea 62 69 6e |'s place.....bin| 000035d0 61 72 79 24 2c 64 61 74 61 25 0d 0e ce 29 e3 64 |ary$,data%...).d| 000035e0 61 74 61 25 3d 28 a4 63 6f 75 6e 74 28 6c 74 74 |ata%=(.count(ltt| 000035f0 72 24 2c 73 74 72 69 6e 67 24 29 2d 31 29 b8 30 |r$,string$)-1).0| 00003600 88 2d 31 0d 0e d8 29 62 69 6e 61 72 79 24 3d 62 |.-1...)binary$=b| 00003610 69 6e 61 72 79 24 2b c3 28 b4 28 6f 76 65 72 25 |inary$+.(.(over%| 00003620 80 28 32 5e 64 61 74 61 25 29 29 29 0d 0e e2 05 |.(2^data%)))....| 00003630 ed 0d 0e ec 5a 3d c0 73 74 72 69 6e 67 24 2c a7 |....Z=.string$,.| 00003640 73 74 72 69 6e 67 24 2c 6c 74 74 72 24 29 2d 31 |string$,lttr$)-1| 00003650 29 2b 62 69 6e 61 72 79 24 2b c2 73 74 72 69 6e |)+binary$+.strin| 00003660 67 24 2c a9 28 73 74 72 69 6e 67 24 29 2d a7 73 |g$,.(string$)-.s| 00003670 74 72 69 6e 67 24 2c 6c 74 74 72 24 29 2d a9 28 |tring$,lttr$)-.(| 00003680 62 69 6e 61 72 79 24 29 2b 31 29 0d 0e f6 05 3a |binary$)+1)....:| 00003690 0d 0f 00 18 dd a4 66 69 6e 64 76 61 6c 75 65 28 |......findvalue(| 000036a0 73 74 72 69 6e 67 24 29 0d 0f 0a 32 e7 c2 73 74 |string$)...2..st| 000036b0 72 69 6e 67 24 2c 31 29 3d 22 24 22 20 8c 3d 73 |ring$,1)="$" .=s| 000036c0 74 72 69 6e 67 24 28 a4 61 6c 6c 6f 63 61 74 65 |tring$(.allocate| 000036d0 28 73 74 72 69 6e 67 24 29 29 0d 0f 14 33 e7 c2 |(string$))...3..| 000036e0 73 74 72 69 6e 67 24 2c 31 29 3d 22 25 22 20 8c |string$,1)="%" .| 000036f0 3d 69 6e 74 65 67 65 72 25 28 a4 61 6c 6c 6f 63 |=integer%(.alloc| 00003700 61 74 65 28 73 74 72 69 6e 67 24 29 29 0d 0f 1e |ate(string$))...| 00003710 1d 3d 72 65 61 6c 28 a4 61 6c 6c 6f 63 61 74 65 |.=real(.allocate| 00003720 28 73 74 72 69 6e 67 24 29 29 0d 0f 28 05 3a 0d |(string$))..(.:.| 00003730 0f 32 1d dd f2 61 73 73 69 67 6e 76 61 72 69 61 |.2...assignvaria| 00003740 62 6c 65 28 73 74 72 69 6e 67 24 29 0d 0f 3c 34 |ble(string$)..<4| 00003750 f4 20 55 73 65 64 20 74 6f 20 64 65 66 69 6e 65 |. Used to define| 00003760 20 76 61 72 69 61 62 6c 65 73 20 6f 75 74 73 69 | variables outsi| 00003770 64 65 20 74 68 65 20 61 73 73 65 6d 62 6c 65 72 |de the assembler| 00003780 0d 0f 46 16 ea 64 61 74 61 25 2c 6c 74 74 72 24 |..F..data%,lttr$| 00003790 2c 77 6f 72 6b 24 0d 0f 50 2e 77 6f 72 6b 24 3d |,work$..P.work$=| 000037a0 a4 73 74 72 69 70 6c 65 66 74 28 a4 66 69 6e 64 |.stripleft(.find| 000037b0 77 69 6c 64 28 31 2c 73 74 72 69 6e 67 24 2c 22 |wild(1,string$,"| 000037c0 3d 22 29 29 0d 0f 5a 3d 77 6f 72 6b 24 3d a4 73 |="))..Z=work$=.s| 000037d0 74 72 69 70 72 69 67 68 74 28 77 6f 72 6b 24 29 |tripright(work$)| 000037e0 3a f4 20 4e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 |:. Now contains | 000037f0 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d |the variable nam| 00003800 65 0d 0f 64 36 f4 20 46 69 72 73 74 2c 73 65 61 |e..d6. First,sea| 00003810 72 63 68 20 66 6f 72 20 61 62 73 6f 6c 75 74 65 |rch for absolute| 00003820 6c 79 20 66 6f 72 62 69 64 64 65 6e 20 63 68 61 |ly forbidden cha| 00003830 72 61 63 74 65 72 73 0d 0f 6e 19 e3 64 61 74 61 |racters..n..data| 00003840 25 3d 31 b8 28 a9 28 77 6f 72 6b 24 29 2d 31 29 |%=1.(.(work$)-1)| 00003850 0d 0f 78 19 6c 74 74 72 24 3d c1 77 6f 72 6b 24 |..x.lttr$=.work$| 00003860 2c 64 61 74 61 25 2c 31 29 0d 0f 82 4b e7 a7 bd |,data%,1)...K...| 00003870 33 34 2b 22 20 21 23 25 26 27 28 29 2a 2b 2c 2d |34+" !#%&'()*+,-| 00003880 2e 2f 3a 3b 3c 3d 3e 3f 40 5b 5c 5d 5e 60 22 2c |./:;<=>?@[\]^`",| 00003890 6c 74 74 72 24 29 3c 3e 30 20 84 97 6c 74 74 72 |lttr$)<>0 ..lttr| 000038a0 24 3e 31 32 32 20 8c f1 27 22 4d 69 73 74 61 6b |$>122 ..'"Mistak| 000038b0 65 22 3a e1 0d 0f 8c 05 ed 0d 0f 96 32 f4 20 4e |e":.........2. N| 000038c0 6f 77 2c 63 68 65 63 6b 20 69 74 20 64 6f 65 73 |ow,check it does| 000038d0 6e 27 74 20 73 74 61 72 74 20 77 69 74 68 20 61 |n't start with a| 000038e0 6e 79 20 6f 66 20 74 68 65 73 65 0d 0f a0 13 6c |ny of these....l| 000038f0 74 74 72 24 3d c0 77 6f 72 6b 24 2c 31 29 0d 0f |ttr$=.work$,1)..| 00003900 aa 30 e7 a7 22 30 31 32 33 34 35 36 37 38 39 22 |.0.."0123456789"| 00003910 2c 6c 74 74 72 24 29 3c 3e 30 20 8c f1 27 22 53 |,lttr$)<>0 ..'"S| 00003920 79 6e 74 61 78 20 65 72 72 6f 72 22 3a e1 0d 0f |yntax error":...| 00003930 b4 30 e7 6c 74 74 72 24 3d 22 24 22 20 8c f1 27 |.0.lttr$="$" ..'| 00003940 22 44 6f 6e 27 74 20 75 73 65 20 74 68 65 20 27 |"Don't use the '| 00003950 24 27 20 6f 70 65 72 61 74 6f 72 22 3a e1 0d 0f |$' operator":...| 00003960 be 19 f4 20 47 75 65 73 73 20 74 68 65 20 74 79 |... Guess the ty| 00003970 70 65 20 74 69 6d 65 0d 0f c8 13 6c 74 74 72 24 |pe time....lttr$| 00003980 3d c2 77 6f 72 6b 24 2c 31 29 0d 0f d2 4a e7 a7 |=.work$,1)...J..| 00003990 bd 33 34 2b 22 20 21 23 26 27 28 29 2a 2b 2c 2d |.34+" !#&'()*+,-| 000039a0 2e 2f 3a 3b 3c 3d 3e 3f 40 5b 5c 5d 5e 60 22 2c |./:;<=>?@[\]^`",| 000039b0 6c 74 74 72 24 29 3c 3e 30 20 84 97 6c 74 74 72 |lttr$)<>0 ..lttr| 000039c0 24 3e 31 32 32 20 8c f1 27 22 4d 69 73 74 61 6b |$>122 ..'"Mistak| 000039d0 65 22 3a e1 0d 0f dc 3c f4 20 4c 6f 63 61 74 65 |e":....<. Locate| 000039e0 2f 63 72 65 61 74 65 20 73 6c 6f 74 20 70 61 73 |/create slot pas| 000039f0 73 69 6e 67 20 27 73 74 72 69 6e 67 24 27 20 61 |sing 'string$' a| 00003a00 73 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e |s the expression| 00003a10 0d 0f e6 2e 73 74 72 69 6e 67 24 3d c2 73 74 72 |....string$=.str| 00003a20 69 6e 67 24 2c a9 28 73 74 72 69 6e 67 24 29 2d |ing$,.(string$)-| 00003a30 a7 73 74 72 69 6e 67 24 2c 22 3d 22 29 29 0d 0f |.string$,"="))..| 00003a40 f0 3a e7 6c 74 74 72 24 3d 22 24 22 20 8c 73 74 |.:.lttr$="$" .st| 00003a50 72 69 6e 67 24 28 a4 61 6c 6c 6f 63 61 74 65 28 |ring$(.allocate(| 00003a60 77 6f 72 6b 24 29 29 3d a4 73 65 74 73 74 72 28 |work$))=.setstr(| 00003a70 73 74 72 69 6e 67 24 29 0d 0f fa 3b e7 6c 74 74 |string$)...;.ltt| 00003a80 72 24 3d 22 25 22 20 8c 69 6e 74 65 67 65 72 25 |r$="%" .integer%| 00003a90 28 a4 61 6c 6c 6f 63 61 74 65 28 77 6f 72 6b 24 |(.allocate(work$| 00003aa0 29 29 3d a4 73 65 74 6e 75 6d 28 73 74 72 69 6e |))=.setnum(strin| 00003ab0 67 24 29 0d 10 04 44 e7 6c 74 74 72 24 3c 3e 22 |g$)...D.lttr$<>"| 00003ac0 25 22 20 80 6c 74 74 72 24 3c 3e 22 24 22 20 8c |%" .lttr$<>"$" .| 00003ad0 72 65 61 6c 28 a4 61 6c 6c 6f 63 61 74 65 28 77 |real(.allocate(w| 00003ae0 6f 72 6b 24 29 29 3d a4 73 65 74 6e 75 6d 28 73 |ork$))=.setnum(s| 00003af0 74 72 69 6e 67 24 29 0d 10 0e 05 e1 0d 10 18 05 |tring$).........| 00003b00 3a 0d 10 22 1a dd a4 61 73 73 69 67 6e 6c 61 62 |:.."...assignlab| 00003b10 65 6c 28 73 74 72 69 6e 67 24 29 0d 10 2c 2c f4 |el(string$)..,,.| 00003b20 20 55 73 65 64 20 62 79 20 74 68 65 20 61 73 73 | Used by the ass| 00003b30 65 6d 62 6c 65 72 20 74 6f 20 61 73 73 69 67 6e |embler to assign| 00003b40 20 6c 61 62 65 6c 73 0d 10 36 16 ea 64 61 74 61 | labels..6..data| 00003b50 25 2c 6c 74 74 72 24 2c 77 6f 72 6b 24 0d 10 40 |%,lttr$,work$..@| 00003b60 2e 73 74 72 69 6e 67 24 3d a4 73 74 72 69 70 6c |.string$=.stripl| 00003b70 65 66 74 28 c2 73 74 72 69 6e 67 24 2c a9 28 73 |eft(.string$,.(s| 00003b80 74 72 69 6e 67 24 29 2d 31 29 29 0d 10 4a 43 e7 |tring$)-1))..JC.| 00003b90 28 6f 70 74 69 6f 6e 25 80 31 29 3d 31 20 8c f1 |(option%.1)=1 ..| 00003ba0 a4 70 61 64 28 34 2c c3 7e a4 66 69 6e 64 76 61 |.pad(4,.~.findva| 00003bb0 6c 75 65 28 22 50 25 22 29 29 3b 89 28 37 29 3b |lue("P%"));.(7);| 00003bc0 22 2e 22 3b 73 74 72 69 6e 67 24 3a 3d b9 0d 10 |".";string$:=...| 00003bd0 54 20 73 74 72 69 6e 67 24 3d a4 73 74 72 69 70 |T string$=.strip| 00003be0 72 69 67 68 74 28 73 74 72 69 6e 67 24 29 0d 10 |right(string$)..| 00003bf0 5e 36 f4 20 46 69 72 73 74 2c 73 65 61 72 63 68 |^6. First,search| 00003c00 20 66 6f 72 20 61 62 73 6f 6c 75 74 65 6c 79 20 | for absolutely | 00003c10 66 6f 72 62 69 64 64 65 6e 20 63 68 61 72 61 63 |forbidden charac| 00003c20 74 65 72 73 0d 10 68 1b e3 64 61 74 61 25 3d 31 |ters..h..data%=1| 00003c30 b8 28 a9 28 73 74 72 69 6e 67 24 29 2d 31 29 0d |.(.(string$)-1).| 00003c40 10 72 1b 6c 74 74 72 24 3d c1 73 74 72 69 6e 67 |.r.lttr$=.string| 00003c50 24 2c 64 61 74 61 25 2c 31 29 0d 10 7c 4c e7 a7 |$,data%,1)..|L..| 00003c60 bd 33 34 2b 22 20 21 23 25 26 27 28 29 2a 2b 2c |.34+" !#%&'()*+,| 00003c70 2d 2e 2f 3a 3b 3c 3d 3e 3f 40 5b 5c 5d 5e 60 22 |-./:;<=>?@[\]^`"| 00003c80 2c 6c 74 74 72 24 29 3c 3e 30 20 84 97 6c 74 74 |,lttr$)<>0 ..ltt| 00003c90 72 24 3e 31 32 32 20 8c f1 27 22 4d 69 73 74 61 |r$>122 ..'"Mista| 00003ca0 6b 65 22 3a 3d a3 0d 10 86 05 ed 0d 10 90 32 f4 |ke":=.........2.| 00003cb0 20 4e 6f 77 2c 63 68 65 63 6b 20 69 74 20 64 6f | Now,check it do| 00003cc0 65 73 6e 27 74 20 73 74 61 72 74 20 77 69 74 68 |esn't start with| 00003cd0 20 61 6e 79 20 6f 66 20 74 68 65 73 65 0d 10 9a | any of these...| 00003ce0 38 e7 a7 22 24 30 31 32 33 34 35 36 37 38 39 22 |8.."$0123456789"| 00003cf0 2c c0 73 74 72 69 6e 67 24 2c 31 29 29 3c 3e 30 |,.string$,1))<>0| 00003d00 20 8c f1 27 22 53 79 6e 74 61 78 20 65 72 72 6f | ..'"Syntax erro| 00003d10 72 22 3a 3d a3 0d 10 a4 24 f4 20 41 6e 64 20 69 |r":=....$. And i| 00003d20 74 20 63 61 6e 27 74 20 65 6e 64 20 77 69 74 68 |t can't end with| 00003d30 20 61 20 64 6f 6c 6c 61 72 0d 10 ae 15 6c 74 74 | a dollar....ltt| 00003d40 72 24 3d c2 73 74 72 69 6e 67 24 2c 31 29 0d 10 |r$=.string$,1)..| 00003d50 b8 24 e7 6c 74 74 72 24 3d 22 24 22 20 8c f1 27 |.$.lttr$="$" ..'| 00003d60 22 54 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3a |"Type mismatch":| 00003d70 3d a3 0d 10 c2 3f e7 a7 bd 33 34 2b 22 20 21 23 |=....?...34+" !#| 00003d80 26 27 28 29 2a 2b 2c 2d 2e 2f 3a 3b 3c 3d 3e 3f |&'()*+,-./:;<=>?| 00003d90 40 5b 5c 5d 5e 60 22 2c 6c 74 74 72 24 29 3c 3e |@[\]^`",lttr$)<>| 00003da0 30 20 8c f1 27 22 4d 69 73 74 61 6b 65 22 3a 3d |0 ..'"Mistake":=| 00003db0 a3 0d 10 cc 4e 77 6f 72 6b 24 3d 73 74 72 69 6e |....Nwork$=strin| 00003dc0 67 24 2b 22 3d 22 2b c3 28 a4 66 69 6e 64 76 61 |g$+"="+.(.findva| 00003dd0 6c 75 65 28 22 50 25 22 29 29 3a f4 20 4d 65 61 |lue("P%")):. Mea| 00003de0 6e 73 20 77 6f 72 6b 24 20 63 6f 6e 74 61 69 6e |ns work$ contain| 00003df0 73 20 22 6e 61 6d 65 3d 50 25 22 20 6e 6f 77 0d |s "name=P%" now.| 00003e00 10 d6 64 e7 6c 74 74 72 24 3d 22 25 22 20 8c 69 |..d.lttr$="%" .i| 00003e10 6e 74 65 67 65 72 25 28 a4 61 6c 6c 6f 63 61 74 |nteger%(.allocat| 00003e20 65 28 73 74 72 69 6e 67 24 29 29 3d a4 73 65 74 |e(string$))=.set| 00003e30 6e 75 6d 28 77 6f 72 6b 24 29 20 8b 72 65 61 6c |num(work$) .real| 00003e40 28 a4 61 6c 6c 6f 63 61 74 65 28 73 74 72 69 6e |(.allocate(strin| 00003e50 67 24 29 29 3d a4 73 65 74 6e 75 6d 28 77 6f 72 |g$))=.setnum(wor| 00003e60 6b 24 29 0d 10 e0 06 3d b9 0d 10 ea 05 3a 0d 10 |k$)....=.....:..| 00003e70 f4 15 dd a4 73 65 74 6e 75 6d 28 73 74 72 69 6e |....setnum(strin| 00003e80 67 24 29 0d 10 fe 32 f4 20 52 65 74 75 72 6e 73 |g$)...2. Returns| 00003e90 20 61 20 6e 75 6d 62 65 72 20 65 76 61 6c 75 61 | a number evalua| 00003ea0 74 69 6f 6e 20 69 6e 63 6c 75 64 69 6e 67 20 62 |tion including b| 00003eb0 69 6e 61 72 79 0d 11 08 2e 73 74 72 69 6e 67 24 |inary....string$| 00003ec0 3d c2 73 74 72 69 6e 67 24 2c a9 28 73 74 72 69 |=.string$,.(stri| 00003ed0 6e 67 24 29 2d a7 73 74 72 69 6e 67 24 2c 22 3d |ng$)-.string$,"=| 00003ee0 22 29 29 0d 11 12 20 73 74 72 69 6e 67 24 3d a4 |"))... string$=.| 00003ef0 6e 6f 77 69 6c 64 28 73 74 72 69 6e 67 24 2c 22 |nowild(string$,"| 00003f00 20 22 29 0d 11 1c 27 e7 c0 73 74 72 69 6e 67 24 | ")...'..string$| 00003f10 2c 31 29 3d 22 25 22 20 8c 3d a4 73 65 74 62 69 |,1)="%" .=.setbi| 00003f20 6e 28 73 74 72 69 6e 67 24 29 0d 11 26 1b 3d a0 |n(string$)..&.=.| 00003f30 28 a4 65 78 70 61 6e 64 6e 75 6d 28 73 74 72 69 |(.expandnum(stri| 00003f40 6e 67 24 29 29 0d 11 30 05 3a 0d 11 3a 15 dd a4 |ng$))..0.:..:...| 00003f50 73 65 74 73 74 72 28 73 74 72 69 6e 67 24 29 0d |setstr(string$).| 00003f60 11 44 21 f4 20 52 65 74 75 72 6e 73 20 61 20 73 |.D!. Returns a s| 00003f70 74 72 69 6e 67 20 65 76 61 6c 75 61 74 69 6f 6e |tring evaluation| 00003f80 0d 11 4e 1b 3d a0 28 a4 65 78 70 61 6e 64 73 74 |..N.=.(.expandst| 00003f90 72 28 73 74 72 69 6e 67 24 29 29 0d 11 58 05 3a |r(string$))..X.:| 00003fa0 0d 11 62 15 dd a4 73 65 74 62 69 6e 28 73 74 72 |..b...setbin(str| 00003fb0 69 6e 67 24 29 0d 11 6c 1f f4 20 52 65 74 75 72 |ing$)..l.. Retur| 00003fc0 6e 73 20 62 69 6e 61 72 79 20 3d 3e 20 64 65 63 |ns binary => dec| 00003fd0 69 6d 61 6c 0d 11 76 18 ea 64 61 74 61 25 2c 72 |imal..v..data%,r| 00003fe0 65 73 75 6c 74 25 2c 6c 74 74 72 24 0d 11 80 35 |esult%,lttr$...5| 00003ff0 f4 20 61 63 63 65 70 74 73 20 6e 6f 73 2e 20 77 |. accepts nos. w| 00004000 69 74 68 20 6f 72 20 77 69 74 68 6f 75 74 20 6c |ith or without l| 00004010 65 61 64 69 6e 67 20 27 25 27 20 73 79 6d 62 6f |eading '%' symbo| 00004020 6c 0d 11 8a 3b 73 74 72 69 6e 67 24 3d a4 6e 6f |l...;string$=.no| 00004030 77 69 6c 64 28 c2 73 74 72 69 6e 67 24 2c a9 28 |wild(.string$,.(| 00004040 73 74 72 69 6e 67 24 29 2d a7 73 74 72 69 6e 67 |string$)-.string| 00004050 24 2c 22 25 22 29 29 2c 22 20 22 29 0d 11 94 20 |$,"%"))," ")... | 00004060 e7 a9 73 74 72 69 6e 67 24 3e 31 34 20 8c f1 27 |..string$>14 ..'| 00004070 22 54 6f 6f 20 62 69 67 22 3a 3d 30 0d 11 9e 22 |"Too big":=0..."| 00004080 e7 a9 73 74 72 69 6e 67 24 3d 30 20 8c f1 27 22 |..string$=0 ..'"| 00004090 42 61 64 20 42 69 6e 61 72 79 22 3a 3d 30 0d 11 |Bad Binary":=0..| 000040a0 a8 15 e3 64 61 74 61 25 3d 31 b8 a9 73 74 72 69 |...data%=1..stri| 000040b0 6e 67 24 0d 11 b2 1b 6c 74 74 72 24 3d c1 73 74 |ng$....lttr$=.st| 000040c0 72 69 6e 67 24 2c 64 61 74 61 25 2c 31 29 0d 11 |ring$,data%,1)..| 000040d0 bc 34 e7 6c 74 74 72 24 3d 22 31 22 20 8c 72 65 |.4.lttr$="1" .re| 000040e0 73 75 6c 74 25 3d 72 65 73 75 6c 74 25 84 28 32 |sult%=result%.(2| 000040f0 5e 28 a9 73 74 72 69 6e 67 24 2d 64 61 74 61 25 |^(.string$-data%| 00004100 29 29 0d 11 c6 05 ed 0d 11 d0 0c 3d 72 65 73 75 |)).........=resu| 00004110 6c 74 25 0d 11 da 05 3a 0d 11 e4 17 dd a4 61 6c |lt%....:......al| 00004120 6c 6f 63 61 74 65 28 73 74 72 69 6e 67 24 29 0d |locate(string$).| 00004130 11 ee 48 f4 20 52 65 74 75 72 6e 20 74 68 65 20 |..H. Return the | 00004140 73 6c 6f 74 20 6e 75 6d 62 65 72 20 69 66 20 66 |slot number if f| 00004150 6f 75 6e 64 2c 6f 72 20 61 6c 6c 6f 63 61 74 65 |ound,or allocate| 00004160 20 61 20 6e 65 77 20 6f 6e 65 20 69 66 20 4e 4f | a new one if NO| 00004170 54 20 66 6f 75 6e 64 0d 11 f8 2c ea 64 61 74 61 |T found...,.data| 00004180 25 2c 73 46 69 6e 64 25 2c 69 46 69 6e 64 25 2c |%,sFind%,iFind%,| 00004190 72 46 69 6e 64 25 2c 74 79 70 65 25 2c 66 6f 75 |rFind%,type%,fou| 000041a0 6e 64 25 0d 12 02 27 73 46 69 6e 64 25 3d b9 3a |nd%...'sFind%=.:| 000041b0 69 46 69 6e 64 25 3d b9 3a 72 46 69 6e 64 25 3d |iFind%=.:rFind%=| 000041c0 b9 3a 66 6f 75 6e 64 25 3d b9 0d 12 0c 25 74 79 |.:found%=....%ty| 000041d0 70 65 25 3d 97 22 72 22 3a f4 20 41 73 73 75 6d |pe%=."r":. Assum| 000041e0 65 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 0d |e a real number.| 000041f0 12 16 20 e7 c2 73 74 72 69 6e 67 24 2c 31 29 3d |.. ..string$,1)=| 00004200 22 24 22 20 8c 74 79 70 65 25 3d 97 22 73 22 0d |"$" .type%=."s".| 00004210 12 20 20 e7 c2 73 74 72 69 6e 67 24 2c 31 29 3d |. ..string$,1)=| 00004220 22 25 22 20 8c 74 79 70 65 25 3d 97 22 69 22 0d |"%" .type%=."i".| 00004230 12 2a 0f e3 64 61 74 61 25 3d 30 b8 6e 25 0d 12 |.*..data%=0.n%..| 00004240 34 2a 72 46 69 6e 64 25 3d 72 46 69 6e 64 25 2b |4*rFind%=rFind%+| 00004250 31 3a f4 20 41 73 73 75 6d 65 20 61 20 72 65 61 |1:. Assume a rea| 00004260 6c 20 6e 75 6d 62 65 72 0d 12 3e 3a e7 c2 6e 61 |l number..>:..na| 00004270 6d 65 24 28 64 61 74 61 25 29 2c 31 29 3d 22 24 |me$(data%),1)="$| 00004280 22 20 8c 73 46 69 6e 64 25 3d 73 46 69 6e 64 25 |" .sFind%=sFind%| 00004290 2b 31 3a 72 46 69 6e 64 25 3d 72 46 69 6e 64 25 |+1:rFind%=rFind%| 000042a0 2d 31 0d 12 48 3a e7 c2 6e 61 6d 65 24 28 64 61 |-1..H:..name$(da| 000042b0 74 61 25 29 2c 31 29 3d 22 25 22 20 8c 69 46 69 |ta%),1)="%" .iFi| 000042c0 6e 64 25 3d 69 46 69 6e 64 25 2b 31 3a 72 46 69 |nd%=iFind%+1:rFi| 000042d0 6e 64 25 3d 72 46 69 6e 64 25 2d 31 0d 12 52 33 |nd%=rFind%-1..R3| 000042e0 e7 73 74 72 69 6e 67 24 3d 6e 61 6d 65 24 28 64 |.string$=name$(d| 000042f0 61 74 61 25 29 20 8c 66 6f 75 6e 64 25 3d a0 28 |ata%) .found%=.(| 00004300 bd 74 79 70 65 25 2b 22 46 69 6e 64 25 22 29 0d |.type%+"Find%").| 00004310 12 5c 05 ed 0d 12 66 17 e7 66 6f 75 6e 64 25 3c |.\....f..found%<| 00004320 3e b9 20 8c 3d 66 6f 75 6e 64 25 0d 12 70 1d 6e |>. .=found%..p.n| 00004330 61 6d 65 24 28 6e 25 29 3d 73 74 72 69 6e 67 24 |ame$(n%)=string$| 00004340 3a 6e 25 3d 6e 25 2b 31 0d 12 7a 3c e7 74 79 70 |:n%=n%+1..z<.typ| 00004350 65 25 3d 97 22 73 22 20 8c 73 25 3d 73 25 2b 31 |e%=."s" .s%=s%+1| 00004360 3a 3d 73 25 2d 31 3a f4 20 73 25 20 70 6f 69 6e |:=s%-1:. s% poin| 00004370 74 73 20 74 6f 20 4e 45 58 54 20 66 72 65 65 20 |ts to NEXT free | 00004380 73 6c 6f 74 0d 12 84 3c e7 74 79 70 65 25 3d 97 |slot...<.type%=.| 00004390 22 69 22 20 8c 69 25 3d 69 25 2b 31 3a 3d 69 25 |"i" .i%=i%+1:=i%| 000043a0 2d 31 3a f4 20 69 25 20 70 6f 69 6e 74 73 20 74 |-1:. i% points t| 000043b0 6f 20 4e 45 58 54 20 66 72 65 65 20 73 6c 6f 74 |o NEXT free slot| 000043c0 0d 12 8e 2f 72 25 3d 72 25 2b 31 3a 3d 72 25 2d |.../r%=r%+1:=r%-| 000043d0 31 3a f4 20 72 25 20 70 6f 69 6e 74 73 20 74 6f |1:. r% points to| 000043e0 20 4e 45 58 54 20 66 72 65 65 20 73 6c 6f 74 0d | NEXT free slot.| 000043f0 12 98 05 3a 0d 12 a2 18 dd a4 65 78 70 61 6e 64 |...:......expand| 00004400 73 74 72 28 73 74 72 69 6e 67 24 29 0d 12 ac 33 |str(string$)...3| 00004410 f4 20 53 75 62 73 74 69 74 75 74 65 73 20 76 61 |. Substitutes va| 00004420 72 69 61 62 6c 65 73 20 66 72 6f 6d 20 6d 79 20 |riables from my | 00004430 6c 69 73 74 20 74 6f 20 6e 75 6d 62 65 72 73 0d |list to numbers.| 00004440 12 b6 0f f4 20 4e 6f 74 20 79 65 74 21 21 0d 12 |.... Not yet!!..| 00004450 c0 0c 3d 73 74 72 69 6e 67 24 0d 12 ca 05 3a 0d |..=string$....:.| 00004460 12 d4 18 dd a4 65 78 70 61 6e 64 6e 75 6d 28 73 |.....expandnum(s| 00004470 74 72 69 6e 67 24 29 0d 12 de 2c f4 20 53 75 62 |tring$)...,. Sub| 00004480 73 74 69 74 75 74 65 20 69 6e 20 6e 75 6d 62 65 |stitute in numbe| 00004490 72 73 20 61 6e 64 20 6d 79 20 76 61 72 69 61 62 |rs and my variab| 000044a0 6c 65 73 0d 12 e8 21 ea 70 6f 69 6e 74 65 72 25 |les...!.pointer%| 000044b0 2c 72 65 73 75 6c 74 24 2c 77 6f 72 6b 24 2c 62 |,result$,work$,b| 000044c0 79 74 65 24 0d 12 f2 0e 70 6f 69 6e 74 65 72 25 |yte$....pointer%| 000044d0 3d 31 0d 12 fc 05 f5 0d 13 06 1e 62 79 74 65 24 |=1.........byte$| 000044e0 3d c1 73 74 72 69 6e 67 24 2c 70 6f 69 6e 74 65 |=.string$,pointe| 000044f0 72 25 2c 31 29 0d 13 10 48 e7 62 79 74 65 24 3d |r%,1)...H.byte$=| 00004500 22 26 22 20 8c 77 6f 72 6b 24 3d a4 70 6f 70 68 |"&" .work$=.poph| 00004510 65 78 28 73 74 72 69 6e 67 24 2c 70 6f 69 6e 74 |ex(string$,point| 00004520 65 72 25 29 3a 70 6f 69 6e 74 65 72 25 3d 70 6f |er%):pointer%=po| 00004530 69 6e 74 65 72 25 2b a9 77 6f 72 6b 24 0d 13 1a |inter%+.work$...| 00004540 51 e7 62 79 74 65 24 3d 22 25 22 20 8c 77 6f 72 |Q.byte$="%" .wor| 00004550 6b 24 3d c3 28 a4 73 65 74 62 69 6e 28 c2 73 74 |k$=.(.setbin(.st| 00004560 72 69 6e 67 24 2c a9 73 74 72 69 6e 67 24 2d 70 |ring$,.string$-p| 00004570 6f 69 6e 74 65 72 25 29 29 29 3a 70 6f 69 6e 74 |ointer%))):point| 00004580 65 72 25 3d a9 73 74 72 69 6e 67 24 2b 31 0d 13 |er%=.string$+1..| 00004590 24 41 e7 97 28 62 79 74 65 24 29 3e 31 32 37 20 |$A..(byte$)>127 | 000045a0 8c 77 6f 72 6b 24 3d a4 75 6e 70 61 63 6b 74 6f |.work$=.unpackto| 000045b0 6b 65 6e 28 97 62 79 74 65 24 29 3a 70 6f 69 6e |ken(.byte$):poin| 000045c0 74 65 72 25 3d 70 6f 69 6e 74 65 72 25 2b 31 0d |ter%=pointer%+1.| 000045d0 13 2e 46 e7 a7 22 30 31 32 33 34 35 36 37 38 39 |..F.."0123456789| 000045e0 5e 28 29 2a 2d 2b 2f 2e 20 22 2c 62 79 74 65 24 |^()*-+/. ",byte$| 000045f0 29 3c 3e 30 20 8c 77 6f 72 6b 24 3d 62 79 74 65 |)<>0 .work$=byte| 00004600 24 3a 70 6f 69 6e 74 65 72 25 3d 70 6f 69 6e 74 |$:pointer%=point| 00004610 65 72 25 2b 31 0d 13 38 86 e7 a7 22 30 31 32 33 |er%+1..8..."0123| 00004620 34 35 36 37 38 39 26 25 5e 28 29 2a 2d 2b 2f 2e |456789&%^()*-+/.| 00004630 20 22 2c 62 79 74 65 24 29 3d 30 20 8c 77 6f 72 | ",byte$)=0 .wor| 00004640 6b 24 3d a4 66 69 6e 64 77 69 6c 64 28 70 6f 69 |k$=.findwild(poi| 00004650 6e 74 65 72 25 2c 73 74 72 69 6e 67 24 2c 22 5e |nter%,string$,"^| 00004660 2a 2d 2b 2f 20 22 29 3a 70 6f 69 6e 74 65 72 25 |*-+/ "):pointer%| 00004670 3d 70 6f 69 6e 74 65 72 25 2b a9 77 6f 72 6b 24 |=pointer%+.work$| 00004680 3a 77 6f 72 6b 24 3d c3 28 a4 66 69 6e 64 76 61 |:work$=.(.findva| 00004690 6c 75 65 28 77 6f 72 6b 24 29 29 0d 13 42 19 72 |lue(work$))..B.r| 000046a0 65 73 75 6c 74 24 3d 72 65 73 75 6c 74 24 2b 77 |esult$=result$+w| 000046b0 6f 72 6b 24 0d 13 4c 16 fd 70 6f 69 6e 74 65 72 |ork$..L..pointer| 000046c0 25 3e a9 73 74 72 69 6e 67 24 0d 13 56 0c 3d 72 |%>.string$..V.=r| 000046d0 65 73 75 6c 74 24 0d 13 60 05 3a 0d 13 6a 21 f4 |esult$..`.:..j!.| 000046e0 20 2a 2a 2a 2a 54 41 42 4c 45 53 20 4f 46 20 54 | ****TABLES OF T| 000046f0 45 4d 50 4c 41 54 45 53 2a 2a 2a 2a 0d 13 74 05 |EMPLATES****..t.| 00004700 3a 0d 13 7e 4b f4 20 4d 6e 65 6d 6f 6e 69 63 73 |:..~K. Mnemonics| 00004710 20 61 6c 6c 6f 77 65 64 2c 77 68 65 72 65 20 66 | allowed,where f| 00004720 3d 66 69 6c 65 2c 64 3d 64 65 73 74 69 6e 61 74 |=file,d=destinat| 00004730 69 6f 6e 2c 62 3d 62 69 74 20 70 61 74 74 65 72 |ion,b=bit patter| 00004740 6e 2c 6b 3d 63 6f 6e 73 74 61 6e 74 0d 13 88 33 |n,k=constant...3| 00004750 dc 22 30 30 20 30 31 31 31 20 64 66 66 66 20 66 |."00 0111 dfff f| 00004760 66 66 66 22 2c 22 41 44 44 57 46 20 20 66 2c 64 |fff","ADDWF f,d| 00004770 22 2c 22 41 64 64 20 57 20 61 6e 64 20 66 22 0d |","Add W and f".| 00004780 13 92 33 dc 22 30 30 20 30 31 30 31 20 64 66 66 |..3."00 0101 dff| 00004790 66 20 66 66 66 66 22 2c 22 41 4e 44 57 46 20 20 |f ffff","ANDWF | 000047a0 66 2c 64 22 2c 22 41 4e 44 20 57 20 61 6e 64 20 |f,d","AND W and | 000047b0 66 22 0d 13 9c 38 dc 22 31 31 20 31 31 31 78 20 |f"...8."11 111x | 000047c0 6b 6b 6b 6b 20 6b 6b 6b 6b 22 2c 22 41 44 44 4c |kkkk kkkk","ADDL| 000047d0 57 20 20 6b 20 20 22 2c 22 41 64 64 20 6c 69 74 |W k ","Add lit| 000047e0 65 72 61 6c 20 74 6f 20 57 22 0d 13 a6 39 dc 22 |eral to W"...9."| 000047f0 31 31 20 31 30 30 31 20 6b 6b 6b 6b 20 6b 6b 6b |11 1001 kkkk kkk| 00004800 6b 22 2c 22 41 4e 44 4c 57 20 20 6b 20 20 22 2c |k","ANDLW k ",| 00004810 22 41 6e 64 20 6c 69 74 65 72 61 6c 20 61 6e 64 |"And literal and| 00004820 20 57 22 0d 13 b0 33 dc 22 30 31 20 30 30 62 62 | W"...3."01 00bb| 00004830 20 62 66 66 66 20 66 66 66 66 22 2c 22 42 43 46 | bfff ffff","BCF| 00004840 20 20 20 20 66 2c 62 22 2c 22 42 69 74 20 63 6c | f,b","Bit cl| 00004850 65 61 72 20 66 22 0d 13 ba 31 dc 22 30 31 20 30 |ear f"...1."01 0| 00004860 31 62 62 20 62 66 66 66 20 66 66 66 66 22 2c 22 |1bb bfff ffff","| 00004870 42 53 46 20 20 20 20 66 2c 62 22 2c 22 42 69 74 |BSF f,b","Bit| 00004880 20 73 65 74 20 66 22 0d 13 c4 40 dc 22 30 31 20 | set f"...@."01 | 00004890 31 30 62 62 20 62 66 66 66 20 66 66 66 66 22 2c |10bb bfff ffff",| 000048a0 22 42 54 46 53 43 20 20 66 2c 62 22 2c 22 42 69 |"BTFSC f,b","Bi| 000048b0 74 20 74 65 73 74 2c 73 6b 69 70 20 69 66 20 63 |t test,skip if c| 000048c0 6c 65 61 72 20 20 22 0d 13 ce 3c dc 22 30 31 20 |lear "...<."01 | 000048d0 31 31 62 62 20 62 66 66 66 20 66 66 66 66 22 2c |11bb bfff ffff",| 000048e0 22 42 54 46 53 53 20 20 66 2c 62 22 2c 22 42 69 |"BTFSS f,b","Bi| 000048f0 74 20 74 65 73 74 2c 73 6b 69 70 20 69 66 20 73 |t test,skip if s| 00004900 65 74 22 0d 13 d8 37 dc 22 31 30 20 30 6b 6b 6b |et"...7."10 0kkk| 00004910 20 6b 6b 6b 6b 20 6b 6b 6b 6b 22 2c 22 43 41 4c | kkkk kkkk","CAL| 00004920 4c 20 20 20 6b 20 20 22 2c 22 43 61 6c 6c 20 73 |L k ","Call s| 00004930 75 62 72 6f 75 74 69 6e 65 22 0d 13 e2 3d dc 22 |ubroutine"...=."| 00004940 30 30 20 30 30 30 30 20 30 31 31 30 20 30 31 30 |00 0000 0110 010| 00004950 30 22 2c 22 43 4c 52 57 44 54 20 20 20 20 22 2c |0","CLRWDT ",| 00004960 22 43 6c 65 61 72 20 77 61 74 63 68 20 64 6f 67 |"Clear watch dog| 00004970 20 74 69 6d 65 72 22 0d 13 ec 2f dc 22 30 30 20 | timer".../."00 | 00004980 30 30 30 31 20 30 78 78 78 20 78 78 78 78 22 2c |0001 0xxx xxxx",| 00004990 22 43 4c 52 57 20 20 20 20 20 20 22 2c 22 43 6c |"CLRW ","Cl| 000049a0 65 61 72 20 57 22 0d 13 f6 2f dc 22 30 30 20 30 |ear W".../."00 0| 000049b0 30 30 31 20 31 66 66 66 20 66 66 66 66 22 2c 22 |001 1fff ffff","| 000049c0 43 4c 52 46 20 20 20 66 20 20 22 2c 22 43 6c 65 |CLRF f ","Cle| 000049d0 61 72 20 66 22 0d 14 00 34 dc 22 30 30 20 31 30 |ar f"...4."00 10| 000049e0 30 31 20 64 66 66 66 20 66 66 66 66 22 2c 22 43 |01 dfff ffff","C| 000049f0 4f 4d 46 20 20 20 66 2c 64 22 2c 22 43 6f 6d 70 |OMF f,d","Comp| 00004a00 6c 65 6d 65 6e 74 20 66 22 0d 14 0a 41 dc 22 30 |lement f"...A."0| 00004a10 30 20 31 30 31 31 20 64 66 66 66 20 66 66 66 66 |0 1011 dfff ffff| 00004a20 22 2c 22 44 45 43 46 53 5a 20 66 2c 64 22 2c 22 |","DECFSZ f,d","| 00004a30 44 65 63 72 65 6d 65 6e 74 20 66 2c 20 73 6b 69 |Decrement f, ski| 00004a40 70 20 69 66 20 7a 65 72 6f 22 0d 14 14 33 dc 22 |p if zero"...3."| 00004a50 30 30 20 30 30 31 31 20 64 66 66 66 20 66 66 66 |00 0011 dfff fff| 00004a60 66 22 2c 22 44 45 43 46 20 20 20 66 2c 64 22 2c |f","DECF f,d",| 00004a70 22 44 65 63 72 65 6d 65 6e 74 20 66 22 0d 14 1e |"Decrement f"...| 00004a80 37 dc 22 31 30 20 31 6b 6b 6b 20 6b 6b 6b 6b 20 |7."10 1kkk kkkk | 00004a90 6b 6b 6b 6b 22 2c 22 47 4f 54 4f 20 20 20 6b 20 |kkkk","GOTO k | 00004aa0 20 22 2c 22 47 6f 74 6f 20 61 64 64 72 65 73 73 | ","Goto address| 00004ab0 20 20 6b 22 0d 14 28 42 dc 22 31 31 20 31 30 30 | k"..(B."11 100| 00004ac0 30 20 6b 6b 6b 6b 20 6b 6b 6b 6b 22 2c 22 49 4f |0 kkkk kkkk","IO| 00004ad0 52 4c 57 20 20 6b 20 20 22 2c 22 49 6e 63 6c 75 |RLW k ","Inclu| 00004ae0 73 69 76 65 20 4f 52 20 6c 69 74 65 72 61 6c 20 |sive OR literal | 00004af0 61 6e 64 20 57 22 0d 14 32 40 dc 22 30 30 20 31 |and W"..2@."00 1| 00004b00 31 31 31 20 64 66 66 66 20 66 66 66 66 22 2c 22 |111 dfff ffff","| 00004b10 49 4e 43 46 53 5a 20 66 2c 64 22 2c 22 49 6e 63 |INCFSZ f,d","Inc| 00004b20 72 65 6d 65 6e 74 20 66 2c 73 6b 69 70 20 69 66 |rement f,skip if| 00004b30 20 7a 65 72 6f 22 0d 14 3c 33 dc 22 30 30 20 31 | zero"..<3."00 1| 00004b40 30 31 30 20 64 66 66 66 20 66 66 66 66 22 2c 22 |010 dfff ffff","| 00004b50 49 4e 43 46 20 20 20 66 2c 64 22 2c 22 49 6e 63 |INCF f,d","Inc| 00004b60 72 65 6d 65 6e 74 20 66 22 0d 14 46 3c dc 22 30 |rement f"..F<."0| 00004b70 30 20 30 31 30 30 20 64 66 66 66 20 66 66 66 66 |0 0100 dfff ffff| 00004b80 22 2c 22 49 4f 52 57 46 20 20 66 2c 64 22 2c 22 |","IORWF f,d","| 00004b90 49 6e 63 6c 75 73 69 76 65 20 4f 52 20 57 20 61 |Inclusive OR W a| 00004ba0 6e 64 20 66 22 0d 14 50 2e dc 22 30 30 20 31 30 |nd f"..P.."00 10| 00004bb0 30 30 20 64 66 66 66 20 66 66 66 66 22 2c 22 4d |00 dfff ffff","M| 00004bc0 4f 56 46 20 20 20 66 2c 64 22 2c 22 4d 6f 76 65 |OVF f,d","Move| 00004bd0 20 66 22 0d 14 5a 33 dc 22 30 30 20 30 30 30 30 | f"..Z3."00 0000| 00004be0 20 31 66 66 66 20 66 66 66 66 22 2c 22 4d 4f 56 | 1fff ffff","MOV| 00004bf0 57 46 20 20 66 20 20 22 2c 22 4d 6f 76 65 20 57 |WF f ","Move W| 00004c00 20 74 6f 20 66 22 0d 14 64 39 dc 22 31 31 20 30 | to f"..d9."11 0| 00004c10 30 78 78 20 6b 6b 6b 6b 20 6b 6b 6b 6b 22 2c 22 |0xx kkkk kkkk","| 00004c20 4d 4f 56 4c 57 20 20 6b 20 20 22 2c 22 4d 6f 76 |MOVLW k ","Mov| 00004c30 65 20 4c 69 74 65 72 61 6c 20 74 6f 20 57 22 0d |e Literal to W".| 00004c40 14 6e 34 dc 22 30 30 20 30 30 30 30 20 30 78 78 |.n4."00 0000 0xx| 00004c50 30 20 30 30 30 30 22 2c 22 4e 4f 50 20 20 20 20 |0 0000","NOP | 00004c60 20 20 20 22 2c 22 4e 6f 20 6f 70 65 72 61 74 69 | ","No operati| 00004c70 6f 6e 22 0d 14 78 43 dc 22 30 30 20 30 30 30 30 |on"..xC."00 0000| 00004c80 20 30 31 31 30 20 30 30 31 30 22 2c 22 4f 50 54 | 0110 0010","OPT| 00004c90 49 4f 4e 20 20 20 20 22 2c 22 4c 6f 61 64 20 4f |ION ","Load O| 00004ca0 50 54 49 4f 4e 20 72 65 67 69 73 74 65 72 20 77 |PTION register w| 00004cb0 69 74 68 20 57 22 0d 14 82 35 dc 22 30 30 20 31 |ith W"...5."00 1| 00004cc0 31 30 31 20 64 66 66 66 20 66 66 66 66 22 2c 22 |101 dfff ffff","| 00004cd0 52 4c 46 20 20 20 20 66 2c 64 22 2c 22 52 6f 74 |RLF f,d","Rot| 00004ce0 61 74 65 20 6c 65 66 74 20 66 22 0d 14 8c 36 dc |ate left f"...6.| 00004cf0 22 30 30 20 31 31 30 30 20 64 66 66 66 20 66 66 |"00 1100 dfff ff| 00004d00 66 66 22 2c 22 52 52 46 20 20 20 20 66 2c 64 22 |ff","RRF f,d"| 00004d10 2c 22 52 6f 74 61 74 65 20 72 69 67 68 74 20 66 |,"Rotate right f| 00004d20 22 0d 14 96 3d dc 22 30 30 20 30 30 30 30 20 30 |"...=."00 0000 0| 00004d30 30 30 30 20 31 30 30 31 22 2c 22 52 45 54 46 49 |000 1001","RETFI| 00004d40 45 20 20 20 20 22 2c 22 52 65 74 75 72 6e 20 66 |E ","Return f| 00004d50 72 6f 6d 20 49 6e 74 65 72 72 75 70 74 22 0d 14 |rom Interrupt"..| 00004d60 a0 40 dc 22 31 31 20 30 31 78 78 20 6b 6b 6b 6b |.@."11 01xx kkkk| 00004d70 20 6b 6b 6b 6b 22 2c 22 52 45 54 4c 57 20 20 6b | kkkk","RETLW k| 00004d80 20 20 22 2c 22 52 65 74 75 72 6e 20 77 69 74 68 | ","Return with| 00004d90 20 6c 69 74 65 72 61 6c 20 69 6e 20 57 22 0d 14 | literal in W"..| 00004da0 aa 3e dc 22 30 30 20 30 30 30 30 20 30 30 30 30 |.>."00 0000 0000| 00004db0 20 31 30 30 30 22 2c 22 52 45 54 55 52 4e 20 20 | 1000","RETURN | 00004dc0 20 20 22 2c 22 52 65 74 75 72 6e 20 66 72 6f 6d | ","Return from| 00004dd0 20 73 75 62 72 6f 75 74 69 6e 65 22 0d 14 b4 39 | subroutine"...9| 00004de0 dc 22 30 30 20 30 30 31 30 20 64 66 66 66 20 66 |."00 0010 dfff f| 00004df0 66 66 66 22 2c 22 53 55 42 57 46 20 20 66 2c 64 |fff","SUBWF f,d| 00004e00 22 2c 22 53 75 62 74 72 61 63 74 20 57 20 66 72 |","Subtract W fr| 00004e10 6f 6d 20 66 22 0d 14 be 46 dc 22 30 30 20 31 31 |om f"...F."00 11| 00004e20 31 30 20 64 66 66 66 20 66 66 66 66 22 2c 22 53 |10 dfff ffff","S| 00004e30 57 41 50 46 20 20 66 2c 64 22 2c 22 53 77 61 70 |WAPF f,d","Swap| 00004e40 20 6c 65 66 74 20 26 20 72 69 67 68 74 20 6e 79 | left & right ny| 00004e50 62 62 6c 65 73 20 6f 66 20 66 22 0d 14 c8 3d dc |bbles of f"...=.| 00004e60 22 30 30 20 30 30 30 30 20 30 31 31 30 20 30 30 |"00 0000 0110 00| 00004e70 31 31 22 2c 22 53 4c 45 45 50 20 20 20 20 20 22 |11","SLEEP "| 00004e80 2c 22 47 6f 20 69 6e 74 6f 20 73 74 61 6e 64 20 |,"Go into stand | 00004e90 62 79 20 6d 6f 64 65 22 0d 14 d2 3f dc 22 31 31 |by mode"...?."11| 00004ea0 20 31 31 30 78 20 6b 6b 6b 6b 20 6b 6b 6b 6b 22 | 110x kkkk kkkk"| 00004eb0 2c 22 53 55 42 4c 57 20 20 6b 20 20 22 2c 22 53 |,"SUBLW k ","S| 00004ec0 75 62 74 72 61 63 74 20 57 20 66 72 6f 6d 20 6c |ubtract W from l| 00004ed0 69 74 65 72 61 6c 22 0d 14 dc 37 dc 22 30 30 20 |iteral"...7."00 | 00004ee0 30 30 30 30 20 30 31 31 30 20 30 66 66 66 22 2c |0000 0110 0fff",| 00004ef0 22 54 52 49 53 20 20 20 66 20 20 22 2c 22 54 72 |"TRIS f ","Tr| 00004f00 69 73 74 61 74 65 20 70 6f 72 74 20 66 22 0d 14 |istate port f"..| 00004f10 e6 3c dc 22 30 30 20 30 31 31 30 20 64 66 66 66 |.<."00 0110 dfff| 00004f20 20 66 66 66 66 22 2c 22 58 4f 52 57 46 20 20 66 | ffff","XORWF f| 00004f30 2c 64 22 2c 22 45 78 63 6c 75 73 69 76 65 20 4f |,d","Exclusive O| 00004f40 52 20 57 20 61 6e 64 20 66 22 0d 14 f0 42 dc 22 |R W and f"...B."| 00004f50 31 31 20 31 30 31 30 20 6b 6b 6b 6b 20 6b 6b 6b |11 1010 kkkk kkk| 00004f60 6b 22 2c 22 58 4f 52 4c 57 20 20 6b 20 20 22 2c |k","XORLW k ",| 00004f70 22 45 78 63 6c 75 73 69 76 65 20 4f 52 20 6c 69 |"Exclusive OR li| 00004f80 74 65 72 61 6c 20 61 6e 64 20 57 22 0d 14 fa 3f |teral and W"...?| 00004f90 dc 22 5b 5b 5b 22 2c 22 5b 5b 5b 22 2c 22 45 4f |."[[[","[[[","EO| 00004fa0 54 20 6d 61 72 6b 65 72 20 43 48 52 24 39 31 20 |T marker CHR$91 | 00004fb0 69 73 20 41 53 43 27 5a 27 2b 31 20 77 68 69 63 |is ASC'Z'+1 whic| 00004fc0 68 20 69 73 20 61 20 27 5b 27 22 0d 15 04 05 3a |h is a '['"....:| 00004fd0 0d 15 0e 15 f4 20 42 41 53 49 43 20 49 49 20 74 |..... BASIC II t| 00004fe0 6f 6b 65 6e 73 0d 15 18 58 dc 20 22 38 30 41 4e |okens...X. "80AN| 00004ff0 44 22 2c 22 38 31 44 49 56 22 2c 22 38 32 45 4f |D","81DIV","82EO| 00005000 52 22 2c 22 38 33 4d 4f 44 22 2c 22 38 34 4f 52 |R","83MOD","84OR| 00005010 22 2c 22 38 35 45 52 52 4f 52 22 2c 22 38 36 4c |","85ERROR","86L| 00005020 49 4e 45 22 2c 22 38 37 4f 46 46 22 2c 22 38 38 |INE","87OFF","88| 00005030 53 54 45 50 22 2c 22 38 39 53 50 43 22 0d 15 22 |STEP","89SPC".."| 00005040 58 dc 20 22 38 41 54 41 42 22 2c 22 38 42 45 4c |X. "8ATAB","8BEL| 00005050 53 45 22 2c 22 38 43 54 48 45 4e 22 2c 22 38 45 |SE","8CTHEN","8E| 00005060 4f 50 45 4e 49 4e 22 2c 22 38 46 50 54 52 22 2c |OPENIN","8FPTR",| 00005070 22 39 30 50 41 47 45 22 2c 22 39 31 54 49 4d 45 |"90PAGE","91TIME| 00005080 22 2c 22 39 32 4c 4f 4d 45 4d 22 2c 22 39 33 48 |","92LOMEM","93H| 00005090 49 4d 45 4d 22 0d 15 2c 5a dc 20 22 39 34 41 42 |IMEM"..,Z. "94AB| 000050a0 53 22 2c 22 39 35 41 43 53 22 2c 22 39 36 41 44 |S","95ACS","96AD| 000050b0 56 41 4c 22 2c 22 39 37 41 53 43 22 2c 22 39 38 |VAL","97ASC","98| 000050c0 41 53 4e 22 2c 22 39 39 41 54 4e 22 2c 22 39 41 |ASN","99ATN","9A| 000050d0 42 47 45 54 22 2c 22 39 42 43 4f 53 22 2c 22 39 |BGET","9BCOS","9| 000050e0 43 43 4f 55 4e 54 22 2c 22 39 44 44 45 47 22 0d |CCOUNT","9DDEG".| 000050f0 15 36 5c dc 20 22 39 45 45 52 4c 22 2c 22 39 46 |.6\. "9EERL","9F| 00005100 45 52 52 22 2c 22 41 30 45 56 41 4c 22 2c 22 41 |ERR","A0EVAL","A| 00005110 31 45 58 50 22 2c 22 41 32 45 58 54 22 2c 22 41 |1EXP","A2EXT","A| 00005120 33 46 41 4c 53 45 22 2c 22 41 34 46 4e 22 2c 22 |3FALSE","A4FN","| 00005130 41 35 47 45 54 22 2c 22 41 36 49 4e 4b 45 59 22 |A5GET","A6INKEY"| 00005140 2c 22 41 37 49 4e 53 54 52 28 22 0d 15 40 5d dc |,"A7INSTR("..@].| 00005150 20 22 41 38 49 4e 54 22 2c 22 41 39 4c 45 4e 22 | "A8INT","A9LEN"| 00005160 2c 22 41 41 4c 4e 22 2c 22 41 42 4c 4f 47 22 2c |,"AALN","ABLOG",| 00005170 22 41 43 4e 4f 54 22 2c 22 41 44 4f 50 45 4e 55 |"ACNOT","ADOPENU| 00005180 50 22 2c 22 41 45 4f 50 45 4e 4f 55 54 22 2c 22 |P","AEOPENOUT","| 00005190 41 46 50 49 22 2c 22 42 30 50 4f 49 4e 54 28 22 |AFPI","B0POINT("| 000051a0 2c 22 42 31 50 4f 53 22 0d 15 4a 55 dc 20 22 42 |,"B1POS"..JU. "B| 000051b0 32 52 41 44 22 2c 22 42 33 52 4e 44 22 2c 22 42 |2RAD","B3RND","B| 000051c0 34 53 47 4e 22 2c 22 42 35 53 49 4e 22 2c 22 42 |4SGN","B5SIN","B| 000051d0 36 53 51 52 22 2c 22 42 37 54 41 4e 22 2c 22 42 |6SQR","B7TAN","B| 000051e0 38 54 4f 22 2c 22 42 39 54 52 55 45 22 2c 22 42 |8TO","B9TRUE","B| 000051f0 41 55 53 52 22 2c 22 42 42 56 41 4c 22 0d 15 54 |AUSR","BBVAL"..T| 00005200 55 dc 20 22 42 43 56 50 4f 53 22 2c 22 42 44 43 |U. "BCVPOS","BDC| 00005210 48 52 24 22 2c 22 42 45 47 45 54 24 22 2c 22 42 |HR$","BEGET$","B| 00005220 46 49 4e 4b 45 59 24 22 2c 22 43 30 4c 45 46 54 |FINKEY$","C0LEFT| 00005230 24 28 22 2c 22 43 31 4d 49 44 24 28 22 2c 22 43 |$(","C1MID$(","C| 00005240 32 52 49 47 48 54 24 28 22 2c 22 43 33 53 54 52 |2RIGHT$(","C3STR| 00005250 24 22 0d 15 5e 5d dc 20 22 43 34 53 54 52 49 4e |$"..^]. "C4STRIN| 00005260 47 24 28 22 2c 22 43 35 45 4f 46 22 2c 22 43 36 |G$(","C5EOF","C6| 00005270 41 55 54 4f 22 2c 22 43 37 44 45 4c 45 54 45 22 |AUTO","C7DELETE"| 00005280 2c 22 43 38 4c 4f 41 44 22 2c 22 43 39 4c 49 53 |,"C8LOAD","C9LIS| 00005290 54 22 2c 22 43 41 4e 45 57 22 2c 22 43 42 4f 4c |T","CANEW","CBOL| 000052a0 44 22 2c 22 43 43 52 45 4e 55 4d 42 45 52 22 0d |D","CCRENUMBER".| 000052b0 15 68 58 dc 20 22 43 44 53 41 56 45 22 2c 22 43 |.hX. "CDSAVE","C| 000052c0 46 50 54 52 22 2c 22 44 30 50 41 47 45 22 2c 22 |FPTR","D0PAGE","| 000052d0 44 31 54 49 4d 45 22 2c 22 44 32 4c 4f 4d 45 4d |D1TIME","D2LOMEM| 000052e0 22 2c 22 44 33 48 49 4d 45 4d 22 2c 22 44 34 53 |","D3HIMEM","D4S| 000052f0 4f 55 4e 44 22 2c 22 44 35 42 50 55 54 22 2c 22 |OUND","D5BPUT","| 00005300 44 36 43 41 4c 4c 22 0d 15 72 5d dc 20 22 44 37 |D6CALL"..r]. "D7| 00005310 43 48 41 49 4e 22 2c 22 44 38 43 4c 45 41 52 22 |CHAIN","D8CLEAR"| 00005320 2c 22 44 39 43 4c 4f 53 45 22 2c 22 44 41 43 4c |,"D9CLOSE","DACL| 00005330 47 22 2c 22 44 42 43 4c 53 22 2c 22 44 43 44 41 |G","DBCLS","DCDA| 00005340 54 41 22 2c 22 44 44 44 45 46 22 2c 22 44 45 44 |TA","DDDEF","DED| 00005350 49 4d 22 2c 22 44 46 44 52 41 57 22 2c 22 45 30 |IM","DFDRAW","E0| 00005360 45 4e 44 22 0d 15 7c 5b dc 20 22 45 31 45 4e 44 |END"..|[. "E1END| 00005370 50 52 4f 43 22 2c 22 45 32 45 4e 56 45 4c 4f 50 |PROC","E2ENVELOP| 00005380 45 22 2c 22 45 33 46 4f 52 22 2c 22 45 34 47 4f |E","E3FOR","E4GO| 00005390 53 55 42 22 2c 22 45 35 47 4f 54 4f 22 2c 22 45 |SUB","E5GOTO","E| 000053a0 36 47 43 4f 4c 22 2c 22 45 37 49 46 22 2c 22 45 |6GCOL","E7IF","E| 000053b0 38 49 4e 50 55 54 22 2c 22 45 39 4c 45 54 22 0d |8INPUT","E9LET".| 000053c0 15 86 5e dc 20 22 45 41 4c 4f 43 41 4c 22 2c 22 |..^. "EALOCAL","| 000053d0 45 42 4d 4f 44 45 22 2c 22 45 43 4d 4f 56 45 22 |EBMODE","ECMOVE"| 000053e0 2c 22 45 44 4e 45 58 54 22 2c 22 45 45 4f 4e 22 |,"EDNEXT","EEON"| 000053f0 2c 22 45 46 56 44 55 22 2c 22 46 30 50 4c 4f 54 |,"EFVDU","F0PLOT| 00005400 22 2c 22 46 31 50 52 49 4e 54 22 2c 22 46 32 50 |","F1PRINT","F2P| 00005410 52 4f 43 22 2c 22 46 33 52 45 41 44 22 0d 15 90 |ROC","F3READ"...| 00005420 60 dc 20 22 46 34 52 45 4d 22 2c 22 46 35 52 45 |`. "F4REM","F5RE| 00005430 50 45 41 54 22 2c 22 46 36 52 45 50 4f 52 54 22 |PEAT","F6REPORT"| 00005440 2c 22 46 37 52 45 53 54 4f 52 45 22 2c 22 46 38 |,"F7RESTORE","F8| 00005450 52 45 54 55 52 4e 22 2c 22 46 39 52 55 4e 22 2c |RETURN","F9RUN",| 00005460 22 46 41 53 54 4f 50 22 2c 22 46 42 43 4f 4c 4f |"FASTOP","FBCOLO| 00005470 55 52 22 2c 22 46 43 54 52 41 43 45 22 0d 15 9a |UR","FCTRACE"...| 00005480 23 dc 20 22 46 44 55 4e 54 49 4c 22 2c 22 46 45 |#. "FDUNTIL","FE| 00005490 57 49 44 54 48 22 2c 22 46 46 4f 53 43 4c 49 22 |WIDTH","FFOSCLI"| 000054a0 0d 15 a4 05 3a 0d 15 ae 1a f4 20 44 69 72 65 63 |....:..... Direc| 000054b0 74 20 6d 6f 64 65 20 6b 65 79 77 6f 72 64 73 0d |t mode keywords.| 000054c0 15 b8 2c dc 20 48 45 4c 50 2c 22 47 69 76 65 73 |..,. HELP,"Gives| 000054d0 20 64 65 74 61 69 6c 73 20 6f 66 20 61 76 61 69 | details of avai| 000054e0 6c 61 62 6c 65 20 68 65 6c 70 22 0d 15 c2 3f dc |lable help"...?.| 000054f0 20 43 48 41 49 4e 22 66 69 6c 65 6e 61 6d 65 22 | CHAIN"filename"| 00005500 2c 22 4c 6f 61 64 73 20 61 6e 64 20 61 73 73 65 |,"Loads and asse| 00005510 6d 62 6c 65 73 20 74 68 65 20 50 49 43 20 73 6f |mbles the PIC so| 00005520 75 72 63 65 20 63 6f 64 65 22 0d 15 cc 30 dc 20 |urce code"...0. | 00005530 4c 4f 41 44 22 66 69 6c 65 6e 61 6d 65 22 2c 22 |LOAD"filename","| 00005540 4c 6f 61 64 73 20 74 68 65 20 50 49 43 20 73 6f |Loads the PIC so| 00005550 75 72 63 65 20 63 6f 64 65 22 0d 15 d6 42 dc 20 |urce code"...B. | 00005560 22 4c 49 53 54 20 5b 3c 66 72 6f 6d 3e 3c 2c 74 |"LIST [<from><,t| 00005570 6f 3e 5d 22 2c 22 4f 70 74 69 6f 6e 61 6c 6c 79 |o>]","Optionally| 00005580 20 6c 69 73 74 20 70 72 6f 67 72 61 6d 20 3c 66 | list program <f| 00005590 72 6f 6d 3e 2e 2e 2e 3c 74 6f 3e 22 0d 15 e0 32 |rom>...<to>"...2| 000055a0 dc 20 52 55 4e 2c 22 43 6c 65 61 72 73 20 76 61 |. RUN,"Clears va| 000055b0 72 69 61 62 6c 65 73 20 74 68 65 6e 20 65 78 65 |riables then exe| 000055c0 63 75 74 65 73 20 70 72 6f 67 72 61 6d 22 0d 15 |cutes program"..| 000055d0 ea 23 dc 20 51 55 49 54 2c 22 45 6e 64 73 20 74 |.#. QUIT,"Ends t| 000055e0 68 65 20 50 49 43 20 61 73 73 65 6d 62 6c 65 72 |he PIC assembler| 000055f0 22 0d 15 f4 1d dc 20 43 4c 53 2c 22 43 6c 65 61 |"..... CLS,"Clea| 00005600 72 73 20 74 68 65 20 73 63 72 65 65 6e 22 0d 15 |rs the screen"..| 00005610 fe 23 dc 20 53 54 4f 50 2c 22 53 74 6f 70 73 20 |.#. STOP,"Stops | 00005620 77 68 61 74 27 73 20 68 61 70 70 65 6e 69 6e 67 |what's happening| 00005630 22 0d ff |"..| 00005633