> Startup & PDP11 Emulator with disassembler $ v0.12 2004 JGH: Some more work /( v0.13 2005 JGH: *Commands, RTS, EMT, TRAP _2 v0.14 01-Sep-2005 JGH: More EMTs and TRAPs, mode 7(pc) seems to work, works on PC/Windows W< TRAP 3 and 4 work for STD*, FNsrc() sets address of source \F v0.15 04-Mar-2006 JGH: Split out UNIX traps, allocated startup memory, branches fixed, 8P errors caught, flags change 1Z v0.16 20-May-2006 JGH: Uses new Make system Cd v0.17 18-Mar-2007 JGH: prog% at &000 as per Unix expectations Ln - means hardware vectors must be somewhere else Gx stack frame created for files with headers ` v0.18 13-Jan-2008 JGH: Uses updated disassembly API, stack frame includes null environment < v0.19 03-Feb-2008 JGH: Added some odd address checking : $ :CloseAll:" at line ";: OA$=OS_GetEnv:ver$="0.19":debug%=0:Init:A%=_DEBUG( debug%):quiet%=A$<>"" A$="":"PDP11 Emulator v"ver$" (C)2001-2006 J.G.Harston"'"Memory start: &"h0(mem%,8)" MemSz: &"h0(mz%,6)" MemMsk: &"h0(mm%,6) s A$="":"prog: &"h0(prog%,4)" base: &"h0(base%,4)" err: &"h0(err%,4)" sys: &";h0(sys%,4)" io: &"h0(io%,4) V A$="":"Program space: &"h0(mbot%,5)"-&"h0(mtop%,5)" ";(mtop%-mbot%);" bytes" : ON ERROR REPORT:PROCCloseAll:PRINT:PROCRegDump:A$=""  Error:A$=""  A$<>"":A%=_RUN(A$)  run%:Go  quiet%:A%=_QUIT("") ) EscOn: "PDP11> "A$:cmd(A$,0):0  : "Init H,runpath$=run$: runpath$,1)="""":runpath$=runpath$,2, runpath$-2) /6 runpath$=runpath$): ".:",runpath$,1)) C@swap$="PDPswap":mz%=memsize:mm%=mz%-1:mtop%=mz%:mbot%=0:run%= VJ r%(7),mem% mz%,zp% 15,ctrl% 31:psw%=0:trace0%=0:trace1%=&FFFF:X%=ctrl%:Y%=X%256 PTprog%=mem(0):base%=mem(&100):base%=mem(0) : Allocate low memory T^ io%=FNmem(-&100):sys%=FNmem(-&100):err%=FNmem(-&100) :REM Allocate high memory Shio%=0:sys%=0:err%=mem(-&100):mem%?err%=13 : Allocate high memory r |: >ݤmemsize:A%=2^((--1024)/2): A%<&10000:=A% =&10000 Eݤmem(A%): A%<0:mtop%=mtop%+A%:=mtop% mbot%=mbot%+A%:=mbot%-A% : Error X%=ctrl%:Y%=X%256  -1:run%= ( run%::CloseAll:: -1:RegDump v run%:mem%!err%=:mem%!(err%+4)=&880F:mem%?(err%+6)=:$(mem%+err%+7)=$+0:psw(0,0,,,=17,=17):r%(0)=err%+6:  : Ccmd(A$,link%): A$<>"": A$,1)=" ": A$=A$,2): A$,1)<>" "  A$=""A$,1)="|":  A$,1)="*": A$,2):  A$,1)=".": "."+A$,2): ! A$,1)="/":A$="RUN "+A$,2) 2A%=A$+" "," "):C$=uc(A$,A%-1)):A$=A$,A%+1) 9&A%="BASIC DEBUG GO HELP LOAD QUIT RUN SAVE ",C$+" ") 0 A%:A%=("FN_"+C$+"(A$)"): :A%=_RUN(C$+" "+A$): D: >Nݤ_HELP(A$):'"PDP11 Emulator ";ver$: uc(A$)<>"PDP11":=0 PX" BASIC"'" DEBUG "'" GO ()"'" HELP"'" LOAD " Fb PRINT" mdump"'" medit"'" QUIT"'" RUN "'" SAVE " ,l" QUIT"'" RUN "'" SAVE " v=0 : *ݤ_BASIC(A$):=_RUN(" "+A$) ݤ_MDUMP(A$):=0 ݤ_MEDIT(A$):=0 : !ݤ_QUIT(A$): A$:halt%=:=0 <CloseAll: IF os%=32:PRINT"Press SPACE to exit";:A%=GET "QUIT":=0 : %ݤ_RUN(A$): A$,1)=" ":A$=A$): A%=A$+" "," "): A$="": : $ When running code within Unix: / r0-r5=0, r6=top of memory, r7=entry point #  (sp)=>argn, argv[], envv[], 0 C Code expects text segment at header+16 to be at address &0000   Code entered at header!10 %* Not relocatable if header!14<>0 %4 Cannot RTS to system, must exit 9> If no header, &0000 pushed onto stack, [&0000]=halt H: RC$=A$:F$=fname(A$,A%-1)) 5\in%=(F$): in%=0:os%<>32:F$=F$+"/pdp":in%=(F$) #f in%=0:"Can't open '"F$"'":=0 Apgbpb(3,in%,zp%,16,0):magic%=!zp% &FFFF : Read file header Tz magic%<>&107 magic%<>&110 magic%<>&111 magic%<>&105:magic%=0 magic%=16 Lgbpb(3,in%,mem%+prog%-base%*(magic%=0),#in%-magic%,magic%):#in%:in%=0 C A%=04:r%(A%)=0::r%(5)=&0BBC:r%(6)=mtop%-2:r%(7)=prog%+base% x magic%:frame r%(6)=r%(6)-C$-3:$(mem%+r%(6)+2)=C$:r%(1)=r%(6)+2:mem%?0=0:mem%?1=0:mem%?r%(6)=0:mem%?(r%(6)+1)=0 =_GO(h0(r%(7),4)) :  Set up entry from header 0 Create stack frame with command parameters o sp=>argn, ->arg[0], ->arg[1], .., 0, ->env[0], ->env[1], .., 0, arg[0], arg[1], .., env[0], env[1], .., 0 7 eg 2, ->cat, ->file, 0, 0, "cat"+0, "file"+0, 0  Need to: ) scan for file >>file options frame ]A%=(zp%!6)&FFFF: A%:B%=(zp%!2 &FFFF)+(zp%!4 &FFFF): mem%?B%=0:B%=B%+1:A%=A%-1: A%=0 /r%(7)=prog%+zp%!10 &FFFF:A%=1:B%=1:C%=1: T C$,A%,1)=" ":C%=C%+1:B%=A%: B%=B%+1: C$,B%,1)<>" ":C$=C$,A%-1)+0+C$,B%) DA%=A%+1: A%> C$:$(mem%+mtop%- C$-3)=C$+0+0:mem%?(mtop%-1)=0 F$r%(6)=(mtop%- C$-2*C%-6-3)-2:mem%?r%(6)=C%:mem%?(r%(6)+1)=C%256 .A%=r%(6)+2:B%=mtop%- C$-2-1 #8:mem%?A%=B%:mem%?(A%+1)=B%256 4B:B%=B%+1: mem%?B%=0 B%>mtop%:B%=B%+1:A%=A%+2 "LC%=C%-1: C%<0:mem%!(A%-2)=0: V: 4`ݤ_LOAD(A$):A%=A$," "): A%=0:"Bad address":=0 %jF$=fname(A$,A%-1)):A$=A$,A%+1) .tin%=(F$): in%:#in%:in%=0 F$=F$+"/pdp" -~ uc(A$,2))="&O":A$=h0(oct(A$,2)),8) )"Load "+F$+" "+~(mem%+("&"+A$)):=0 : ݤ_SAVE(A$): Dump core &A$=fname(s(A$,A$+" "," ")-1))) $"Save "+A$+" "+~mem%+"+"+~mz% SetType(A$) =0 : Dݤ_DEBUG(A$):debug%=0:trace0%=0:trace1%=&FFFF: uc(A$)="OFF":=0 [A$="":"1=Register Dump"'"2=Single Step"'"4=EMT calls"'"8=ignore odd word accesses":=0 ,debug%=(A$):(debug%1): <9: : >8 6A%=A$," "): A%:trace0%=(A$,A%+1)):A$=A$,A%+1) )A%=A$," "): A%:trace1%=(A$,A%+1))  =0 : ݤ_GO(A$): A$="":=0 -( uc(A$,2))="&O":A$=h0(oct(A$,2)),8) 2r%(7)=("&"+A$):Go:=0 <: FCloseAll #Pin%=in%: in%:A%=in%:in%=0:#A% (Zout%=out%: out%:A%=out%:out%=0:#A% d n: xݤfname(A$): A$,"."):=A$  os%=32:=A$+".pdp" =A$ : SetType(A$): os%>8: "SetType "+A$+" FFD"  : > PDP11 N Not yet done: SXT, ASHC, MARK, SOB, ops 1-7, SPL, M[F|T][PI|PD|PS], FLop $ 08-Nov-2007: ops 1-7, SPL done >( 12-Aug-2008: SXT, ASHC, SOB, ops 1-7, SPL, M[F|T]PS done 2: <RegDump: : OF A%=07:"R";A%;"= "o0(r%(A%)&FFFF,6)": ";c(r%(A%)256);c(r%(A%));" "; -P B%=r%(A%)r%(A%)+7: c(mem%?B%);::32 >Z B%=r%(A%)r%(A%)+7 2: o0(mem%!(B%mm%)&FFFF,6)" ";: 'd::"PSW="o0(psw%,6);14;dis;10 n PSW: 8=M 4=Z 2=V 1=C x : Go #abort%=:halt%=0:run%=:EscOff d:(debug%1): r%(7)>=trace0% r%(7)<=trace1%:x%=:y%=:30:RegDump:31,x%,y%:(debug%2): -113:-1:halt%=:abort%= .op%=mem%!(r%(7)mm%):r%(7)=(r%(7)+2)&FFFE @dd%=op%63:ss%=(op%&FC0)64:op%=(op%&F000)&1000:by%=op%8 JA%=("FN_"+~(op%7)):halt%:EscOn:run%=: quiet% abort%:RegDump  :  Opcodes are: & 00xxxx various 10xxxx various ) 01xxxx MOV ss,dd 11xxxx MOVB ss,dd ) 02xxxx CMP ss,dd 12xxxx CMPB ss,dd ) 03xxxx BIT ss,dd 13xxxx BITB ss,dd ) 04xxxx BIC ss,dd 14xxxx BICB ss,dd )" 05xxxx BIS ss,dd 15xxxx BISB ss,dd ), 06xxxx ADD ss,dd 16xxxx SUB ss,dd &6 07xxxx various 17xxxx various @: DJݤsrc(ss%,b%): Fetch source value, sets D% to address of source (T m%,r%,a%:D%=0:a%=&FFFF: b%:a%=&FF ;^m%=ss%8:r%=ss%7:b%=2-b%: r%>5:b%=2: sp&pc always +2 Nh m%=0:D%=0:=r%(r%)a% : Rn Rr m%=1:D%=r%(r%) : (Rn) S| m%=2:D%=r%(r%):r%(r%)=r%(r%)+b% : (Rn)+ R m%=3:D%=mem%!(r%(r%)mm%):r%(r%)=r%(r%)+2 : @(Rn)+ S m%=4:r%(r%)=r%(r%)-b%:D%=r%(r%) : -(Rn) R m%=5:r%(r%)=r%(r%)-2:D%=mem%!(r%(r%)mm%) : @-(Rn) Q m%=6:D%=mem%!(r%(7)mm%):r%(7)=r%(7)+2:D%=(r%(r%)+D%) : X(Rn) P m%=7:D%=mem%!(r%(7)mm%):r%(7)=r%(7)+2:D%=mem%!((r%(r%)+D%)mm%) : @X(Rn) j b%=2:(D%1):(debug%8)=0:"Bus error: word read from odd address (";m%;"/";r%;")":halt%=:abort%= =mem%!(D%mm%)a% : Xpre(dd%,b%): Do pre-access register adjustment, sets D% to address of destination H m%,r%:D%=0:m%=dd%8:r%=dd%7:b%=2-b%: r%>5:b%=2: sp&pc always +2 E Pre always called, dst sometimes not, so D% must be set up here ? m%=4:r%(r%)=r%(r%)-b% : -(Rn) @ m%=5:r%(r%)=r%(r%)-2 : @-(Rn) J m%=1 m%=2 m%=4:D%=r%(r%) : (Rn), (Rn)+, -(Rn) E m%=3 m%=5:D%=mem%!(r%(r%)mm%) : @(Rn)+, @-(Rn) = m%=6:D%=mem%!(r%(7)mm%):r%(7)=r%(7)+2 : X(Rn) >& m%=7:D%=mem%!(r%(7)mm%):r%(7)=r%(7)+2 : @X(Rn) 0 :: +Dݤdst(dd%,b%): Fetch destination value 5N m%,r%,a%:m%=dd%8:r%=dd%7:a%=&FFFF: b%:a%=&FF :X m%=0:=r%(r%)a% : Rn ;b m%=6:=mem%!((r%(r%)+D%)mm%)a% : X(Rn) l=mem%!(D%mm%)a% v: Bdst(dd%,v%,b%): Store dest value and post-access reg adjust 0 Storing to mode 7 needs to double indirect = m%,r%:m%=dd%8:r%=dd%7:v%=v%&FFFF:b%=2-b%: r%>5:b%=2 | IF b%=2:IF(D%AND1):IF(debug%AND8)=0:PRINT"Bus error: word write to odd address (";m%;"/";r%;")":halt%=TRUE:abort%=TRUE J m%=0: b%=1:r%(r%)=v%&FF (&FF00 (v%128)<>0): : Rn R m%=0:r%(r%)=v%: : Rn ` m%<3 m%=4:mem%?(r%(r%)mm%)=v%: b%=2:mem%?((r%(r%)+1)mm%)=v%256 : (Rn), (Rn)+, -(Rn) e m%=3 m%=5:mem%?(mem%!r%(r%)mm%)=v%: b%=2:mem%?((mem%!r%(r%)+1)mm%)=v%256: @(Rn)+, @-(Rn) U m%=2:r%(r%)=r%(r%)+b%: : (Rn)+ V m%=3:r%(r%)=r%(r%)+2: : @(Rn)+ T m%=6:mem%?((r%(r%)+D%)mm%)=v%: b%=2:mem%?((r%(r%)+D%+1)mm%)=v%256 : X(Rn) a m%=7:mem%?(mem%!((r%(r%)+D%)mm%)mm%)=v%: b%=2:mem%?(mem%!((r%(r%)+D%)mm%+1)mm%)=v%256 _ IFm%=7:mem%?((r%(r%)+D%)ANDmm%)=v%:IFb%=2:mem%?((r%(r%)+D%+1)ANDmm%)=v%DIV256 :REM @X(Rn)   : Opsw(v%,b%,cv%,nv%,cc%,nc%): value, byte?, changeV?, newV, changeC?, newC (  v%=0:psw%=psw%4 psw%=psw%&FFFB 0* b%=0:psw%=(psw%&FFF7)(((v%&8000)<>0)8) ,4 b%:psw%=(psw%&FFF7)(((v%&80)<>0)8) (> cv%:psw%=(psw%&FFFD)((nv%<>0)2) (H cc%:psw%=(psw%&FFFE)((nc%<>0)1) R \: /fcarry(c%):psw%=(psw%&FFFE)((c%<>0)1): p: z b1xxxx - MOV/MOVB: Pݤ_1:V%=src(ss%,by%):pre(dd%,by%):dst(dd%,V%,by%):psw(V%,by%,1,0,0,0):=0 :  b2xxxx - CMP/CMPB: 3ݤ_2:V%=src(ss%,by%):W%=src(dd%,by%):R%=V%-W% W by%:V%=((V%&80)=(W%&80))((R%&80)<>(W%&80)):psw(R%,0,1,V%,1,R%&FFFFFF00):=0 YV%=((V%&8000)=(W%&8000))((R%&8000)<>(W%&8000)):psw(R%,0,1,V%,1,R%&FFFF0000):=0 :  b3xxxx - BIT/BITB: Eݤ_3:V%=src(ss%,by%):W%=src(dd%,by%):psw(V%W%,by%,1,0,0,0):=0 :  b4xxxx - BIC/BICB: 8ݤ_4:V%=src(ss%,by%):pre(dd%,by%):W%=dst(dd%,by%) 6V%=V%W%:dst(dd%,V%,by%):psw(V%,by%,1,0,0,0):=0 :  b5xxxx - BIS/BISB: 8ݤ_5:V%=src(ss%,by%):pre(dd%,by%):W%=dst(dd%,by%) 5$V%=V%W%:dst(dd%,V%,by%):psw(V%,by%,1,0,0,0):=0 .: 8 b6xxxx - ADD/SUB: RBݤ_6:V%=src(ss%,0)&FFFF:pre(dd%,0):W%=dst(dd%,0): by%:R%=W%-V% R%=W%+V% ;LV%=(V%&8000)=(W%&8000):V%=V%((R%&8000)<>(W%&8000)) 4Vdst(dd%,R%,0):psw(R%,0,1,V%,1,R%&FFFF0000):=0 `: /j b7xxxx - MUL/DIV/ASH/ASHC/XOR/Fop/???/SOB (tݤ_7: by%:=0 =("FN_7"+~(ss%8)) ~: 2 b0xxxx - HALT/etc/Bxx/JSR/CLRetc/RORetc/und: ,ݤ_0:(ss%&20)=0: ss%>3 by%:=branch  ss%8=7:=0  ss%8=4:=_04 =("FN_0"+o0(ss%,2)) : /ݤbranch:dist%=dd%+(ss%3)*64:op%=ss%4+op% < op%=1 :=rel() : BR D op%=2 :=rel((psw%4)=0) : BNE - Z=0 D op%=3 :=rel((psw%4)<>0) : BEQ - Z=1 G op%=4 :=rel(((psw%8)<>0)((psw%2)<>0)=0) : BGE - N XOR V =0 G op%=5 :=rel(((psw%8)<>0)((psw%2)<>0)<>0) : BLT - N XOR V =1 Z op%=6 :=rel(((psw%4)<>0)(((psw%8)<>0)((psw%2)<>0))=0): BGT - Z OR (N XOR V)=0 [  op%=7 :=rel(((psw%4)<>0)(((psw%8)<>0)((psw%2)<>0))<>0): BLE - Z OR (N XOR V)=1 D op%=8 :=rel((psw%8)=0) : BPL - N=0 D op%=9 :=rel((psw%8)<>0) : BMI - N=1 G( op%=10:=rel(((psw%1)<>0)((psw%4)<>0)=0) : BHI - C OR Z =0 G2 op%=11:=rel(((psw%1)<>0)((psw%4)<>0)<>0) : BLOS- C OR V =1 D< op%=12:=rel((psw%2)=0) : BVC - V=0 DF op%=13:=rel((psw%2)<>0) : BVS - V=1 DP op%=14:=rel((psw%1)=0) : BCC - C=0 DZ op%=15:=rel((psw%1)<>0) : BCS - C=1 d=0 n: xݤrel(A%): A%:=0 ? dist%>127:r%(7)=r%(7)-(256-dist%)*2 r%(7)=r%(7)+dist%*2 =0 : . 0000dd - HALT/WAIT/RTI/BPT/IOT/RESET/RTT ݤ_000  dd%=0:halt%=:=0: HALT  dd%=1:=0 : WAIT  dd%=2:=0 : RTI  dd%=3:=0 : BPT  dd%=4:=0 : IOT ! dd%=5:=0 : RESET  dd%=6:=0 : RTT  dd%=7:=0 =0 :  0001dd - JMP: P"ݤ_001:(dd%&38)=0 dd%=&17:(debug%8)=0:"JMP fault":halt%=:abort%=:=0 ],A%=src(dd%,0):(D%1):(debug%8)=0:"Bus error: JMP to odd address":halt%=:abort%=:=0 6r%(7)=D%:=0 @: 0J 0002xx - RTS/-/-/SPL/Clear flags/Set flags Tݤ_002 /^ dd%>47:psw%=psw%(dd%15):=0 : Sxx ,h dd%>23:psw%=psw%(dd%15):=0 : Cxx 2r(dd%8)=3:=0 : SPL n .|(dd%8)=2:=0 : - .(dd%8)=1:=0 : - ;r%=dd%7:r%(7)=r%(r%):W%=mem%?(r%(6)mm%):r%(6)=r%(6)+1 LW%=mem%?(r%(6)mm%)*256+W%:r%(6)=r%(6)+1:r%(r%)=W%:=0 : RTS r :  0003dd - SWAB: Fݤ_003:pre(dd%,0):V%=dst(dd%,0):!zp%=V%:zp%!2=V%:R%=zp%!1 &FFFF (dst(dd%,R%,0):psw(V%,0,1,0,1,0):=0 : $ 0004rdd - JSR Rn,dst/EMT/TRAP: ݤ_04: by%:=_TRAP ;(dd%&38)=0 dd%=&17:"JSR fault":halt%=:abort%=:=0 OA%=src(dd%,0):(D%1):"Bus error: JSR to odd address":halt%=:abort%=:=0 <r%=ss%7:W%=r%(r%):r%(6)=r%(6)-1:mem%?(r%(6)mm%)=W%256 Rr%(6)=r%(6)-1:mem%?(r%(6)mm%)=W%:r%(r%)=r%(7):r%(7)=D%&FFFE:=0 : JSR r,dd :  b050dd - CLR: ?&ݤ_050:pre(dd%,by%):dst(dd%,0,by%):psw(0,by%,1,0,1,0):=0 0: : b051dd - COM: SDݤ_051:pre(dd%,by%):V%=dst(dd%,by%):dst(dd%,V%,by%):psw(V%,by%,1,0,1,1):=0 N: X b052dd - INC Dbݤ_052:pre(dd%,by%):V%=(dst(dd%,by%)+1)&FFFF:dst(dd%,V%,by%) Ql by%:psw(V%&FF,by%,1,(V%&FF)=&80,0,0):=0 psw(V%,by%,1,V%=&8000,0,0):=0 v:  b053dd - DEC Dݤ_053:pre(dd%,by%):V%=(dst(dd%,by%)-1)&FFFF:dst(dd%,V%,by%) Q by%:psw(V%&FF,by%,1,(V%&FF)=&7F,0,0):=0 psw(V%,by%,1,V%=&7FFF,0,0):=0 :  b054dd - NEG: Eݤ_054:pre(dd%,by%):V%=(dst(dd%,by%)+1)&FFFF:dst(dd%,V%,by%) M by%:psw(V%,by%,1,V%=&80,1,V%=0):=0 psw(V%,by%,1,V%=&8000,1,V%=0):=0 :  b055dd - ADC: Gݤ_055:pre(dd%,by%):V%=dst(dd%,by%):W%=psw%1:dst(dd%,V%+W%,by%) l by%:psw(V%+W%,by%,1,V%=&7F W%,1,V%=FF W%):=0 psw(V%+W%,by%,1,V%=&7FFF W%,1,V%=&FFFF W%):=0 :  b056dd - SBC: Gݤ_056:pre(dd%,by%):V%=dst(dd%,by%):W%=psw%1:dst(dd%,V%-W%,by%) g  by%:psw(V%-W%,by%,1,V%=&80 W%,1,V%=0 W%):=0 psw(V%-W%,by%,1,V%=&8000 W%,1,V%=0 W%):=0 :   b057dd - TST: 3*ݤ_057:V%=src(dd%,by%):psw(V%,by%,1,0,1,0):=0 4: > b060dd - ROR: 3Hݤ_060:pre(dd%,by%):V%=dst(dd%,by%):W%=psw%1 OR by%=1:R%=((V%2)&7F)(W%*&80):psw(R%,by%,1,(R%>&7F)((V%1)<>0),1,V%1) U\ by%=0:R%=((V%2)&7FFF)(W%*&8000):psw(R%,by%,1,(R%>&7FFF)((V%1)<>0),1,V%1) fdst(dd%,R%,by%):=0 p: z b061dd - ROL: 3ݤ_061:pre(dd%,by%):V%=dst(dd%,by%):W%=psw%1 M by%=1:R%=((V%*2)&FE)W%:psw(R%,by%,1,(R%>&7F)((V%&80)<>0),1,V%&80) U by%=0:R%=((V%*2)&FFFE)W%:psw(R%,by%,1,(R%>&7FFF)((V%&8000)<>0),1,V%&8000) dst(dd%,R%,by%):=0 :  b062dd - ASR: )ݤ_062:pre(dd%,by%):V%=dst(dd%,by%) S by%=1:W%=V%&80:R%=((V%2)&7F)W%:psw(R%,by%,1,(R%>&7F)((V%1)<>0),1,V%1) Y by%=0:W%=V%&8000:R%=((V%2)&7FFF)W%:psw(R%,by%,1,(R%>&7FFF)((V%1)<>0),1,V%1) dst(dd%,R%,by%):=0 :  b063dd - ASL: )ݤ_063:pre(dd%,by%):V%=dst(dd%,by%) H by%=1:R%=(V%*2)&FE:psw(R%,by%,1,(R%>&7F)((V%&80)<>0),1,V%&80) P by%=0:R%=(V%*2)&FFFE:psw(R%,by%,1,(R%>&7FFF)((V%&8000)<>0),1,V%&8000)  dst(dd%,R%,by%):=0 $ : . b064dd - MARK/MTPS: =8 ݤ_064:by%:psw%=src(ss%,by%):=0 : MTPS dst(dd%,V%,0):=0 : SXT  :  070rdd - MUL: 2 ݤ_70:V%=src(dd%,0):r%=ss%7:r=V%*r%(r%):W%=0 C r>&7FFFFFFF:r=&7FFFFFFF:W%=1 r<&80000000:r=&80000000:W%=1 ; r%(r%1)=r 65536:r%(r%)=r &FFFF:psw(r,0,1,0,1,W%):=0  :  071rdd - DIV: ? ݤ_71:V%=src(dd%,0):r%=ss%7: r%1:psw%=(psw%&FFFD)2:=0 S !zp%=r%(r%):zp!2=r%(r%1): v%<>0:W%=!zp% V%:R%=!zp% V%:r%(r%1)=R%:r%(r%)=W% / psw(W%,0,V%=0 (r%(r%))>(V%),1,V%=0):=0  :  072rdd - ASH: $ ݤ_72:V%=src(dd%,0)63:r%=ss%7 ; V%<32:R%=r%(r%)*2^V%:psw(R%&FFFF,0,1,0,1,R%&10000) =( V%>31:R%=r%(r%)2^(63-V%):psw(R%,0,1,0,1,R%1):R%=R%2 2 r%(r%)=R%&FFFF:=0 < : F 073rdd - ASHC: $P ݤ_73:V%=src(dd%,0)63:r%=ss%7 fZ V%<32:R%=r%(r%)*2^V%:S%=(r%(r%1)*2^V%)(R%65536):psw((R%&FFFF)(S%&FFFF),0,1,0,1,S%&10000) d V%>31:R%=(r%(r%)2^(63-V%))(r%(r%1)*2^(V%-47)):S%=(r%(r%1)2^(63-V%)):psw(R%S%,0,1,0,1,R%1):S%=S%256+32768*(R%1):R%=R%2 (n r%(r%)=R%&FFFF:r%(r%1)=S%&FFFF:=0 x : XOR: 4 ݤ_74:pre(dd%,0):V%=dst(dd%,0):R%=V%r%(ss%7) ( dst(dd%,R%,0):psw(R%,0,1,0,0,0):=0  :  FADD/FSUB/FMUL/FDIV ; ݤ_75:"#"o0(r%(7)-2,6)":"o0(mem%!(r%(7)-2),6)"#";:=0  :  076nnn - unused ݤ_76:=0  :  077rdd - SOB: W ݤ_77:dist%=dd%-192*(dd%>31):ss%=ss%7:V%=(r%(ss%)-1)&FFFF:r%(ss%)=V%:=rel(V%<>0)  : 5 DEFFN_TRAP:PROCEscOn:A%=FN_TRAPX:PROCEscOff:=A% 4 ݤ_TRAP:dd%=dd%+(ss%7)*64: &0xx=EMT, &1xx=TRAP } (debug%4):dd%<16:dd%<4 dd%>6:" OS";"QUITCLI BYTEWORDWRCHNEWLRDCHFILEARGSBGETBPUTGBPBFINDSYS1SYS2ERR ",dd%*4+1,4); " (debug%4):(dd%&160)=&140: "indir exit fork read write open close wait creat link unlinkexec chdir time mknod chmod chown brk stat lseek getpidmount umountsetuidgetuidstime ptrace[27] fstat pause utime stty",(dd%-64)*6+1,6); , (debug%4):(dd%&160)=&160: "gtty [33] nice ftime sync kill [38] [39] [40] dup2 pipe times profil[45] setgidgetgidsignal[49] [50] acct phys lock ioctl [55] [56] [57] [58] exece umask chroot[62] [63]",(dd%-96)*6+1,6); F6 dd%<16:psw%=psw%-4:EscOn:A%=("FN_EMT"+h0(dd%,2)):EscOff:=A% %@ dd%<256:=("FN_EMT("+ dd%+")") ]J r7%=r%(7): dd%<&140:A%=("FN_TRAP"+h0(dd%-256,2)) A%=("FN_TRAP("+h0(dd%-256,2)+")") T r%(7)=r7%:=A% ^ : 8h ݤ_EMT00:halt%=:=0 : QUIT 6r ݤ_EMT01:cmd($(mem%+r%(0)),):r%(0)=0:=0 : OSCLI 9| ݤ_EMT02: X%,Y%:A%=r%(0) : OSBYTE G A%=&82:r%(1)=0:r%(2)=0:=0 : high order address C A%=&83:r%(1)=membot%:r%(2)=membot%256:=0 : bottom of memory @ A%=&84:r%(1)=memtop%:r%(2)=memtop%256:=0 : top of memory o os%<>32:X%=r%(1):Y%=r%(2):A%=&FFF4:r%(1)=(A%&FFFF00)256:r%(2)=(A%&FF0000)65536:carry(A%&1000000):=0 r%(0)  0:r%(1)=32:=0  127:r%(1)=#r%(1):=0 8 128:A%=(r%(1)+256*r%(2)):r%(1)=A%:r%(2)=A%256:=0 F 129:A%=(r%(1)+256*r%(2)):r%(1)=A%:r%(2)=A%256:carry(A%=-1):=0 - 134:A%=+256*:r%(1)=A%:r%(2)=A%256:=0 ! 135:r%(1)=(,):r%(2)=:=0  160:r%(1)=@vdu%!r%(1):=0   =0 , ݤ_EMT03: X%,Y%:A%=r%(0) : OSWORD 3 A%=0: ""A$:$(mem%+(mem%!r%(1)&FFFF))=A$:=0 7& os%<>32 A%=10:X%=mem%+r%(1):Y%=X%256: &FFF1:=0 0 A% : 1:mem%!r%(1)=:=0 D 2:=mem%!r%(1):=0 DN 7: mem%!r%(1),mem%!(2+r%(1)),mem%!(4+r%(1)),mem%!(6+r%(1)):=0 X 8: mem%?r%(1),mem%?(1+r%(1)),mem%?(2+r%(1)),mem%?(3+r%(1)),mem%?(4+r%(1)),mem%?(5+r%(1)),mem%?(6+r%(1)),mem%?(7+r%(1)),mem%?(8+r%(1)),mem%?(9+r%(1)),mem%?(10+r%(1)),mem%?(11+r%(1)),mem%?(12+r%(1)),mem%?(13+r%(1)):=0 b 14:$(mem%+r%(1))=$:=0 l 15:$=$(mem%+r%(1)):=0 v  =0 . ݤ_EMT04: r%(0):=0 : OSWRCH , ݤ_EMT05::r%(0)=13:=0 : OSNEWL . ݤ_EMT06:r%(0)=:=0 : OSRDCH 0 ݤ_EMT07 : OSFILE + A%=2 14 14:X%!A%=mem%!(r%(1)+A%):  fn%=mem%+(mem%!r%(1)&FFFF) 9 A%=0 A%=255:addr(2):addr(6):addr(10):addr(14) r os%<32: "OS_File",r%(0),$fn%,X%!2,X%!6,X%!10,X%!14 r%(0),,X%!2,X%!6,X%!10,X%!14 r%(0)=file($fn%,r%(0)) . A%=2 14 14:mem%!(r%(1)+A%)=X%!A%::=0 - addr(A%):X%!A%<&10000:X%!A%=mem%+A%!X%  0 ݤ_EMT08:A%=r%(0) : OSARGS ) os%=32: A%=0: r%(1)=0:r%(0)=29:=0 / A%=0: r%(1)=0: Y%:r%(0)=(&FFDA)&FF:=0  A%  0:mem%!r%(2)=#r%(1):=0 * 1:#r%(1):mem%!r%(2):=0 4 2:mem%!r%(2)=#r%(1):=0 > 3:#r%(1)=mem%!r%(2):=0 H 4:mem%!r%(2)=#r%(1):=0 R 5:mem%!r%(2)=#r%(1):=0 \ /f mem%!r%(2)=args(r%(0),r%(1),mem%!r%(2)):=0 p z =0 - ݤ_EMT09: r%(1)=0:r%(0)=:=0 : OSBGET  os%=32:r%(0)=#r%(1):=0 ? Y%:Y%=r%(1):A%=&FFD7:r%(0)=A%&FF:carry(A%&1000000):=0 = ݤ_EMT0A:r%(1)=0: r%(0):=0 #r%(1),r%(0):=0 : OSBPUT 0 ݤ_EMT0B : OSGBPB 0 A%=0 12:X%?A%=mem%?(r%(1)+A%)::addr(1) G gbpb(r%(0),X%?0,X%!1,X%!5,X%!9):mem%!(1+r%(1))=mem%!(1+r%(1))-mem% ' A%=0 12:mem%?(r%(1)+A%)=X%?A%:  =0 0 ݤ_EMT0C : OSFIND  A%=0:#r%(1):=0 2 (A%&C0)=&40:r%(0)=openin($(mem%+r%(1))):=0 3 (A%&C0)=&80:r%(0)=openout($(mem%+r%(1))):=0 2 (A%&C0)=&C0:r%(0)=openup($(mem%+r%(1))):=0 =0 +ݤ_EMT0D:r%(0)=0:=_BASIC("") : SYS $=0 1.ݤ_EMT0E:=0 : HANDLER /8ݤ_EMT0F:=0 : ERROR Bݤ_EMT(A%):=0 L: Vݤoct(A$): A%: 0` A$>"/" A$<":":A%=A%*8+ A$,1):A$=A$,2) j (A$>"/" A$<":"):=A% t: 3~ݤc(A%):A%=A%255: A%<32 A%>126:="." = A% 1ݤstr0(A%):A$="": ?A%>31:A$=A$+?A%:A%=A%+1 ?A%<32 A$>254:=A$ : Rݤdis:A%=Dis_Code(11,r%(7),mem%+(r%(7)mm%)):A$=$(X%+4):A%=A$,"&"):A%=0:=A$ =B%=A%:B%=B%+1:"0123456789ABCDEF",A$,B%,1))=0 B%>A$ @A$=A$,A%)+"o"+o0((A$,A%,B%-A%+1)),(B%-A%-1)*3/2)+A$,B%) =A$ : ,EscOn:os%=32:"ESC ON": "FX229": 0EscOff:os%=32:"ESC OFF": "FX229,1": : ݤhalt:halt%=:RegDump:= " > BLib.String 1.00 09Aug1998 : # String Manipulation Functions #( ============================= 2: 7< FNs() - strip spaces from start and end of string 7F ------------------------------------------------- /Pݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +ZA$,1)=" ":A$=A$,A$-1):A$,1)<>" " d=A$ n: +x FNuc() - convert string to upper case + ------------------------------------- ݤuc(A$): B$:A$="":="" 5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ : + FNlc() - convert string to lower case + ------------------------------------- ݤlc(A$): B$:A$="":="" 5B$=B$+(A$((A$<"_")&20)):A$=A$,2):A$="":=B$ : " > BLib.Number 1.01 09Aug1988 ( v1.00 09Aug1988 JGH: First version 1 v1.01 xxxxxxxxx JGH: Added Octal and Binary 4( Bug: Octal and Binary don't work for &8xxxxxxx 2: < Number Output Routines F ~~~~~~~~~~~~~~~~~~~~~~ P #Z Hexadecimal padded with zeros #dݤh0(A%,N%)="0000000"+~A%,N%) n: $x Hexadecimal padded with spaces "ݤh(A%,N%)=" "+~A%,N%) :  Decimal padded with zeros #ݤd0(A%,N%)="00000000"+A%,N%) : Decimal padded with spaces #ݤd(A%,N%)=" "+A%,N%) :  Octal padded with zeros ?ݤo0(A%,N%): A$,B$:A%<0:B$="7":A%=A% &7FFFFFFF B$="0" 7 A$=(A% 7)+A$:A%=A% 8: A%=0:=N%,B$)+A$,N%) :  Octal padded with spaces >ݤo(A%,N%): A$,B$:A%<0:B$="7":A%=A% &7FFFFFFF B$=" " 7 A$=(A% 7)+A$:A%=A% 8: A%=0:=N%,B$)+A$,N%) : " Binary padded with zeros ?,ݤb0(A%,N%): A$,B$:A%<0:B$="1":A%=A% &7FFFFFFF B$="0" 66 A$=(A% 1)+A$:A%=A% 2:A%=0:=N%,B$)+A$,N%) @: J Binary padded with spaces >Tݤb(A%,N%): A$,B$:A%<0:B$="1":A%=A% &7FFFFFFF B$=" " 6^ A$=(A% 1)+A$:A%=A% 2:A%=0:=N%,B$)+A$,N%) h: )r Drive character for supplied number |ݤdrv(A%)=(48+A%-7*(A%>9)) : ) Drive number for supplied character "ݤDrv(A$)=A$-48+7*(A$>"9")31 # > BLib.ProgEnv 1.04 09Jan2007 : # Program Environment Functions #( ============================= 2: ?< Return command line tail, sets run$ to execution filename ;F Works with BASIC on I/O,T6502,Arc,TZ80BBC,PC,Win,TARM ;P Needs: 270 free bytes above end of heap for temp. w/s ?Z --------------------------------------------------------- :dݤOS_GetEnv:A$,A%:X%=1:os%=((&FFF4)&FF00)256:X%-1 Inos%=32:>&FFFF: "GetModuleFileName",0,X%,255:A$=$$X%:run$=A$:=@cmd$ xos%=32:A$=$&100 yA$=0:>&7FFF:run$=$&8100: "OS_GetEnv"A$,,A%: "OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ 2A$=0:?(P-3):A$=$&600 A$=0:A$=$(-&300) 7A%=A$+" "," "):run$=A$,A%-1):run$<>"":=A$,A%+1) bY%=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) ="" : . Run a program, passing it a command line = If program is *Command, called with OSCLI, else CHAINed = ------------------------------------------------------- &os(A$):A$=42:A$ A$<>"":A$  : ( Exit program, setting return value ( ---------------------------------- @exit(A%):"FX1,"+A%:quit$=quit$:A$=quit$:quit$="":os(A$) os%=32: A% "os%<6: *Quit , 6: 1 > DisPDP 1.00 - PDP-11 disassembly routines ݤDis_Name(A%)="PDP-11" /ݤDis_Code(A%,Ptr%,Data%): s%,d%,c%:num%=2 ;(c%=!Data%:s%=(c%&0FC0)64:d%=c%63:c%=(c%&F000)&1000 2$(X%+4)=pdp:X%?3=num%:=num% <ݤpdp F x0 50-63 xx: qP(c%7)=0: s%>39: s%<52:="CLRCOMINCDECNEGADCSBCTSTRORROLASRASL",3*(s%-40)+1,3)+" B",c%8+1,1)+" "+mr(d%) )Z x1, x2, x3, x4, x5 else x0, x6, x7: pd((c%-1)&7)<5:="MOVCMPBITBICBIS",(c%7)*3-2,3)+" B",c%8+1,1)+" "+mr(s%)+","+mr(d%) =("FNpdp_"+~c%) n: (xݤpdp_F:="FLOP "+mr(s%)+","+mr(d%) : (ݤpdp_E:="SUB "+mr(s%)+","+mr(d%) : Qݤpdp_8: s%<32:="BPLBMIBHIBLSBVCBVSBCCBCS",3*((s%4))+1,3)+" "+jr(?Data%) # s%<36:="EMT &"+h0(?Data%,2) # s%<40:="TRAP &"+h0(?Data%,2)  s%=52:="MTPS "+mr(d%)  s%=53:="MFPD "+mr(d%)  s%=54:="MTPD "+mr(d%)  s%=55:="MFPS "+mr(d%) ="EQUB &"+h0(!Data%,4) : ݤpdp_7 > s%<40:="MUL DIV ASH ASHCXOR ",3*(s%8)+1,4)+" "+mr(d%) A s%=40: d%<32:="FADDFSUBFMULFDIV",3*(d%8)+1,4)+" "+r(d%) 9(s%&38)=&38:="SOB "+r(s%)+","+jr(d%-192*(d%>31)) "="EQUB &"+h0(!Data%,4) ,: (6ݤpdp_6:="ADD "+mr(s%)+","+mr(d%) @: SJݤpdp_0: s%<32: s%>3:="BR BNEBEQBGEBLTBGTBLE",3*(s%4)-2,3)+" "+jr(?Data%) ^T s%=0: d%<7:="HALTWAITRTIBPTIOTRESETRTT",d%*4+1+(d%>2)+(d%>3)+(d%=5),4+(d%>2)-2*(d%>4)) ^ s%=1:="JMP "+mr(d%) !h s%=2: d%<8:="RTS "+r(d%) )r s%=2:(d%&38)=&18:="SPL "+(d%7) /| s%=2:(d%&30)=&20:="CCC &"+h0(d%&F,2) / s%=2:(d%&30)=&30:="SCC &"+h0(d%&F,2)  s%=3:="SWAB "+mr(d%) /(s%&38)=&20:="JSR "+r(s%7)+","+mr(d%)  s%=52:="MARK &"+h0(d%,2)  s%=53:="MFPI "+mr(d%)  s%=54:="MTPI "+mr(d%)  s%=55:="SXT "+mr(d%) ="EQUB &"+h0(!Data%,4) : ;ݤr(A%):A%=A%7: A%=7:="PC" A%=6:="SP" ="R"+ A% .ݤmr(A%): m%:m%=(A%&38)8:(A%7)=7:=pc  m%=0:=r(A%)  m%=1:="("+r(A%)+")"  m%=2:="("+r(A%)+")+"  m%=3:="@("+r(A%)+")+"  m%=4:="-("+r(A%)+")" & m%=5:="@-("+r(A%)+")" @0 m%=6:num%=num%+2:="&"+h0(Data%!(num%-2),4)+"("+r(A%)+")" A: m%=7:num%=num%+2:="@&"+h0(Data%!(num%-2),4)+"("+r(A%)+")" D="" Nݤpc X m%=0:="PC" b m%=1:="(PC)" 2l m%=2:num%=num%+2:="#&"+h0(Data%!(num%-2),4) 3v m%=3:num%=num%+2:="@#&"+h0(Data%!(num%-2),4)  m%=4:="-(PC)"  m%=5:="@-(PC)" 8 m%=6:num%=num%+2:="&"+h0(Ptr%+4+Data%!(num%-2),4) 9 m%=7:num%=num%+2:="@&"+h0(Ptr%+4+Data%!(num%-2),4) : Kݤjr(A%): A%<128:="&"+h0(Ptr%+A%*2+2,4) ="&"+h0(Ptr%+A%*2+2-512,4) : * > BLib.Generic.FileIO 1.02 28Apr2007 P v1.02 28Apr2007 JGH: Added functions to FNfile on DOS, PROCcdir, FNopenout < v1.01 07Sep2006 JGH: FNargs avoid zero page on RISC OS *( v1.00 09Aug1988 JGH: Initial version 2: %< General File Interface Routines %F ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ P: 8Z FNfile(), PROCgbpb(), FNfs are callable on Windows 8d -------------------------------------------------- n: ,x Returns file type, file info in X%!... , -------------------------------------- Jݤfile(A$,A%):os%<32:$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF A$,".")=0:A$=A$+"." ;A%=255 A%=5:X%!14=(A$):X%!14:X%!10=#X%!14:#X%!14 1A%=255:X%?6=0:"LOAD """+A$+""" "+~X%!2:=1 A%=5:X%!14:=1 A%=5:=0 FA%=0:"SAVE """+A$+""" "+~X%!10+" "+~X%!14:X%!10=X%!14-X%!10:=1 BA%=7:"SAVE """+A$+""" "+~+"+"+~X%!10:X%!10=X%!14-X%!10:=1 A%=8  : :=2 "MKDIR "+A$:=2  =0 :  General OSGBPB call  ------------------- #"gbpb(A%,chn%,addr%,num%,ptr%) =,?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:os%<32: &FFD1: 6A%=1A%=3:#?X%=X%!9 5@:A%=1A%=2:#?X%,?X%!1 A%=3A%=4:?X%!1=#?X% .JX%!1=X%!1+1:X%!5=X%!5-1: #?X% X%!5<1: T: @^ Return current disk (5), directory (6) or library (7) name @h ---------------------------------------------------------- Brݤgbpb(A%):X%!1=data%:&FFD1:A%=data%+((1+?data%)((A%-2)=6)) |A%?(1+?A%)=13:=$(A%+1) : B Returns entry in current directory, or null string if at end B ------------------------------------------------------------ Eݤgbpb8(ptr%):X%!1=data%:X%!5=1:X%!9=ptr%:A%=8:&FFD1:X%!5=1:="" #A%=data%:A%?(1+?A%)=13:=$(A%+1) : 7 OSARGS call with data. Returns any returned data 7 ------------------------------------------------- 4ݤargs(A%,Y%,ptr%): X%,E%:?(P-3)=0:E%=Y%:Y%=0 /<&8000: !&70:X%=&70:!X%=ptr%:&FFDA:=!X% ( "OS_Args",A%,Y%,ptr% ,,ptr%:=ptr% : ' OSARGS call ignoring X, returns A ' --------------------------------- =ݤargsA(A%):<&8000: X%,Y%,E%,!&70:X%=&70:=(&FFDA)&FF  "OS_Args",A% A%:=A% &: &0 Get current filing system number &: -------------------------------- )Dݤfs:os%<32: A%,Y%,E%:=(&FFDA)&FF N=29 X: 1b Create a directory only if it doesn't exist 1l ------------------------------------------- 'vcdir(A$):os%=32:A%=file(8,A$): file(5,A$)=0:"CDIR "+A$  : . Open an input file ensuring no extension . ---------------------------------------- .ݤopenin(A$):os%=32:A$,".")=0:A$=A$+"." =(A$) : / Open an output file ensuring no extension / ----------------------------------------- /ݤopenout(A$):os%=32:A$,".")=0:A$=A$+"." =(A$) : / Open an update file ensuring no extension /  ----------------------------------------- .ݤopenup(A$):os%=32:A$,".")=0:A$=A$+"." =(A$) *: > Unix  PDP11 Unix Trap functions 7 v0.15 04-Mar-2006 JGH: Separated out from PDP11Em C( 17-Mar-2006 JGH: read/write done, added exit,open,close (2 v0.16 20-May-2006 JGH: Added indir <: DFݤ_TRAP00: indir - entry: (pc+0)=>TRAP instruction, parameters PPr7%=mem%!r%(7)&FFFF:r%(7)=r%(7)+2 : Address of ind'ed TRAP instruction BZdd%=mem%!r7%255:r7%=r7%+2 : Get TRAP instruction Jd dd%<&40:A%=("FN_TRAP"+h0(dd%,2)) A%=("FN_TRAP("+h0(dd%,2)+")") n=A% x: )ݤ_TRAP01: exit - entry: r0=status halt%= =0 : ݤ_TRAP02: fork - ' - exit: r0=new process ID =0 : Gݤ_TRAP03: read - entry: r0=filedes, (pc+0)=buffer, (pc+2)=count # exit: r0=byte count >buffer%=mem%!r7%&FFFF:count%=mem%!(r7%+2)&FFFF:r7%=r7%+4 Ar%(0)<3:A%=0count%-1:mem%?(buffer%+A%)=::r%(0)=count%:=0 :gbpb(4,r%(0),mem%+buffer%,count%,0):r%(0)=count%-X%!5 =0 : Gݤ_TRAP04: write - entry: r0=filedes, (pc+0)=buffer, (pc+2)=count #" exit: r0=byte count >,buffer%=mem%!r7%&FFFF:count%=mem%!(r7%+2)&FFFF:r7%=r7%+4 @6r%(0)<3:A%=0count%-1:mem%?(buffer%+A%)::r%(0)=count%:=0 :@gbpb(2,r%(0),mem%+buffer%,count%,0):r%(0)=count%-X%!5 J=0 T: 9^ݤ_TRAP05: open - entry: (pc+0)=>name, (pc+2)=mode h exit: r0=filedes ;rname%=mem%!r7%&FFFF:mode%=mem%!(r7%+2)&FFFF:r7%=r7%+4 | Need to check mode r%(0)=(str0(mem%+name%)) =0 : *ݤ_TRAP06: close - entry: r0=filedes r%(0)>2:#r%(0) =0 : %ݤ_TRAP07:=0 : wait - . exit: r0=process ID, r1=status Fݤ_TRAP08:r7%=r7%+4:=0: creat - entry: (pc+0)=>name, (pc+2)=mode exit: r0=filedes Iݤ_TRAP09:r7%=r7%+4:=0: link - entry: (pc+0)=>name1, (pc+2)=>name2 9ݤ_TRAP0A:r7%=r7%+2:=0: unlink - entry: (pc+0)=>name Gݤ_TRAP0B:r7%=r7%+4:=0: exec - entry: (pc+0)=>name, (pc+2)=>argv <ݤ_TRAP0C:r7%=r7%+4:=0: chdir - entry: (pc+0)=>dirname %ݤ_TRAP0D:=0 : time - +& exit: r0:r1=time since 1970 S0ݤ_TRAP0E:r7%=r7%+6:=0: mknod - entry: (pc+0)=>name, (pc+2)=mode, (pc+4)=addr F:ݤ_TRAP0F:r7%=r7%+4:=0: chmod - entry: (pc+0)=>name, (pc+2)=mode UDݤ_TRAP10:r7%=r7%+6:=0: chown - entry: (pc+0)=>name, (pc+2)=owner, (pc+4)=group 4Nݤ_TRAP11:r7%=r7%+0:=0: brk - entry: r0=addr FXݤ_TRAP12:r7%=r7%+4:=0: stat - entry: (pc+0)=>name, (pc+2)=>buf 7bݤ_TRAP13:r7%=r7%+2:=0: lseek - entry: (pc+0)=??? %lݤ_TRAP14:r7%=r7%+0:=0: getpid - #v exit: r0=process ID Yݤ_TRAP15:r7%=r7%+6:=0: mount - entry: (pc+0)=>special, (pc+2)=>name, (pc+4)=rwflag <ݤ_TRAP16:r7%=r7%+2:=0: umount - entry: (pc+0)=>special 3ݤ_TRAP17:r7%=r7%+0:=0: setuid - entry: r0=uid %ݤ_TRAP18:r7%=r7%+0:=0: getuid - 3 exit: r0=real uid, r1=effective uid Bݤ_TRAP19:r7%=r7%+0:=0: stime - entry: r0:r1=time since 1970 ]ݤ_TRAP1A:r7%=r7%+6:=0: ptrace - entry: r0=data, (pc+0)=pid, (pc+2)=addr, (pc+4)=request  exit: r0=value !ݤ_TRAP1B:r7%=r7%+0:=0: [27] Eݤ_TRAP1C:r7%=r7%+2:=0: fstat - entry: r0=filedes, (pc+0)=>buff "ݤ_TRAP1D:r7%=r7%+0:=0: pause Gݤ_TRAP1E:r7%=r7%+4:=0: utime - entry: (pc+0)=>filem (pc+2)=timep Dݤ_TRAP1F:r7%=r7%+2:=0: stty - entry: r0=filedes, (pc+0)=argp Dݤ_TRAP20:r7%=r7%+2:=0: gtty - entry: r0=filedes, (pc+0)=argp ! ݤ_TRAP21:r7%=r7%+0:=0: [33] 8ݤ_TRAP22:r7%=r7%+0:=0: nice - entry: r0=priority : ݤ_TRAP23:r7%=r7%+2:=0: ftime - entry: (pc+0)=bufptr !*ݤ_TRAP24:r7%=r7%+0:=0: sync ?4ݤ_TRAP25:r7%=r7%+2:=0: kill - entry: r0=pid, (pc+0)=sig !>ݤ_TRAP26:r7%=r7%+0:=0: [38] !Hݤ_TRAP27:r7%=r7%+0:=0: [39] !Rݤ_TRAP28:r7%=r7%+0:=0: [40] E\ݤ_TRAP29:r7%=r7%+0:=0: dup2 - entry: r0=filedes1, r1=filedes2 $f exit: r0=new filedes 7pݤ_TRAP2A:r7%=r7%+2:=0: pipe - entry: (pc+0)=??? 7z exit: r0=read filedes, r1=write filedes :ݤ_TRAP2B:r7%=r7%+2:=0: times - entry: (pc+0)=buffer eݤ_TRAP2C:r7%=r7%+8:=0: profil - entry: (pc+0)=buff, (pc+2)=bufsize, (pc+4)=offset, (pc+6)=scale !ݤ_TRAP2D:r7%=r7%+0:=0: [45] 3ݤ_TRAP2E:r7%=r7%+0:=0: setgid - entry: r0=gid %ݤ_TRAP2F:r7%=r7%+0:=0: getgid - 3 exit: r0=real gid, r1=effective gid Dݤ_TRAP30:r7%=r7%+4:=0: signal - entry: (pc+0)=sig, (pc+2)=func ! exit: r0=old func !ݤ_TRAP31:r7%=r7%+0:=0: [49] !ݤ_TRAP32:r7%=r7%+0:=0: [50] %ݤ_TRAP33:r7%=r7%+0:=0: acct - Jݤ_TRAP34:r7%=r7%+4:=0: phys - entry: (pc+0)=segreg, (pc+2)=physadr 8ݤ_TRAP35:r7%=r7%+2:=0: lock - entry: (pc+0)=flag Xݤ_TRAP36:r7%=r7%+6:=0: ioctl - entry: (pc+0)=filedes, (pc+2)=request, (pc+4)=argp !ݤ_TRAP37:r7%=r7%+0:=0: [55] !ݤ_TRAP38:r7%=r7%+0:=0: [56] !$ݤ_TRAP39:r7%=r7%+0:=0: [57] !.ݤ_TRAP3A:r7%=r7%+0:=0: [58] S8ݤ_TRAP3B:r7%=r7%+6:=0: exece - entry: (pc+0)=>name, (pc+2)=argv, (pc+4)=envp =Bݤ_TRAP3C:r7%=r7%+2:=0: umask - entry: (pc+0)=complmide dirname !Vݤ_TRAP3E:r7%=r7%+0:=0: [62] !`ݤ_TRAP3F:r7%=r7%+0:=0: [63] jݤ_TRAP(A%):=0