|
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◀