|
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: 52224 (0xcc00) Types: TextFile Names: »print3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »print3tx «
; the program is translated like ; (print=slang text entry.no ; print) ; b. g1, m3 w. d. p.<:fpnames:> l. ; fgs 1985.03.26 fp utility, print, page ...1... ; b. h99 ; begin block: fpnames; this block head must ; w. ; always be loaded from somewhere; s. a70, b40, c40, d20, e20, f40, g15, i24 ; begin segment: print; w. ; k = h55 ; d0: d1 ; length of print (in bytes) 0 ; saved out call jl. e2. ; entry print: goto initialize print; f0: 0 ; segment f1: 0 ; block length f2: 0 ; from word f3: 0 ; to word f4: 0 ; from block f5: 0 ; to block f6: 0 ; number f7: 0 ; block f8: 1<22 ; last byte f9: 0 ; first number f10: 0 ; current word f11: 1<22 ; infinite f12: 0 ; total f13: 0 ; saved pointer (area description) f14: 0 ; base bit group table f15: 0 ; fp base f16: 0 ; saved command pointer f17: 0, r.5 ; name and name table address for area description f18: 3<12 ; message: operation = input f19: 0 ; first core f20: 0 ; last core f21: -1 ; segment count f22: 0, r.8 ; answer f23: 0 ; fp result f24: 0 ; top command f25: 0 ; bit group pointer f26: 0 ; bytes f27: 0 ; current core relative f28: 0 ; secondary output zone; f29: 0 ; final addr ; output procedures. if they are called from page 2-6, the ; output will appear on secondary out, otherwise on current out c2: am -22 ; writecr: c3: al w2 32 ; writesp: c9:c6:am h26-h31 ; writechar: c5: am h31-h32 ; writetext: c4: al. w1 h32. ; writeinteger: rs. w1 d0.+2 ; rl. w1 f28. ; zone := secondary out; i18 = k + 1 ; called from page 2-6 sl. w3 i15 ; if called from page 2-6 then al. w1 h21. ; then zone := current out; jl. (d0.+2) ; goto selected output proc; \f ; rc 8.7.1970 fp utility, print, page 2 a0: jl. w3 c0. ; next word: rl. w3 f26. ; get word; al w3 x3-2 ; rs. w3 f26. ; bytes := bytes - 2; sl w3 0 ; if bytes >= 0 then jl. a7. ; goto print it; e0: rl. w3 f7. ; change block: sh. w3 (f5.) ; if block > to block then jl. a57. ; jl. e1. ; goto next field; a57: rl. w0 f11. ; blocklength := infinite; i4 = k + 1 ; blocked ; sn w3 x3 ; if blocked then jl. a1. ; begin rl. w0 f12. ; w0 := total; jl. w2 c25. ; set position; jl. w3 c0. ; get word; rl. w0 f10. ; blocklength := current word; i1 = k + 1 ; content ; am 0 ; se w3 x3-6 ; if content <> 6 then al w0 512 ; blocklength := 512; a1: rs. w0 f1. ; end; rl. w3 f2. ; first := from word; sh. w3 (f1.) ; if first > blocklength sh w3 -1 ; or first < 0 then rl. w3 f1. ; first := blocklength; rl. w1 f3. ; al w1 x1+2 ; ws. w1 f2. ; rs. w1 f26. ; bytes := to word - from word + 2; wa w1 6 ; last := first + bytes; sh. w1 (f1.) ; if last <= blocklength then jl. a5. ; goto ok; rx. w1 f26. ; ws. w1 f26. ; bytes := bytes - last + wa. w1 f1. ; blocklength ; rs. w1 f26. ; a5: rl. w0 f12. ; ok: wa w0 6 ; no := total + first; jl. w2 c25. ; set position; rl. w0 f12. ; wa. w0 f1. ; rs. w0 f12. ; total := total + blocklength; am. (f7.) ; al w2 1 ; sh. w2 (f4.) ; if block < from block then rl. w3 f1. ; first := block length; \f ; rc 1977.09.14 fp utility, print, page ...3... se. w3 (f1.) ; if first = blocklength then jl. a2. ; begin al w2 0 ; blocklength := 0; rs. w2 f26. ; bytes := 0; rs. w2 f1. ; goto end block change; jl. a4. ; end; a2: jl. w3 c2. ; print block head: jl. w3 c2. ; writecr; rl. w2 f13. ; writecr; al w3 i19 ; hs. w3 i18. ; set select; jl. w3 c1. ; list parameter(area description); al w3 i15 ; hs. w3 i18. ; restore select out; bz. w0 i4. ; if blocked then sn w0 0 ; begin jl. a3. ; writesp; jl. w3 c3. ; rl. w0 f7. ; w0 := block; jl. w3 c4. ; writeinteger(<<d>,w0) 32<12 +1 ; end; a3: al w0 0 ; hs. w0 i2. ; printcount := words per line; a4: rl. w1 f7. ; end block change: al w1 x1+1 ; rs. w1 f7. ; block := block + 1; rl. w1 f2. ; i10 = k + 1 ; relative out sn w3 x3 ; if -,relative out then wa. w1 f9. ; number := from word + first number else rs. w1 f6. ; number := from word; jl. a0. ; goto next word; a6: am. (f6.) ; increase number: al w1 2 ; number := number + 2; rs. w1 f6. ; goto next word jl. a0. ; a7: am -1 ; print it: i2 = k + 1 ; print count; al w0 0 ; print count := print count - 1; hs. w0 i2. ; sl w0 1 ; if print count <= 0 then jl. a8. ; begin jl. w3 c2. ; writecr; rl. w0 f6. ; w0 := number; jl. w3 c4. ; 32<12 +6 ; writeinteger(<<dddddd>,w0); al w2 46 ; jl. w3 c9. ; writechar(point); rl. w0 f6. ; i20=k+1 ; jl. 2 ; (if octal) jl. 8 ; skip jl. w3 c31. ; writeoctal(addr); al w2 46 ; jl. w3 c9. ; writechar(point); i3 = k + 1 ; words per line; al w0 0 ; print count := words per line; hs. w0 i2. ; end jl. a9. ; else a8: al w2 44 ; jl. w3 c9. ; writechar(comma); a9: jl. w3 c3. ; writesp; al w3 1 ; hs. w3 i7. ; print := true; \f ; rc 14.8.1969 fp utility, print, page 4 i5 = k + 1 ; text ; print text: sn w3 x3 ; if text then jl. a10. ; begin rl. w1 f10. ; w1 := current word; jl. w2 c10. ; test graphic; jl. w2 c10. ; test graphic; jl. w2 c10. ; test graphic; al w0 x3 ; w0 := text word; jl. w3 c11. ; print textword; ; end; a10: rl. w2 f14. ; print bit groups: group no := 0; a11: bl w1 x2 ; next bit group: sn w1 -1 ; if first bit(groupno) = -1 then jl. a12. ; goto print code; rl. w0 f10. ; s := first bit(groupno); ls w0 x1 ; w0 := current word shift s; ac w1 x1 ; ba w1 x2+1 ; s := last bit(groupno) - s; rl w3 x2+2 ; sl w3 0 ; if layout >= 0 then ls w0 x1-23 ; w0 := w0 shift s - 23; sh w3 -1 ; if layout < 0 then as w0 x1-23 ; w0 := w0 arithshift s - 23; rs. w3 b0. ; store layout; jl. w3 c4. ; writeinteger(layout,w0); b0: 0 ; layout ; al w2 x2+4 ; groupno := groupno+4; jl. a11. ; goto next bit group; i6 = k + 1 ; code ; print code: a12: sn w3 x3 ; if -,code then jl. a6. ; goto increase number; jl. w3 c3. ; writesp; bz. w1 f10. ; print instruction: ld w2 -6 ; w2 := bits(6,11,current word) shift 18; hl. w2 f10. ; + bits(0,11,current word); am x1 ; rl. w0 x1 + g0. ; no := bits(0,5,current word)*2; ld w1 -16 ; instruction := instruction table(no); hs. w0 b1. ; w0 := <:<instruction letters><0>:>; ld w1 16 ; mark := bits(0,7,w0); ls w0 8 ; comment: mark is <space> or <,>; jl. w3 c11. ; print text word; al. w0 g5. ; print relative: sz w2 1<3 ; writetext( al. w0 g6. ; if bit(20,w2) = 0 then <: :> jl. w3 c5. ; else <:. :>); al w1 0 ; print w-register: w1 := 0; ld w2 2 ; (w1,w2) := (w1,w2) shift 2; b1 = k + 1 ; mark ; comment: w1 = register no; al w3 x1 ; test := mark + w1; wa. w1 g2. ; ld w1 32 ; w0 := <:w<register no><0>:>; sn w3 44 ; if test = 44 then rl. w0 g5. ; w0 := <: :>; jl. w3 c11. ; print text word; \f ; rc 1977.10.12 fp utility, print, page ...5... al. w0 g5. ; print left bracket: sz w2 1<4 ; writetext( al. w0 g3. ; if bit(19,w2) = 0 then <: :> jl. w3 c5. ; else <: (:>); bz. w0 f10. ; print index register: la. w0 g8. ; w0 := x-field of current word wa. w0 g7. ; + <:<0>x0:>; sn. w0 (g7.) ; if w0 = <:<0>x0:> then rl. w0 g1. ; w0 := <: :>; ls w0 8 ; w0 := w0 shift 8; jl. w3 c11. ; print text word; bl. w1 f10.+1 ; print displacement: hs. w1 b2. ; displacement := bits(12,23,current word); se w1 0 ; if displacement <> 0 then jl. a13. ; goto print space or sign; sz w2 3<2 ; if x-field of current word <> 0 then jl. a14. ; goto print right bracket; a13: al w0 32 ; print space or sign: text := <: :>; sz w2 3<2 ; if x-field of current word <> 0 then al w0 43 ; text := <:+:>; sh w1 -1 ; if displacement < 0 then al w0 45 ; text := <:-:>; ls w0 16 ; w0 := text; jl. w3 c11. ; print text word; b2 = k + 1 ; displacement ; al w0 0 ; w0 := displacement; sh w0 -1 ; if displacement < 0 then ac w0 (0) ; displacement := -displacement; jl. w3 c4. ; writeinteger(<<d>,w0); 32<12 +1 ; comment: layout; a14: al. w0 g5. ; print right bracket: sz w2 1<4 ; writetext( al. w0 g4. ; if bit(19,w2) = 0 then <: :> jl. w3 c5. ; else <:) :>); so w2 1<5 ; print final address: jl. a6. ; if bit(18,w2) = 0 then rl. w0 f6. ; goto increase number; ba. w0 b2. ; final address := rs. w0 f29. ; displacement + number; jl. w3 c4. ; save final addr 1<23+32<12+1 ; writeinteger(<<-d>,final address); rl. w0 f29. ; final addr i21=k+1 ; jl. 2 ; (if octal) jl. a6. ; goto increase number; jl. w3 c31. ; writeoctal(final addr); jl. a6. ; goto increase number; \f ; rc 1977.10.13 print, page ...5a... c31: ; procedure writeoctal(addr); b. i3 w. ds. w0 i3. ; save w3.w0 jl. w3 c3. ; writesp; al w1 9 ; count:=9; rs. w1 i1. ; i0: rl. w1 i1. ; loop: al w1 x1+3 ; count:=count+3; sl w1 22 ; if count>22 then jl. (i2.) ; return; rs. w1 i1. ; rl. w0 i3. ; octal:=addr ls w0 x1 ; shift count ls w0 -21 ; shift (-21); jl. w3 c4. ; writeinteger(z,<<z>,octal); 48<12+1 ; jl. i0. ; goto loop; i1: 0 ; count i2: 0 ; saved return i3: 0 ; saved addr e. \f ; fgs 1985.03.26 fp utility, print, page ...6... e1: ; next field: i7 = k + 1 ; print ; se w3 x3 ; if -,print then jl. a18. ; begin al. w1 b4. ; jl. w3 c12. ; message(<:numbering:>); rl. w2 g9. ; list parameter(field specification); jl. w3 c1. ; end; a18: ; jl. w3 c2. ; writecr; ; each call of output procedures up to this point will cause ; output on secondary out, otherwise on current out i15 = k - i18 + 3 i8 = k + 1 ; end param ; se w3 x3 ; if end param then jl. d3. ; goto exit fp; jl. e3. ; goto scan parameter list; g1: <:<32><32><32>:> ; g2: <:<0>w0:> ; g3: <:<32>(:> ; g4: <:)<32>:> ; g5: <:<32><32>:> ; g6: <:.<32>:> ; g7: <:<0>x0:> ; g8: 1<1+1 ; g9: 0 ; saved pointer(field specification); ; comma in front of instr means: w0 irrelevant i24 = k + 24; addr of substring <:,ri:> g0: <:,00 do el hl la lo lx wa ws,am wm al,ri,jl,jd,je:> <:,xl es ea zl rl,sp,re rs wd rx hs,xs gg di ap,ul:> <: ci ac ns nd as ad ls ld sh sl se sn so sz,sx gp:> <: fa fs fm,ks fd cf dl ds aa ss,dp mh,lk ix,62,63:> i14 = k + 1 ; bs area c0: se w3 x3 ; get word: jl. c26. ; if bs area then goto inword; rl. w1 f27. ; get word from core: sh. w1 (f8.) ; jl. 4 ; if current core relative > last byte jl. e1. ; then goto next field; al w1 x1+2 ; current core relative := rs. w1 f27. ; current core relative + 2; wa. w1 f9. ; current word := rl w0 x1-2 ; word(current core relative + first number); ; this load instruction might cause interrupt (outside core) c27: rs. w0 f10. ; jl x3 ; return; e4: rl. w1 f15. ; interrupt in print: rl w0 x1+h10+10 ; sn. w0 c27. ; if called from get word then jl. e1. ; goto next field; al w0 h10+h76 ; hs. w0 i16. ; exit := fp break; jl. d3. ; goto exit fp; \f ; rc 7.7.1970 fp utility, print, page 7 b. a3, b0 ; begin block: get word w. ; c26: rs. w3 b0. ; inword: rl. w0 f0. ; save return; sn. w0 (f21.) ; if segment = segment count then jl. a0. ; goto test relative; bs. w0 1 ; rs. w0 f21. ; segment count := segment - 1; jl. a1. ; goto input segment; i0 = k + 1 ; rel ; test relative: a0: al w2 0 ; sh w2 511 ; if rel < 512 then jl. a2. ; goto store word; al w2 0 ; hs. w2 i0. ; rel := 0; a1: al. w1 f18. ; input segment: w1 := message address; al. w3 f17. ; w3 := addr(area name); jd 1<11+16 ; send message; al. w1 f22. ; w1 := answer address; jd 1<11+18 ; wait answer; bz w2 x1 ; sn w0 1 ; if result <> 1 se w2 0 ; or status <> 0 then jl. a3. ; goto may be alarm; am (x1+2) ; sn w3 x3 ; if bytes transferred = 0 then jl. a1. ; goto input segment; rl. w1 f21. ; al w1 x1+1 ; rs. w1 f21. ; segment count := segment count + 1; rs. w1 f0. ; segment := segment segment count; jl. a0. ; goto test relative; a2: am. (f19.) ; store word: rl w0 x2 ; current word := rs. w0 f10. ; word(first core + rel); al w2 x2+2 ; hs. w2 i0. ; rel := rel + 2; jl. (b0.) ; return; b0: 0 ; saved return ; a3: se w2 1<6 ; may be alarm: jl. d4. ; if status word(5) <> 1 then al w2 0 ; goto area alarm; rs. w2 f1. ; blocklength := 0; jl. e1. ; goto next field; i. ; id list e. ; end block: get word \f ; rc 31.1.1974 fp utility, print, page 8 d2: al w0 0 ; area alarm 1: result := 0; d4: al w3 1 ; area alarm: ls w3 (0) ; w3 := 1 shift result; sn w0 1 ; if result = 1 then wa w3 4 ; w3 := w3 + statusword; rs. w3 f23. ; fpresult := w3; al. w1 b3. ; jl. w3 c13. ; mess name(area); jl. d3. ; goto exit fp: b3: <: area<0>:> ; b4: <:numbering<0>:> ; b5: <:param <0>:> ; b6: <: unknown<0>:> ; b7: <:core size<0>:> ; b8: <:***print <0>:> ; 0 ; saved text address b9: 0 ; saved w2 b10: 0 ; saved return c12: al w2 1 ; rs. w2 f23. ; fpresult:=1; am 1 ; message: w2 := 1; skip next; c13: al w2 0 ; mess name: w2 := 0; ds. w2 b9. ; save(w1,w2); rs. w3 b10. ; save return; jl. w3 c2. ; writecr; al. w0 b8. ; jl. w3 c5. ; writetext(<:***print :>); am. (b9.) ; se w3 x3 ; if w2 = 0 then jl. a15. ; begin am. (f13.) ; w0 := addr(name of area descript); al w0 2 ; writetext; jl. w3 c5. ; end; a15: rl. w0 b9.-2 ; jl. w3 c5. ; writetext(message); jl. (b10.) ; return; c25: rs. w0 f27. ; setposition: ld w1 -9 ; current core relative := w0; ba. w0 1 ; rs. w0 f0. ; segment := w0 shift -9 + 1; al w0 0 ; ld w1 9 ; hs. w0 i0. ; rel := w0 mod 512; jl x2 ; return; \f ; rc 1976.03.11 fp utility, print, page ...8a... d3: rl. w2 f15. ; exit fp: dl. w1 f30. ; ds w1 x2+h10+h76+2; restore fp break routine; al. w3 f17. ; rl. w0 f17. ; sn w0 0 ; jl. d9. ; if name=0 then goto close secondary out; bz. w0 i14. ; se w0 0 ; if bs area then jd 1<11+64 ; remove process(area); d9: rl. w1 f28. ; close secondary out: sn w1 x2+h21 ; if secondary out <> current out then jl. d8. ; begin bz w3 x1+h1+1 ; char := if file=bs se w3 4 ; or file=mag tape sn w3 18 ; am 25 ; then em al w2 0 ; else null; am. (f15.) ; close up(secondary out, char); jl w3 h34 ; am. (f15.) ; terminate zone(secondary out); jl w3 h79-4 ; c. h57 < 3 ; if system 3 then al w3 x1+h1+2 ; if backing storage then al. w1 d10. ; reduce area to ne used size; jd 1<11+42 ; rl w0 x3+14 ; rs w0 x1 ; bz w0 x3-1 ; sn w0 4 ; jd 1<11+44 ; z. ; end system 3; am. (f15.) ; unstack(current in); jl w3 h30-4 ; end; d8: rl. w1 f28. ; rl. w2 f23. ; se w2 0 ; if fp result <> 0 then jl. w3 c2. ; writecr; al. w1 f17. ; w1 := addr(area name); rl. w2 f23. ; w2 := fp result; am. (f15.) ; enter fp: i16 = k + 1 ; exit jl h7 ; goto fp end program or break; jl. (2) ; the instructions replace temporary f30: 0 ; e4 ; h10+14 and h10+16 in fp break; \f ; rc 1977.09.14 fp utility, print, page ...9... b11: 8<12 +4 ; (point,integer) b12: 4<12 +4 ; (space,integer) b13: 4<12 +10 ; (space,name) b14: 8<12 +10 ; (point,name) b15 = k - 4 ; delimiter table: <: :>,<:=:>,<:.:>; <space>, <equal>, <point> b16: 0, 0 ; saved return, zero c1: rs. w3 b16. ; list parameter: bz w1 x2 ; save(return); a16: al. w0 x1+b15. ; print next: jl. w3 c5. ; writetext(<delimiter>); al. w3 a17. ; set return(get next); bz w1 x2+1 ; al w0 x2+2 ; w0 := addr(param); sn w1 10 ; if param = <text> then jl. c5. ; goto writetext; rl w0 x2+2 ; w0 := param; jl. w3 c4. ; writeinteger; 32<12 +1 ; comment: layout; a17: al w3 x2 ; get next: ba w2 x2+1 ; save w2; bz w1 x2 ; w2 := w2 + right(w2); sl w1 5 ; if delimiter > <space> then jl. a16. ; goto print next; al w2 x3 ; restore w2; jl. (b16.) ; return; i19=k-i18-1 ; top of list parameter c8: rs. w3 b16. ; next param: ba w2 x2+1 ; save return; al w3 x2 ; command pointer := ba w3 x2+1 ; command pointer + bits(12,23,itemhead); rl w3 x3 ; w3 := next item head; bl w0 6 ; sl w0 4 ; if next param = <end param> then jl. a19. ; begin rl. w3 b13. ; w3 := (space,name); al w0 1 ; end param := true; hs. w0 i8. ; end; a19: rl w0 x2+2 ; w0 := param; jl. (b16.) ; return; c11: rs. w0 b16. ; print text word: text word := w0; al. w0 b16. ; w0 := address(text word); jl. c5. ; goto writetext; c10: al w0 0 ; test graphic: ld w1 8 ; w0 := 0; c.h57<3 ; if system 3 then se w0 35 ; if char=35 or sn w0 36 ; if char=36 or al w0 32 ; se w0 64 ; if char=64 or sn w0 94 ; if char=94 or al w0 32 ; sn w0 96 ; if char=96 al w0 32 ; then char=<space>; z. ; end system 3 code sl w0 32 ; (w0,w1) := (w0,w1) shift 8; sl w0 127 ; if w0 < 32 or w0 > 126 then al w0 32 ; w0 := <space>; ls w0 16 ; ld w0 8 ; w3 := w3 shift 8 + w0; jl x2 ; \f ; rc 7.7.1970 fp utility, print, page 10 b17: 4<12 +10 ; pointer(end param); <:end param:>, 0 ; 4<12 +10 ; e3: rl. w2 f16. ; scan parameter list: restore command point; a20: jl. w3 c8. ; scan parameter list 1: bz w1 x2 ; next param; sl w1 4 ; if param = <end param> then jl. a21. ; begin al. w1 b17. ; saved pointer(field spec) := rs. w1 g9. ; pointer(end param); al w0 0 ; from word := 0; rl. w1 f11. ; to word := infinite; ds. w1 f5. ; from block := 0; ds. w1 f3. ; to block := infinite; i17 = k + 1 ; 0 for process and dump area otherwise 1 al w0 1 ; blocked := true for bs area, false for process hs. w0 i4. ; goto execute 1; jl. a49. ; end; a21: rs. w2 f16. ; save parameter pointer; rl w1 x2 ; sn. w1 (b13.) ; if parameter = (space,name) then jl. a23. ; goto format list; sn. w1 (b12.) ; if parameter = (space,integer) then jl. a26. ; goto field specification; a22: al. w1 b5. ; param error: a30: jl. w3 c12. ; message(<:param:>); rl. w2 f16. ; param error 1: restore param pointer; jl. w3 c1. ; list parameter; jl. a20. ; goto scan parameter list; a23: rs. w3 b18. ; format list: save(delim); al. w3 g10. ; index := 0; a24: dl w1 x3+2 ; search: sn w0 (x2+2) ; if first double word(format table(index)) se w1 (x2+4) ; <> first double word(parameter) then jl. a25. ; goto try next; dl w1 x3+6 ; sn w0 (x2+6) ; if second double word(format table(index)) se w1 (x2+8) ; <> second double word(parameter) then jl. a25. ; goto try next; rl w1 x3+8 ; found: bl. w3 b18. ; w3 := next delimiter; d7: jl. x1 ; goto format table(index+8); a25: sn. w3 g11. ; try next: jl. a22. ; if index = top index then goto param error; al w3 x3+10 ; index := index + 10; jl. a24. ; goto search; b18: 0 ; saved delim ; \f ; rc 1970.07.15 fp utility, print, page ...11... b30: <:r:> ; test relative out b31: <:a:> ; test absolute b32: <:i:> ; test indirect b33: <:c:> ; test center b34: 0 ; center address a26: rs. w2 g9. ; field specification: al w1 0 ; save pointer(field specification); rs. w1 f4. ; from block := w1 := 0; rs. w1 f5. ; to block := 0; hs. w1 i11. ; absolute in := false; hs. w1 i12. ; indirect := false; hs. w1 i13. ; center := false; a27: hs. w1 i4. ; next pair: hs. w1 i10. ; blocked := relative out := w1=4; rs. w0 x1+f2. ; word(w1+addr(from)) := param; sn. w3 (b11.) ; if next item = ( point, integer) then jl. w3 c8. ; next param; rs. w0 x1+f2.+2 ; word(w1+addr(from)+2) := param; sn w1 4 ; if w1 = 4 then jl. a28. ; goto execute; sn. w3 (b14.) ; if next item = (point,name) then jl. a59. ; goto test field modifier; se. w3 (b11.) ; if next item <> (point,integer) then jl. a28. ; goto execute; jl. w3 c8. ; block: next param; al w1 4 ; w1 := 4; jl. a27. ; goto next pair; a59: jl. w3 c8. ; test field modifier: next param; rl w1 x2 ; se. w1 (b14.) ; if item <> (point,name) then jl. a22. ; goto param error; al w1 0 ; modifier := 0; sn. w0 (b30.) ; if item = <:r:> then al. w1 i10. ; modifier := relative out; sn. w0 (b31.) ; if item = <:a:> then al. w1 i11. ; modifier := absolute in; sn. w0 (b32.) ; if item = <:i:> then al. w1 i12. ; modifier := indirect; se. w0 (b33.) ; if param <> <:c:> then jl. a60. ; goto test syntax; al. w1 i13. ; modifier := center; jl. w3 c8. ; next param; rs. w0 b34. ; center address := param; rl w0 x2 ; if param <> (point,integer); sn. w0 (b11.) ; then goto syntax; a60: sn w1 0 ; test syntax: if modifier = 0 then jl. a22. ; syntax : goto param alarm; al w0 1 ; hs w0 x1 ; modifier := true; bl w1 6 ; se w1 4 ; if next delim <> space then jl. a59. ; goto test field modifier; \f ; rc 7.7.1970 fp utility, print, page 11a a61: rs. w2 d0. ; set field modifiers: i11 = k + 1 ; absolute in sn w3 x3 ; set absolute: jl. a62. ; if absolute in then dl. w1 f3. ; begin ws. w0 f9. ; from word := from word - first number; ws. w1 f9. ; to word := to word - fist number; ds. w1 f3. ; rl. w0 b34. ; center address := ws. w0 f9. ; center address - first number; rs. w0 b34. ; end; i12 = k + 1 ; indirect a62: sn w3 x3 ; set indirect: jl. a63. ; if indirect then rl. w0 f2. ; begin jl. w2 c25. ; w0 := from word; jl. w3 c0. ; setposition; get word; rl. w0 f10. ; ws. w0 f9. ; from word := rs. w0 f2. ; current word - first number; rl. w0 f3. ; w0 := to word; jl. w2 c25. ; setposition; jl. w3 c0. ; get word; rl. w0 f10. ; to word := ws. w0 f9. ; current word - first number; rs. w0 f3. ; end; i13 = k + 1 ; center ; set center interval: a63: sn w3 x3 ; if center then jl. a64. ; begin rl. w0 b34. ; w0 := center address; jl. w2 c25. ; setposition; jl. w3 c0. ; get word; rl. w0 f10. ; w0 := current word - first number; ws. w0 f9. ; rx. w0 f3. ; to word := wa. w0 f3. ; to word + w0; rx. w0 f3. ; from word := ws. w0 f2. ; w0 - from word; rs. w0 f2. ; end; a64: rl. w2 d0. ; \f ; rc 16.7.1970 fp utility, print ,page 11b a28: al w3 x2 ; execute: ba w3 x3+1 ; bl w0 x3 ; sl w0 5 ; if next delim <> space then jl. a22. ; goto param alarm; a49: al w0 0 ; execute 1: al w3 1 ; rs. w3 f0. ; segment := 1; rs. w0 f26. ; bytes := 0; rs. w0 f7. ; block := 0; rs. w0 f12. ; total := 0; hs. w0 i7. ; print := false; hs. w0 i0. ; rel := 0; hs. w0 i9. ; new format := false; rs. w2 f16. ; save parameter pointer; jl. a0. ; goto next word; c24: bz. w0 i9. ; clear format list 1: se w0 0 ; if new format then jl x3 ; return; jl. a69. ; goto clear 1; i9 = k + 1 ; new format ; clear format list: c14: se w3 x3 ; if new format then jl x3 ; return; al w0 0 ; hs. w0 i5. ; text := false; hs. w0 i6. ; code := false; al w0 1 ; hs. w0 i9. ; new format := true; a69: rl. w0 f14. ; clear 1: rs. w0 f25. ; bit group pointer := al w0 -1 ; base bit group pointer; rs. w0 (f25.) ; terminate bit group table; jl x3 ; return; \f ; rc 1977.10.13 fp utility, print, page ...12... b19: 32<12 +1 ; b20: 32<12 +2 ; 12<12 +23 ; b21: 1<23+32<12+6 ; b22: 1<23+32<12+9 ; b23: 3 ; b25: 32<12 +5 ; b36: 32<12+4 b37: 8<12+15 b38: 16<12+23 b39: 48<12+1 b40: 3<12+3 c15: rx. w2 f25. ; stack group: al w2 x2+4 ; bit group pointer := bit group pointer + 4; sl. w2 (f24.) ; if bit group pointer >= top command then jl. a29. ; goto pattern error; ds w1 x2-2 ; double word(bit group pointer - 2) := rx. w2 f25. ; (w0,w1); jl x3 ; return; a29: al. w1 b7. ; pattern error: w1 := addr(<:core size:>); jl. w3 c12. ; message; rl. w2 f16. ; w2 := saved command pointer; jl. w3 c1. ; list parameter; jl. d3. ; goto exit fp; c16: se w3 4 ; integer: jl. a22. ; if next delim <> space then jl. w3 c14. ; goto param error; al w0 23 ; clear format list; rl. w1 b22. ; w0 := 0<12+23; w1 := <<-dddddddd>; jl. w3 c15. ; stack group; a31: al w0 -1 ; terminate group table: rs. w0 (f25.) ; word(bit group pointer) := -1; jl. a20. ; goto scan parameter list 1; c17: se w3 4 ; byte: jl. a22. ; if next delim <> space then jl. w3 c14. ; goto param error; al w0 11 ; clear format list; rl. w1 b21. ; w0 := 0<12+11; w1 := <<-ddddd>; jl. w3 c15. ; stack group; rl. w0 b21.-2 ; w0 := 12<12+23; jl. w3 c15. ; stack group; jl. a31. ; goto terminate group table; c28: se w3 4 ; char: if next delim<>space jl. a22. ; then param error else jl. w3 c14. ; clear format al w0 7 ; w0:=0<12+7 rl. w1 b36. ; w1:=<<ddd> jl. w3 c15. ; stack group rl. w0 b37. ; w0:=8<12+15 jl. w3 c15. ; stack group rl. w0 b38. ; w0:=16<8+23 jl. w3 c15. ; stack group jl. a31. ; goto terminate group table \f ; rc 1977.10.13 print, page ...12a... c29: se w3 4 ; abshalf: jl. a22. ; if next delim<>space then jl. w3 c14. ; goto param error; al w0 11 ; clear format list; rl. w1 b25. ; w0:=0<12+11; w1:=<<ddddd>; jl. w3 c15. ; stack group; rl. w0 b21.-2 ; w0:=12<12+23; jl. w3 c15. ; stack group; jl. a31. ; goto terminate group table; c30: se w3 4 ; octal: jl. a22. ; if nextdelim<>space then jl. w3 c14. ; goto param error; al w0 2 ; w0:=0<12+2; hs. w0 i20. ; save octal for addr hs. w0 i21. ; save octal for code rl. w1 b39. ; w1:=<<z>; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+12; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; wa. w0 b40. ; w0:=w0+3<12+3; jl. w3 c15. ; stack group; jl. a31. ; goto terminate grouptable; c18: se w3 4 ; all: jl. a22. ; if next delim <> space then jl. w3 c14. ; goto param error; a48: al w0 23 ; clear format list; hs. w0 i6. ; all 1: code := true; w0 := 0<12+23; rl. w1 b22. ; w1 := <<-dddddddd>; jl. w3 c15. ; stack group; al w0 11 ; w0 := 0<12+11; rl. w1 b25. ; w1 := <<ddddd>; jl. w3 c15. ; stack group; jl. a31. ; terminate group table; \f ; rc 16.04.1972 fp utility, print, page ...13... b26: 0 ; from bit, to bit c19: se w3 4 ; code: jl. a22. ; if next delim <> <space> then jl. w3 c14. ; goto param error; al w0 1 ; clear format list; hs. w0 i6. ; code := true; jl. a20. ; goto scan parameter list 1; c20: se w3 4 ; text: jl. a22. ; if next delim <> space then jl. w3 c14. ; goto param error; al w0 1 ; clear format list; hs. w0 i5. ; text := true; jl. a20. ; goto scan parameter list 1; c21: sn w3 4 ; bits: jl. a33. ; if next delim = space then jl. w3 c24. ; goto bit pattern 1: rl. w3 b18. ; clear format list 1; ; next group: a32: jl. w1 c22. ; next bit; hs. w1 b26. ; from bit := param; jl. w1 c22. ; next bit; hs. w1 b26.+1 ; to bit := param; bs. w1 b26. ; w1 := to bit - from bit; sh w1 -1 ; if w1 < 0 then jl. a34. ; goto pattern error; al w0 0 ; w0 := 0; wd. w1 b23. ; wa. w1 b20. ; w1 := w1//3 add <<dd>; rl. w0 b26. ; w0 := (from bit,to bit); jl. w3 c15. ; stack group; rl. w3 b18. ; sn. w3 (b11.) ; if next param = (point, integer) then jl. a32. ; goto next group; bz w3 6 ; finis pattern: se w3 4 ; if next delim <> space then jl. a34. ; goto pattern error; rl. w1 f25. ; save(bit group point); rs. w2 f16. ; save(parameter pointer); rl. w2 (f14.) ; save(first of bit group table); jl. w3 c14. ; clear format list; rs. w1 f25. ; restore(bit group pointer); rs. w2 (f14.) ; restore(first of bit group table); rl. w2 f16. ; restore parameter pointer; jl. a31. ; \f ; rc 1977.09.26 fp utility, print, page ...14... a33: rs. w2 f16. ; bit pattern: save param pointer; jl. w3 c14. ; clear format list; al w2 0 ; bit := 0; rl. w1 b20. ; w1 := <<d>; a35: hs w2 0 ; next pair: hs w2 1 ; w0 := bit shift 12 + bit; jl. w3 c15. ; stack group; rl. w1 b19. ; w1 := <<d>; al w2 x2+1 ; bit := bit + 1; sh w2 23 ; if bit <=23 then jl. a35. ; goto next pair; rl. w2 f16. ; restore command pointer; jl. a31. ; goto terminate group table; c22: rs. w1 b24. ; next bit: save return; se. w3 (b11.) ; if next param <> (point,integer) then jl. a34. ; goto pattern error; jl. w3 c8. ; next param; rs. w3 b18. ; save next item head; sl w0 24 ; if param > 23 then jl. a34. ; goto pattern error; rl w1 0 ; w1 := param; jl. (b24.) ; return; b24: 0 ; saved return ; a34: rl. w1 f14. ; pattern error: rs. w1 f25. ; bit group point := al w0 -1 ; base bit group table; rs w0 x1 ; word(bit group point) := -1; jl. a22. ; goto param error; c23: rl. w3 b18. ; words: se. w3 (b11.) ; if next param <> (point,integer) then jl. a22. ; goto parameter error; jl. w3 c8. ; next param; bz w3 6 ; se w3 4 ; if next delim <> space then jl. a22. ; goto param error; hs. w0 i3. ; words per line := param; jl. a20. ; goto scan parameter list 1; g10: <:integer:> , 0 , c16-d7 ; format table: <:word:>,0 , 0 , c16-d7 <:char:>,0 , 0 , c28-d7 <:half:>, 0 , 0 , c17-d7 <:abshalf:>, 0 , c29-d7 <:octal:>,0 , 0 , c30-d7 <:byte:>, 0 , 0 , c17-d7 ; <:code:>, 0 , 0 , c19-d7 ; <:text:>, 0 , 0 , c20-d7 ; <:bits:>, 0 , 0 , c21-d7 ; <:words:>,0 , 0 , c23-d7 ; g11: <:all:>,0,0 , 0 , c18-d7 ; \f ; fgs 1985.03.26 fp utility, print, page ...15... b28: <:s:> ; b29: <:,xi:> ; replaces <:,ri:> in instr table in mpu b35: <:connect out<0>:> e2: rs. w1 f15. ; initialize print: rs. w2 f24. ; save top command; rs. w3 f16. ; save fp base; save command pointer; rl. w0 b29. ; gg w3 2*17 ; sl w3 60 ; if cpu ident >= 60 then rs. w0 i24. ; replace <:,ri:> with <:,xi:> in instruction table; al. w3 d5. ; al w0 x3+510 ; first core := first free core; ds. w0 f20. ; last core := first core + 510; al w3 x3+512 ; comment: bs segment buffer; rs. w3 f14. ; base bit group table := last core + 2; rs. w3 f25. ; bit group point := last core + 2; sh w3 x2-4 ; if last core + 2 >= top command then jl. a36. ; begin al. w1 b7. ; message(<:core size:>); jl. w3 c12. ; goto exit fp jl. d8. ; end; a36: dl w0 x1+h10+h76+2; rx. w3 f30.-2 ; exchange two first words of rx. w0 f30. ; fp break with entries at print; al. w0 e4. ; ds w0 x1+h10+h76+2; al w0 x1+h21 ; rs. w0 f28. ; secondary out := current out; rl. w2 f16. ; w2 := command pointer(point); bz w1 x2 ; se w1 6 ; if delimiter = <=> then jl. a37. ; begin am. (f15.) ; jl w3 h29-4 ; stack current input; rl. w2 f16. ; restore w2; al w2 x2-8 ; rl. w3 f15. ; al w1 x3+h20 ; zone := current in; al w0 1<1+1 ; comment: one segm. on disc; jl w3 x3+h28 ; connect out(zone); (=secondary output); sn w0 0 ; if result <> 0 then jl. d10. ; begin al. w1 b35. ; jl. w3 c12. ; message(<:connect out:>); jl. d3. ; goto exit fp; d10: rs. w1 f28. ; secondary out zone := current in; bl w0 x1+h1+1 ; sn w0 4 ; if -,bs and jl. 6 ; -,mt se w0 18 ; then jl. a44. ; skip; rl. w2 f16. ; al w2 x2-8 ; w2:=name addr am. (f15.) ; al w1 h54 ; w1:=lookup area jl. w3 a65. ; prepare output a44: rl. w2 f16. ; a37: al w0 0 ; again: hs. w0 i1. ; content := 0; am -2000 rs. w0 f9.+2000 ; first number := 0; jl. w3 c8. ; next param; bl w1 x2 ; sl w1 4 ; if param = <end list> then jl. a43. ; begin al. w1 b3. ; message(<:area:>); jl. w3 c12. ; goto exit fp jl. d3. ; end; \f ; rc 1977.10.13 fp utility, print, page ...15a... a43: am -2000 rs. w2 f13.+2000 ; save pointer(area description); bz w1 x2+1 ; se w1 10 ; if param <> name then am -2000 rs. w0 f9.+2000 ; first number := param; sn. w3 (b11.) ; if next param = (point,integer) then jl. a41. ; goto numbering; sn. w3 (b14.) ; if next param = (point,name) then jl. a40. ; goto segmented; a38: bl w1 6 ; test space: sn w1 4 ; if delimiter = space then jl. a42. ; goto area or process name; \f ; rc 1977.10.13 fp utility, print, page ...16... a39: al. w1 b5. ; syntax error: jl. w3 c12. ; message(<:param:>); am -2000 rl. w2 f13.+2000 ; w2 := addr(area description); jl. w3 c1. ; list parameter; jl. a37. ; goto again; a40: jl. w3 c8. ; segmented: next param; se. w0 (b28.) ; if param <> <:s:> then jl. a39. ; goto syntax error; al w0 6 ; hs. w0 i1. ; content := 6; se. w3 (b11.) ; if next param <> (point,integer) then jl. a38. ; goto test space; a41: jl. w3 c8. ; numbering: am -2000 rs. w0 f9.+2000 ; first number := next param; jl. a38. ; goto test space; a42: am -2000 rs. w2 f16.+2000 ; area or process name: am -2000 rl. w3 f13.+2000 ; al w3 x3 +2 ; jd 1<11+4 ; process description; sn w0 0 ; if process does not exist then jl. d11. ; goto area; rl w2 (0) ; se w2 0 ; if process kind <> internal then jl. d11. ; goto area; rl w2 0 ; w2 := process descr. addr.; rl w0 x2+22 ; am -2000 rx. w0 f9.+2000 ; sn w0 0 ; if first number = 0 then jl. 6 am -2000 rx. w0 f9.+2000 ; first number := first core(process description); rl w1 x2+24 ; ws w1 x2+22 ; al w1 x1-2 ; last byte := last core - first core; am -2000 rs. w1 f8.+2000 ; a50: al w0 0 ; ready: hs. w0 i17. ; blocked := false; am -2000 rl. w2 f16.+2000 ; restore command pointer; jl. a48. ; restore command pointer; goto all1; d11: rl w0 x3 ; area: name := first word(area name); am -2000 rl. w3 f15.+2000 ; tail := abs addr(descr part first note); c.h57<2 ; if system 2 then al w1 x3+h52+2 ; may be next note: a44: sn w0 (x1-2) ; if name = namepart(note) then jl. a46. ; goto descriptor found; al w1 x1+22 ; tail := tail + 22; sh w1 x3+h53 ; if tail <= first after last note then jl. a44. ; goto may be next note; z. ; end system 2 code al. w1 d5. ; name is not note: am -2000 am. (f13.+2000); w1 := tail := first free core; al w3 2 ; w3 := addr(area name); jd 1<11+42 ; lookup entry; sn w0 0 ; if result <> 0 then jl. a46. ; begin sn w0 6 ; if name format illegal then jl. a50. ; abs core addr: goto ready; a45: al. w1 b6. ; unknown: mess name(<:unknown); al w2 1 ; am -2000 rs. w2 f23.+2000 ; fpresult:=1; jl. w3 c13. ; goto exit fp jl. d3. ; end; \f ; rc 1977.09.14 fp utility, print, page...17... a46: bz w0 x1+16 ; descriptor found: am -2000 bz. w2 i1.+2000 ; se w2 6 ; if content <> 6 then am -2000 hs. w0 i1.+2000 ; content := tail(16); rl w0 x1 ; sl w0 0 ; if tail(0) >= 0 then jl. a47. ; goto prepare area process; al w3 x1+2 ; w3 := addr(document name); al. w1 d13. ; w1 := first free core + 10; jd 1<11+42 ; lookup entry; se w0 0 ; if result <> 0 then jl. a45. ; goto unknown; a47: jd 1<11+52 ; prepare area process: se w0 0 ; create area process; jl. d4. ; if result <> 0 then dl w1 x3+2 ; goto area alarm; am -2000 ds. w1 f17.+2+2000; dl w1 x3+6 ; move name to name part am -2000 ds. w1 f17.+6+2000; of input description; am -2000 bz. w0 i1.+2000 ; am -2000 rl. w1 f9.+2000 ; sn w1 0 ; se w0 7 ; if first number <> 0 or content <> 7 then jl. d12. ; goto start print; al w0 0 ; w0 := 0; hs. w0 i17. ; blocked := false; jl. w2 c25. ; setposition; jl. w3 c26. ; am -2000 ; rl. w0 f10.+2000 ; get word; am -2000 ; rs. w0 f9.+2000 ; first number := current word; d12: am -2000, rl. w2 f16.+2000 ; start print: restore command pointer; al w0 1 ; hs. w0 i14. ; bs area := true; jl. a48. ; goto all1; a65: ; procedure prepare entry for textoutput ; w0 not used ; w1 lookup area ; w2 name addr, entry must be present ; w3 return addr b. a2 w. ds. w1 a1. ; save w0.w1 ds. w3 a2. ; save w2.w3 al w3 x2 ; w3:=name addr jd 1<11+42 ; lookup bz w2 x1+16 ; sh w2 32 ; if contents=4 or sn w2 4 ; contents>=32 jl. 4 ; then jl. a0. ; file:=block:=0; rs w0 x1+12 ; rs w0 x1+14 ; a0: rs w0 x1+16 ; contents.entry:=0; rs w0 x1+18 ; loadlength:=0; dl w1 110 ; ld w1 5 ; shortclock; rl. w1 a1. ; rs w0 x1+10 ; jd 1<11+44 ; changeentry; dl. w1 a1. ; restore w0,w1 dl. w3 a2. ; restore w2,w3 jl x3 ; return 0 ; saved w0 a1: 0 ; saved w1 0 ; saved w2 a2: 0 ; saved w3 e. d1 = k - d0 , d5 = k, d6 = k + 512, d13 = k + 10 0 ; zero, to terminate program segment i. ; id list e. ; end segment: print m.rc 1985.03.26 fp utility, print m0=k-h55 m1=4; entry g0:g1: (:m0+511:)>9 ; segm 0,r.4 s2 ; date 0,0 ; file, block 2<12+m1 ; contents, entry m0 ; length d. p.<:insertproc:> ▶EOF◀