|
|
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: 8448 (0x2100)
Types: TextFile
Names: »fpatestout«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »fpatestout«
(elit=algol
elit)
begin
comment: print fpa testoutput from core.
eli, 28.05.1976, 16.44,
jenh, 01.01.1977, 00.00,
jr, 09.02.1977, 14.00;
procedure fparecout(buf, addr);
integer array buf; integer addr;
begin
comment: prints the testrecord stored in <buf> starting at index <addr>.
at return, <addr> points to the first index after the record;
own boolean notfirst;
real array texts(0:95);
integer type, length, last, i, j;
long time; real day,hms; long field t;
procedure inittexts(texts);
real array texts;
begin
comment: initializes textinformation corresponding to testrecord-type;
integer i;
for i:= 0 step 1 until 95 do texts(i):= real <::>;
comment: individual texts may be inserted here;
for i:= 1 step 1 until 39 do
texts(i):= real (case i of(
<* 1 *> <:mainproc: send message:>,
<* 2 *> <:mainproc: master clear received:>,
<* 3 *> <:mainproc: call receiver:>,
<* 4 *> <:mainproc: call transmitter:>,
<* 5 *> <:mainproc: call transmitter (master clear):>,
<* 6 *> <:mainproc: call receiver (master clear):>,
<* 7 *> <::>,
<* 8 *> <:mainproc: start receive:>,
<* 9 *> <:mainproc: check receive result:>,
<* 10 *> <::>,
<* 11 *> <::>,
<* 12 *> <:mainproc: start transmit:>,
<* 13 *> <:mainproc: check transmit result:>,
<* 14 *> <::>,
<* 15 *> <::>,
<* 16 *> <:enter subproc:>,
<* 17 *> <:return from subproc:>,
<* 18 *> <::>,
<* 19 *> <::>,
<* 20 *> <::>,
<* 21 *> <::>,
<* 22 *> <::>,
<* 23 *> <::>,
<* 24 *> <:rec: start io (io function):>,
<* 25 *> <:rec: start wait:>,
<* 26 *> <:rec: start io (channel program):>,
<* 27 *> <:rec: after receive (channel program):>,
<* 28 *> <:rec: interrupt:>,
<* 29 *> <:rec: error:>,
<* 30 *> <:rec: after receive (header):>,
<* 31 *> <:rec: return to mainproc:>,
<* 32 *> <:trm: execute message received:>,
<* 33 *> <:trm: start transmit receive:>,
<* 34 *> <:trm: start wait:>,
<* 35 *> <:trm: after transmit (channel program):>,
<* 36 *> <:trm: interrupt:>,
<* 37 *> <:trm: after transmit (various):>,
<* 38 *> <:trm: after transmit (header):>,
<* 39 *> <:trm: return to mainproc:>
));
end inittexts;
if -,notfirst then
begin
inittexts(texts);
notfirst:= true;
end;
type:= buf(addr) shift (-12);
length:= (buf(addr) extract 12) shift (-1);
if type<>0 then
begin comment: not dummy record;
t:= 2*addr+4;
time:= buf.t mod 10000;
day := systime(2,buf.t/10000,hms);
write(out, <:<10>type: :>, <<_dd>, type, <: :>,
<: time: :>,
<< dd dd dd>, day, hms, <:.:>, <<dddd>, time,<:<10>:>);
if texts(type)<>real <::> then
write(out, <:text: :>, string texts(type), <:<10>:>);
last:= addr+length-1;
for i:= addr+3 step 1 until last do
outword(buf(i));
end type<>0;
addr:= addr+length;
end fparecout;
procedure outword(word);
value word; integer word;
begin integer i;
comment: prints <word> as 24-, 12- and 8-bit integers;
write(out, false add 32, 5,
<<_-ddddddd>, word, false add 32, 4,
<<__dddd>, word shift (-12), word extract 12,
false add 32, 4,
<<__ddd>, word shift (-16), word shift (-8) extract 8,
word extract 8,<: :>);
for i:=-7 step 1 until 0 do
write( out, <<d>,word shift(3*i) extract 3);
write(out,<:<10>:>);
end outword;
comment: start of program;
real mainname, recname, trmname, name;
integer i, j, l, pd, dl, inx, oldinx, setmask;
boolean flag4000, coredump;
integer array descr(1:3), oldtestmask(1:4), mess(1:12), workarr(1:1);
real array console(1:2);
zone z(1,1,stderror), zcons(50,1,stderror);
zone dz(256,1,stderror);
coredump:= false;
flag4000:=false;
open(dz, 4, <:dump8000:>, 0);
comment: get name of console;
system(7,i,console);
j:= 1;
open(zcons, 0, string console(increase(j)), 0);
write(zcons, <:<10>select process:
1: main, transmitter, receiver
2: main3500, trm3500, rec3500
3: main3600, trm3600, rec3600
4: print from 'post mortem' dump: dump8000<10>:>);
setposition(zcons, 0, 0);
read(zcons, i);
if i=4 then
begin comment: post mortem dump;
setposition(zcons, 0, 0);
write(zcons, <:proc. descr. address of mainproc: :>);
setposition(zcons, 0, 0);
read(zcons, pd);
coredump:= true;
mainname:= real <:post mortem:>;
end;
close(zcons, true);
if coredump then
begin
comment: get buffer pointers;
integer field tbuffirst, tbuftop, tbufcur, ifi;
tbuffirst:= 27;
tbuftop:= 25;
tbufcur:= 23;
setposition(dz, 0, pd//512);
inrec6(dz, pd mod 512);
inrec6(dz, 40);
descr(1):= dz.tbufcur;
descr(2):= dz.tbuftop;
descr(3):= dz.tbuffirst;
i:= 1;
for ifi:= 31 step 2 until 37 do
begin
oldtestmask(i):= dz.ifi;
i:= i+1;
end;
end else
begin
mainname:= real (case i of (<:main:>, <:main3500:>, <:main3600:>));
trmname:= real (case i of (<:transmitter:>, <:trm3500:>, <:trm3600:>));
recname:= real (case i of (<:receiver:>, <:rec3500:>, <:rec3600:>));
setmask:= 12 shift 12;
if -,flag4000 then
begin
comment: print statistics information;
integer array core(1:30);
for name:= recname, trmname do
begin
write(out, <:<10><10><10>:>, string name, <:___statistics<10>:>);
open(z, 0, string name, 0);
pd:= monitor(4,z,0,descr);
if pd=0 then
begin
write(out, <:<10>:>, string name, <:___:>);
system(9, 0, <:<10>no proc:>);
end;
system(5, pd+22, core);
for i:= 1 step 1 until 27 do
outword(core(i));
close(z, true);
end;
end block for statistics;
comment: print testbuffer;
open(z, 0, string mainname, 0);
pd:= monitor(4, z, 0, descr);
if pd=0 then
begin
write(out, <:<10>:>, string mainname, <:___:>);
system(9, 0, <:<10>no proc:>);
end;
comment: get old testmask and disable generation of
testoutput while the testbuffer and -pointers
are inspected;
if flag4000 then
system(5, pd+26, oldtestmask)
else
system(5, pd+30, oldtestmask);
getshare(z, mess, 1);
mess(4):= setmask;
mess(5):= mess(6):= mess(7):= mess(8):= 0;
setshare(z, mess, 1);
j:= monitor(16, z, 1, mess);
monitor(18, z, 1, mess);
system(5, pd+22, descr);
if flag4000 then
begin
system(5, pd+36, workarr);
descr(3):=workarr(1);
end;
if descr(1)=0 then system(9, 0, <:<10>no buffer:>);
end;
write(out, <:<10><10><10>:>, string mainname,
<:___testbuffer<10><10>:>,
<:bufferpointers: :>,
<<_ddddddd>, descr(1), descr(2), descr(3),
<:<10><10>:>,
<:testmask: :>,
<:<10>:>);
for i:= 1 step 1 until 4 do
begin
write(out, false add 32, 19);
l:= oldtestmask(i);
for j:= -23 step 1 until 0 do
write(out, if l shift j extract 1=1 then <:1:> else <:.:>);
write(out, <:<10>:>);
end;
write(out, <:<10>:>);
dl:= (descr(2) - descr(3)) shift (-1);
begin
integer array core(0:dl-1);
if coredump then
begin comment: read from bs-area into array 'core';
integer field ifi;
ifi:= 2;
setposition(dz, 0, descr(3)//512);
inrec6(dz, descr(3) mod 512);
for i:= 0 step 1 until dl-1 do
begin
inrec6(dz, 2);
core(i):= dz.ifi;
end;
end else
begin
system(5, descr(3), core);
comment: now testoutput may be enabled again;
getshare(z, mess, 1);
mess(4):= setmask;
for i:= 1, 2, 3, 4 do mess(i+4):= oldtestmask(i);
setshare(z, mess, 1);
j:= monitor(16, z, 1, mess);
monitor(18, z, 1, mess);
end;
comment: find first usable entry;
oldinx:= (descr(1)-descr(3)) shift (-1);
for inx:= oldinx step 1 until dl-1 do
begin
i:= j:= inx;
l:= 0;
for j:= j, j+l while (j<dl and l<>0) do
l:= core(j) extract 12 shift (-1);
if j=dl then inx:= dl;
end;
inx:= if inx=dl then 0 else i;
for i:= inx while i<dl, 0, inx while i<>oldinx do
begin
inx:= i;
fparecout(core, inx);
end;
end
end
▶EOF◀