[A + B for Rosetta Code. Read two integers and find their sum. EDSAC program, Initial Orders 2.] [Print signed number, up to 10 digits, right-justified. Modification of library subroutine P7. 55 locations, load at even address.] T 56 K GKA3FT42@A47@T31@ADE10@T31@A48@T31@SDTDH44#@NDYFLDT4DS43@TF H17@S17@A43@G23@UFS43@T1FV4DAFG50@SFLDUFXFOFFFSFL4FT4DA49@T31@ A1FA43@G20@XFP1024FP610D@524D!FO46@O26@XFO46@SFL8FT4DE39@ [Subroutine to read signed number from input, up to 10 digits. Partly based on library subroutine R2. Result in 4D. Working registers: 0F = dump to clear acc 1F < 0 if number starts with minus, = 0 if not. 6D = character code, as double-word value] T 120 K G K A 3 F [make link for return] T 36 @ [plant in code; clear acc] H 7 @ [mult reg := 10/32] T 4 D [initialize result to 0] T 1 F [no minus sign yet] T 6 D [ensure 7F and sandwich bit are 0] [Loop until find valid first character of integer, namely decimal digit (char codes 0..9), plus (13), or minus (22).] [6] I 6 F [char code from input] [7] T F [clear acc; also serves as constant 10/32] S 6 F [load negative of char code] A 39 @ [add 9] E 24 @ [if decimal digit, out] A 38 @ [add 3] E 6 @ [if 10..12, try again] A 37 @ [add 1] E 20 @ [if plus, out with acc = 0] A 39 @ [add 9] G 6 @ [if 23..31, try again] S 37 @ [subtract 1] E 6 @ [if 14..21, try again] T 1 F [minus, acc = -1, store in sign] [Loop to read characters after first. Assumes acc = 0 here.] [20] I 6 F [next char from input] S 6 F [negative to acc] A 39 @ [add 9] G 30 @ [finished if not digit] [24] T F [clear acc] V 4 D [acc := 10/32 times partial sum] L 8 F [shift 5 left] A 6 D [add latest digit] T 4 D [update partial sum] E 20 @ [loop for next char] [Here when no more digits] [30] T F [clear acc] A 1 F [load sign of result] E 36 @ [exit (with acc = 0) if >= 0] T F [< 0, clear acc] S 4 D [subtract number] T 4 D [store back negated; clear acc] [36] E F [exit with acc = 0 (EDSAC convention)] [Constants] [37] P D [1] [38] P 1 D [3] [39] P 4 D [9] [Main routine] T 200 K G K [Variables] [0] P F P F [integer A] [2] P F P F [integer B] [Constants] [4] # F [figures] [5] @ F [carriage return] [6] & F [line feed] [7] K 4096 F [null char] [Enter with acc = 0] [8] O 4 @ [set teleprinter to figures] A 9 @ G 120 F [read integer A from input] A 4 D [load] U #@ [save] T D [to 0D for printing] A 14 @ G 56 F [print A] O 5 @ [followed by new line] O 6 @ A 18 @ G 120 F [read integer B from input] A 4 D [load] U 2#@ [save] T D [to 0D for printing] A 23 @ G 56 F [print B] O 5 @ [followed by new line] O 6 @ A #@ [load A] A 2#@ [add B] T D [A + B to 0D for printing] A 30 @ G 56 F [print A + B] O 5 @ [followed by new line] O 6 @ O 7 @ [print null to flush teleprinter buffer] Z F [stop] E 8 Z P F -987.123.