/ *200 START, CLA TAD M1 JMS MULP M2, -1 HLT JMP START / M1, -1 / / / MULP SUBROUTINE / / RECEIVES MULTIPLICANDS AT CALL+1 AND IN AC / / RETURNS ANSWER IN AC,,MQ WITH LINK=0 / RETURNS AT CALL+2 / / MECHANISM: USES SHIFT AND ADD / / HIGH PART OF ANSWER BUILT IN 'AC' / CONTROL BITS SHIFT RIGHT OUT OF 'MQ', WHILE ANSWER / BITS PROPOGATE DOWN INTO MQ / MULP, 0 MQL /CONTROL BITS IN MQ TAD (-14 /CONTROL COUNT, 12 BITS DCA MULC /LOOP CAN'T QUIT EARLY ON ALL ZEROES CLL /NASTY, THIS REAPPEARS AS LINK UPON EXIT LOOP, SWP /GET MQ TO SHIFT CONTROL BIT TO LINK RAR /AND SHIFT IN ANSWER BIT TO TOP OF MQ SWP /GET AC BACK SNL /SKIP IF WE HAVE TO ADD IN MULTIPLICAND JMP NOADD /NO WE DON'T, JUST DO SHIFT CLL /MUST CLEAR LINK TO REGISTER CARRY FROM COMING TAD I MULP /ADDITION, GIVING 13 BIT RESULT NOADD, RAR /LOW BIT A RESULT TO LINK ISZ MULC /DONE YET JMP LOOP /NO SWP /FINAL ANSWER BIT TO MQ RAR /CLEARING LINK FROM 'LOOP-1' SWP ISZ MULP /INCREMENT RETURN ADDR JMP I MULP / MULC, 0 / / $