.TITLE CLUC18 .IDENT /V1.0/ .SBTTL COVERT A CLUNK VALUE TO AN 18 CHARACTER STRING ; THIS ROUTINE WILL CONVERT A CLUNK VALUE TO AND 18 CHARACTER ARRAY ; OF DIGITS BETWEEN ZERO AND NINE ; ; LAST EDIT: 1-JUL-1988 11:43:57 ; ; AUTHOR: PETER STADICK ; CARGILL INC. ; P.O. DRAWER AR ; RESERVE,LA 70084 ; ; EDIT HISTORY: CREATED JUN-88 PJS ; ; ; CALL PARAMETER LIST ; 2(R5) = ADDRESS TO CLUNK VALUE ( INPUT PRESERVED ) ; 4(R5) = ADDRESS TO ARRAY OF 18 DIGITS ( OUTPUT ) ; ; THIS ROUTINE PERFORMS 18 DIVIDES TO COMPUTE THE DIGIT VALUE FOR ; EACH PLACE IN THE OUTPUT STRING. ; ; ALL REGISTERS ARE PRESERVED ; .PSECT CLUNK,RO,LCL,REL CLUC18:: MOV R0, -(SP) ; PRESERVE REGISTERS MOV R1, -(SP) MOV R2, -(SP) MOV R3, -(SP) MOV R4, -(SP) MOV R5, -(SP) ; ; LOAD PLACE MULTIPLIES ONTO STACK ; ; 1 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00000,-(SP) MOV #^D00001,-(SP) ;LSW ; ; 10 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00000,-(SP) MOV #^D00010,-(SP) ;LSW ; ; 10^2 - 100 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00000,-(SP) MOV #^D00100,-(SP) ;LSW ; ; 10^3 - 1,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00000,-(SP) MOV #^D01000,-(SP) ;LSW ; ; 10^4 - 10,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00000,-(SP) MOV #^D10000,-(SP) ;LSW ; ; 10^5 - 100,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00001,-(SP) MOV #^D34464,-(SP) ;LSW ; ; 10^6 - 1,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00015,-(SP) MOV #^D16960,-(SP) ;LSW ; ; 10^7 - 10,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D00152,-(SP) MOV #^D-27008,-(SP) ;LSW ; ; 10^8 - 100,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D01525,-(SP) MOV #^D-7936,-(SP) ;LSW ; ; 10^9 - 1,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00000,-(SP) MOV #^D15258,-(SP) MOV #^D-13824,-(SP) ;LSW ; ; 10^10 - 10,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00002,-(SP) MOV #^D21515,-(SP) MOV #^D-7168,-(SP) ;LSW ; ; 10^11 - 100,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00023,-(SP) MOV #^D18550,-(SP) MOV #^D-6144,-(SP) ;LSW ; ; 10^12 - 1,000,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D00232,-(SP) MOV #^D-11099,-(SP) MOV #^D04096,-(SP) ;LSW ; ; 10^13 - 10,000,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D02328,-(SP) MOV #^D20082,-(SP) MOV #^D-24576,-(SP) ;LSW ; ; 10^14 - 100,000,000,000,000 MOV #^D00000,-(SP) ;MSW MOV #^D23283,-(SP) MOV #^D04218,-(SP) MOV #^D16384,-(SP) ;LSW ; ; 10^15 - 1,000,000,000,000,000 MOV #^D00003,-(SP) ;MSW MOV #^D-29314,-(SP) MOV #^D-23354,-(SP) MOV #^D-32768,-(SP) ;LSW ; ; 10^16 - 10,000,000,000,000,000 MOV #^D00035,-(SP) ;MSW MOV #^D-30990,-(SP) MOV #^D28609,-(SP) MOV #^D00000,-(SP) ;LSW ; ; 10^17 - 100,000,000,000,000,000 MOV #^D00355,-(SP) ;MSW MOV #^D17784,-(SP) MOV #^D23946,-(SP) MOV #^D00000,-(SP) ;LSW MOV SP,R4 ; SET R4 TO START OF PLACE MULIPLIERS MOV 2(R5),R0 ; INPUT CLUNK MOV 4(R5),R1 ; START OF OUTPUT ARRAY MOV R0,-(SP) ; DIVIDE PARAMETER BLOCK MOV R0,-(SP) MOV R0,-(SP) MOV R0,-(SP) MOV R0,-(SP) MOV R0,-(SP) MOV SP,R5 DIVDND=18. MOV R0,-(SP) ; BUFFER FOR DIVIDENED OF DIVIDE MOV R0,-(SP) MOV R0,-(SP) MOV R0,-(SP) QIOENT=10. MOV R0,-(SP) ; BUFFER FOR QUOTIENT MOV R0,-(SP) MOV R0,-(SP) MOV R0,-(SP) REMAIN=2. MOV #0,-(SP) ; REMAINDER MOV #0,-(SP) MOV #0,-(SP) MOV #0,-(SP) MOV R0,-(SP) ; STATUS RETURN SPOT MOV #18.,R2 ; NUMBER OF DIGITS TO PROCESS MOV (R0),DIVDND(SP) ; MOVE CLUNK VALUE TO DIVIDEND MOV 2(R0),DIVDND+2(SP) MOV 4(R0),DIVDND+4(SP) MOV 6(R0),DIVDND+6(SP) 10$: MOV SP,2(R5) ; DIVIDEND BUFFER ( CLUNK VALUE ) ADD #DIVDND,2(R5) MOV R4,4(R5) ; DIVISOR BUFFER ( PLACE VALUE ) MOV SP,6(R5) ; REMAINDER BUFFER ADD #REMAIN,6(R5) MOV SP,10(R5) ; QUOTIENT BUFFER OR DIGIT VALUE ADD #QIOENT,10(R5) MOV SP,12(R5) ; STATUS OF DIVIDE JSR PC, DIV64 ADD #060,@10(R5) ; CONVERT RESULT TO ASCII DIGIT MOVB @10(R5),(R1) ; MOVE DIGIT TO OUTPUT ARRAY INC R1 ; POINT TO NEXT PLACE IN ARRAY MOV REMAIN(SP), DIVDND(SP) ; MOVE REMAINDER TO DIVIDEND MOV REMAIN+2(SP),DIVDND+2(SP) MOV REMAIN+4(SP),DIVDND+4(SP) MOV REMAIN+6(SP),DIVDND+6(SP) ADD #8.,R4 ; POINT TO NEXT PLACE MULTIPLIER SOB R2,10$ ; LOOP UNTIL LAST DIGIT PROCESSED ADD #182.,SP ; ADJUST STACK BACK MOV (SP)+,R5 ; RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC .END