|
|
DataMuseum.dkPresents historical artifacts from the history of: RC3500 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC3500 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400)
Types: TextFileVerbose
Names: »epascallib«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦6b41451d2⟧
└─⟦this⟧ »epascallib«
ntpascallib = edit tpascallib
l./; segment 0-1/,
l./g0: ; start of buffer/,
d./g2:/, i/
g0: ; start of buffer
jl. g1. ; goto init;
; initcode for pascal-program:
; insert the programname 'pascrun' just before the old program name
b. a10, b10 w.
a0: ; start of initcode
b10 ; size of initcode (number of words)
rl w0 x1+h51 ; move fp-modebits to program stack
rs. w0 b3. ;
la. w0 b0. ; remove fp-modebits: pause and list;
rs w0 x1+h51 ;
al w0 x2+b5 ; current command := current command - simulated;
rs w0 x1+h8 ;
rl. w0 b1. ; insert dummy 'end' in front;
a1: rs w0 x2+b5 ;
rl w0 x2 ; move a possible lefthand side and
al w2 x2+2 ; the delimiter preceding the program name;
sh w2 x3+2 ;
jl. a1. ;
; now there is room for inserting a new program name etc.
al. w3 b2. ; w3 := start of new program name etc.;
a5: rl w0 x3 ;
rs w0 x2+b5 ; move new program name to fp-program stack;
al w2 x2+2 ;
al w3 x3+2 ;
se. w3 b4. ;
jl. a5. ;
al w2 0 ; w2 := normal return to fp;
jl x1+h7 ; goto fp-end-program;
b0: -1 - 1<3 - 1<0 ; mask out: pause + list from modebits
b1: 2<12 + 2 ; dummy 'end'-element;
b2: ; start of new program name etc:
<:pascrun:>, 0 ;
4<12 + 10 ;
0 ;
b3: 0-0-0 ; (old fp-mode bits)
0 ;
0 ;
4<12 + 10 ;
b4: ; top of new program name etc:
b5 = b2 - b4 - 2 ; size of inserted elements (negative)
b10 = (:k - a0:) > 1 ; number of words in init-code
e. ;
{12{
g2: ; start of text-table:
/,
l./c6:/, d, i/
c6:<:giveup, blocklength = <0>:>
/,
l./c8:/, d,
l./c9:/, d,
l./c15:/, r/<0>/: <0>/,
l./c16:/, d,
l./c17:/, d,
l./c18:/, r/exist/exist: /,
l./c19:/, d, i/
c8:c9:c16:c17:c19: <: unused error code! ???<0>:>
/,
l./c24:/, r/<::>/<:illegal pointer value<0>:>/,
l./b. a20, b30,/, r/m50/m99/,
l./d44 = 16 ;/, l1, i/
d45 = 18 ; abs return address of last library call
d46 = 20 ; additional error inf
/,
l./b6:/, i/
m66: h66+2 ; bytes transferred in fp-answer
m68: h68 ; fp-stderror
/,
l./m0:/,
l./i1:/,
l./dl w2 x3-2041/, i/
sl. w1 (b2.) ; if proc table entry >= first library entry then
jl. i3. ; goto after library call;
/,
l./ba. w0 1;/, i/
i2: ; next:
/,
l./jl. i1. ;/, l1, i/
i3: ; after library call:
rl. w1 b3. ;
rl w2 x1+d45 ; w2 := rel return from last library call;
rl w1 x1+d43 ; w1 := current pascal procedure;
ws w2 x1+p6 ;
jl. i2. ; goto next;
/,
l./g1: ; init:/,
l./a0:/,
l./jl. (m30.);/, l1, i/
rl. w0 m68. ; primary output.error action := fp-stderror;
rs w0 x1+h2+2 ;
/,
l./bz w0 x1-2;/, d, i/
rl w0 x3+12 ; w0 := break-cause;
se w0 0 ; if cause <> instruction-error then
jl. a2. ; goto print error text;
rl w0 x1-2 ; w0 := erroneous instruction;
se w0 0 ; if all zero then
jl. a11. ; begin <* io-errors are trapped as such *>
rl. w0 (m66.) ; value := bytes transferred in fp-answer;
al w1 6 ; error number := io-error;
jl. a12. ; goto set value and error;
a11: ; end;
/,
l./ls w0 -6/, r/-6 /-18/,
l./rs. w0 b25./, d,
l./rs w1 x2+d38/, i/
a12: ; set value and error:
rs. w0 b25. ;
/,
l./a2:/,
l./se w0 2 ; if error number = 2/, i/
se w0 15 ; if file connect errors then
sn w0 18 ;
jl. a4. ; goto print file name;
sn w0 6 ; if error number = io-error then
al w0 2 ; error number := 2; <* force printing *>
/,
l./a3:/, i/
jl. a3. ; (skip print file name)
a4: ; print file name:
rl w1 x2+d46 ; zone := additional error inf;
rl w1 x1+h0+6 ; w1 := first share;
al w0 x1+14 ; w0 := file name addr;
jl. w3 (m31.) ; outtext (file name);
/,
l./a10:/,
l./al w2 1; else 1/, r/1/0/, ; rettet 80.04.10: ok-bit vendte forkert
l./se w0 5 ; if not break then/, i/
sn w0 6 ; if io-error then
jl. a13. ; goto stderror;
/,
l./jl x3+f9/, l1, i/
a13: rl. w3 b1. ; stderror:
dl w1 x3+2 ; restore (w0,w1,w2,w3) from regdump;
dl w3 x3+6 ;
jl. (m68.) ; goto fp-stderror;
/,
l./; segment 2/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 1
/,
l./0,r.(:1026/, d,
l./; clock (real function)/,
l./; call:/,
l1 , d, i/
; w2 = proc table entry
; w3 = return-2
; +0: segm<12 + rel
/,
l./d6:/, d, i/
d6: ; clock:
ds. w3 d0. ;
rl w1 66 ;
/,
l./jl x3;/, d, i/
jl. d4. ; return;
/,
l./; segment 3/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 2
/,
l./0,r.(:1538/, d,
l./d12: am 1 ; date/,
l./b4:/,
l./rl. w1 b3./, d,
l./b10:/,
l./jl x2 ;/, i/
rl. w1 b3. ;
/,
l./; segment 4/, d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 3
/,
l./0,r.(:/, d,
l./0,r.(:2562-k/, d,
l./; segment 5-6/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 4
/,
l./; file initialization/,
l./a2:/,
l./rs w0 x1+h2+2/, r/:=0/:= pascal runtime system/,
i/
rl. w3 b4. ;
rl w0 x3+h20+h2+2; (use same giveup action as in primary input);
/,
l./i2:;reset:/,
l./jd 1<11+42;/, l1, i/
rl. w1 b1. ; w1 := zone;
/,
l./al w2 x3;/,
l./rl. w1 b1.;/, d,
l./c6:/, r/19/18/,
l./c1:/, d,
l./c2:/, r/1 /18-15/,
l./c3:/, d,
l./c4:/, d,
l./c5:/, r/w1/w0/,
l./al w0 -1/, d, i/
rx w1 0 ; w0 := additional inf (= zone), w1 = errorcode
/,
l./; segment 7-8/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 5
/,
l./0,r.(:/, d,
l./d13:/, r/17-13/7-13 /,r/17/ 7/,
l./; segment 9-10/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 6
/,
l./0,r.(:/, d,
; ret i read(char): convert nl,ff to sp
l./i3:/,
l./se w2 10;/, l1, i/
sn w2 12 ; if char = newline or char = formfeed then
al w2 32 ; char := space;
/,
; btj 80.05.08: null/lf/del skal v{re blinde
l./f0: h./,
l1, r/10/16/, r/10,10 /16,10 /,
l./; 120-127/, r/10 /16 /,
l./c4:/,
l./; state action table/,
l./; 0 2 4 6/, r/14/14 16/,
l1, r/em/em blinds/,
l./r0=/, l1, r/ ;/, c0-f2,r0 ;/,
l2, r/ ;/, c0-f2,r1 ;/,
l2, r/ ;/, c0-f2,r2 ;/,
l2, r/ ;/, c0-f2,r3 ;/,
; btj 791219: ff blev skipped
l./i2:/,
l./a3:/,
l./jl. i2. ; goto get next char;/, i/
se w2 12 ; if last char = ff then goto return;
/,
; btj 80.05.08: null osv skal v{re blinde
l./r20=/, l-3, r/14/14 16/,
l1, r/em/em blinds/,
l./r20=/,
l1, r/;/, c0-f2,r20;/,
l2, r/;/, c0-f2,r21;/,
l2, r/;/, c0-f2,r22;/,
l2, r/;/, c0-f2,r23;/,
l2, r/;/, c0-f2,r24;/,
l2, r/;/, c0-f2,r25;/,
l2, r/;/, c0-f2,r26;/,
;; btj 791219: ff blev skipped
;l./i2:/,
;l./a3:/,
;l./jl. i2. ; goto get next char;/, i/
;
; se w2 12 ; if last char = ff then goto return;
;/,
l./; segment 11/,
d, i/
{12{
0, r.(:(:k+511:)>9<9-k:)>1 + 1 ; fill to segment boundary
m. start of page 7
/,
l./0,r.(:/, d,
l./a12: al w1 22 ; try to read past eof/,
l./rl w0 x2+4/, r/rutime/runtime/,
l./; pack (limited to string/,
l./f2:/,
l./a4:/, l1, i/
; w0 contains: 0, 1 or 2 characters, rigthjustified
sn w0 1 ; if partial word is empty (i.e. = flag) then
jl. f5. ; goto return;
/,
l./ld w0 8/, r/up/up with spaces/,
l1, i/
al w2 32 ; w2 := space;
lo w0 4 ;
/,
l./ld w0 8/, l1, d1, i/
lo w0 4 ;
/,
l./0,r.(:6146-k/, d,
i/
0, r.(:(:k+511:)>9<9-k:)>1 + 1; fill to segment boundary
/,
f
«eof»