Trying to write machine code by hand and figuring out the instruction operand encoded addresses was a pain
/Trying to write machine code by hand and figuring out the instruction operand encoded addresses was a pain. So, Bill wrote a PC based Assembler to support program generation for our 1441 processor. He used a symbolic coded multiply program listing and a machine coded divide program listing found in a 1401 system reference manual as a starting point to develop routines to do multiply and divide operations as our 1441 was not built with these instructions. The closest our 1440 system comes to multiply and divide are two blank buttons on the 1447 console that would have been operational had the machine been equipped with the multiply/divide option.
Several errors were found in the manual's multiply source listing, we corrected those. The machine coded divide program instructions wereconverted to symbolic form, assembled and entered into the 1441. It worked great, once! As it was designed, the program modified itself as it executed and had to have the instructions reinitialized before it could be used again. Bill discovered that our 1441 was built with the index register option so he revised the program to make use of it thus eliminating the need to reinitialize instructions and it was also then freed of the restriction that it reside in low core (addresses 000-999).
We tested various 1441 machine instructions. When execution errors occurred, Fred, Gary and Jack sprang into action. They got out the oscilloscope and ALDs (the machine's logic diagrams that we were lucky to receive with the hardware) and tracked down each problem. Bad card components were replaced (usually a bad germanium transistor was the culprit) and we were back in business.