39 lines
1.9 KiB
Text
39 lines
1.9 KiB
Text
[Alternative "Hello World" for Rosetta Code]
|
|
|
|
[Subroutine to print a string.]
|
|
[Parameter: A order for first character follows subroutine call (G order).]
|
|
[Modified 2022-07-13: A order for first character was formerly passed in 0F.]
|
|
[String is terminated with EDSAC null, which is printed]
|
|
T56K GK [load at 56; set relative addressing]
|
|
A18@ U17@ [plant return link, increasing address by 3
|
|
instead of 2 as usual]
|
|
S19@ [make A order to load A order after subroutine call]
|
|
T4@ [plant in code]
|
|
[4] AF [(planted) load A order after subroutine call]
|
|
[5] T6@ [loop: plant A order for next character]
|
|
[6] AF [load next character]
|
|
UF [to 0F for printing; keep it in acc]
|
|
OF [output to teleprinter]
|
|
E12@ [if char >= 0, not EDSAC null]
|
|
A20@ [if char < 0, add 15 to test for EDSAC null]
|
|
G16@ [jump to exit if null]
|
|
[12] TF [clear acc]
|
|
A6@ A2F [inc address in A order above]
|
|
G5@ [loop back, because top 5 bits = A = 11100]
|
|
[16] TF [clear acc on exit (EDSAC convention)]
|
|
[17] ZF [(planted) jump back to caller]
|
|
[18] U3F [constant for making return link]
|
|
[19] U1F [constant for picking up parameter]
|
|
[20] K2048F [constant for testing final null]
|
|
|
|
[Main routine]
|
|
T96K GK [load at 96; set relative addressing
|
|
[Enter with acc = 0]
|
|
[0] A@ G56F [call print subroutine]
|
|
A4@ [A order for first character of string]
|
|
ZF [subroutine returns here; halt machine]
|
|
[4] K2048F HF EF LF LF OF !F WF OF RF LF DF @F &F K4096F
|
|
[The above string is: letter shift, 'HELLO WORLD', CR, LF, null]
|
|
EZ [define entry point]
|
|
PF [acc = 0 on entry]
|
|
[end]
|