|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16128 (0x3f00) Types: TextFile Names: »retptocode«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦9929d5d85⟧ »cpsys« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦9929d5d85⟧ »cpsys« └─⟦this⟧
; rc4000 6 time.10000 ptext=edit c.30 palgoltext l./,clockbuf/, d, l./type,act/, r/type,act,/bastop,/, l./mess,re/, r/mess, //, l./tbstate,/, r/state,tbstate,/nopr,nopa,noco,P1,P2,P3,stataddr,maxact,/, l./clockpda/, r/,clockpda//, l./firstcommarea/, r/,lastcommarea/,firstLT,lastLT,messsize,k/, l./time,timeint/, r/,timeint//, l1, r/,c1//, l./,nextproc/, r/,nextproc//, l./noshift,totalruntime/, r/,totalruntime//, l./booleanterm/, r/,return,tobedumped/,free/, l2,i/ own boolean pstart,stopcount; real timeint,totalruntime; long L,lifetime; /, l./,Bfname/,r/,DE/(1:20); /,d1, l./timeint:=1;/,r;1;1/4;, i/ lastLT:=40; comment number of elemnts in LT; ; comment maxact was 10 *** cg 771121; maxact:=5; ; comment maximum saved actions; comment lifetime for non active children; lifetime:=extend 2*3600*10000; free:=true; comment used in connection with kø-comm.; /, l./c1:=description(<:console1/, d1, l./COMMAREA/, r/25/7/, r/;/, CODE(1:256*6+47+5), buf,ACT,ACTVAL(1:maxact), LT(1:lastLT); long array Cpustart(1:maxproc);/, l./cleararray(Pignore);/, r/;/; cleararray(buf); cleararray(Cpustart); buf(maxact):=-1; M(1):=0; M(2):=60; buf(2):=sendmessage(<:clock:>,M); ACT(2):=6; comment idle statistic; ACTVAL(2):=0; if false then begin comment check non-active children; buf(1):=sendmessage(<:clock:>,M); ACT(1):=2; end; firstLT:=firstaddr(LT)-1; LT(1):=0; /, l./lastcommarea:=/, d3, l./totalruntime/, r/totalruntime:=//,l1,i/ totalruntime:=0.0; /, l./nextproc:=0/,r/nextproc:=/nopr:=nopa:=noco:=/, l1,d2,i/ M(1):=0; /, l./DES(i):=0;/, d./DES(17):=setbit/, l./sendmessage(c1,/, r/c1/<:console1:>/, l./dure checkmess;/, d./FIRST/,d, l./dure writestat/, l./zonez/,r/3/6+4*6/, l./blocksread/,l1,i/ <:<10>procc:>,nopr,<:<10>paren:>,nopa,<:<10>opcom:>,noco, /, l2,i/ for i:=0 step 2 until 6 do write(z,wordload(stataddr+i), case i shift (-1) + 1 of (<:s:>,<:o:>,<:i:>,<:f:>)); write(z,<:<10>:>); /, l./endwritestat;/,l1,i? boolean procedure LIST(S_no); value Sno; integer Sno; begin zone z(30,1,noerror); integer i,j,k,no; integer array I(1:1); real array N(1:1); procedure noerror(z,i,j); zone z; integer i,j; ; LIST:=true; for no:=0,no+1 while no<maxact and buf(no)<>0 do; if buf(no)<>0 or LT(1)<>0 then goto ENDLIST; open(z,0,<:dummydum:>,0); j:=S_no extract 5 - 1; for j:=j+1 while j<maxproc and Ppda(j)=0 do; if Ppda(j)=0 then j:=j+1; Sno:=Sno shift (-5) shift 5 add j; if j<=maxproc then begin redefarray(N,Ppda(j)+2,2); i:=1; write(z,false add 32,12- write(z,string N(increase(i)))); if Pterm(j)>0 then redefarray(N,Tpda(Pterm(j))+2,2); i:=1; write(z,Pstate(j),TBstate(j),Pignore(j), <: :>,if Pterm(j)>0 then string N(increase(i)) else <::>); end else begin write(z,<:max:>); i:=byteload(syspda+26) - maxproc-maxact; j:=byteload(syspda+27) - 1; k:=byteload(syspda+28); for i:=i,j,k do write(z,if i<0 then 0 else i); write(z,<:<10>:>); end j>maxproc; write(z,<:<10><25><25>:>); getzone(z,M); redefarray(I,M(19)+1,lastLT); k:=M(14) - M(19) - 1; if k>lastLT+lastLT-2 then k:=lastLT+lastLT-2; for i:=k shift (-1) + 1 step -1 until 1 do LT(i):=I(i); if k<lastLT+lastLT-2 then LT(k shift (-1) +2):=0; close(z,true); M(1):=5 shift 12; M(2):=firstLT; M(3):=firstLT + k; buf(no):=sendmessage(S_no shift (-5),M); ACT(no):=4; ACTVAL(no):=S_no + 1; LIST:=false; ENDLIST: end LIST; ?, l./for type:=1 step 1 until 23 do/,r/23/21/,;*** cg 771121 l./r=real(case type of/, l./relt:>,<:rest/,r/<:relt:>,<:rest:>,//,;*** cg 771121 l./gotoSYNER/, d1,i/ if r<>real<:pstar:> then begin COMMAREA(1):=HNAME(1); COMMAREA(2):=HNAME(2) + 32; COMMAREA(3):=real<:xxunk:> shift (-8) extract 24; COMMAREA(4):=real<:xxnow:> shift (-8) extract 24; COMMAREA(5):=real<:xxn:> shift (-8) extract 24; bytesmove:=9; goto ENDINT; end; if -,pstart then goto NOTALLOW; type:=17; if true then else ACTION: if pstart then goto NOTALLOW; /, l./begin zone z(60/, d./endlist;/,i/ begin comment list; if LIST(sendadr shift 5 + 1) then goto NORESOURCES; bytesmove:=-1; goto ENDINT; end list; /, l./comment offuser;/, l./comment timeint;/, l./timeint:=i/, r?timeint:=i?begin timeint:=1/i; callcode(CODE,12); end?, l./comment run;/, l./if bufferclaim>/,;*** cg 771121 i? comment count number of active process in order to minimize buffer waste *** cg 771121; j:=1; for i:=1 step 1 until maxproc do if Ppda(i)<>0 then j:=j+1; ?,;*** cg 771121 l./-maxproc or/,r/ or/-maxact or/, r/maxproc/j/,;*** cg 771121 l./comment dump;/, l./105shift 8 add 110/,i/ if HNAME(1)=114 shift 8 add 101 shift 8 add 109 then begin comment remove_<next>; i:=readname(HNAME); if HNAME(1)<>114 shift 8 add 117 shift 8 add 110 then begin Pstate(procno):=8; goto if i=-2 then OK else if i<0 then SYNER else NEXT2; end else if HNAME(1)=114 shift 8 add 117 shift 8 add 110 and Tpda(Pterm(procno))=sendadr then begin comment NOTE sysstate must be zero; if procno=currproc then begin comment Stop current child; waitanswer(changebuf,M); changebuf:=stopint(Ppda(procno),i); if i<>0 then goto IOER; waitanswer(changebuf,M); M(1):=0; changebuf:=sendmessage(pdumpareapda,M); currproc:=0; end; M(1):=M(2):=M(3):=syspda; M(4):=Ppda(procno); M(5):=0; M(6):=childfirstadr+2; if modifyint(Ppda(procno),M) <> 0 then error(<:modify1:>,0); Pstate(procno):=7; if wordload(TBprocbuf(procno)+6)=Ppda(procno) then begin getevent(TBprocbuf(procno)); sendanswer(1,TBprocbuf(procno),M); end; if wordload(TBtermbuf(procno)+6)=owndescr and TBstate(procno)>=5 then regretmess(TBtermbuf(procno)); TBstate(procno):=TBtermbuf(procno):=TBprocbuf(procno):=0; Pbufadr(procno):=0; Ptobemod(procno):=Ptorun(procno):=false; cleanbuf(Ppda(procno)); end else goto SYNER; end else /, l./comment pstop;/, l1, r/c1/description(<:console1:>)/, l1, d2,i/ if currproc>0 then pda:=Ppda(currproc); if -,pstart then begin pstart:=true; /, l1,r/byte/if currproc=0 then false else byte/, l./ba:=/,r/ba/bastop/, l./error(/,d2, l1,d4,i/ goto OK; end pstart false; pstart:=false; /, l./careaproc/,d1, l./(ba,/,r/ba/bastop/, ; release and reservetext removed by cg 771121 l./comment releasetext/,l-1,d 9, l./comment messall from/, l1, r/c1/description(<:console1:>)/, l1,d,i" begin zone z(4,1,noerror); real r; integer a1,a2; integer array I(1:1); procedure noerror(z,s,b); zone z; integer s,b; ; for a1:=0,a1+1 while a1<maxact and buf(a1)<>0 do; for a2:=a1,a2+1 while a2<maxact and buf(a2)<>0 do; if a1=maxact or a2>=maxact or LT(1)<>0 then goto NORESOURCES; open(z,0,<::>,0); systime(1,0,r); write(z,<:<10>:>,<<dd dd dd>,systime(2,r,r),<:, :>, r,<::<10>:>,false,24-22); getzone(z,M); redefarray(I,M(19)+1,lastLT); for i:=1 step 1 until 24//3 do LT(i):=I(i); close(z,true); M(1):=3 shift 12; M(2):=firstLT + 24//3*2; M(3):=firstLT + lastLT*2 - 2; waitanswer(sendmessage(sendadr,M),M); messsize:=M(2) + 24//3*2 - 2; M(1):=5 shift 12; M(2):=firstLT; M(3):=firstLT+messsize; buf(a1):=sendmessage(sendadr,M); M(1):=0; M(2):=20; buf(a2):=sendmessage(<:clock:>,M); ACT(a1):=a2 shift 12 + 5; ACT(a2):=a1 shift 12 + 5; ACTVAL(a1):=ACTVAL(a2):=0; bytesmove:=-1; goto ENDINT; end; ", l./comment endprogram/, l1, r/c1/description(<:console1:>)/, l./comment submit /, l./ifwaitanswer/, d./gotoENDIN/,i/ j:=0; for j:=j+1 while j<maxact and buf(j)<>0 do; if buf(j)<>0 then goto NO_RESOURCES; buf(j):=sendmessage(<:kæ124æ:>,M); if buf(j)=0 then goto NO_RESOURCES; ACT(j):=1; ACTVAL(j):=sendadr; goto REPSUB; /, l./SERROR:/, d./gotoENDI/, l.*Breakexec;*, d.*endremove;*, l./dure command(/, d./end command/, l./dure parent_mess(/,d./end parent_mess/, l./dure sense(buff,procno/,d./endmodify;/, l./initp;/,l1,i/ j:= initcode(CODE,<:pcode:>,Ppda,Pstate,Pterm,Pin, Pout,Pbufadr,Pignore,TBstate,TBtermbuf,TBprocbuf, TBfirstadr,Tpda,buf, Cpustart, Ptorun,Ptobemod, terminalmode,oscomm,pstart, currproc,time,maxproc,noshift,buff,cpuused, ignoretimes,changebuf,childfirstadr,childlastadr, maxdrumproc,childsegm,pdumpareapda2,pdumpareapda, fppda,timeint,totalruntime,timeslice,firstcommarea, syspda,TBsize,procno,maxTB,sysstate,P1,P2,P3, stataddr); if j<>(47+5)*2 then system(9,j,<:initerror:>); callcode(CODE,12); comment start clock; /, l./MESSAGE:/, d./end12;/,d./endca/, d./endfor-if/, d./getevent/,d./end/, i! æ12æ CHANGE_IO: i:=if changeio(P1,procno) then 3 else 1; getevent(buff); sendanswer(i,buff,M); goto FIRST_EVENT; PLOTSTAT: begin integer array T(1:1); long field L1,L2; comment plotter statistic; lookuptail(<:plotstat:>,M); redefarray(T,buff+8,8); M(10):=M(10) + T(8); comment plotvecc; M(9):=M(9) + T(7); comment plot1step; M(8):=M(8) + 1; comment increase plot number; L1:=14; L2:=12; M.L1:=M.L1 + T.L2; comment plotsteps; L1:=10; L2:=8; M.L1:=M.L1 + T.L2; comment plotstepss; L1:=6; M.L1:=M.L1 + T(2); comment penups; changeentry(<:plotstat:>,M); getevent(buff); sendanswer(1,buff,M); goto FIRST_EVENT; end; ACTION: case ACT(P1) extract 12 of begin if free then begin comment 1 from kæ124æ; i:=waitanswer(buf(P1),M); for j:=1 step 1 until 4 do M(j+8):=M(2+j); M(8):=10; j:=messadd+16; if i=5 then i:=movetext(j,<:***p kæ124æ unknown<10>:>) else if i>1 then i:=movetext(j,<:***p kæ124æ error:>) else if M(1)<>0 then i:=movetext(j,<:***p submit error:>) else begin i:=M(2)//10000; M(13):=32 shift 8 add 106 shift 8 add 111; M(14):=98 shift 8 add 32 shift 8 add (if i>0 then i+48 else 0); P2:=M(2) mod 10000; P3:=P2 mod 1000; i:=P3 mod 100; M(15):=(P2//1000+48) shift 8 add (P3//100+48) shift 8 add (i//10+48); M(16):=(i mod 10 + 48) shift 8 add 10; i:=16; end; M(1):=5 shift 12; M(2):=j-2; M(3):=j+i-2; buf(P1):=sendmessage(ACTVAL(P1),M); ACT(P1):=3; free:=false; end else goto NEXT_EVENT; begin comment 2 check non active children; waitanswer(buf(1),M); L:=getclock; P1:=description(<:operator:>); for i:=1 step 1 until maxproc do if Pstate(i)=4 then begin if L-doubleload(Ppda(i)+64)>lifetime and wordload(wordload(Ppda(i)+42) + 4)=P1 then Pstate(i):=8; end; M(1):=0; M(2):=3600/4; buf(1):=sendmessage(<:clock:>,M); end 2; begin comment 3 kø-communication finis; waitanswer(buf(P1),M); buf(P1):=0; free:=true; end 3; begin comment 4 list; waitanswer(buf(P1),M); buf(P1):=LT(1):=0; if ACTVAL(P1) extract 5 <=maxproc+1 then LIST(ACTVAL(P1)); end 4; begin comment 5: mess; P2:=ACT(P1) shift (-12); regretmess(buf(P2)); waitanswer(buf(P1),M); k:=ACTVAL(P1):=ACTVAL(P2):=ACTVAL(P1) + 1; if k<=17 then begin k:=if k=1 then 10 else 48-2+k; k:=wordload(wordload(74) + k+k); M(1):=5 shift 12; M(2):=firstLT; M(3):=firstLT+messsize; buf(P1):=sendmessage(k,M); M(1):=0; M(3):=20; buf(P2):=sendmessage(<:clock:>,M); end else LT(1):=buf(P1):=buf(P2):=0; end 5; begin comment 6: idle time: The tail of the catalog entry 'idlestat' has the following signification: tail 1: size of area 2: if zero the clock is not checked 3-5: not used 6: time in min. to next update 7: segment no 8: relative number 9-10: clock value for last update The condition 1<=rel no<=253 must be fulfilled; integer array BUF(1:256), T(1:10), A(1:8); integer k; boolean b1,b2; real t; own integer times; waitanswer(buf(P1),M); j:=60; if lookuptail(<:idlestat:>,T)=0 and T(8)>=1 and T(8)<=253 and (T(8)-1) extract 2=0 and careaproc(<:idlestat:>)=0 and reserveproc(<:idlestat:>,0)=0 then begin M(1):=3 shift 12; M(2):=firstaddr(BUF) - 1; M(3):=M(2) + 510; M(4):=T(7); if waitanswer(sendmessage(<:idlestat:>,M),A)<>1 or A(1)<>0 then goto E6; monitorproc(88,A); b1:=T(2)<>0 and (extend T(9) shift 24 add T(10) >= extend A(1) shift 24 add A(2) or extend A(1) shift 24 add A(2) >= extend T(9) shift 24 add T(10) + extend 24*60*60*10000); b2:=plstat; if b1 or b2 then begin zone z(8,1,error); procedure error(z,s,b); zone z; integer s,b; ; open(z,8,<:console1:>,0); if b1 then write(z,<:<10><10>***p illegal date.<10>The date has passed:>, << dd dd dd>, systime(2,extend T(9) shift 24 add T(10)/10000,t), t,<:.<10>Change date or clear tail(2) in idlestat.<10>:>); if b2 and times<5 then begin write(z,<:<10><10>The memory of the microcomputer pl6800:>, <:<10>is inconsistent, at:>,<< dd dd dd>, systime(2,getclock/10000,t),t,<:<10>:>); times:=times+1; end; close(z,true); if b1 then goto E6; end; if -,b2 then times:=0; T(9):=A(1); if ACTVAL(P1)=0 then ACTVAL(P1):=A(1):=A(1) + 1 shift 23; T(10):=A(2); i:=T(8); for k:=1,2,3,4 do BUF(i+k-1):=A(k); T(8):=i+4; T(2):=long<:idl:> shift (-24); T(3):=long<:est:> shift (-24); T(4):=long<:at:> shift (-24); if T(8)>256 then begin T(7):=T(7)+1; T(8):=1; end; M(1):=5 shift 12; if waitanswer(sendmessage(<:idlestat:>,M),A)<>1 or A(1)<>0 then goto E6; changeentry(<:idlestat:>,T); if T(6)>=5 and T(6)<=24*60 then j:=T(6); end; E6: removeproc(<:idlestat:>); M(1):=0; M(2):=j*60; buf(P1):=sendmessage(<:clock:>,M); end 6; end case; goto FIRST_EVENT; PROC_COMM: nopr:=nopr+1; i:=description(<:console1:>); goto PC; PARENT_COMM: nopa:=nopa+1; i:=Tpda(Pterm(procno)); PC:if proccommand(buff,i) then goto FIRST_EVENT else goto NEXT_EVENT; INTERPRE: noco:=noco+1; interprete(P1,P2,P3); P1:=bytesmove-2; i:=14; goto CALL; REMOVE: if false then begin write(out,sysstate,currproc,time,procno,changebuf); if currproc>0 then write(out,<:<10> :>,<< ddddd>,Ppda(currproc),Pstate(currproc),TBstate(currproc), TBtermbuf(currproc),TBprocbuf(currproc),Ptorun(currproc) extract 1, Ptobemod(currproc) extract 1); outend(10); end else startorremove(false,Tpda(Pterm(procno)),procno); i:=16; goto CALL; FIRST_EVENT: i:=8; goto CALL; NEXT_EVENT: i:=10; CALL: goto (case (callcode(CODE,i)) of (PROC_COMM,INTERPRE,PARENT_COMM,REMOVE,ACTION, PLOTSTAT,CHANGE_IO)); !, f ▶EOF◀