/021 SUBROUTINE TO PRINT DOUBLE LENGTH DECIMAL / /CALL: JMS DDECP / MOST SIGNIFICANT PART / LEAST SIGNIFICANT PART / NUMBER OF DIGITS TO BE PRINTEDD( <=8 ) / RETURN / / DDECPR, 0 TAD I DDECPR /FETCH MOST SIGNIFICANT PART DCA DDX /SAVE DCA DDPD /CLR NUMB. OF PRINTED DIGITS ISZ DDECPR TAD I DDECPR /FETCHHLEAST SIGNIFICANT PART DCA DDX+1 /SAVE ISZ DDECPR TAD I DDECPR /FETCH FORMAT DCA DDNDIG ISZ DDECPR /CORRECT RETURN TAD DDATPL /ADDRESS 10-POWER LOW DCA DDPPPL /POINTER 10-POWER LOW TAD DDATPH /ADDRESS 10-POWER HIGH DCA DDPTPH /POINTER 1-POWER HIGH TAD M10 DCA DDNFAC /FACTORISE 8 DIGITS DCA DDIGIT /CLEAR DIGIT DDSUB, CLL TAD DDX+1 /L SIGNIFIC PART OF NUMB. TAD I DDPTPL /LOW PART FACTOR DCA DDX+1 /STORE RAL /OVERFLOW IN AC TAD DDX /M SIGNIFIC PART OF NUMB. TAD I DDPTH /HIGH FACTOR SNL /RESULT NEGATIVE? JMP .+4 /YES DCA DDX /STORE RESULT OF SUBTRACTION ISZ DDIGIT /NO, STEP UP DIGIT JMP DDSUB /SUBTRACT 2-LENGTH AGAIN CLA /CLEAR BEFORE CORRECTION TAD I DDPTPL /10-POWER LOW CIA /MINUS TAD DDX+1 /CORRECT LAST SUBTRACTION DCA DDX+1 /STORE TAD DDIGIT /GET DIGIT SZA /=0? JMP DDPDIN /NO TAD DDPD SZA CLA /ALREADY PRINTED? JMP DDPDIN /YES IAC TAD DDNFAC SMA CLA /ALL DI#D0= 0? JMP DDPDIN /YES TAD DDNFAC /NEGATIVE VALUE TAD DDNDIG /POSITIVE VALUE SPA CLA /SPACE? JMP DDPTIN TAD C240 /YES JMP DDFPR DDPDII, ISZ DDPD TAD C260 /CONVERT TO ASCII DDFPR, JMS PRINT /PRINT DIGIT DDPTIN, ISZ DDPTPL /STEP UP POINTER LOW ISZ DDPTPH /STEP UP POINTER HIGH ISZ DDNFAC /READY FACTTRIZE? JMP DDSUB-1 /NO, NEXT DIGIT TAD DDPD CIA TAD DDNDIG SPA SNA CLA JMP .+3 TAD DDNDIG DCA DDPD CLL JMP I DDECPR /EXIT, ENN PUNCHOUT ROUTINE / / /CONSTANTS PUNCH OUT ROUTINE DDATPL, DDTPL DDATPH, DDTPH DDPTPL, 0 DDPTPH, 0 DDX, 0 0 DDNFAC, 0 DDIGIT, 0 DDTPL, 4600 6700 4540 4360 6030 7634 7766 7777 DDTPH, 3166 7413 7747 7775 7777 7777 7777 7777 DDPD, 0 DDNDIG, 0 /GENERAL CONSTANTS M10, -10 C240, 240 C260, 260