|
|
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: 22272 (0x5700)
Types: TextFile
Names: »retfp3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »retfp3tx «
mode list.yes
fp4tx=edit fp3tx
; rettelser til release 4.0
;
; iso 95 = _ rettes tilbage til blind fra illegal
;
; alle store bogstaver gøres legale
;
; extend area i simple check sender parent message hvis claims exceeded
; med wait bit undtagen hvis fp mode bswait (1<10) er false
;
; connect output, docname = 0, 1, 2, 3 => permkey
;
; h53=18 i stedet for h53=16
;
; fyldtegn for positivt fortegn i integer i list command i load ændres
; til 0 i stedet for 127
;
; i connect input/connect output trunceres process kind før indsættelse i zone
;
; connect output : segm = 0 => der skal ikke creeres en fil hvis ingen er
;
; connect output, magtape, after setmode ignoreres svaret (ingen enable)
;
; block io, magtape wait transfer : position fra devicet overføres til zonen
;
; magtape check, reposition indtil 5 gange i tilfælde af position error
; og erase and retry op til 15 gange
l./page ...1/, r/86.08.22/89.01.25/
l./c43/, r/c43/c50/
l./m.file processor/, r/86.10.10/89.01.25/
l./m.fp text 1/, r/86.12.12/89.01.25/
l./page ...2/, r/86.08.27/88.04.24/
l./w2 =/, r/= /= /, p1
l./page ...3b/, r/82.12.09/88.05.19/
l./h52:/, r/3<12/4<12/
l1, i/
h53 = 18 ; no of halfwords in available area in front of zone buffers
/, p-1
l./page ...4/, r/82.12.09/88.05.19/
l./h53=/, d
l./page ...6/,
l./m.fp permanent/, r/85.03.26/89.01.25/
l./block io, page ...2/, r/rc 19.05.72 /fgs 1989.01.25/
l./e18:/, i/
e23: 1<7 ; word defect bit
/, p1
l./block io, page ...3/, r/86.12.12/89.01.25/
l./dl. w1 c24./, d./ld w2 24/, i#
dl. w1 c24. ; magnetic tape status bits:
ld w2 -23 ; if bytes transferred > 0 then
se w0 0 ; begin
wd w2 0 ; if number of characters * 2
se w1 0 ; modulo bytes transferred <> 0
lo. w3 e23. ; then status:=status or word defect bit;
rl. w2 c1. ; end;
sz. w3 (c44.) ; if status.tape mark sensed = 1 then
jl. e30. ; goto skip;
wa w0 6 ; if hwds xferred <> 0 or status <> 0 then
sn w0 0 ; begin <*update pos in zone by pos in answer*>
jl. e30. ; zone.file, block :=
dl. w1 c28. ; answ.file, block;
ds w1 x2+h1+14 ; end;
e30: ld w2 24 ; index := 0 again;
#
l./character io, page ...2/, r/26.03.73/88.04.24/
l./h33:/,
l1, r!console!terminal/console and!
l1, r/or / /, r/punch/punch and/
l1, r/or / /, r/printer/printer and/
l1, r/or / /
l./page ...4/,
l./m.fp io system/, r/86.12.12/89.01.27/
l./resident, page ...1/, r/86.12.12/89.01.25/
;l./h40:/, r/fp/fp5/
l./h85:/, d, r/ /h85:/, i/
/
l./; am 0/, d, i/
/
l./resident, page ...4/, r/rc 11.04.72 /fgs 1989.01.26/
l./h82:/, l2, i/
c44: 1<16 ; tape mark sensed
/, p1
l./simple check, page ...1/, r/84.09.04/88.04.24/
l./e17:/, l1, i#
; working locations:
; fnc area:
e42: 44<12+2.0000011<5+1; fnc<12+pattern<5+wait
<:bs :> ; <:bs :>
0, r.4 ; docname of area process
0 ; segments
0 ; 0 entries
e47: 0 ; area process descr.
e48: 0, r.10 ; tail
\f
; fgs 1988.04.24 fileprocessor simple check, page ...2...
#, p-12
l./simple check, page ...1a/, d./e47:/, i#
\f
; fgs 1988.04.24 fileprocessor simple check, page ...3...
e32: jd 1<11+8 ; reserve: reserve process;
se w0 0 ; if not reserved
jl. e1. ; then goto give up;
jl. e10. ; goto repeat;
e31: bl w0 x2+6 ; rejected:
sn w0 5 ; if operation = output
jl. e32. ; then goto reserve;
bz w0 x1+h1+1 ; w0 := zone.kind;
sn w0 6 ; if kind = disc process then
jl. e32. ; goto reserve;
jl. e1. ; goto give up;
e46: al w3 x1+h1+2 ; extend:
jd 1<11+4 ; process description;
rs. w0 e47. ;
am (0) ;
rl w0 18 ; old size := no of segments (area process);
rl w3 x2+10 ;
ws w3 x2+8 ; new size :=
al w3 x3+2 ; segment(share) +
ls w3 -9 ; (last transfer-first transfer+2)//512;
wa w3 x2+12 ;
sl w0 x3 ; if old size >= newsize then
jl. e10. ; goto repeat;
al w0 x3 ;
al w3 0 ;
am. (e47.) ; device:=area(10);
rl w2 10 ; slice length:=device(26);
sn w2 0 ; if deviceref=0 then
jl. e33. ; jump
wd w0 x2+26 ; new size :=
se w3 0 ; (new size // slice length
ba. w0 1 ; + if remainder = 0 then 0 else 1)
wm w0 x2+26 ; * slice length;
e33: rl w2 0 ; w2 := new size;
\f
; fgs 1988.04.24 fileprocessor simple check, page ...4...
e14: al w3 x1+h1+2 ;
al. w1 e48. ;
jd 1<11+42 ; lookup entry(area);
rs w2 x1 ; size := new size;
jd 1<11+44 ; change entry;
se w0 6 ; if claims exceeded then
jl. e35. ; begin <*extend area*>
rl. w0 e42.+12 ;
se w0 0 ; if fnc area.segm <> 0 then
jl. e29. ; goto give up;
rl. w1 h51. ;
sz w1 1<10 ; if mode.bswait = false then
jl. e34. ; begin
rl. w0 e42. ; fnc area.fnc :=
ls w0 -1 ; fnc area.fnc -
ls w0 1 ; wait bit;
rs. w0 e42. ; end;
e34: rl. w1 e47. ; claim :=
rl. w0 e48. ; new size -
ws w0 x1+18 ; old size ;
rs. w0 e42.+12 ; fnc area.segm := claim;
dl w0 x1+22 ; move
ds. w0 e42.+6 ; area process.docname
dl w0 x1+26 ; to
ds. w0 e42.+10 ; fnc area.docname;
al. w1 e42. ; w1 := addr first half fnc area;
al w2 x1+8 ; w2 := addr second half fnc area;
jl. w3 h35. ; parent message special (w1=fnc area);
dl. w2 c5. ; w1 := zone;
rl. w2 e48. ; w2 := new size;
jl. e14. ; goto change entry;
; end else
e35: sn w0 0 ; if result <> 0 then
jl. e26. ; begin
e29: al w0 0 ; fnc area.segm := 0;
rs. w0 e42.+12 ; goto give up;
jl. e1. ; end else
;
e26: rs. w0 e42.+12 ; begin
dl. w2 c5. ; fnc area.segm := 0;
dl. w0 c11. ; restore registers ;
jl. e10. ; goto repeat;
; end;
#, p-12
l./page ...2/, r/28.05.72/88.04.24/, r/...2/...5/
l./e26:/, r/e26:/ /, p1
l./m.fp simple check/, r/84.09.04/88.05.04/
l./connect in, page ...4/, r/84.09.05/88.08.09/
l./ds w0 x1+h1+2/, i/
sz w3 1 ; <*if kind odd then
al w3 x3-1 ; truncate kind*>
/, p-2
l./connect in, page ...5/, r/rc 08.08.73 /fgs 1988.08.09/
l./e36:/, r/e36: /;e36:/
l./a27:/, r/a27: /a27:/
l./connect in, page ...6/, r/rc 1976.02.02 /fgs 1988.08.09/
l./c. -g1/, r/-g1/-1-g1/
l./w. 0, r. g1/, d, i/
c. -1+g1
w. 0, r.g1 ; fill segment
z.
/, p-2
l./m.fp connect input/, r/86.12.12/88.08.09/
l./connect output, page ...1/, r/82.11.29/88.05.01/
l./c4:/, r/<1/<2/, r/<drum or disc>/permkey/
l./preferably on drum (if w0/, d1, i/
; connect output will create an area on the disc with the most
; resources of the particular permkey.
/, p-2
l./negaive/, r/negaive/negative/
l./greatest temporary/, d1, i/
; device with the greatest claims of the particular permkey) decreased
; by the absolute value of segments.
/, p-2
l./page ...2/, r/82.11./88.05.01/
l2, r/b9, e49 /b20, e49/
l./page ...3/, r/rc/fgs/, r/78.09.27/88.05.01/
l./convension/, r/convension/convention/
l./page ...4/, r/82.11.82/88.09.07/
l./sz w3 1/, d5, i/
al w1 3 ; lookup area (0) := 0;
la w1 6 ; lookup area (1) := w0.permkey;
ds. w1 h54.+2 ;
al w0 x1 ; key := permkey;
as w3 -2 ; wanted := w0.segments > 2;
sn w3 0 ; if wanted = 0 then
jl. b9. ; goto unknown;
/, p-5
l./as w3 -1/, r/ -1/ -2 /
l1, d1
l./page ...5/, r/83.07.28/88.09.07/
l./jl. w2 a4./, d, i#
rx w0 6 ; swop (claim, wanted);
jl. w2 a4. ; convert to slices (claim);
rx w0 6 ; swop (claim, wanted);
jl. w2 a4. ; convert to slices (wanted);
#, p1
l./a13:/, d./jl. h70.+2/, i/
a13: rs. w2 c9. ; descriptor found:
rl. w3 h41. ; save file descriptor in c9;
al w3 x3+1 ; segment (fp) := segment (fp) + 1;
jl. h70.+4 ; call segment 2 (connect output);
/, p-5
; *********
;l./a13:/, r/rl w0 x2/ /
;l./bz w1 1/, d./al w0 x1/,
;r/; w0 := kind > 1;/; call connect2:/
;***********
l./page ...7/, d./page ...7b/, i#
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7...
; segment 1
; procedure get claims (key, filedescriptor);
;
; call: return:
;
; w0 key claim
; w1 link link
; w2 - unchanged
; w3 - unchanged
;
; filedescriptor.docname entry.docname or docname of disc
; 0, ..., 3 with claims
;
; The procedure finds the disc with the largest claims for the
; given key and returns the claims in w0 and the docname of the
; disc in filedescriptor.docname.
; If docname given in filedescriptor.docname is 0, all discs are
; searched for the one with the greatest claims of that particular
; permkey. The search goes on backwards from last disc to first disc
; or drum.
; If, however, the docname given is a document name for a disc
; included in the bs system, the procedure returns the claims
; for the given key for that disc.
;
a8: ds. w3 h10.+4 ; get claims: (fp exception routine dump area used)
rs. w1 h10.+0 ; save (w2, w3); save return;
zl w2 64 ;
sl w2 9 ; if monitor release > 8 then
am 1 ; key := key * 4 else
ls w0 1 ; key := key * 2 ;
hs. w0 b2. ;
al w0 -2 ;
sh w2 8 ; if monitor <= 8 then
hs. w0 b12. ; decr := -2;
rl w0 92 ; w0 := first drum;
rl w1 96 ; last device :=
al w1 x1-2 ; top discs - 2;
rs. w0 b1. ; first device := first drum;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7a...
; segment 1
rl. w2 h54.+2 ; w2 := first word of docname;
sh w2 3 ; if docname (1) <> (0, 1, 2, 3) then
jl. a12. ; begin <*docname specified*>
al. w3 h54.+2 ;
jd 1<11 + 4 ; w0 := proc descr addr (docname);
sn w0 0 ; if process exists then
jl. a12. ; begin
am (0) ; w0 :=
rl w0 24 ; chaintable addr (docname);
a25: rl w2 x1 ; loop: w2 := device.chaintable address;
sn w2 (0) ; if device.chaintable address <>
jl. a39. ; doc .chaintable address then
; begin
al w1 x1-2 ; device := device -2;
jl. a25. ; goto loop;
; end;
a39: rs. w1 b1. ; first device := last device := device found;
; end process exists;
; end docname specified;
a12: al w0 0 ;
rs. w0 h10.+8 ; max slices := 0;
a9: rl w2 x1 ; next device:
rl. w3 h16. ; w2 := device.chaintable address;
wa w3 x2-36 ; w3 := device.key zero claims;
rs. w3 h10.+12 ; save device.key zero claims;
al w0 2047 ; min slices :=
jl. w2 a3. ; convert to segments (
rs. w0 h10.+10 ; + infinity);
b2 = k + 1 ; key * (if mon rel < 9 then 2 else 4);
al w3 x3+0 ; w3 := device.slice claims.key
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7b...
; segment 1
a10: zl w0 64 ; next key:
sl w0 9 ; if monitor release <= 8 then
jl. a36. ; begin <*halfwords*>
rl w0 6 ; device key :=
ws. w0 h10.+12 ; (device.key claims -
ls w0 -1 ; device.key0 claims) > 1;
zl w2 x3 ; w2 := entry claims;
sh w0 1 ; if device key <= 2 then
al w2 1 ; w2 := 1;
zl w0 x3+1 ; w0 := slice claims;
jl. a37. ; end else
a36: rl w0 6 ; begin
ws. w0 h10.+12 ; device key :=
ls w0 -2 ; (device key claims - device.key0 claims) > 2;
rl w2 x3 ; w2 := entry claims;
sh w0 1 ; if device key <= 2 then
al w2 1 ; w2 := 1;
rl w0 x3+2 ; w0 := slice claims;
a37: ; end;
sh w2 0 ; if entry claim = 0 then
al w0 0 ; slice claim := 0;
jl. w2 a3. ; convert to segments (slice claim);
sh. w0 (h10.+10) ; if slice claim <= min slices then
rs. w0 h10.+10 ; min slices := slice claim;
b12=k+1 ; decr:
a29: al w3 x3-4 ; decrease sliceclaim key address by decr;
sl. w3 (h10.+12) ;
jl. a10. ;
; if claim key addr >= claim key 0 address then
; goto next key;
rl w2 x1 ; device := chaintable;
rl. w0 h10.+10 ;
sl. w0 (h10.+8) ; if min slices >= max slices then
jl. a11. ;
jl. a38. ; begin
a11: rs. w0 h10.+8 ; max slices := min slices;
rs. w2 h10.+14 ; best device := device;
rl w0 x2-8 ; slice length := slice length (device);
rs. w0 h10.+6 ; end;
a38: al w1 x1-2 ; device := device - 2;
sl. w1 (b1.) ; if device <> first device then
jl. a9. ; goto next device;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7c...
; segment 1
rl. w2 h10.+14 ; get best device;
dl w0 x2-16 ; move
ds. w0 h54.+4 ; chaintable.docname
dl w0 x2-12 ; to
ds. w0 h54.+8 ; filedescriptor.docname;
rl. w0 h10.+8 ; w0 := max slices in segments;
dl. w3 h10.+4 ; restore (w2, w3);
jl. (h10.) ; return;
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7d...
; segment 1
; procedure convert to segments (slices);
;
; call : return :
;
; w0 : slices slices * slicelength
; w1 : name table entry unchanged
; w2 : link address chaintable
; w3 : device.slice claims.key unchanged
b. b3 ; begin block
w.
a3: rs. w2 b2. ; save return;
rl w2 x1 ; w2 := chain table entry;
rs. w3 b3. ; save w3;
wm w0 x2-8 ; slices := slices * slicelength;
rl. w3 b3. ; restore w3;
jl. (b2.) ; return;
b2: 0 ; saved return
b3: 0 ; saved w3;
i.
e. ; end block
\f
; fgs 1988.05.01 fileprocessor connect output, page ...7e...
#
l./page ...7c/, r/82.12.03/88.05.01/, r/7c/7f/
l./m.fp connect out 1/, r/85.03.07/89.02.02/
l./page ...8/, r/82.11.29/88.09.07/
l./e0:/, i/
; c4 : irrelevant
; c7 : zone addr or 0
; c9 : file descr addr
; c11: link
/, p-4
l./rl. w1 c4./, d, i/
rl w0 x2 ; w2 := addr file descr; w0 := file descr.kind;
zl w1 1 ; kind := file descr.kind >
ls w1 -1 ; 1;
sl w1 e16 ; if kind > max kind then
jl. a27. ; goto convention error;
rs. w1 c4. ; save kind;
/, p-7
l./page ...9/, r/86.12.12/89.02.02/
l./a19:/, l-1, d./<:enable/
l./page ...10/, r/86.12.12/89.02.02/
l./; mount ring:/, d./jl. a22./, d
l./connect output, page ...11/, r/82.11.29/88.09.07/
l./ds w0 x1+h1+2/, i/
sz w3 1 ; <*if kind odd then
al w3 x3-1 ; truncate kind*>
/, p-2
l./page ...12/, r/82.11.29/88.05.01/
l./m.fp connect out/, r/86.12.12/89.02.02/
l./magtape check, page ...1/, r/84.09.04/88.12.09/
l./e2:/, r/+1<6/ /
l./e35:/, l1, i/
e31: <:<25><0><0>:> ;
/, p-1
l./magtape check, page ...1a/, r/rc 23.05.72/fgs 1989.01.25/
l./e22:/, l./jl. e17./, r/e17./e23./, r/give up/parity/
l./e20:/,
l./sz w0 1<6/, i/
sn w3 8 ; if operation = move then
jl. e15. ; goto check position;
/, p-2
l./jl. e23./, r/e23./e29./, r/parity/prepare reposition;/, p-1
l./e15:/, d./dl. w0 c11./, i#
e15: al w2 x3 ; check position:
dl. w0 c28. ;
se w2 8 ; if operation <> move then
ds w0 x1+h1+14 ; zone.file, block := answer.file, block;
sn w3 (x1+h1+12) ; if answer.file count <> zone.filecount
se w0 (x1+h1+14) ; or answer.block count <> zone.blockcount then
jl. e33. ; goto add position error bit;
rl. w2 c5. ; w2 := share;
#
l./sn w3 3 ; if operation <> input/, r/sn/se/
l./so. w0 (e4.)/, d
l./al w0 25/, d1, i/
; zone.first address := <:<25><0><0>:>;
rl. w0 e31. ; top transferred := first addr + 2;
/, p-1
l./e33:/, l./jl. e23./, r/e23./e29./, r/parity/prepare reposition/, p-1
l./magtape check, page ...2/, r/84.09.04/89.01.31/
l./sz. w0 (e2.)/, r/ , overrun or position/or overrun/, i/
se w3 0 ; if operation = sense
sl w3 8 ; or operation = move , out tapemark or setmode then
jl. e29. ; goto prepare reposition;
/, l1, p-4
;l./e0:/, r/no transport:/no transport: <*stopped or position error empty trans;fer*>/, i/
; rl. w1 c22. ;
; sz w0 1<6 ; if position error and
; sh w1 0 ; halfs xferred > 0 then
; jl. e0. ;
; jl. e17. ; goto give_up;
;/, l1, p-6
l./e21:/, d1, i/
e21: sz w3 2.111 ; mount tape:
jl. e30. ; if sense or move then
jl. e16. ; goto return;
e30: ; <*the position is completed at next transfer*>
/, p-4
l./magtape check, page ...3/, r/84.09.04/88.12.09/
l./e27:/, i/
e29: al w1 0 ; prepare reposition:
rs. w1 e35. ; reposition count := 0;
/, l1, p-2
l./magtape check, page ...4/, r/86.12.12/89.01.31/
l./sl w3 5/, r/sl w3 5/sl w3 15/, r/=5/=15/
l./jl. e27./, r/e27./e29./, r/repos/prepare repos/
l./jl. e27./, r/e27./e29./, r/repos/prepare repos/
l./magtape check, page ...5/,
l./m.fp magtape check/, r/86.12.12/89.01.31/
l./init,page ...1/, r/86.12.12/88.05.04/
l./e48, b12/, r/b12/b20/
l./init, page ...4/, r/86.12.12/88.05.02/
l./e4:/, r/1<1/1<2/
l1, r/device := drum;/permkey := 0;/
l./am. (b8.)/, d2, i/
am. (b8.) ;
se w1 x1 ; if first init then
jl. e19. ; begin
; al. w3 b13. ;
; jd 1<11+4 ; addr of process (<:s:>);
; rl. w1 h17. ;
; sn w0 x1 ; if addr of parent process = addr of <:s:> then
; am 1<10 ; add bswait to fp mode bits;
al w2 1<9 ; mode.initmess :=
lo. w2 h51. ; yes;
rs. w2 h51. ;
jl. e16. ; end else
e19: ; begin <*not first*>
/, p-9
l./comment do not check/, r/com/ com/
l./curr out./, r/cur/ cur/
l./if mode 14.no/, r/if/ if/
l1, r/begin/ begin mode initmess.yes/
l./e17:/, r/end/ end/
l2, r/close/ close/
l1, r/prep/ prep/
l1, r/; skipped:/; end not first;/
l1, r/comm/ comm/, p-4
l./b12:/, l1, i/
b13: <:s:>, 0, r.3 ; name of ancestor <:s:>
/, p-2
l./m.fp init /, r/86.12.12/89.01.12/
l./commands, page ***15***/, r/86.08.22/88.04.24/
l./; 65:/, g5/+10/+ 2/, r/0<5+ 2/0<5+10/, p-5
l./; 95:/, r/0<5+10/ 0/, r/<95>/ _ /
l./page ***16***/, r/86.09.01/88.04.24/
l./i10:/, r/m. /
m./, r/top of command reading/fp comm. reading/, r/86.09.03/88.04.24/
l./, load, page 3/, r/rc 86.10.10 /fgs 1988.07.21/
l./1<23+ 127<12 + 1/, r/127/ 0/
l./page 3a/, l./m.fp/, r/86.10.10/88.07.21/
l./end program, page ...4/, r/86.09.01/88.05.02/
l./1<1+1/, r/1<1+1/1<2 /
l./m.fp end program and/, r/86.12.12/88.05.02/, r/and device status/ /
f
end
▶EOF◀