75 lines
3.3 KiB
Text
75 lines
3.3 KiB
Text
[Pythagorean quadruples - Rosetta Code
|
|
EDSAC program, Initial Orders 2]
|
|
|
|
[Arrange the storage]
|
|
T46K P56F [N parameter: modified library s/r P7 to print integer]
|
|
T47K P106F [M parameter: main routine]
|
|
|
|
[Library subroutine M3, prints header at load time.
|
|
Here, header leaves teleprinter in figures mode.]
|
|
PFGKIFAFRDLFUFOFE@A6FG@E8FEZPF
|
|
*NUMBERS!WHOSE!SQUARES!ARE!NOT!THE!SUM!
|
|
OF!THREE!NONZERO!SQUARES@&MAXIMUM#!V!
|
|
..PK [after header, blank tape and PK (WWG, 1951, page 91)]
|
|
|
|
[------------------------------------------------------------------------------]
|
|
[Main routine]
|
|
E25K TM GK [load at address specified by M parameter]
|
|
[Constants]
|
|
[0] P1100F [limit, right-justified, e.g. P1100F for 2200]
|
|
[1] !F [teleprinter space]
|
|
[2] @F [carriage return]
|
|
[3] &F [line feed]
|
|
[4] K4096F [teleprinter null]
|
|
[5] PD [17-bit constant 1]
|
|
[6] P2D [17-bit constant 5]
|
|
[Variables]
|
|
[7] PF [2^m, where m = 0, 1, 2, ...]
|
|
[8] PF [5*2^n, where n = 0, 1, 2, ...]
|
|
[Enter here, with acc = 0]
|
|
[Complete header by printing limit]
|
|
[9] A4@ T1F [print leading zeros as nulls]
|
|
A@ TF [pass limit to print subroutine in 0F]
|
|
[13] A13@ GN [call print subroutine; leaves acc clear]
|
|
O2@ O3@ [print new line]
|
|
[Initialize variables]
|
|
A5@ T7@ [2^m := 1]
|
|
A6@ T8@ [5*2^n := 5]
|
|
[Loop back to here after printing number]
|
|
[Print 2^m or 5*2^n, whichever is smaller]
|
|
[21] A7@ S8@ [compare values]
|
|
E28@ [jump if 5*2^n is smaller]
|
|
A8@ [else restore 2^m in acc]
|
|
LD U7@ [double value in memory]
|
|
E32@ [jump to common code]
|
|
[28] T4F [clear acc]
|
|
A8@ [acc := 5*2^n]
|
|
LD U8@ [double value in memory]
|
|
[32] RD [common code: undo doubling in acc]
|
|
TF [pass number to print subroutine in 0F]
|
|
A@ SF [test for number > limit]
|
|
G42@ [jump to exit if so]
|
|
O1@ [print space before number]
|
|
T4F [clear acc]
|
|
[39] A39@ GN [call print subroutine; leaves acc clear]
|
|
E21@ [loop back for next number]
|
|
[Here when done]
|
|
[42] O2@ O3@ [print new line]
|
|
O4@ [print null to flush teleprinter buffer]
|
|
ZF [halt the machine]
|
|
|
|
[------------------------------------------------------------]
|
|
[Subroutine to print 17-bit non-negative integer
|
|
Parameters: 0F = integer to be printed (not preserved)
|
|
1F = character for leading zero
|
|
(preserved; typically null, space or zero)
|
|
Workspace: 4F, 5F
|
|
Even address; 39 locations]
|
|
E25K TN [load at address specified by N parameter]
|
|
GKA3FT34@A1FT35@S37@T36@T4DAFT4FH38@V4FRDA4D
|
|
R1024FH30@E23@O35@A2FT36@T5FV4DYFL8FT4DA5F
|
|
L1024FUFA36@G16@OFTFT35@A36@G17@ZFPFPFP4FZ219D
|
|
|
|
E25K TM GK [M parameter again]
|
|
E9Z [define entry point]
|
|
PF [acc = 0 on entry]
|