$ > AsmPDP PDP11 Assembler v1.12 .A$=OS_GetEnv:Init:AssemInit:ver$="1.12" 7fmax%=10:word%7,cache%259,file$(fmax%),ptr%(fmax%) :CloseAll::exit(0): 9in%=0:out%=0:debug%=cl("-d",0):quit$=cl(" -quit",1) Pcl("-?",0):"Usage: "asm$" [ [ []]]":exit(0): =in$=cl("",0):out$=cl("",0):lst$=cl("",0):lst%=lst$<>"" (lst%in$="":cpu$" Assembler v"ver$ 3in$="":"Input file: "in$:"Output file: "out$ (out$=fname(out$):in$="":exit(0): >in%=open(in$):in%=0:"File '"in$"' not found":exit(0): Nout$<>"":out%=(out$):out%=0:"Can't open '"out$"'":CloseAll:exit(0): #lst$<>"":"Spool "+lst$:lst%= U:" ";error$;part$,error$<>"");" ",error$<>"");"in "in$:CloseAll:exit(0): pass%=12 3#in%=0:Line$="":P%=0:O%=0:L%=0:errs%=0:fnum%=0 ": ,-AssemLine:pass%=2:Pass2debug%:Text$ 6P%=P%+num%:O%=O%+num% @ #in% JSfnum%=fnum%-1:fnum%>-1:in$=file$(fnum%):#in%:in%=open(in$):#in%=ptr%(fnum%) T fnum%<0 ^ pass% hlst%:"Errors: ";errs% rerrs%>127:errs%=127 |CloseAll:exit(errs%) !out$<>"":SetType(out$,&1C5) !lst$<>"":SetType(lst$,&FFF) exit(errs%)  #Pass2:num%<256:cache%?num%=0 )op%<>-1:cache%?1=op%256:?cache%=op% ;num%:out%:L%=0P%"":"****** ";error$;part$:errs%=errs%+1  Init:os%<32: ,ș"GetStdHandle",-10@hfile%(1):*INPUT 1 -ș"GetStdHandle",-11@hfile%(2):*OUTPUT 2  0CloseAll:*Spool :'in0%=in0%:in0%:A%=in0%:in0%=0:#A% D"in%=in%:in%:A%=in%:in%=0:#A% N'out%=out%:out%:A%=out%:out%=0:#A% X lSetType(A$,A%):os%>8: v"SetType "+A$+" "+~A%  Uݤfname(A$):os%=32:A%,B%:B%=A%:A%=A$,"\",A%+1):A%=0:A$,".",B%)=0:A$=A$+"." =A$ ݤopen(A$):in0% in0%=(A$):in0%:=in0% Fos%<8:A%=A$,"."):A%:in0%=(A$,A%-1)+"/"+A$,A%+1)):in0%:=in0% os%<>32A$,"."):=0 in0%=(A$+"."):in0%:=in0% =(A$+".mac") ݤvalue(V$)  ;::=26:error$="undefined label":=P%error$=$:=P% *#A%=V$,"+$"):A%=0:A%=V$,"-$") 4!A%:V$=V$,A%)+"P%"+V$,A%+2) z=V$ SetLabel:L$ 0::=31:error$="invalid label name": Item$=s(Item$,2)) =A%=Item$+" "," "):L$=Item$,A%-1):Item$=s(Item$,A%+1)) =A$=uc(L$):A$="BYTE"A$="WORD":Word$="EQU"+A$,1):EQU: dA$="ASCII"A$="ASCIIZ":Item$=""""+Item$,2,Item$-2)+""""+",0",A$,1)="Z"):Word$="EQUB":EQU: error$="setting '"+L$+"'" ;uc(Item$,4))<>"EQU ":Var_Assign(L$,P%):error$="": 9Var_Assign(L$,ävalue(Item$,5))):error$="":Item$=""  4ݤo0(A%,N%):A$,B%,L%:A%<0:B%=2:A%=A%&7FFFFFFF $;A$=(A%7)+A$:A%=A%8:L%=L%+3:L%>27:=(A%+B%)+A$,N%) 8#ݤsL(A$):A$,1)=" ":A$=A$,2) BA$,1)<>" ":=A$ L6ݤq(A$):A$=s(A$):A$,1)="""":A$=s(A$,2,A$-2)) V=A$ j,EQU:Word$="EQUM":num%=value(Item$): t0size%="SBW D",Word$,1))-1:size%<1:size%=1 ~Item$,1)="""":A%=Item$,"""",2):$(cache%+num%)=Item$,2,A%-2):Item$=Item$,A%+1):num%=num%+A%-2cache%!num%=value(Item$):num%=num%+size% 'Item$=s(Item$,Item$+",",",")+1)) >Item$=""num%>252:num%>252:error$="equate item too long"   Module Word$<>"#INCLUDE": Iin0%=open(q(Item$)):in0%=0:error$="#include "+Item$+" not found": 4file$(fnum%)=in$:ptr%(fnum%)=#in%:fnum%=fnum%+1 -#in%:in%=in0%:in0%=0:in$=fname(Item$): AssemLine /Item$="":Word$="":num%=0:error$="":part$="" Line$=#in% 2 Assem < n-AssemInit:cpu$="PDP-11":asm$="AsmPDP": AssemList:o0(P%,6); ""),32);Line$   Assem :A%=Line$+";",";"):Text$=Line$,A%-1):Line$=Line$,A%) :A%=Text$,9):A%:Text$=Text$,A%-1)+" "+Text$,A%+1)  A%=0 Item$=s(Text$):Item$="": :A%=Item$,":"):A%:Item$="."+Item$,A%-1)+Item$,A%+1) (Item$,1)=".":SetLabel:Item$="": Item$,1)=";": Item$,1)="\": EA%=Item$+" "," "):Word$=uc(Item$,A%-1)):Item$=s(Item$,A%+1))  num%=2 "9A%="CLRCOMINCDECNEGADCSBCTSTRORROLASRASL",Word$,3)) ,WA%:(A%-1)3=0:op%=5*8*8*8+((A%-1)3)*8*8-(Word$,4,1)="B")*8*8*8*8*8+dd(Item$): 6$A%="MOVCMPBITBICBIS",Word$,3)) @SA%:(A%-1)3=0:op%=((A%+2)3)*8*8*8*8-(Word$,4,1)="B")*8*8*8*8*8+sd(Item$): J)A%="BPLBMIBHIBLSBVCBVSBCCBCS",Word$) TAA%:(A%-1)3=0:op%=((A%-1)3)*256+1*8*8*8*8*8+disp(Item$): ^/A%=0+0+0+"BR BNEBEQBGEBLTBGTBLE",Word$) h5A%:(A%-1)3=0:op%=((A%-1)3)*256+disp(Item$): r+Word$="ADD":op%=6*8*8*8*8+sd(Item$): |,Word$="SUB":op%=14*8*8*8*8+sd(Item$): $A%="MUL DIV ASH ASHCXOR",Word$) ?A%:(A%-1)4=0:op%=7*8*8*8*8+((A%-1)4)*8*8*8+rd(Item$): )Word$="JSR":op%=4*8*8*8+rd(Item$): 'Word$="JMP":op%=1*8*8+dd(Item$): (Word$="SWAB":op%=3*8*8+dd(Item$): /Word$="SXT":op%=6*8*8*8+7*8*8+dd(Item$): MWord$="RTS":A%=r(Item$):op%=2*8*8+A%:error$="Missing register",A%<0): -Word$="EMT":op%=68*8*8*8+value(Item$): 4Word$="TRAP":op%=68*8*8*8+4*8*8+value(Item$): 3Word$="MARK":op%=6*8*8*8+4*8*8+value(Item$): .Word$="SPL":op%=2*8*8+3*8+value(Item$): %A%="MTPSMFPDMTPDMFPS",Word$,4)) IA%:(A%-1)4=0:op%=1*8*8*8*8*8+6*8*8*8+((A%-1)4+4)*8*8+dd(Item$): A%="MFPIMTPI",Word$,4)) =A%:(A%-1)4=0:op%=6*8*8*8+((A%-1)4+5)*8*8+dd(Item$): XWord$="SOB":A%=Item$,","):op%=63*8*8*8+r(Item$,A%-1))*8*8+disp6(Item$,A%+1)): &6Word$,2)="CL":op%=160+"CV N N",Word$,3,1)): 06Word$,2)="SE":op%=176+"CV N N",Word$,3,1)): :Word$="CCC":op%=175: DWord$="SCC":op%=191: NWord$="NOP":op%=160: XWord$="RTT":op%=6: bWord$="RESET":op%=5: lWord$="IOT":op%=4: vWord$="BPT":op%=3: Word$="RTI":op%=2: Word$="WAIT":op%=1: Word$="HALT":op%=0: Word$="ADR":ADR: num%=0:op%=-1 #Word$="ORG":P%=value(Item$): Word$="BSS":L%=P%: Word$,3)="EQU":EQU: &Word$="ALIGN":op%=0:num%=(P%1): Word$,1)="#":Module: error$="Unknown opcode": BSS:L%=P%: * ADR 4*Line0$=Line$:Text0$=Text$:Item0$=Item$ >>A%=Item0$,","):Line$="MOV PC"+Item0$,A%):Assem:op0%=op% HIA%=Item0$,","):Line$="ADD #"+Item0$,A%-1)+"-$-2"+Item0$,A%):Assem RHnum%=num%+2:cache%!4=cache%!2:cache%?3=op%256:cache%?2=op%:op%=op0% \Line$=Line0$:Text$=Text0$ f zݤmr(A$):A%:A$=s(A$)  m%,r%,v% A$=2:r%=r(A$):r%>-1:=r% 'A$=4:A$,1)="(":A$,1)=")":m%=1 A$,1)="@":m%=1:A$=A$,2) FA$,1)="#":v%=value(A$,2))&FFFF:num%=num%+2:=(m%+2)*8+7+256*v% "A$,2)="-(":m%=m%+4:A$=A$,2) %A$,1)="+":m%=m%+2:A$=A$,A$-1) 9A%=A$,"("):A%:A$,1)<>")":error$="Missing ')'":=-1 ,A%:r%=r(A$,A%+1,2)):A$=A$,A%-1)r%=7 3A$<>"":v%=value(A$)&FFFF:m%=m%+6:num%=num%+2 %r%=7:m%>5:v%=(v%-P%-num%)&FFFF =m%*8+r%+256*v% ݤr(A$):A$<>2:=-1 'A$="PC"A$="Pc"A$="pC"A$="pc":=7 'A$="SP"A$="Sp"A$="sP"A$="sp":=6 A$,1)<>"R"A$,1)<>"r":=-1 A$,1)<"0"A$,1)>"7":=-1 =A$,1) ݤsd(A$) A%,src%,dst%,n% +A%=A$,","):A%=0:error$="Missing ,":=0 =part$=" in source":n%=num%:src%=mr(A$,A%-1)):src%<0:=0 -n%<>num%:cache%!n%=src%256:src%=src%63 &error$="":part$=" in destination" (*n%=num%:dst%=mr(A$,A%+1)):dst%<0:=0 2-n%<>num%:cache%!n%=dst%256:dst%=dst%63 <=64*src%+dst% P ݤrd(A$) ZA%,r%,dst%,n% d+A%=A$,","):A%=0:error$="Missing ,":=0 n;r%=r(s(A$,A%-1))):r%<0:error$="Missing register":=0 xIn%=num%:dst%=mr(A$,A%+1)):n%<>num%:cache%!n%=dst%256:dst%=dst%63 =64*r%+dst% ݤdd(A$) A%,dst%,n% Bn%=num%:dst%=mr(A$):n%<>num%:cache%!n%=dst%256:dst%=dst%63 =dst% ݤdisp(A$) YA%=((value(A$)-P%-2)/2):A%<&FFFFFF80A%>&7F:error$="":error$="branch out of range" =A%&FF ݤdisp6(A$) YA%=((value(A$)-P%-2)/2):A%<&FFFFFFE0A%>&1F:error$="":error$="branch out of range"  =A%&3F rVar_Assign(Var$,Val$) |6Var$,1)="$":A%=("FNVar_S("+Var$+","+Val$+")"): 6Var$,1)="%":A%=("FNVar_I("+Var$+","+Val$+")"): 6Var$,1)="&":A%=("FNVar_B("+Var$+","+Val$+")"): 6Var$,1)="#":A%=("FNVar_F("+Var$+","+Val$+")"): (A%=("FNVar_R("+Var$+","+Val$+")"):  ݤVar_S(a$,b$):a$=b$:=0 ݤVar_I(a%,b%):a%=b%:=0 ݤVar_B(a&,b&):a&=b&:=0 ݤVar_F(a#,b#):a#=b#:=0 ݤVar_R(a,b):a=b:=0 D/ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " N+A$,1)=" ":A$=A$,A$-1):A$,1)<>" " X=A$ ݤuc(A$):B$:A$="":="" 5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ ݤlc(A$):B$:A$="":="" 5B$=B$+(A$((A$<"_")&20)):A$=A$,2):A$="":=B$ *@ݤOS_GetEnv:A$,A%,X%,Y%:X%=1:os%=((&FFF4)&FF00)256:X%-1 4Jos%=32:>&FFFF:ș"GetModuleFileName",0,X%,255:A$=$$X%:run$=A$:=@cmd$ >os%=32:A$=$&100 H{A$=0:>&7FFF:run$=$&8100:ș"OS_GetEnv"A$,,A%:ș"OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ R0A$=0:?(P-3):A$=$&600A$=0:A$=$(-&300) \7A%=A$+" "," "):run$=A$,A%-1):run$<>"":=A$,A%+1) fbY%=X%256:A%=9:?X%=0:X%!1=X%+16:X%!16=0:&FFD1:A%=X%+16:!A%?A%+A%?2<>8:A%?(A%+1)=13:=$(A%+1) p="" $os(A$):A$=42:A$A$<>"":A$  @exit(A%):"FX1,"+A%:quit$=quit$:A$=quit$:quit$="":os(A$) os%=32:ȘA% os%<6:*Quit  ~cݤcl(l$,n%):l$="":A$=s(A$):A$=34:A%=A$+" "" ",""" ",2):l$=A$,2,A%-2):A$=s(A$,A%+1)):=l$ "":A%=A$,l$):A%:A$=s(A$,A%-1)+A$,A$," ",A%)+1)):= n%=0:l$<>"":= %A%=" ",l$=32)+A$,l$):A%=0:="" 'A$=A$,A%-1)+s(A$,A$," ",A%)+1)) Cl$=32:l$=A$,A%):A$=A$,A%-1):=l$,1-(l$=34),l$+2*(l$=34)) PA$,A%,1)<>34:l$=A$,A%,A$+" "," ",A%)-A%):A$=A$,A%-1)+A$,A%+l$+1):=l$ Jl$=A$,A%+1,A$+""" ",""" ",A%+1)-A%-1):A$=A$,A%-1)+A$,A%+l$+3):=l$