Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
98
Task/Gray-code/EDSAC-order-code/gray-code.edsac
Normal file
98
Task/Gray-code/EDSAC-order-code/gray-code.edsac
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
[Gray code task for Rosetta Code.
|
||||
EDSAC program, Initial Orders 2.]
|
||||
|
||||
[Library subroutine M3. Prints header at load time,
|
||||
then M3 and header are overwritten.]
|
||||
PFGKIFAFRDLFUFOFE@A6FG@E8FEZPF
|
||||
*BINARY!!GRAY!!!!ROUND!TRIP@&
|
||||
..PK [after header, blank tape and PK (WWG, 1951, p. 91)]
|
||||
|
||||
T64K [load at location 64 (arbitrary choice)]
|
||||
GK [set @ (theta) parameter]
|
||||
[Subroutine to print 5-bit number in binary.
|
||||
Input: 1F = number (preserved) in low 5 bits.
|
||||
Workspace: 0F, 4F.]
|
||||
[0] A3F T17@ [plant return link as usual]
|
||||
H19@ [mult reg := mask to remove top 4 bits]
|
||||
A1F [acc := code in low 5 bits]
|
||||
L32F [shift 7 left]
|
||||
TF [store in workspace]
|
||||
S18@ [initialize negative count of digits]
|
||||
[7] T4F [update negative count]
|
||||
AF LD TF [shift workspace 1 left]
|
||||
CF [remove top 4 bits]
|
||||
TF [store result]
|
||||
OF [print character '0' or '1' in top 5 bits]
|
||||
A4F A2F G7@ [inc count, loop if not yet 0]
|
||||
[17] ZF [{planted} jump back to caller]
|
||||
[18] P5F [addres field = number of bits]
|
||||
[19] Q2047D [00001111111111111 binary]
|
||||
|
||||
[Subroutine to convert binary code to Gray code.
|
||||
Input: 1F = binary code (preserved).
|
||||
Output: 0F = Gray code.]
|
||||
[20] A3F T33@ [plant return link as usual]
|
||||
A1F RD TF [0F := binary shifted 1 right]
|
||||
[One way to get p XOR q on EDSAC: Let r = p AND q.
|
||||
Then p XOR q = (p - r) + (q - r) = -(2r - p - q).]
|
||||
HF [mult reg := 0F]
|
||||
C1F [acc := 0F AND 1F]
|
||||
LD [times 2]
|
||||
SF S1F [subtract 0F and 1F]
|
||||
TF SF TF [return result negated]
|
||||
[33] ZF [{planted} jump back to caller]
|
||||
|
||||
[Subroutine to convert 5-digit Gray code to binary.
|
||||
Uses a chain of XORs.
|
||||
If bits in Gray code are ghijk then bits in binary are
|
||||
g, g.h, g.h.i, g.h.i.j, g.h.i.j.k where dot means XOR.
|
||||
Input: 1F = Gray code (preserved).
|
||||
Output: 0F = binary code.
|
||||
Workspace: 4F, 5F.]
|
||||
[34] A3F T55@ [plant return link as usual]
|
||||
A1F UF [initialize result to Gray code]
|
||||
T5F [5F = shifted Gray code, shift = 0 initialiy]
|
||||
S56@ [initialize negative count]
|
||||
[40] T4F [update negative count]
|
||||
HF [mult reg := partial result]
|
||||
A5F RD T5F [shift Gray code 1 right]
|
||||
[Form 5F XOR 0F as in the previous subroutine]
|
||||
C5F LD SF S5F TF SF
|
||||
TF [update partial result]
|
||||
A4F A2F G40@ [inc count, loop back if not yet 0]
|
||||
[55] ZF [{planted} jump back to caller]
|
||||
[56] P4F [address field = 1 less than number of bits]
|
||||
|
||||
[Main routine]
|
||||
[Variable]
|
||||
[57] PF [binary code is in low 5 bits]
|
||||
[Constants]
|
||||
[58] P16F [exclusive maximum code, 100000 binary]
|
||||
[59] PD [17-bit 1]
|
||||
[60] #F [teleprinter figures mode]
|
||||
[61] !F [space]
|
||||
[62] @F [carriage return]
|
||||
[63] &F [line feed]
|
||||
[Enter with acc = 0]
|
||||
[64] O60@ [set teleprinter to figures]
|
||||
S58@ [to make acc = 0 after next instruction]
|
||||
[66] A58@ [loop: restore acc after test below]
|
||||
U57@ T1F [save binary code, and pass it to print soubroutine]
|
||||
[69] A69@ G@ [print binary code]
|
||||
O61@ O61@ O61@ [print 3 spaces]
|
||||
[74] A74@ G20@ [convert binary (still in 1F) to Gray]
|
||||
AF T1F [pass Gray code to print subroutine]
|
||||
[78] A78@ G@ [print Gray code]
|
||||
O61@ O61@ O61@ [print 3 spaces]
|
||||
[83] A83@ G34@ [convert Gray (still in 1F) back to binary]
|
||||
AF T1F [pass binary code to print subroutine]
|
||||
[87] A87@ G@ [print binary]
|
||||
O62@ O63@ [print CR, LF]
|
||||
A57@ A59@ [inc binary]
|
||||
S58@ [test for all done]
|
||||
G66@ [loop back if not]
|
||||
O60@ [dummy character to flush teleprinter buffer]
|
||||
ZF [stop]
|
||||
E64Z [define entry point]
|
||||
PF [acc = 0 on entry]
|
||||
[end]
|
||||
Loading…
Add table
Add a link
Reference in a new issue