1
0
mirror of https://github.com/pkimpel/retro-220.git synced 2026-03-01 01:29:57 +00:00
Files
Paul Kimpel 2d06034237 Commit latest BALGOL compiler debugging and examples.
1. Supply runnable examples for all five sample programs in the BALGOL
reference manual.
2. Regenerate the Generator and Compiler listings and tape images.
3. Fix assembler bugs with "S" format code on input.
4. Fix BAC-Assembler bug generating a machine-language deck for the
LABEL intrinsic.
5. Note that some of these changes require retro-220 version 0.08 in
order to work properly.
2018-07-08 18:48:05 -07:00

248 lines
4.4 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
0200 BAC-220 STANDARD VERSION 2/1/62
0200 COMMENT FIFTH EXAMPLE PROGRAM - FROM BALGOL MANUAL, JANUARY 1961
0200 EDITION.
0200
0200 THE FOLLOWING PROGRAM FOR OPTICAL RAY-TRACING WAS WRITTEN BY
0200 R. MITCHELL$
0200
0200 COMMENT OPTICAL TRACE PROGRAM, R. F. MITCHELL, VIDYA 1$
0200 INTEGER M, J, K, JA, JB$
0200 ARRAY A(4), B(4), C(4)$
0200
0200 A(1) = -260.0$ A(3) = -600.0$ A(4) = 0.0$
0205 ARRAY G(6) = (25.0, 50.0, 75.0, 100.0, 125.0, 150.0)$
0205 C(1) = 1.0$ C(2) = 3.436$ C(3) = 1.0$ C(4) = -1.0$
0213 B(2) = 339.75$ B(3) = 1.0$ B(4) = 0.0$
0218 ARRAY B1(6) = (5.5, 5.75, 6.0, 6.25, 6.75, 7.0)$
0218
0218 FOR JB = (1, 1, 6)$
0229 BEGIN
0229 B(1) = B1(JB)$
0233 A(2) = A(1) - B1(JB)(1.0 - 1.0/C(2).C(2))$
0246 WRITE ($$ PARAM, F6)$
0254 OUTPUT PARAM (FOR K = (1, 1, 4)$ (A(K), B(K), C(K)))$
0283 FORMAT F6 (W3,11(3F20.8,W4))$
0289 FOR M = (1, 1, 6)$
0300 BEGIN
0300 H1 = G(M)$
0304 WRITE ($$ GVALU, F1)$
0312 OUTPUT GVALU (H1)$
0319 FORMAT F1 (B10,*G*,X20.8,W6)$
0325 SUMD = 0.0$ E = 0.0$ P = H1$
0329 FOR J = (1, 1, 3)$
0340 BEGIN
0340 R1 = P/A(J)$
0346 IF ABS(R1) GTR 0.95$
0346 GO TO PRINT$
0346
0352 I = ARCSIN(R1)$
0356 R2 = R1.C(J)/C(J+1)$
0362 IF ABS(R2) GTR 0.95$
0362 GO TO PRINT$
0362
0368 IP = ARCSIN(R2)$
0372 E = E + I - IP$
0376 H2 =(J+1)SIN(E+I)$
0389 R3 = SIN(E)$
0393 COMMENT IF R3 = SIN(E)$ *APPAREN
0393 IF R3 EQL 0.0$
0393 R3 = 1.0**-20$
0393
0398 DL = (H2-H1)/R3$
0403 DU = DL.C(J+1)$
0407 SUMD = SUMD + DU$
0410 H1 = H2$
0412 WRITE ($$ EDH, F2)$
0420 OUTPUT EDH(E, DU, H1)$
0433 FORMAT F2 (B5,*E*,X15.8,B10,*D*,X15.8,B10,*H*,X15.8,W4)$
0445 IF (PCS(1))$
0445 BEGIN
0453 WRITE ($$ ALL, F5)$
0457 OUTPUT ALL (R1, R2, I, IP, E, H2, R3, DL, DU, P)$
0491 FORMAT F5 (2(5F12.5,W4))
0496 END$
0496
0496 P = A(J).R2 - R3(A(J+1) = A(J) + B(J))
0503 END$
0503
0509 L = A(3)(1.0 + R2/R3)$
0515 SUMD = SUMD - DU$
0518 WRITE ($$ LSUMD, F3)$
0526 OUTPUT LSUMD (L, SUMD)$
0536 FORMAT F3 (B10,*L*,X20.8,B10,*SUMD*,X20.8,W6,W4)
0536 END
0546 END$
0546
0547 STOP$
0547
0549 PRINT..
0553 WRITE ($$ ERROR, F)$
0557 OUTPUT ERROR (R1, R2, A(J), C(J+1), P)$
0578 FORMAT F (*R1*,X9.4,B4,*R2*,X9.4,B4,*A*,X9.4,B4,*C*,X9.6,B4,
0578 *P*,X9.4,W1)$
0595 STOP$
0596 FINISH$
COMPILED PROGRAM ENDS AT 0597
PROGRAM VARIABLES BEGIN AT 4399
-.26000000, 03 .55000000, 01 .10000000, 01
-.26503413, 03 .33975000, 03 .34360000, 01
-.60000000, 03 .10000000, 01 .10000000, 01
.00000000, 00 .00000000, 00 -.10000000, 01
G 25.00000000
E -.06831474 D 1274.89130000 H -.32774976
E -.16537255 D .29356608 H -.37607655
E -.65489915 D -4.52550560 H -3.13246810
L 51.33266500 SUMD 1275.18480000
G 50.00000000
E -.13751546 D 1269.55340000 H -.65003198
E -.33564916 D .32976416 H -.75865041
E -1.36039550 D -3.12936780 H -3.81900720
L 42.51399500 SUMD 1269.88310000
G 75.00000000
E -.20856805 D 1260.51770000 H -.96093506
E -.51685446 D .39303495 H -1.15515240
E -2.21304160 D 1.04110740 H -.32148266
L 5.40105630 SUMD 1260.91070000
G 100.00000000
E -.28261909 D 1247.55250000 H -1.25355430
E -.71812001 D .48907616 H -1.57535180
R1 -1.0295 R2 .5652 A 85.2500 C-1.000000 P -87.7708