00001 *************************
00002 *
00003 * M1616.ASM
00004 * MDJ 09-26-90
00005 *
00006 * 16-BIT BY 16-BIT
00007 * UNSIGNED INTEGER
00008 * MULTIPLY
00009 *
00010 *************************
00011 *
00012 * U AND S STACKS MUST
00013 * ALREADY BE INITIALIZED
00014 *
00015 * ON ENTRY, MULTIPLICAND
00016 * #1 MUST BE IN MLTIC1
00017 * (16-BIT) AND 
00018 * MULTIPLICAND #2 MUST BE
00019 * IN MLTIC2 (16-BIT)
00020 *
00021 * ON EXIT, THE 32-BIT
00022 * RESULT IS IN RESULT AND
00023 * A 16-BIT RESULT (IF
00024 * VALID) IS IN R16
00025 *
00026 *************************
00027 MLTIC1  EQU     $CB     MULTIPLICAND #1 (SCRATCHPAD)
00028 MLTIC2  EQU     $CD     MULTIPLICAND #2 (SCRATCHPAD)
00029 RESULT  EQU     $CF     32-BIT RESULT (SCRATCHPAD)
00030 R16     EQU     $D1     16-BIT RESULT (SCRATCHPAD)
00031         ORG     $4327
00032 M1616   PSHS    A,B
00033         CLR     RESULT  CLEAR RESULT LOCATIONS
00034         CLR     RESULT+1
00035         CLR     RESULT+2
00036         CLR     RESULT+3
00037         LDA     MLTIC1  MLTIC1 HIGH BYTE
00038         LDB     MLTIC2  MLTIC2 HIGH BYTE
00039         MUL
00040         STD     RESULT+4 T1D & T2D
00041         LDD     MLTIC1+1 MLTIC1 LOW BYTE & MLTIC2 HI-BYTE
00042         MUL
00043         STD     RESULT+6 T2C & T3C
00044         LDA     MLTIC1  MLTIC1 HIGH BYTE
00045         LDB     MLTIC2+1 MLTIC2 LOW BYTE
00046         MUL
00047         STD     RESULT+8 T2B & T3B
00048         LDA     MLTIC1+1 MLTIC1 LOW BYTE
00049         LDB     MLTIC2+1 MLTIC2 LOW BYTE
00050         MUL
00051         STD     RESULT+10 T3A & T4A
00052         LDA     RESULT+11 T4A
00053         STA     RESULT+3 R4
00054         LDA     RESULT+10 T3A
00055         ADDA    RESULT+9 +T3B
00056         BCC     M16A    BRANCH IF NO CARRY
00057         INC     RESULT+1 R2=R2+1
00058 M16A    ADDA    RESULT+7 +T3C
 
 
 
 
 
 
 
 
00059         BCC     M16B    BRANCH IF NO CARRY
00060         INC     RESULT+1 R2=R2+1
00061 M16B    STA     RESULT+2 R3
00062         LDA     RESULT+1 R2
00063         ADDA    RESULT+8 +T2B
00064         BCC     M16C    BRANCH IF NO CARRY
00065         INC     RESULT  R1=R1+1
00066 M16C    ADDA    RESULT+6 +T2C
00067         BCC     M16D    BRANCH IF NO CARRY
00068         INC     RESULT  R1=R1+1
00069 M16D    ADDA    RESULT+5 +T2D
00070         BCC     M16E    BRANCH IF NO CARRY
00071         INC     RESULT  R1=R1+1
00072 M16E    STA     RESULT+1 R2
00073         LDA     RESULT  R1
00074         ADDA    RESULT+4 +T1D
00075         STA     RESULT  R1
00076         PULS    A,B
00077 ZEND    RTS
00078         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
