|
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: 25344 (0x6300) Types: TextFile Names: »tmags6 «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »tmags6 «
begin comment rev.80.06.19 (efterredigeret af jahn); comment magnetic-tape-testpprogram; integer action, blockl, no_of_runs, mode, pattern, stations; boolean reread, print, change, statuscheck, pattprint, testend, zndesc; no_of_runs := 100; stations := 1; pattern := 1; comment pe; mode := 0; comment odd; blockl := 512; comment regnet i words; action := 3; comment write and read; change := false; statuscheck:= true; reread := false; print := true; comment tryk mest muligt output; pattprint := false; testend := false; zndesc := false; \f begin comment indlæs evt ny trimning; integer i, no; integer array tabel(0:127); real array trim, result(1:2); procedure stdtable(table); integer array table; comment table skal være erklæret fra 0 til 127; begin integer i; for i:= 0, 127 do table(i):= 0; for i:= 48 step 1 until 57 do table(i):= 2; for i:= 43, 45 do table(i):= 3; table(46):= 4; table(39):= 5; for i:= 65 step 1 until 93, 97 step 1 until 125 do table(i):= 6; for i:= 1 step 1 until 9, 11, 13 step 1 until 24, 26 step 1 until 38, 40, 41, 42, 44, 47, 58 step 1 until 64, 94, 95, 96, 126 do table(i):= 7; for i:= 10, 12, 25 do table(i):= 8; for i:= 0 step 1 until 127 do table(i):= table(i) shift 12 add i; tableindex:= 0 end; stdtable(tabel); tabel(32):= 0; intable(tabel); write(out,<:<10> ***************************** :>); write(out,<:<10> ******* rc 8000 ******* :>); write(out,<:<10> ******* mag-tape test ******* :>); write(out,<:<10> ******* ver.80.06.19. ******* :>); write(out,<:<10> *****************************<10><10><10><10> :>); \f nytrim: system(8,i,result); if result(1) <> real<:s:> then begin no := 0; readstring(in, trim, 1); trim(1):= trim(1) shift(-16) shift 16; for i:= 1 step 1 until 12 do if trim(1) = real (case i of ( <:slut:>, <:runs:>, <:stat:>, <:bloc:>, <:bitp:>, <:mode:>, <:acti:>, <:chec:>, <:rere:>, <:data:>, <:prin:>, <:znde:>)) then begin no := i; i := 12; end; if no > 4 then readstring(in, result, 1); case no + 1 of begin write(out, <:<10>wrong parametername : :>, string trim(1)); comment gal trimning; goto trimslut; read(in, no_of_runs); read(in, stations); read(in, blockl); \f begin comment bitpattern; result(1):= result(1) shift(-8) shift 8; if result(1) = real <:pe:> then pattern:= 1 else if result(1) = real <:nrz:> then pattern:= 2 else if result(1) = real <:allon:> then pattern:= 3 else write(out,<:<10>wrong bitpattern param : :>,string result(1)); end; begin comment mode; if result(1) = real <:peo:> then mode:= 0 else if result(1) = real <:pee:> then mode:= 2 else if result(1) = real <:nrzo:> then mode:= 4 else if result(1) = real <:nrze:> then mode:= 6 else write(out,<:<10>wrong mode param:>,string result(1)); end; begin comment action; result(1):= result(1) shift(-8) shift 8; result(2):= result(2) shift(-8) shift 8; if result(1) = real <:read:> then action := 2 else if result(1) = real <:write:> then action := 1 + (if result(2) = real <:ndrea:> then 2 else 0) else write(out,<:<10>wrong action param : :>,string result(1)); if action = 1 then change:= true; end; begin if result(1) = real <:no:> then statuscheck:= false else if result(1) <> real<:yes:> then write(out,<:<10>wrong statuscheck param : :>,string result(1)); end; begin if result(1) = real <:yes:> then reread:= true else if result(1) <> real<:no:> then write(out,<:<10>wrong reread param : :>,string result(1)); end; begin if result(1) = real <:no:> then print:= false else if result(1) <> real<:yes:> then write(out,<:<10>wrong datacheck param : :>,string result(1)); end; begin if result(1) = real <:yes:> then pattprint:= true else if result(1) <> real<:no:> then write(out,<:<10>wrong patternprint param : :>,string result(1)); end; begin if result(1) = real <:yes:> then zndesc := true else if result(1) <> real<:no:> then write(out,<:<10>wrong zonedescr. param : :>,string result(1)); end; end case no; goto nytrim; end not s; \f trimslut: system(8,i,result); write(out,<:<10><10><10>***:>,string result(1), if result(1) = real <:s:> then <:<10>***** warning : program will be stopped,when not started by the fp command (mags <10>c=copy testoutput):> else <:<10>:>); if result(1) = real <:s:> then begin write(out,<:<10><10><10>:>); write(out,<:<10>online : :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real<:runs:> then system(9,0,<:<10>stopped:>); write(out,<:<10> runs = :>); setposition(out,0,0); read(in, no_of_runs); write(out,<:<10>stations = :>); setposition(out,0,0); read(in, stations); write(out,<:<10>blocklength = :>); setposition(out,0,0); read(in, blockl); back1 : write(out,<:<10>bitpattern = :>); setposition(out,0,0); readstring(in,result,1); \f begin comment bitpattern; result(1):= result(1) shift(-8) shift 8; if result(1) = real <:pe:> then pattern:= 1 else if result(1) = real <:nrz:> then pattern:= 2 else if result(1) = real <:allon:> then pattern:= 3 else go_to back1; end; back2 : write(out,<:<10>mode = :>); setposition(out,0,0); readstring(in,result,1); begin comment mode; if result(1) = real <:peo:> then mode:= 0 else if result(1) = real <:pee:> then mode:= 2 else if result(1) = real <:nrzo:> then mode:= 4 else if result(1) = real <:nrze:> then mode:= 6 else go_to back2; end; back3 : write(out,<:<10>action = :>); setposition(out,0,0); readstring(in,result,1); begin comment action; result(1):= result(1) shift(-8) shift 8; result(2):= result(2) shift(-8) shift 8; if result(1) = real <:reado:> then action := 2 else if result(1) = real <:write:> then action := 1 + (if result(2) = real <:ndrea:> then 2 else 0) else go_to back3; if action = 1 then change:= true; end; back4 : write(out,<:<10>check status = :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real <:no:> then statuscheck:= false else if result(1) <> real<:yes:> then go_to back4; back5 : write(out,<:<10>reread = :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real <:yes:> then reread:= true else if result(1) <> real<:no:> then go_to back5; back6 : write(out,<:<10>datacheck = :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real <:no:> then print:= false else if result(1) <> real<:yes:> then go_to back6; back7 : write(out,<:<10>print pattern= :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real <:yes:> then pattprint:= true else if result(1) <> real<:no:> then go_to back7; back8 : write(out,<:<10>zonedescrip. = :>); setposition(out,0,0); readstring(in,result,1); if result(1) = real <:yes:> then zndesc := true else if result(1) <> real <:no:> then go_to back8; end; \f if -, statuscheck then reread:= print:= false; blockl:= blockl // 2 * 2; if blockl > 1535 then blockl:= 1535; if stations > 7 then stations:= 7; intable(0); end ny trimning; \f begin comment hovedblok; integer bytes, expected, line, run, stat; boolean star, nul, em, ff, nl, sp; integer array content(1:blockl), ia(1:12); zone pr(128, 1, stderror); zone array z(stations, blockl // 2 + 15, 1, error); \f procedure all_ones; begin integer array field iaf; iaf := 4; content(1):= content(2):= -1; tofrom(content.iaf, content, bytes - 4); end; \f procedure error(z, s, b); integer b, s; zone z; begin integer b0; b0 := b; b := bytes; if s shift(-18) extract 1 = 1 then begin comment end_of_tape; own boolean eot; if -, eot then begin eot:= true; close(z, true); if statuscheck then begin write(pr, <:end of tape on station : :>, stat, nl, 1); line:= line + 1; write(out, <:end of tape on station : :>, stat, nl, 1); setposition(out, 0, 0); end; eot:= false; if change then begin if action = 2 then goto exit; if action = 3 then goto exit; action:= 3 - action; run := 0; end; goto start; end; end end_of_tape else if statuscheck then begin integer bit; integer array ia(1:20); getzone6(z, ia); if testend then expected := expected + 1 shift 16; if s <> expected then begin if line > 45 then begin write(pr,nl,1, ff, 1); line:= 0; end; write(pr,star,80,nl,2); line:= line + 2; if stations > 1 then begin write(pr, <:*** station : :>, <<d>, stat, nl,1); line:= line + 1; end; write(pr, <:*** run : :>, <<d>, run,nl,2); line:= line + 2; write(pr,if ia(13) = 6 then <:.01.status error during write ::> else if ia(13) = 5 then <:.03.status error during read ::> else <:.00.status error during move ::>,nl,1); line:= line + 1; write(pr,<:recieved : :>); skriv_bits(pr, s, expected, 3,23); write(pr, nl, 1); line:= line + 1; write(pr,<:expected : :>); skriv_bits(pr,expected,s,3,23); write(pr, nl, 2); line:= line + 2; for bit:= 0 step 1 until 17 do if s shift bit < 0 then write(out, case bit+1 of ( <:*intervention*:>, <:*parity error*:>, <:*timer*:>, <:*data overrun*:>, <:*blocklength*:>, <:*end document*:>, <:*loadpoint*:>, <:*eof*:>, <:*write enable*:>, <:*mode error*:>, <:*read error*:>, <:*xx*:>, <:*check sum*:>, <:*bit 15*:>, <:*bit 14*:>, <:*stopped*:>, <:*word defect*:>, <:*position*:>), sp, 1); write(out, <<d>, <:on station : :>, stat, nl, 1); setposition(out, 0, 0); end; if b0 > 2 and b0 <> bytes then begin if stations > 1 then begin write(pr,<:*** station : :>,<<d>,nl,1); line:= line + 1; end; write(pr, <:*** run : :>, <<d>, run,nl,2); line:= line + 2; write(pr,if ia(13) = 6 then <:.01.length error during write ::> else if ia(13) = 5 then <:.03.length error during read ::> else <:.00.length error during ::>,nl,1); line:= line + 1; write(pr,<:recieved : :>,b0 * 3 // 2, <: expected:>, bytes * 3 // 2, nl, 2); line := line + 2; end; write(pr,star,80,nl,3); line:= line + 3; end statuscheck; end error; \f procedure læs_blok(z); zone z; begin integer b, up; integer array field iaf; b:= inrec6(z, 0); inrec6(z, b); iaf:= 0; up := if print then bytes//2 else 1; for b:= 1 step 1 until up do if z.iaf(b) <> content(b) then begin if line > 45 then begin write(pr, nl,1,ff, 1); line:= 0; end; write(pr,star,80,nl,2); line:= line + 2; if stations > 1 then begin line:=line + 1; write(pr, <:*** station : :>, <<d>, stat, nl,1); end; write(pr, <:*** run : :>, <<d>, run, nl,2); line:= line + 2; write(pr,<:.03.data error during read ::>,nl,1); line:= line + 1; write(pr,<:recieved : :>); skriv_bits(pr, z.iaf(b), content(b), 8, 23); write(pr, <: word no.:>, <<d>, b, nl, 1); line:= line + 1; write(pr,<:expected : :>); skriv_bits(pr,content(b),z.iaf(b),8,23); write(pr,nl,2,star,80,nl,3); line:= line + 5; end; end læs blok; \f procedure nrz; begin integer i, j, length, upper, word; integer array help(1:58), nrztabel(1:173), tal(0:8); integer array field iaf; for i:= 1 step 1 until 28 do begin help(i):= (case i of ( 0, 32, 16, 8, 4, 48, 24, 40, 12, 36, 20, 6, 10, 18, 9, 56, 28, 44, 52, 14, 38, 50, 22, 26, 42, 11, 13, 19)) shift 2; help(i) := help(i) shift 1 add 1 shift 8 add help(i); help(59-i):= exor(help(i), -1) extract 16; end; help(29):= 21 shift 7 add 21 shift 1; help(30):= 171 shift 9 add 171; for word:= 1 step 3 until 85, 87 step 3 until 171 do begin i := (word + 3) // 3; for j:= 0 step 1 until 8 do tal(j):= help(i) shift(-j) extract 8; for i:= 0, 1, 2 do nrztabel(word + i):= tal(3*i) shift 8 add tal(3*i + 1) shift 8 add tal(3*i + 2); end; \f length := 173 * 2; for iaf:= 0 step length until bytes do begin upper:= if iaf + length <= bytes then length else bytes - iaf; tofrom(content.iaf, nrztabel, upper); end; if pattprint then begin write(pr,nl,3,star,80,nl,2); write(pr,sp,9,<:print out of buffer in use :>,nl,3); for word:= 1 step 1 until 173 do begin write(pr,<:word :>, <<ddd>, word* 2 - 2, <:::>, sp, 3); skrivbits(pr, nrztabel(word), nrztabel(word), 8, 23); write(pr, if word mod 35 = 0 then ff else nul ,1, nl,1 ); end; write(pr,nl,3,star,80); write(pr, nl,1,ff, 1); end; end nrz-bitpattern; \f procedure pe; begin integer i, length, t00, t01, t10, t11, upper, word; integer array petabel(1:96), tal (1: 3); integer array field iaf; t00:= 0; comment 00000000; t01:= 125; comment 01111101; t10:= 130; comment 10000010; t11:= 255; comment 11111111; length:= 96; for word:= 1 step 1 until length do begin for i:= 1, 2, 3 do tal(i):= case 3 * (word - 1) + i of ( t11, t11, t11, t11, t11, t11, t11, t11, t01, t01, t01, t01, t01, t01, t01, t01, t11, t11, t11, t11, t11, t11, t11, t11, t01, t01, t01, t01, t00, t00, t00, t00, t10, t10, t10, t10, t10, t10, t10, t10, t00, t00, t00, t00, t00, t00, t00, t00, t10, t10, t10, t10, t10, t10, t10, t10, t00, t00, t00, t00, t01, t01, t01, t01, t11, t11, t11, t10, t11, t11, t11, t11, t01, t01, t01, \f t01, t00, t00, t00, t00, t10, t10, t10, t10, t11, t11, t11, t11, t00, t00, t00, t00, t01, t01, t01, t01, t11, t11, t11, t10, t11, t11, t11, t11, t01, t01, t01, t00, t01, t01, t01, t01, t11, t11, t11, t11, t10, t10, t10, t10, t00, t00, t00, t01, t00, t00, t00, t00, t10, t10, t10, t11, t10, t10, t10, t10, t00, t00, t00, t01, t00, t00, t00, t00, t10, t10, t10, t11, t10, t11, t11, t11, t01, t01, t01, t00, t01, t00, t00, t00, t10, t10, t10, t11, t10, t11, t11, t11, t01, t01, t01, t00, t01, t00, t00, t00, t10, t10, t10, t11, t10, t11, t11, t11, t01, t01, t01, t00, t01, t00, t00, t00, t11, t11, t10, t10, t11, t11, t10, t10, t01, t01, t00, t00, t01, t01, t00, t00, t11, t11, \f t10, t10, t11, t11, t10, t10, t01, t00, t01, t00, t01, t00, t01, t00, t11, t10, t11, t10, t11, t10, t11, t10, t01, t00, t01, t00, t01, t00, t01, t00, t11, t11, t11, t11, t10, t11, t10, t11, t01, t00, t01, t00, t01, t01, t01, t01, t10, t10, t10, t10, t11, t10, t11, t10, t00, t01, t00, t01, t00, t00, t00, t00, t10, t10, t11, t11, t10, t10, t11, t11, t01, t00, t01, t00, t01, t00, t01, t00); petabel(word):= tal(1) shift 8 add tal(2) shift 8 add tal(3); end; length:= length * 2; for iaf:= 0 step length until bytes do begin upper:= if iaf + length <= bytes then length else bytes - iaf; tofrom(content.iaf, petabel, upper); end; if pattprint then begin write(pr,nl,3,star,80,nl,2); write(pr,sp,9,<:print out of buffer in use :>,nl,3); for word:= 1 step 1 until 96 do begin write(pr,<:word :>, <<ddd>, word* 2 - 2, <:::>, sp, 3); skrivbits(pr, petabel(word), petabel(word), 8, 23); write(pr ,if word mod 35 = 0 then ff else nul ,1, nl,1 ); end; write(pr,nl,3,star,80); write(pr,nl,1,ff,1); end; end pe-bitpattern; \f procedure set_block(z, back); value back; boolean back; zone z; begin integer array ia, ia1(1:20); if back then begin getshare6(z, ia, 1); tofrom(ia1, ia, 24); ia(4):= 8 shift 12 + mode ; ia(5):= 3; setshare6(z, ia, 1); monitor(16, z, 1, ia); monitor(18, z, 1, ia); ia1(1):= 0; ia1(4):= 3 shift 12 + mode; setshare6(z, ia1, 1); monitor(16, z, 1, ia); monitor(18,z,1,ia); end; getzone6(z, ia); ia(13):= if back then 5 else 6; setzone6(z, ia); end; \f procedure skriv_bits(pr, word, comp, grup, stop); value word, comp, grup, stop; integer word, comp, grup, stop; zone pr; begin integer bit, g; g := grup; for bit:= 0 step 1 until stop do begin if bit = g then begin write(pr, sp, 1); g := g + grup; end; write(pr, if word < 0 then <:1:> else <:0:>); word:= word shift 1 ; end bit-step; end skriv bits; \f procedure udskriv_desc(z); zone z; begin integer a,b,c,d,e,f,g; boolean nl,ff,sp; integer array ia(1:22); star:= false add 42; nl:= false add 10; sp:= false add 32; ff:= false add 12; write(pr,nl,1,<: zonedescription:>,nl,1); getzone6(z,ia); write(pr,nl,1,<:mode :>,<<dddddddd>, ((ia(1) shift (-12)) extract 12), nl,1,<:kind :>,ia(1) extract 12); write(pr, nl,1,<:file: :>,<<dddddddd>,ia(7), nl,1,<:block: :>,ia(8), nl,1,<:give up mask: :>,ia(10), nl,1,<:free param: :>,ia(11), nl,1,<:zone state: :>,ia(13), nl,1,<:last byte: :>,ia(15), nl,1,<:rec. length: :>,ia(16), nl,1,<:used share: :>,ia(17), nl,1,<:numb. of shares: :>,ia(18), nl,1,<:base buf area: :>,ia(19), nl,1,<:buf length: :>,ia(20),nl,1); end desc; \f procedure skriv_blok(z); zone z; begin if zndesc then udskriv_desc(z); outrec6(z, bytes); tofrom(z, content, bytes); if zndesc then udskriv_desc(z); outrec6(z, 62); changerec6(z, 0); comment send blokken afsted; if zndesc then udskriv_desc(z); end; \f bytes := 2 * blockl; expected := 1 shift 15 + 1 shift 1; comment skrivering og normal; run := 0; star:= false add 42; nl:= false add 10; ff:= false add 12; em:= false add 25; nul:= false add 0; sp:= false add 32; open(pr, 4, <:testoutput:>, 0); write(pr,ff,1,star,80); write(pr, nl, 2, <: used bitpattern :>, case pattern of ( <:pe:>, <:nrz:>, <:all ones:>), nl, 2); write(pr,<: the station was run in :>,case mode + 1 of ( <:peo:>,<::>,<:pee:>,<::>,<:nrzo:>,<::>,<:nrze:>), <: mode:>,nl,2); write(pr,<:<10><10><10>:>); write(pr,<:identification of statusbits : :>); write(pr,<:<10>bit 0 : intervention :>, <:<10>bit 1 : parity error :>, <:<10>bit 2 : timer :>, <:<10>bit 3 : data overrun :>, <:<10>bit 4 : block length :>, <:<10>bit 5 : end of tape :>, <:<10>bit 6 : load point :>, <:<10>bit 7 : tapemark :>, <:<10>bit 8 : writing enabl:>, <:<10>bit 9 : mode error :>, <:<10>bit 10: read error :>, <:<10>bit 11: xx :>, <:<10>bit 12: checksum :>, <:<10>bit 13: bit 15 :>, <:<10>bit 14: bit 14 :>, <:<10>bit 15: stopped :>, <:<10>bit 16: word defect :>, <:<10>bit 17: position :>, <:<10>bit 18: xx :>, <:<10>bit 19: disconnected :>, <:<10>bit 20: unintelligib :>, <:<10>bit 21: rejected :>, <:<10>bit 22: normal :>, <:<10>bit 23: hard error :>, <:<10>:>,ff,1); line:= 34; case pattern of begin pe; nrz; all_ones; end; if pattprint then goto exit; start: for stat:= 1 step 1 until stations do begin close(z(stat), true); testend:=false; open(z(stat), mode shift 12 + 18, case stat of ( <:mt1:>, <:mt2:>, <:mt3:>, <:mt4:>, <:mt5:>, <:mt6:>, <:mt7:>), if reread then 0 else -1 - (expected + 1 shift 17 + 1 shift 8)); getshare6(z(stat), ia, 1); ia(4):= 8 shift 12 + mode; ia(5):= 4; setshare6(z(stat), ia, 1); monitor(16, z(stat), 1, ia); end; for stat:= 1 step 1 until stations do begin monitor(18, z(stat), 1, ia); setposition(z(stat), 0, 0); end; \f for run := run while run < no_of_runs do begin run:= run + 1; for stat:= 1 step 1 until stations do begin case action of begin skriv_blok(z(stat)); læs_blok(z(stat)); begin comment write and read; skriv_blok(z(stat)); setblock(z(stat), true); læs_blok(z(stat)); setblock(z(stat), false); end; end case action; end stat; end run; if action = 1 and change then begin run := 0; action:= 2; testend:=true; goto start; end; exit: testend:=true; for stat:= 1 step 1 until stations do close(z(stat), true); write(pr, nl, 1, em, 3); close(pr, true); end; end; ▶EOF◀