|
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: 61440 (0xf000) Types: TextFile Names: »ftnpass03tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »ftnpass03tx «
\f ; fgs 1983.08.29 fortran, pass 0, page 1 ; b. h99 ; fp names; this block head must always ; w. ; be loaded from somewhere, before pass 0 text; b. w. d. p. <:fpnames:> l. b. e107 ; begin block fortran translator; ;************************************************ ;* * ;* Remember : * ;* * ;* update e103, e104 and e105 : * ;* * ;* compiler version, release and releasedate * ;* * ;************************************************ w. ; e15 = 0 ; special testoutput, 1<0 => pass0, 1<9 => pass9; e18 = h35 ; fp console message; e22 = h20 ; fp current input zone descriptor (fp = file processor); e25 = h19 ; fp current program zone descriptor; e28 = h22 ; fp input block; e31 = h27 ; fp connect input; e32 = h7 ; fp end program; e33 = h26 ; fp outchar; e34 = h31 ; fp outtext; e35 = h32 ; fp outinteger; e37 = h65 ; end fp with break; e39 = 512 ; segment length of object program; e43 = h21 ; fp current output zone descriptor; e44 = h29 ; fp stack zone; e45 = h30 ; fp unstack zone; e48 = h0 ; fp start buffer and share description; e49 = h1 ; fp start process description; e50 = h2 ; fp start status handling description; e51 = h3 ; fp start record description of zone; e52 = h5 ; fp length of zone descriptor; e53 = h6 ; fp length of share descriptor; e54 = h4 ; fp start of users parameters; e55 = h54 ; fp lookup area e57 = h10 ; fp interrupt address; e58 = h17 ; fp parent description; \f ; fgs 1985.09.26 fortran, pass 0, page 1aa c. h57<2 ; if system 2 then begin e60 = h52 ; fp first note; e61 = h53 ; fp last note + 22; z. ; end system 2 c. h57<3 ; if system 3 then begin e61 = h53 ; size of available area in front of zone buffer; z. ; end system 3 e63 = h8 ; fp current command; e65 = h15 ; fp console description address; e66 = h16 ; fp own process description address; e67 = h79 ; fp terminate zone; e68 = h55 ; fp base program; e70 = h51 ; fp mode bits; ; e74: ; double word holding date and time e77 = h57 ; monitor version (may be 2 or 3) e78 = h28 ; fp connect output e88 = h33 ; fp outend e80 =(:-4:)<1+0; standard size and document for workarea (see fp connect) e81 = 0<1+0 ; - - - - - sortarea - - - e82 = 1 ; error message basis for pass1 e83 = e82+10; error message basis for pass2 e84 = e83+ 2; error message basis for pass3 e85 = e84+ 9; error message basis for pass4 e86 = e85+15; error message basis for pass5 c. h57<2 ; if system 2 then begin e99 = h10+14; fp break routine e100 = 14 ; bytes in reg dump area z. ; end system 2 c. h57<3 ; if system 3 then begin e99 = h10+h76; fp break routine e100 = h76 ; bytes in reg dump area z. ; end system 3 e103= 2 ; compiler version e104= 2<12 + 0 ; compiler release<12 + subrelease e105=1985<12 + 1101 ; compiler release date e106= 1 ; smallest version number in external accepted by pass9 m. fortran, pass 0 redefine e-names t. \f ; fgs 1983.05.17 fortran, pass 0, page 1a s. c71, d30, f31, h5, j2 ; begin pass 0 segment; w. ; k = 10000+ e68 ; k has this value to provoke slang test of ; relative adresses; e38: h5 ; length of entire pass 0 (hwds), translator length; 0 ; dummy word (slang); jl. d22. ; entry pass 0: goto initialize translator; e103 ; compiler version \f ; rc 22.12.1969 fortran, pass 0, page 2 b. a14, b21 ; begin block: next pass, print char, print text, print integer; w. ; d7: 9 ; stop pass; b5: 0 ; pass no; b4: 1<21 ; interrupt mask (pass 0); d21: 0 ; abs address of segment (program process description(16)); d27: 0 ; abs address of first core (program share descriptor(2)); d23: 0 ; abs address of last core (program share descriptor(10)); d24: 0 ; abs address of program zone descriptor; c7: rl. w0 b4. ; next pass: w0 := interrupt mask(pass 0); al. w3 d29. ; w3 := interrupt address (pass 0); jd 1<11 ; set interrupt; rl. w0 b5. ; sn. w0 (d7.) ; if pass no = stop pass then jl. d0. ; goto end translation; am. (d24.) ; bz w0 e49+1 ; se w0 4 ; if kind of translator medium <> 4 then jl. a2. ; goto next pass from tape; rl. w1 e38. ; next pass from backing store: ld w2 -9 ; segment := rs. w1 (d21.) ; translator length//512; ls w2 -15 ; from core := translator length mod 512; al. w1 c0. ; first core := first free core; rs. w1 (d27.) ; al w1 x1+510 ; last core := first core + 510; rs. w1 (d23.) ; rl. w1 d24. ; w1 := program zone descriptor address; jl. w3 (d13.) ; input block; comment: fp entry; al. w1 c0. ; to core := first free core; rl. w0 e38. ; wa. w0 x2+c0. ; translator length := rs. w0 e38. ; translator length + pass length; rl. w3 x2+c0. ; remaining := pass length; \f ; rc 17.4.1969 fortran, pass 0, page 3 a0: sn w3 0 ; move words: jl. a3. ; if remaining = 0 then goto prepare pass; sn w2 512 ; if from core = 512 then jl. a1. ; goto transfer segments; rl. w0 x2+c0. ; word(to core) := rs w0 x1 ; word(first free core + from core); al w1 x1+2 ; to core := to core + 2; al w2 x2+2 ; from core := from core + 2; al w3 x3-2 ; remaining := remaining - 2; jl. a0. ; goto move words; a1: al w2 x3-1 ; transfer segments: ls w2 -9 ; ls w2 9 ; first core := to core; al w2 x2+510 ; last core := first core + 510 + wa w2 2 ; (remaining - 1)//512*512; rs. w1 (d27.) ; sl. w2 (f26.) ; if last core >= last work for pass then jl. a12. ; alarm(<:pass trouble:>); rs. w2 (d23.) ; rl. w1 d24. ; w1 := program zone descriptor address; jl. w3 (d13.) ; input block; comment: fp entry; jl. a3. ; goto prepare pass; a12: jl. w3 d8. ; alarm pass trouble: al. w3 d14. ; print linehead; al w2 1 ; set return(break); w2 := 1; jl. w1 c13. ; writetext(<:pass trouble:>); <:pass trouble<0>:>; a2: al. w0 c0. ; next pass from tape: rs. w0 (d27.) ; first core := first free core; rl. w0 f26. ; rs. w0 (d23.) ; last core := last work for pass ; rl. w1 d24. ; w1 := program zone descriptor address; jl. w3 (d13.) ; input block; comment: fp entry; d28: am. (c0.) ; test pass length; last of pass := al. w3 d11. ; first free core + pass length - 1; se w3 (x1+e51+2) ; if last of pass <> last byte(record) then jl. a12. ; goto alarm pass trouble; a3: bz. w0 d6. ; prepare pass: ls w0 -1 ; pass no := rs. w0 b5. ; bits(12,22,second word of pass); se w0 11 ; if pass no = 11 then jl. a13. ; begin rl. w2 c17. ; if -,branch then so w2 1<9 ; goto next pass; jl. c7. ; end; a13: sh w0 15 ; if pass no > 15 or pass no < 1 then sh w0 0 ; goto alarm pass trouble; jl. a12. ; \f ; rc 23.3.1969 fortran, pass 0, page 4 al. w2 c0. ; pass entry := bz. w1 d10. ; first free core + bits(0,11,second word of pass); wa w2 2 ; comment: the address is calculated in rs. w2 b11. ; this funny way to give a 24-bits rl. w1 d6. ; not negative number; sz w1 1 ; if bit(23,second word of pass) = 1 then jl. a4. ; goto change direction; sn w0 1 ; if pass no = 1 then jl. a9. ; goto update; jl. w3 c8. ; output segment; rl. w0 f13. ; bs. w0 h0. ; segment(byte input) := rs. w0 f13. ; segment(byte input) - increment; jl. w3 d9. ; input segment; rl. w1 f4. ; al w1 x1+1 ; rs. w1 f4. ; used segments := used segments + 1; rl. w0 f3. ; rs. w0 f2. ; current inaddress := last inaddress; jl. a8. ; goto print information; a4: al w1 12 ; change direction: index := 12; a5: rl. w0 x1+f22. ; exchange next: rx. w0 x1+f23. ; swap(byte input description(index), rs. w0 x1+f22. ; byte output description(index)); al w1 x1+2 ; index := index + 2; se w1 24 ; if index <> 24 then jl. a5. ; goto exchange next; dl. w1 f1. ; w0 := current outaddress; ws. w1 b10. ; w1 := last outaddress - buffersize; rl. w2 f3. ; w2 := last inaddress; rl. w3 f3. ; w3 := last inaddress - buffersize; ws. w3 b10. ; current inaddress := w0; ds. w1 f3. ; last inaddress := w1; ds. w3 f1. ; current outaddress := w2; ac. w0 (b10.) ; last outaddress := w3; rs. w0 b10. ; buffersize := -buffersize; ac. w0 (h0.) ; hs. w0 h0. ; increment := -increment; jl. w3 c11. ; repeat input byte; jl. a8. ; goto print information; b10: 511 ; buffersize ; b11: 0 ; pass entry ; \f ; fgs 1983.05.17 fortran, pass 0, page 5 e69: ; d15: al w2 1 ; backing store fault: ls w2 (0) ; sn w0 1 ; w2 := 1 shift result; wa w2 x1 ; if result = 1 then w2 := w2 + statusword; rs. w3 c60. ; save addr of area name; d14: rs. w2 f9. ; break: sorry := w2; rl. w3 c60. ; w3 := saved addr of area name; d18: al w2 0 ; finis translation: rx. w2 f24. ; w2 := message buffer address(byte input); al. w1 d17. ; w1 := answer address; se w2 0 ; if w2 <> 0 then jd 1<11+18 ; wait answer; al w2 0 ; rx. w2 f25. ; w2 := message buffer address(byte output); se w2 0 ; if w2 <> 0 then jd 1<11+18 ; wait answer; rl. w2 f9. ; al. w1 b21. ; text := addr(<:ftn. end:>); sn w2 0 ; if -,sorry then jl. a14. ; goto ok; al. w3 f23. ; w3 := address(name of output area); c. e77 < 3 ; if system 3 then begin al. w1 c71. ; w1 := tail address; jd 1<11+42 ; lookup entry (work area); rl. w1 f4. ; tail(1) := used segments; rs. w1 c71. ; al. w1 c71. ; w1 := tail address; jd 1<11+44 ; change entry (work area); z. ; end system 3; al. w1 b13. ; text := addr(<:***fortran sorry:>); a14: rl. w0 c17. ; ok: w0 := modebits; sz w0 1<7 ; if work area created by pass 0 jd 1<11+48 ; then remove entry; jl. w3 c13. ; writetext(string text); rl. w3 e87. ; sn w3 2 ; if warning.yes then al w2 x2+2 ; add warning bit to w2; \f ; fgs 1983.05.17 fortran, pass 0, page 5a al w0 32 ; writesp; jl. w3 c12. ; rl. w0 f4. ; write(<<d>, used segments); jl. w3 c14. ; 32<12 + 1 ; al. w3 f23. ; w3 := addr(name of output area); jd 1<11+64 ; remove process(name of byte input area); al w0 10 ; jl. w3 c12. ; writechar(<new line>); rl. w1 c60. ; w1 := saved address of areaname; al w3 x1 ; se w3 0 ; if addr(saved area name) <> 0 then jd 1<11+64 ; remove process(saved area); am. (c23.) ; b1 = k + 1; end program ; jl e32 ; goto fpbase + end program; b21: <:<10>fortran end<0>:>; b13: <:<10>***fortran sorry<0>:>; \f ; fgs 1983.12.28 fortran, pass 0, page 5b d29: 0,0,0,0,0,0,0 ; interrupt address: jl. 2,r.(:d29.+e100+2:)>1; extend dump area al. w2 d29. ; interrupt: w2 := interrupt address; c36: al w0 0 ; interrupt service: rl. w3 c23. ; set interrupt (0, al w3 x3+e57 ; fp interrupt service); jd 1<11+0 ; al w1 x2+e100-1 ; a6: rl w0 x2 ; move next: w0 := word(w2); rs w0 x3 ; word(w1+fp interrupt address) := w0; al w3 x3+2 ; w3 := w3+2; al w2 x2+2 ; w2 := w2+2; sh w2 x1 ; if w1 <= interrupt addr + (breaksize-1) then jl. a6. ; goto move next; c. e77<3 ; if system3 then begin rl. w3 c23. ; w3 := fp base; am (x3+e57+10); if break instruction = ks bl w0 -2 ; then enter fp break routine h. sn w0, ks w. ; comment if fp is not present jl x3+e99 ; a break will happen z. al w1 e99 ; hs. w1 b1. ; end program := fp break; jl. w3 d5. ; print line; al w2 1 ; w2 := 1; al w3 0 ; addr(area name) := 0; rs. w3 c60. ; save addr of area name; jl. d14. ; goto break; \f ; rc 78.03.02 fortran, pass 0, page 6 d0: al. w0 d18. ; end translation: rs. w0 b11. ; pass entry := finis translation; a8: rl. w0 c17. ; print information: am. (b5.) ; se w3 x3 ; if pass no = 0 so w0 1<2 ; or -,survey then jl. a9. ; goto update; jl. w3 d8. ; print linehead; rl. w0 f10. ; jl. w2 d19. ; write(8,sum 0); rl. w0 f11. ; jl. w2 d19. ; write(8,sum 1); rl. w0 f4. ; jl. w2 d20. ; write(4,used segments); rl. w0 c9. ; jl. w2 d20. ; write(4, inf 1); rl. w0 f16. ; jl. w2 d20. ; write(4,inf 2); a9: ; update: am. (c23.) ; jl w3 e88-6 ; outend; rl. w0 b14. ; rl. w1 b5. ; outside pass interval := false; rs. w1 f31. ; pass := pass no; dl. w3 c18. ; sl w1 x2 ; if pass no < lower pass no sl w1 x3+1 ; or pass no > upper pass no rl. w0 b15. ; then outside pass interval := true; d3: rs. w0 j1. ; comment: see carret; al w0 1 ; w0 := 1; bl. w3 h0. ; rl. w2 d6. ; if backward pass then se w3 -1 ; begin jl. a11. ; w0 := old linecounter; rl. w0 b16. ; if change direction then sz w2 1 ; w0 := linecounter rl. w0 f8. ; end; a11: rs. w0 b16. ; old linecounter := w0; bs. w0 h0. ; w0 := w0 - increment; rs. w0 f8. ; linecounter := w0; al w0 0 ; rs. w0 f14. ; linecounter 1 := 0; rs. w0 c9. ; inf 1 := 0; rs. w0 f16. ; inf 2 := 0; al w0 -1-1<5 ; la. w0 c17. ; rs. w0 c17. ; testoutput := false; jl. w3 c1. ; carret; comment: to test lineinterval; rl. w0 f0. ; bs. w0 h0. ; current outaddress := rs. w0 f0. ; current outaddress - increment; jl. (b11.) ; goto word(pass entry); b14: jl. h1 ; outside pass interval = false; b15: rx. w1 h2 ; outside pass interval = true; b16: 0 ; old linecounter; \f ; rc 25.3.1969 fortran, pass 0, page 7 d19: am 4 ; write(8,w0): d20: al w1 4 ; write(4,w0): hs. w1 a10. ; set positions in layout; rx. w0 b17. ; swap(w0,space); jl. w3 c12. ; writechar; rx. w0 b17. ; swap(w0,space); jl. w3 c14. ; writeinteger; a10 = k + 1 ; digits ; 32<12 ; jl x2 ; return; b17: 32 ; space ; c12: ds. w1 b18. ; printchar: ds. w3 b19. ; save(w0,w1,w2,w3); rl w2 0 ; w2 := w0; am. (c23.) ; jl w3 e33-2 ; outchar; comment: fp current output; dl. w1 b18. ; dl. w3 b19. ; restore(w0,w1,w2,w3); jl x3 ; return; c13: ds. w1 b18. ; print text: ds. w3 b19. ; save(w0,w1,w2,w3); al w0 x1 ; w0 := w1; am. (c23.) ; jl w3 e34-2 ; outtext; comment fp current output; dl. w1 b18. ; dl. w3 b19. ; restore(w0,w1,w2,w3); jl x3 ; return; c14: ds. w1 b18. ; print integer: ds. w3 b19. ; save(w0,w1,w2,w3); rl w2 x3 ; rs. w2 b20. ; layout := word(return); am. (c23.) ; jl w3 e35-2 ; outinteger; comment fp current output; b20: 0 ; layout ; dl. w1 b18. ; dl. w3 b19. ; restore(w0,w1,w2,w3); jl x3+2 ; return; 0 ; saved w0 ; b18: 0 ; saved w1 ; 0 ; saved w2 ; b19: 0 ; saved w3 ; e. ; end block: next pass, print char, print text, print integer; \f ; rc 78.04.28 fortran, pass 0, page 8 b. a3, b12 ; begin block: test line, byte sums, w. ; print linehead, print w0, print line; d1: ds. w3 b3. ; test line: rx. w0 c17. ; save(w2,w3); lo. w0 b1. ; testoutput := true; dl. w3 c19. ; comment: carret sets w1 = linecounter; sl w1 x2 ; if linecounter < lower line no sl w1 x3+1 ; or linecounter > upper line no bs. w0 b0. ; then testoutput := false; rx. w0 c17. ; comment: testoutput = modebit(18); rl. w2 b2. ; restore(w2); rx. w1 f8. ; swap(linecounter,w1); comment see j1; jl. (b3.) ; return; d2: ds. w0 b3. ; byte sums: bz w3 1 ; am. (f10.) ; comment: the instruction al w3 x3 al w3 x3 ; is used to avoid integer overflow; rs. w3 f10. ; sum 0 := sum 0 + right(w0); am. (f11.) ; sum 1 := sum 0 + sum 1; al w3 x3 ; rs. w3 f11. ; rl. w3 c17. ; b0 = k+1 ; 1<5 ; so w3 1<5 ; if testoutput then jl. a2. ; begin jl. w3 c16. ; print w0; al w0 32 ; outchar(space); jl. w3 c12. ; end; a2: dl. w0 b3. ; restore(w3,w0); rx. w2 f0. ; swap(current outaddress,w2); jl. d16. ; goto test outaddress; b1: 1<5 ; b2: 0 ; saved w b3: 0 ; saved w d8: ds. w1 b4. ; print linehead: rs. w3 b5. ; save(w0,w1,w3); al w0 10 ; rs. w0 f15. ; printcount := 10; jl. w3 c12. ; writechar(<new line>); al. w1 b10. ; w1 := address(<: :>); rl. w0 f31. ; sh w0 -1 ; if pass no > -1 then jl. a0. ; begin jl. w3 c14. ; writeinteger(<:dd:>,pass no); 32<12 + 2 ; w1 := address(<:. :>) al. w1 f12. ; end; a0: jl. w3 c13. ; writetext; al w0 -1 ; pass no := -1; rs. w0 f31. ; dl. w1 b4. ; restore(w0,w1); jl. (b5.) ; return; 0 ; saved w0 ; b4: 0 ; saved w1 ; b5: 0 ; saved w3 ; b10: <: :> ; f12: <:. :> ; f10: 0 ; sum 0 ; f11: 0 ; sum 1 ; f31: 0 ; pass ; \f ; rc 78.04.28 fortran, pass 0, page 9 c16: ds. w0 b7. ; print w0: rl. w3 f8. ; save(w0,w3); se. w3 (f14.) ; if linecounter <> linecounter 1 then jl. w3 d5. ; print line; rl. w3 f15. ; al w3 x3+1 ; printcount := printcount + 1; sh w3 9 ; if printcount > 9 then jl. a1. ; begin jl. w3 d8. ; print linehead; al w3 0 ; printcount := 0; a1: rs. w3 f15. ; end; bz w0 1 ; byte := right(w0); jl. w3 c14. ; writeinteger(<:ddddd:>,w0); 32<12+5 ; rl. w0 b7. ; restore(w0); jl. (b6.) ; return; b6: 0 ; saved w3 ; b7: 0 ; saved w0 ; d5: rs. w3 b9. ; print line: rs. w1 b8. ; save(w1,w3); jl. w3 d8. ; print linehead; al. w1 b11. ; jl. w3 c13. ; writetext(<:line:>); jl. w3 c27. ; print linecount; al. w1 b12. ; jl. w3 c13. ; writetext(<:<32><32>:>); rl. w3 f8. ; rs. w3 f14. ; linecounter 1 := linecounter; rl. w1 b8. ; restore(w1); jl. (b9.) ; return; b8: 0 ; saved w1 ; b9: 0 ; saved w3 ; b12: <:<32><32>:> ; f14: 0 ; linecounter 1; b11: <:line<0>:> ; d30: ds. w0 b3. ; print inbyte: bz. w0 b0. ; la. w0 c17. ; if details then so. w0 (b1.) ; jl. a3. ; begin al w0 x2 ; w0 := inbyte; jl. w3 c16. ; print w0; al w0 42 ; outchar(asteriks); jl. w3 c12. ; end; a3: dl. w0 b3. ; restore(w3,w0); jl x3 ; return; e. ; end block: test line, bytesums, print linehead, printw0, print line; \f ; rc 22.12.1969 fortran, pass 0, page 10 ; procedure wait segment(i/o description); ; if message buffer address = 0, the function is empty; otherwise ; a wait answer is performed, defined by message buffer address, ; segment is increased by increment and (first core,last core) and ; (other first core, other last core) are exchanged; ; call: w3 := description address; jl. w2 d12. ; ; exit: all registers unchanged; b. a2, b0 ; begin block: wait segment; w. ; c59: ; d12: am (x3+22) ; wait segment: sn w3 x3 ; if message buffer address = 0 then jl x2 ; return; ds. w1 b0. ; save(w0,w1); rx w2 x3+22 ; swap(w2,message buffer address); a1: al. w1 d17. ; repeat: w1 := answer address; jd 1<11+18 ; wait answer; al w2 0 ; w2 := 0; sn w2 (x1) ; if status word <> 0 se w0 1 ; or result <> 1 then jl. a0. ; goto bad answer; am (x1+2) ; if bytes transferred = 0 then se w3 x3 ; begin jl. a2. ; w1 := message address; al w1 x3+10 ; send message; jd 1<11+16 ; goto repeat; jl. a1. ; end; a2: rx w2 x3+22 ; swap(w2,message buffer address); dl w1 x3+20 ; rx w0 x3+12 ; swap(first core, other first core); rx w1 x3+14 ; swap(last core, other last core); ds w1 x3+20 ; rl w0 x3+16 ; ba. w0 h0. ; segment := segment + increment; sh w0 -1 ; if segment <= -1 then wa. w0 f5. ; segment := segment + available segments; sl. w0 (f5.) ; if segment >= available segments then ws. w0 f5. ; segment := segment - available segments; rs w0 x3+16 ; dl. w1 b0. ; restore(w0,w1); jl x2 ; return; a0: rs w2 x3+22 ; bad answer: message buffer address := 0; jl. d15. ; goto backing store fault; d17: 0,0,0,0,0,0,0,0 ; answer; 0 ; saved w0 ; b0: 0 ; saved w1 ; e. ; end wait segment ; \f ; rc 10.3.1969 fortran, pass 0, page 11 b. a1, b3 ; begin block: next segment; w. ; d4: ds. w2 b2. ; next segment: save(w1,w2); rs w3 x2+10 ; last address := w3; rl w3 x2+12 ; w3 := address of i/o description; rl. w2 f4. ; wa w2 x3+24 ; used segments := rs. w2 f4. ; used segments + segment increment; sh. w2 (f5.) ; if used segments > available segments then jl. a0. ; begin comment: work area exceeded; al. w1 b0. ; w1 := address of alarm text; jl. c5. ; alarm(<:program too big:>) ; end; a0: jl. w2 d12. ; wait segment; al w1 x3+10 ; w1 := message address; jd 1<11+16 ; send message; rs w2 x3+22 ; address of message buffer := w2; bl. w1 h0. ; w2 := other first core; dl w3 x3+20 ; w3 := other last core; lo. w3 b3. ; w3 := w3 or boolean 1 ; comment: odd address; sn w1 -1 ; if increment = -1 then rx w2 6 ; swap(w2,w3); comment: backward pass; am. (b2.) ; rx w3 10 ; swap(w3,last address); rl. w1 b1. ; restore(w1); am. (b2.) ; return address := return address + 2; jl 2 ; return; b0: <:program too big<0>:> ; b1: 0 ; saved w1 ; b2: 0 ; saved w2 ; b3: 1 ; boolean 1 ; e. ; end block: next segment; \f ; rc 24.02.1972 fortran, pass 0, page 12 ; byte input description: f22: 0,0,0,0,0 ; 0 name and name table address; 3<12 ; 10 operation = input; f6: 0 ; 12 first core; f7: 0 ; 14 last core; f13: 1 ; 16 segment; 0 ; 18 other first core; f17: 0 ; 20 other last core; f24: 0 ; 22 message buffer address; -1 ; 24 segment increment; ; byte output description: f23: 0,0,0,0,0 ; 0 name and name table address; 5<12 ; 10 operation = output; f18: 0 ; 12 first core; f19: 0 ; 14 last core; f20: 0 ; 16 segment; 0 ; 18 other first core; f21: 0 ; 20 other last core; f25: 0 ; 22 message buffer address; 1 ; 24 segment increment; e79=f23 ; address of pass0 work area name; \f ; fgs 1983.05.17 fortran, pass 0, page 13 ; the official pass 0 - entries (i.e. references using e-names) ; are found in the following (resident) part of pass 0; e107: <:algftnrts<0>:> ; name of runtime system 0 ; name table address 0 ; date e74: 0 ; time c71: 0, r.10 ; work area c60: 0 ; saved area name; b. b2 ; begin block: carret, alarm, message, repeat w. ; input byte, outbyte, inbyte, print linecount; ; procedure carret; ; the routine increases the linecounter by increment; if then ; the linecounter belongs to lineinterval and pass no belongs to ; passinterval, the boolean testoutput is set to true, otherwise ; it is set to false; ; call: jl. w3 e1. ; ; exit: w0,w1,w2 unchanged; c1: ; e1: rx. w1 f8. ; carret: ba. w1 h0. ; linecounter := j1: rx. w1 f8. ; linecounter + increment; jl x3 ; if outside passinterval then return ; else goto test line; h1 = d1 - j1 ; comment : see d3, where j1: rx. w1 f8. is modif; ; procedure message; ; the routine prints the string: <linehead>line<linecounter><text>; ; call: w1 := address of <text>; jl. w3 e4. ; ; exit: w0,w1,w2 unchanged ; ; procedure alarm; ; the routine works as message, but terminates the translation; ; call: w1 := address of <text>; jl. e5. ; c5: ; e5: al w3 1 ; alarm: rs. w3 f9. ; sorry := 1; al w3 2 ; set rs. w3 e87. ; warning.yes al. w3 d0. ; set return(end translation); c4: ; e4: rs. w3 b0. ; message: save(return); jl. w3 d5. ; print line; jl. w3 c13. ; writetext; jl. (b0.) ; return; b0: 0 ; saved return ; ; procedure repeat input byte; ; the routine decreases current inaddress by increment; ; call: jl. w3 e11. ; ; exit: w0,w1,w2 unchanged; c11: ; e11: rx. w3 f2. ; repeat input byte: bs. w3 h0. ; current inaddress := rx. w3 f2. ; current inaddress - increment; jl x3 ; return; \f ; fgs 1983.06.20 fortran, pass 0, page 14 ; procedure outbyte; ; the routine outputs the rightmost byte of w0 to work; if pass infor- ; mation (survey) is wanted, then sum and double sum of all bytes ; are calculated; if pass no belongs to pass interval and linecounter ; belongs to lineinterval, then the byte is printed also; ; call: w0 := byte to be output; jl. w3 e3. ; ; exit: w0,w1,w2 unchanged; e3: c3: ; j0: rx. w2 f0. ; outbyte: if passinf then goto byte sums ; jl. d2. ; else swap(w2,current outaddress); d16: sn. w2 (f1.) ; test outaddress: e8:c8:jl. w2 d4. ; if current outaddress = last outaddress then h0 = k+1 ; increment ; output segment: next segment; comment see below; al w2 x2+1 ; w2 := w2 + increment; hs w0 x2 ; return from next segment: byte(w2) := right(w0); rx. w2 f0. ; swap(w2,current outaddress); jl x3 ; return; f0: 0 ; e20-4 ; current outaddress; f1: 0 ; e20-2 ; last outaddress; warning: next segment uses x2+10; e20:c20:0; ; output description; warning: - - - x2+12; h3 = d2 - j0 ; ; procedure inbyte; ; the routine supplies the next byte from work; ; call: jl. w2 e2. ; ; exit: w2 = inputbyte; left(w2) = 0; w0,w1 unchanged; c2: ; e2: rl. w2 f2. ; inbyte: sn. w2 (f3.) ; if current inaddress = last inaddress then e90: d9: jl. w2 d4. ; input segment: next segment; comment: see below; ba. w2 h0. ; current inaddress := current inaddress + increment; rs. w2 f2. ; return from next segment: bz w2 x2 ; w2 := byte zeroes(current inaddress); j2: jl x3 ; return; ; jl. d30. ; (if inbyte-details wanted then print inbyte) f2: 0 ; e21-4 ; current inaddress; f3: 0 ; e21-2 ; last inaddress; warning: next segment uses x2+10; e21:c21:0; ; input description; warning: - - - x2+12; ; procedure print linecount; ; the routine prints the integer linecount; ; call: jl. w3 e27. ; ; exit: w0,w1,w2 unchanged; c27: ; e27: ds. w0 b2. ; print linecount: rl. w0 f8. ; save(w0,w3); jl. w3 c14. ; w0 := linecounter; 32<12+5 ; writeinteger(<:ddddd:>,w0); rl. w0 b2. ; restore(w0); jl. (b1.) ; return; b1: 0 ; saved w3 ; b2: 0 ; saved w0 ; e. ; end block: carret, alarm, message, repeat input byte, ; outbyte, inbyte, print linecount; \f ; fgs 1983.12.28 fortran, pass 0, page 15 h2 = k - j1 ; e6: f8: 0 ; linecount; e7: jl. c7. ; end pass: goto next pass; f4: 0 ; e9-4 used segments; f5: 0 ; e9-2 available segments; e9: c9: 0 ; e9 inf 1 (pass information); f16: 0 ; e9+2 inf 2 (pass information); f26: 0 ; e9+4 last work for pass; e10: <:process too small<0>:> ; alarm text; e12: jl. c12. ; writechar: goto printchar; e13: jl. c13. ; writetext: goto printtext; e14: jl. c14. ; writeinteger: goto printinteger; e16: jl. c16. ; print byte: goto print w0; e17: c17: 1<13+1<12+1<8+1<3+1<1; modebits1: fp.yes + connect.yes + note suppl by fp.yes + ; index.yes + message.yes e29: 1<5+1<1+1<0 ; modebits2: fortran.yes + warning.yes+truncate.yes 0 ; e19-6 lower pass no in passinterval; c18: 0 ; e19-4 upper pass no in passinterval; 1 ; e19-2 lower line no in lineinterval; e19:c19: 1<22 ; e19 upper line no in lineinterval; jl. d8. ; e19+2 goto print linehead; e23:c23: 0 ; fileprocessor base; e24: 0 ; fileprocessor result note; e26: jl. d0. ; terminate translation: goto end translation; e36: jl. c36. ; interrupt from passes: goto interrupt service; e40:f9: 0 ; sorry (answer to fileprocessor); e41: 1<21 ; interrupt mask (pass 7, object code); e42:f15: 0 ; printcount; e46: 0 ; start source name list (pass 1); e47: 0 ; start branch interval list(pass 1.1); e59: jl. c59. ; wait segment: goto wait segment; e62:d13: 0 ; abs address of entry inblock (fileprocessor entry); e87: 0 ; warning e102 = f11 ; double (sum1, sum2); e0 = k, c0 = k ; the current pass will be loaded here: d11 = c0 - 1 ; d10 = c0 + 2 ; d6 = c0 + 3 ; ; first free core: \f ; fgs 1983.05.17 fortran, pass 0, page 16 b. a35, b40 ; begin block: initialize translator; w. ; b0: -2 ; b1: 0 ; top command (address of the command ftn. ); d22: rs. w1 c23. ; initialize translator: la. w3 b0. ; fpbase := w1; rs. w3 b1. ; top command := w3 and -2; comment: even address; rl. w0 e41. ; w0 := interrupt mask (1 shift 21); al. w3 d29. ; w3 := interrupt address (pass 0); jd 1<11 ; set interrupt; rl. w3 b1. ; restore w3; bz w0 x3 ; al. w2 f22. ; w2 := address of zero name in input descr; se w0 6 ; if command ftn. not preceded by <=> then jl. a1. ; goto no result area; am. (c23.) ; al w1 e55 ; w1 := addr of fp lookup area; al w3 x3-8 ; w3 := addr of result name in command stack; rs. w3 c60. ; save addr of area name; jd 1<11+42 ; lookup entry (outfile); se w0 0 ; if found then jl. a33. ; begin rl w2 x1 ; sl w2 0 ; if modekind < 0 and jl. a34. ; bz w2 x1+1 ; se w2 4 ; modekind <> bs then jl. a4. ; goto error; a34: rs w0 x1+12 ; clear tail (12:18); rs w0 x1+14 ; rs w0 x1+16 ; rs w0 x1+18 ; jd 1<11+44 ; change entry (result name); a33: ; end; al w2 x3 ; w2 := address of result area name in cmnd stack; c. e77 < 2 ; if system 2 then begin rl w0 x2 ; w0 := first word of name; al w3 x1+e60+4 ; w3 := address of document name(first fp note); a0: sn w0 (x3-4) ; may be next note: jl. a2. ; if w0 = name of current note then ; goto get work area; al w3 x3+22 ; current note := current note + 1; w3 := w3 + 22; sh w3 x1+e61 ; if current note <= last fp note then jl. a0. ; goto may be next note; z. ; end system 2; \f ; fgs 1983.05.17 fortran, pass 0, page 16a a1: al w0 -1-1<8 ; no result area: la. w0 c17. ; rs. w0 c17. ; note supplied by fp := false; al w3 x2 ; w3 := w2; a2: al w0 x3-4 ; get work area: rs. w0 e24. ; save address(result note); al w2 x3 ; w2 := addr of name; rl w0 x2 ; w0 := first part of name; se w0 0 ; if w0 = 0 then jl. a3. ; begin al w0 1<7 ; work area created by pass 0 := true; lo. w0 c17. ; rs. w0 c17. ; c. e77 < 2 ; if system 2 then begin al. w1 d25. ; w1 := tail address; jd 1<11+40 ; create entry (work name); se w0 0 ; if result <> 0 then goto error; jl. a4. ; end; z. ; end system 2; a3: al w1 0 ; comment: no zone; al w0 e80 ; comment: take standard actions for workarea; am. (c23.) ; jl w3 +e78 ; connect output; se w0 0 ; if connect trouble then jl. a4. ; goto error; dl w1 x2+4 ; move name of workarea to ds. w1 f22.+2 ; name parts of ds. w1 f23.+2 ; byte i-o descriptions; dl w1 x2+8 ; ds. w1 f22.+6 ; ds. w1 f23.+6 ; \f ; fgs 1983.05.17 fortran, pass 0, page 17 al w3 x2+2 ; process description(work area); rs. w3 c60. ; save addr of area name; jd 1<11+8 ; reserve process(workarea); jd 1<11+4 ; se w0 0 ; if process does not exist then jl. a5. ; begin a4: al w2 1 ; error: w2 := error, other reason; al. w3 d14. ; set return (break); jl. w1 c13. ; outtext (<:***fortran object area:>); <:***fortran object area<10><0>:> ; ; end; a5: am (0) ; comment: find number of segments rl w1 +18 ; in area process; rs. w1 f5. ; available segments := number of segments; am. (b1.) ; w2 := other last core(output) := al w2 -8 ; top command - 8; al w1 x2-510 ; w1 := other first core(output) := w2-510; ds. w2 f21. ; al w1 x1-512 ; w1 := w1-512; al w2 x1+510 ; w2 := w1+510; ds. w2 f19. ; first core(output) := w1; al w2 x2+1 ; last core(output) := w2; ds. w2 f1. ; current outaddress := w1; al w1 x1-512 ; last outaddress := w2 + 1; al w2 x1+510 ; w1 := w1-512; w2 := w1+510; ds. w2 f17. ; other first core(input) := w1; al w1 x1-512 ; other last core(input) := w2; al w2 x1+510 ; w1 := w1-512; w2 := w1+510; ds. w2 f7. ; first core(input) := w1; al w2 x2+1 ; last core(input) := w2; ds. w2 f3. ; current inaddress := w1; al w1 x1-2 ; last inaddress := w2+1; rs. w1 c9.+4 ; last work for pass := w1-2; sl. w1 c0.+512 ; if last work for pass < first free core + 512 then jl. a31. ; begin al. w3 d14. ; set return(break); al w2 1 ; w2 := 1; jl. w1 c13. ; writetext(<:***pass trouble:>); <:<10>***pass trouble<0>:> ; ; end; a31: al. w0 f23. ; rs. w0 c20. ; set address of byte output description; al. w0 f22. ; rs. w0 c21. ; set address of byte input description; rl. w2 b1. ; command point := top command; al w2 x2-4 ; top source list := rs. w2 b6. ; start source name list := rs. w2 e46. ; top command -4; al w2 x2-2 ; top branch interval list := rs. w2 b7. ; top command := rx. w2 b1. ; top command - 6; a6: am. (c23.) ; scan parameter list: rs w2 e63 ; fp current command := command point; jl. w3 a21. ; next param; bl w1 x2 ; sh w1 3 ; if preceding delimiter < 4 then jl. a22. ; goto end parameters; rl w1 x2 ; sn. w1 (b12.) ; if parameter = (space, name) then jl. a26. ; goto test name; \f ; rc 78.04.18 fortran, pass 0, page 18 b2 = k+1 ; alarm state ; alarm next: a27: se w3 x3 ; if alarm state then jl. a25. ; goto list parameter; al w1 10 ; hs. w1 b2. ; alarm state := true; hs. w1 b20. ; alarmchar := newline; al. w1 b8. ; jl. w3 c13. ; writetext(<:ftn. param:>); a25: bz w1 x2 ; list parameter: al. w1 x1+b13. ; jl. w3 c13. ; writetext(delimiter table(delimiter)); al. w3 a6. ; set return(scan parameter list); bz w0 x2+1 ; al w1 x2+2 ; w1 := address(param); se w0 4 ; if param is name then jl. c13. ; goto writetext; rl w0 x2+2 ; w0 := param; jl. w3 c14. ; writeinteger(<space>,1); 32<12+1 ; jl. a6. ; goto scan parameter list; a26: al w1 0 ; test name: hs. w1 b2. ; alarm state := false; bz w1 6 ; sn w1 4 ; if following delimiter = <space> then jl. a19. ; goto source list; se w1 8 ; if following delimiter <> point then jl. a27. ; goto alarm next; a7: al. w1 b14. ; search option table: entry := base option table; a8: sl. w1 b15. ; next option: jl. a27. ; if entry >= last of options then al w1 x1+14 ; goto alarm next; dl w0 x1+2 ; entry := entry + 14 sn w0 (x2+4) ; comment: an entry in the option se w3 (x2+2) ; table consists of: jl. a8. ; 0 - 7 : name of option. dl w0 x1+6 ; 8 - 9 : action on integer, action on name sn w0 (x2+8) ; 10 - 11: modebits to set; se w3 (x2+6) ; if param <> option name(entry) then jl. a8. ; goto next option; jl. w3 a21. ; next param; bz w0 x2+1 ; se w0 4 ; if parameter = <name> then jl. a10. ; goto yes or no; bl w0 x1+8 ; integer: hs. w0 b3. ; action := action on integer(entry); a9: am (x1+12) ; set modebits: rl. w0 c17. ; lo w0 x1+10 ; w0 := modebits or bits(entry); jl. a11. ; goto call action; \f ; fgs 1983.05.17 fortran, pass 0, page 19 a10: bl w0 x1+9 ; yes or no: hs. w0 b3. ; action := action on name(entry); sz w0 1 ; if addr uneven then jl. a9. ; goto any name, set modebits; rl w0 x2+4 ; se w0 0 ; if name word 2(param) <> 0 then jl. a27. ; goto alarm next; rl w0 x2+2 ; sn. w0 (b4.) ; if name word 1(param) = <:yes:> then jl. a9. ; goto set modebits; se. w0 (b5.) ; may be no: jl. a27. ; if name word 1(entry) <> <:no:> then ac w0 (x1+10) ; goto alarm next; bs. w0 1 ; am (x1+12) ; la. w0 c17. ; w0 := -,bits(entry) and modebits; a11: am (x1+12) ; call action: rs. w0 c17. ; rl w0 x2+2 ; modebits := w0; b3 = k+1; action ; w0 := parameter; a12: jl. 0 ; goto modifier(action); b4: <:yes:> ; b5: <:no:> ; b8: <:<10>***fortran param<32><0>:>; \f ; fgs 1983.05.17 fortran, pass 0, page 19a a30: se. w0 (b4.) ; details name: jl. a6. ; if parameter = <:yes:> then al w0 1 ; begin al w1 11 ; lower pass no := 1; ds. w1 c18. ; upper pass no := 11; jl. a6. ; end; goto scan parameter list; a35: dl w0 x2+4 ; rts name: ds. w0 e107.+2 ; move dl w0 x2+8 ; parameter name ds. w0 e107.+6 ; to jl. a6. ; name of runtime system; a13: al w1 -6 ; details: bound := -6; a14: rs. w0 x1+e19. ; next interval: sn. w3 (b10.) ; interval bound(bound) := parameter; jl. w3 a21. ; if next item head = (point,integer) then ; next param; rs. w0 x1+e19.+2 ; interval bound(bound+2) := parameter; al w1 x1+4 ; bound := bound + 4; sh w1 0 ; if bound > 0 se. w3 (b10.) ; or next item <> (point,integer) then jl. a6. ; goto scan parameter list; jl. w3 a21. ; next param; jl. a14. ; goto next interval; a15: rs. w0 d7. ; stop integer: stop pass := parameter; a16: al w0 1 ; stop name: rs. w0 f9. ; sorry := 1; jl. a6. ; goto scan parameter list; a28: rl. w1 b1. ; branch name: rs. w1 b7. ; top branch interval list := top command; jl. a6. ; goto scan parameter list; \f ; rc 19.3.1969 fortran, pass 0, page 20 a17: rl. w1 b7. ; branch integer: w1 := top branch interval list; a18: al w1 x1-4 ; next branch interval: rs. w1 b7. ; w1 := top branch interval list := w1 - 4; sh. w1 d26. ; if w1 <= last of pass 0 then jl. a6. ; goto scan parameter list; rs w0 x1+2 ; branch interval list(w1) := parameter; sn. w3 (b10.) ; if next item = (point,integer) then jl. w3 a21. ; next param; rs w0 x1+4 ; branch interval list(w1 - 2) := parameter; se. w3 (b11.) ; if next item <> (space,integer) then jl. a6. ; goto scan parameter list; jl. w3 a21. ; next param; jl. a18. ; goto next branch interval; b7: 0 ; top branch interval list; a19: rl. w1 b6. ; source list: w1 := top source list; dl w0 x2+4 ; ds w0 x1+2 ; move parameter to dl w0 x2+8 ; top source list and on; ds w0 x1+6 ; al w1 x1+8 ; top source list := top source list + 8; rs. w1 b6. ; jl. a6. ; goto scan parameter list; a20: rl. w1 b1. ; source yes or no: al w1 x1+2 ; top source list := rs. w1 b6. ; top command + 2; se. w0 (b5.) ; if param <> <:no:> then jl. a27. ; goto alarm next; jl. a6. ; goto scan parameter list; b6: 0 ; top source list; a21: rs. w3 b9. ; next param: ba w2 x2+1 ; save return; al w3 x2 ; command point := ba w3 x2+1 ; command point + bits(12,23,item head); rl w3 x3 ; w3 := next item head; bl w0 6 ; sh w0 3 ; if next delimiter < 4 then rl. w3 b12. ; w3 := (space,name); rl w0 x2+2 ; w0 := parameter; jl. (b9.) ; return; b9: 0 ; saved return; a22: rl. w2 b6. ; end parameters: al w2 x2+2 ; start branch interval list := w2 := rs. w2 e47. ; top source list + 2; rl. w1 b1. ; w1 := top command; \f ; fgs 1983.05.17 fortran, pass 0, page 21 a23: sn. w1 (b7.) ; move intervals: jl. a24. ; if w1 = top branch interval list then dl w0 x1 ; goto set ends; sh w0 1 ; (w3,w0) := interval(w1); al w0 1 ; if w0 <= 1 then sh w3 1 ; w0 := 1; al w3 1 ; if w3 <= 1 then w3 := 1; ds w0 x2+2 ; double word(w2) := (w3,w0); al w2 x2+4 ; w2 := w2 + 4; al w1 x1-4 ; w1 := w1 - 4; jl. a23. ; goto move intervals; a24: al w0 0 ; set ends: rs w0 x2 ; end branch interval list := 0; rs. w0 (b6.) ; end source list := 0; b20 = k+1 ; alarmchar (initially=0, else =10 (newline) al w0 0 ; w0 := alarmchar; se w0 0 ; if any alarms then jl. w3 c12. ; outchar(newline); rl. w0 c17. ; w0 := modebits; am e70-e68 ; rl. w1 e38. ; lo. w0 b34. ; if fp mode.listing then sz w1 1<8 ; modebits := modebits or rs. w0 c17. ; list.yes; so w0 1<2 ; if pass information wanted then jl. a32. ; begin dl. w2 b17. ; rs. w2 j0. ; rl. w2 e29. ; sz w2 1<2 ; if inbyte-details then rs. w1 j2. ; modify procedure inbyte; c. (:e15 a. 1:) - 1 ; if special testoutput pass 0 then jl. w3 d8. ; begin print linehead; al. w1 f22. ; writetext(string name of object area); jl. w3 c13. ; rl. w0 c23. ; write4(fp base); jl. w2 d20. ; al. w0 c0. ; write4(first of pass); jl. w2 d20. ; rl. w0 f26. ; write4(last work for pass); jl. w2 d20. ; rl. w0 c17. ; end; z. ; end; a32: rl. w1 e41. ; sz w0 1<6 ; if integer overflow wanted then wa. w1 b18. ; set bit 1 in interrupt mask; rs. w1 e41. ; rl. w1 c23. ; al w3 x1+e25 ; set abs address of rs. w3 d24. ; current program zone descriptor; rl w2 x3+e48+6 ; w2 := address(program share descriptor); al w0 x2+10 ; set abs address of rs. w0 d23. ; last core(program share descriptor(10)); al w0 x3+e49+16 ; set abs address of rs. w0 d21. ; segment(program process description(16)); al w0 x2+2 ; set abs address of rs. w0 d27. ; first core(program share descriptor(2)); bz w0 x3+e49+1 ; se w0 18 ; if process kind(program) = 18 then jl. a29. ; begin comment: translator on magnetic tape; rl. w0 b19. ; set bit 4 in give up mask; lo w0 x3+e50 ; comment: inblock will always return by the rs w0 x3+e50 ; give up action, because last core = last work; al. w0 d28. ; set give up action to point to the first rs w0 x3+e50+2 ; instruction after the call of inblock; ; end; a29: al w1 x1+e28 ; set abs address of rs. w1 e62. ; inblock (fp entry); \f ; fgs 1983.05.17 fortran, pass 0, page 22 b. f10, b2 w. ; compute date and time jd 1<11+36 ; w0-1:=get clock; nd w1 3 ; w0-1:=secs:= fd. w1 f8. ; fix(float(clock)/10 000); bl w2 3 ; ad w1 x2-47 ; wd. w1 f6. ; w1:=day:=secs//(60*60*24); al w3 0 ; w3-0:=secs:=secs mod (60*60*24); wd. w0 f1. ; w3-0:=minutes:=secs//60; ld w3 24 ; w2:=second:=secs mod 60; wd. w0 f1. ; w0:=hour:=minutes//60; rs. w3 b0. ; work0:=minute:=minutes mod 60; wm. w0 f2. ; wa. w0 b0. ; wm. w0 f2. ; wa w0 4 ; w0:=clock:=(hour*100+minute)*100+second; rs. w0 e74. ; time:=clock; ld w1 26 ; wa. w0 f7. ; al w3 0 ; w0:=year:=(days*4+99111)//1461; wd. w0 f4. ; w3:=days:=((days*4+99111)mod 1461)//4; as w3 -2 ; wm. w3 f0. ; al w3 x3+461 ; wd. w3 f3. ; w3:=month:=(days*5+461)//153; al w1 x2+5 ; w1:=day:=(days*5+461)mod 153 +5; sl w3 13 ; if month > 13 then al w3 x3+88 ; month := month - twelwemonth + oneyear; wm. w3 f2. ; month := month * 100; rx w2 0 ; wd. w1 f0. ; day := day//5; wa w3 2 ; date := day + month; wm. w2 f5. ; year := year * 1000; wa w3 4 ; date := date + year; rs. w3 e74.-2 ; jl. c7. ; goto next pass; f0: 5 ; f1: 60 ; f2: 100 ; f3: 153 ; f4: 1461 ; f5: 10000 ; f6: 86400 ; 60*60*24 f7: 99111 ; to adjust for 1.1.68 being start date 10000<9 ; f8: 4096+ 14-47 ; 10000*2**(-47) as floating point numb b0: 0 ; work0,saved minute e. ; end block date and time \f ; fgs 1983.06.20 fortran, pass 0, page 23 jl. d30-j2 ;b17-2: modifier to procedure inbyte b17: jl. h3 ; modifier to procedure outbyte; b18: 1<22 ; modifier to interrupt mask; b19: 1<19 ; bit 4 to give up mask (block length error; b34: 1< 0 ; list bit b10: 8<12 + 4 ; (point,integer); b11: 4<12 + 4 ; (space,integer); b12: 4<12 + 10 ; (space,name); b13 = k - 4 ; delimiter table: <: :> ; space; <:=:> ; equal; <:.:> ; point; b14 = k - 14 ; option table: ; option name action on action on modebits modebit ; integer name to change word <:rts:>, 0, 0, 0, h. a27-a12, 1+a35-a12, w. 0 ,c17-c17 <:details:>, 0, h. a13-a12, a30-a12, w. 1<2 ,c17-c17 <:index:> , 0, 0, h. a27-a12, a6 -a12, w. 1<3 ,c17-c17 <:survey:> , 0, 0, h. a27-a12, a6 -a12, w. 1<2 ,c17-c17 <:stop:> , 0, 0, h. a15-a12, a16-a12, w. 1<4 ,c17-c17 <:list:> , 0, 0, h. a27-a12, a6 -a12, w. 1<0 ,c17-c17 <:message:> , 0, h. a27-a12, a6 -a12, w. 1<1 ,c17-c17 <:spill:> , 0, 0, h. a27-a12, a6 -a12, w. 1<6 ,c17-c17 <:branch:> , 0, 0, h. a17-a12, a28-a12, w. 1<9 ,c17-c17 <:source:> , 0, 0, h. a27-a12, a20-a12, w. 0 ,c17-c17 <:cond:> , 0, 0, h. a27-a12, a6 -a12, w. 1<10 ,c17-c17 <:cardmode:>, 0, h. a27-a12, a6 -a12, w. 1<11 ,c17-c17 <:connect:>, 0, h. a27-a12, a6 -a12, w. 1<12 ,c17-c17 <:fp:>, 0, 0, 0, h. a27-a12, a6 -a12, w. 1<13 ,c17-c17 <:test:> , 0, 0, h. a27-a12, a6 -a12, w. 2047<13,e29-c17 <:testa:> , 0, 0, h. a27-a12, a6- a12, w. 1<13 ,e29-c17 <:testb:> , 0, 0, h. a27-a12, a6 -a12, w. 1<14 ,e29-c17 <:testc:> , 0, 0, h. a27-a12, a6 -a12, w. 1<15 ,e29-c17 <:testd:> , 0, 0, h. a27-a12, a6 -a12, w. 1<16 ,e29-c17 <:teste:> , 0, 0, h. a27-a12, a6 -a12, w. 1<17 ,e29-c17 <:testf:> , 0, 0, h. a27-a12, a6 -a12, w. 1<18 ,e29-c17 <:testg:> , 0, 0, h. a27-a12, a6 -a12, w. 1<19 ,e29-c17 <:testh:> , 0, 0, h. a27-a12, a6 -a12, w. 1<20 ,e29-c17 <:testi:> , 0, 0, h. a27-a12, a6 -a12, w. 1<21 ,e29-c17 <:testj:> , 0, 0, h. a27-a12, a6 -a12, w. 1<22 ,e29-c17 <:testk:> , 0, 0, h. a27-a12, a6 -a12, w. 1<23 ,e29-c17 <:trunc:> , 0, 0, h. a27-a12, a6 -a12, w. 1<0 ,e29-c17 <:warning:> , 0, h. a27-a12, a6 -a12, w. 1<1 ,e29-c17 <:testin:> , 0, 0, h. a27-a12, a6 -a12, w. 1<2 ,e29-c17 <:names:> , 0, 0, h. a27-a12, a6 -a12, w. 1<3 ,e29-c17 <:stack:> , 0, 0, h. a27-a12, a6 -a12, w. 1<4 ,e29-c17 b15 = k - 12 ; last of options; d25: 100 ; tail for look up entry and create entry; d26: 0,r.9 ; segments = 100, dummy entry \f ; fgs.jz 1983.06.20 fortran, pass 0, page 24 h5 = k - e38 ; length of entire pass 0; e89 = h5 ; loadlength for insertproc e30 = h5 ; accumulated length of passes for insertproc i. ; id list; e. ; end block: initialize translator; i. ; id list; e. ; end block: pass 0 segment; m. rc 85.09.26 fortran, pass 0 \f ▶EOF◀