113 lines
5.2 KiB
Plaintext
113 lines
5.2 KiB
Plaintext
[Demo of matrix transposition. Not in place, creates a new matrix.
|
|
EDSAC, Initial Orders 2.]
|
|
..PZ [blank tape and terminator]
|
|
T 50 K [to call matrix transpose subroutine with 'G X']
|
|
P 200 F [address of matrix transpose subroutine]
|
|
T 47 K [to call matrix print subroutine with 'G M']
|
|
P 100 F [address of matrix print subroutine]
|
|
T 46 K [to call print subroutine with 'G N']
|
|
P 56 F [address of print subroutine (EDSAC library P1)]
|
|
|
|
[Subroutine to transpose a matrix of 17-bit real numbers, not in place.
|
|
Caller must ensure original and transpose don't overlap.
|
|
Parameters, all in the address field (i.e. denote n by P n F)
|
|
10F = width (number of columns)
|
|
11F = height (number of rows)
|
|
12F = start address of input matrix
|
|
13F = start address of output matrix]
|
|
E25K TX GK
|
|
|
|
[The subroutine loads elements by working down each column in turn.
|
|
Elements are stored at consecutive locations in the transposed matrix.]
|
|
A3F T31@ [set up return to caller]
|
|
A13F A33@ T14@ [initialize T order for storing transpose]
|
|
A12F A32@ U13@ [initialize A order for loading original]
|
|
T36@ [also save as A order for top of current column]
|
|
S10 F [negative of width]
|
|
[10] T35@ [initialize negative counter]
|
|
S11 F [negative of height]
|
|
[12] T34@ [initialize negative counter]
|
|
[13] AF [maunfactured order; load matrix element]
|
|
[14] TF [maunfactured order; store matrix element]
|
|
A14@ A2F T14@ [update address in T order]
|
|
A13@ A10F T13@ [update address in A order]
|
|
A34@ A2F G12@ [inner loop till finished this column]
|
|
A36@ A2F U36@ T13@ [update address for start of column]
|
|
A35@ A2F G10@ [outer loop till finished all columns]
|
|
[31] ZF [exit]
|
|
[32] AF [added to an address to make A order for that address]
|
|
[33] TF [added to an address to make T order for that address]
|
|
[34] PF [negative counter for rows]
|
|
[35] PF [negative counter for columns]
|
|
[36] AF [load order for first element in current column]
|
|
|
|
[Subroutine to print a matrix of 17-bit real numbers.
|
|
Straightforward, so given in condensed form.
|
|
Parameters (in the address field, i.e. pass n as PnF):
|
|
10F = width (number of columns)
|
|
11F = height (number of rows)
|
|
12F = start address of matrix
|
|
13F = number of decimals]
|
|
E25K TM
|
|
GKA3FT30@A13FT18@A12FA31@T14@S11FT36@S10FT37@O34@O35@TDAFT1FA16@
|
|
GN [call library subroutine P1]
|
|
PFA14@A2FT14@A37@A2FG10@O32@O33@A36@A2FG8@ZFAF@F&F!FMFPFPF
|
|
|
|
[Library subroutine P1.
|
|
Prints number in 0D to n places of decimals, where
|
|
n is specified by 'P n F' pseudo-order after subroutine call.]
|
|
E25K TN
|
|
GKA18@U17@S20@T5@H19@PFT5@VDUFOFFFSFL4FTDA5@A2FG6@EFU3FJFM1F
|
|
|
|
[Main routine]
|
|
PK T300K GK
|
|
[Constants]
|
|
[0] #F [figures shift on teleprinter]
|
|
[1] @F [carriage return]
|
|
[2] &F [line feed]
|
|
[3] P3F [number of columns (in address field)]
|
|
[4] P5F [number of rows (in address field)]
|
|
[5] P400F [address of matrix]
|
|
[6] P500F [address of transposed matrix]
|
|
[7] P2F [number of decimals when printing matrix]
|
|
[8] TF [add to address to make T order]
|
|
[9] P328F [0.0100097...., matrix elements are multiples of this]
|
|
[Variables]
|
|
[10] PF [matrix element, initialized to 0.00]
|
|
[11] PF [negative counter]
|
|
|
|
[Enter with acc = 0]
|
|
[12] O@ [set figures mode on teleprinter]
|
|
A5@ [address of matrix]
|
|
A8@ [make T order to store first elememt]
|
|
T24@ [plant in code]
|
|
H4@ N3@ L64F L32F [acc := negative number of entries]
|
|
[20] T11@ [initialize negative counter]
|
|
A10@ A9@ U10@ [increment matrix element]
|
|
[24] TF [store in matrix]
|
|
A24@ A2F T24@ [inc store address]
|
|
A11@ A2F G20@ [inc negative counter, loop till zero]
|
|
|
|
[Matrix is set up, now print it]
|
|
A3@ T10F [10F := width]
|
|
A4@ T11F [11F := height]
|
|
A5@ T12F [12F := address of matrix]
|
|
A7@ T13F [13F := number of decimals]
|
|
[39] A39@ GM [call print subroutine]
|
|
O1@ O2@ [add CR LF]
|
|
|
|
[Transpose matrix: 10F, 11F, 12F stay the same]
|
|
A6@ T13F [13F := address of transpose]
|
|
[45] A45@ GX [call transpose routine]
|
|
|
|
[Print transpose]
|
|
A10F TF A11F T10F AF T11F [swap width and height]
|
|
A13F T12F [12F := address of transpose]
|
|
A7@ T13F [13F := number of decimals]
|
|
[57] A57@ GM [call print subroutine]
|
|
|
|
O@ [figures mode, dummy to flush teleprinter buffer]
|
|
ZF [stop]
|
|
E12Z [enter at 12 (relative)]
|
|
PF [accumulator = 0 on entry]
|