ALWAYS 02SEP0 SUM .MCALL DIR$ .PSECT ;************************************************************************ ;* * ;* MODULE: SUM * ;* * ;* FUNCTION: COMPUTE A 16-BIT BYTE-WISE SUM OVER A RANGE * ;* * ;* INPUT PARAMETERS: * ;* * ;* R0 POINTS TO THE COMMAND LINE IN PROCESS * ;* * ;* OUTPUT PARAMETERS: * ;* * ;* R0 POINTS JUST BEYOND COMMAND LINE * ;* * ;* DESTROYS: R1,R2,R3 * ;* * ;* AUTHOR: KEVIN ANGLEY * ;* * ;* DATE: 29-AUG-80 * ;* * ;************************************************************************ SUM:: CALL FROMTH ; GET FROM ADDR IN R1, THRU ADDR IN R2 ; AND COUNT IN R3 BCS 250$ ; CS: NOT SUCCESSFUL, TAKE ERROR EXIT PUSH R0 ; SAVE COMMAND LINE POINTER CLR R0 ; CLEAR INITIAL SUM MOV R1,R2 ; SAVE FROM ADDRESS IN R2 - DON'T NEED THRU 30$: MOVB MEMORY(R2),R1 ; GET BYTE TO ADD BIC #177400,R1 ; CLEAR HIGH BYTE ADD R1,R0 ; ADD TO ACCUMULATED SUM INC R2 ; MOVE TO NEXT VIRTUAL MEMORY LOCATION SOB R3,30$ ; USE COUNT TO COUNT LOCATIONS TO SUM MOV R0,R1 ; PREPARE FOR CONVERSION MOV #SMO+SMOLEN-4,R0 ; PUT INTO MESSAGE CALL PUTHX4 ; CONVERT TO HEX - PUT IN MESSAGE OUTPUT SMO POP R0 ; RESTORE COMMAND LINE POINTER 250$: ; ERROR EXIT 255$: ; NORMAL EXIT CALL$R EXTRA ; PURGE COMMAND LINE OF SUPERFLUOUS JUNK ; AND RETURN FROM THERE .END