$ > 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% SJfnum%=fnum%-1:fnum%>-1:in$=file$(fnum%):#in%:in%=open(in$):#in%=ptr%(fnum%) Tfnum%<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% "Din%=in%:in%:A%=in%:in%=0:#A% 'Nout%=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$,"-$") !4A%: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$ 6Lݤq(A$):A$=s(A$):A$,1)="""":A$=s(A$,2,A$-2)) V=A$ ,jEQU:Word$="EQUM":num%=value(Item$): 0tsize%="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% 2Assem < -nAssemInit:cpu$="PDP-11":asm$="AsmPDP": AssemList:o0(P%,6); <num%:A%=0num%-12:(A%7)*3.5+7);o0(cache%!A%,6);: 835);Text$;(24-Text$,24))(Text$<>""),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 9"A%="CLRCOMINCDECNEGADCSBCTSTRORROLASRASL",Word$,3)) W,A%:(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$): $6A%="MOVCMPBITBICBIS",Word$,3)) S@A%:(A%-1)3=0:op%=((A%+2)3)*8*8*8*8-(Word$,4,1)="B")*8*8*8*8*8+sd(Item$): )JA%="BPLBMIBHIBLSBVCBVSBCCBCS",Word$) ATA%:(A%-1)3=0:op%=((A%-1)3)*256+1*8*8*8*8*8+disp(Item$): /^A%=0+0+0+"BR BNEBEQBGEBLTBGTBLE",Word$) 5hA%:(A%-1)3=0:op%=((A%-1)3)*256+disp(Item$): +rWord$="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)): 6&Word$,2)="CL":op%=160+"CV N N",Word$,3,1)): 60Word$,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 *4Line0$=Line$:Text0$=Text$:Item0$=Item$ >>A%=Item0$,","):Line$="MOV PC"+Item0$,A%):Assem:op0%=op% IHA%=Item0$,","):Line$="ADD #"+Item0$,A%-1)+"-$-2"+Item0$,A%):Assem HRnum%=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$) Z A%,r%,dst%,n% +d A%=A$,","):A%=0:error$="Missing ,":=0 ;n r%=r(s(A$,A%-1))):r%<0:error$="Missing register":=0 Ix n%=num%:dst%=mr(A$,A%+1)):n%<>num%:cache%!n%=dst%256:dst%=dst%63  =64*r%+dst% ݤdd(A$)  A%,dst%,n% B n%=num%:dst%=mr(A$):n%<>num%:cache%!n%=dst%256:dst%=dst%63 =dst%  ݤdisp(A$) Y A%=((value(A$)-P%-2)/2):A%<&FFFFFF80A%>&7F:error$="":error$="branch out of range" =A%&FF  ݤdisp6(A$) Y A%=((value(A$)-P%-2)/2):A%<&FFFFFFE0A%>&1F:error$="":error$="branch out of range"  =A%&3F r Var_Assign(Var$,Val$) 6| Var$,1)="$":A%=("FNVar_S("+Var$+","+Val$+")"): 6 Var$,1)="%":A%=("FNVar_I("+Var$+","+Val$+")"): 6 Var$,1)="&":A%=("FNVar_B("+Var$+","+Val$+")"): 6 Var$,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$="":="" 5 B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$  ݤlc(A$):B$:A$="":="" 5 B$=B$+(A$((A$<"_")&20)):A$=A$,2):A$="":=B$ @* ݤOS_GetEnv:A$,A%,X%,Y%:X%=1:os%=((&FFF4)&FF00)256:X%-1 I4 os%=32:>&FFFF: "GetModuleFileName",0,X%,255:A$=$$X%:run$=A$:=@cmd$ > os%=32:A$=$&100 yH A$=0:>&7FFF:run$=$&8100: "OS_GetEnv"A$,,A%: "OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ 0R A$=0:?(P-3):A$=$&600A$=0:A$=$(-&300) 7\ A%=A$+" "," "):run$=A$,A%-1):run$<>"":=A$,A%+1) bf Y%=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$ <l$="":A%=A$+" "," "):l$=A$,A%-1):A$=s(A$,A%+1)):=l$ Gn%=0: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$