00001 *************************
00002 *
00003 * MS1616.ASM
00004 * MDJ 09-26-90
00005 *
00006 * 16-BIT BY 16-BIT
00007 * SIGNED INTEGER MULTIPLY
00008 *
00009 *************************
00010 *
00011 * REQUIRES: M1616
00012 *
00013 * ON ENTRY, SIGNED 16-BIT
00014 * MULTIPLICAND #1 MUST BE
00015 * IN MLTIC1 AND SIGNED
00016 * 16-BIT MULTIPLICAND #2
00017 * MUST BE IN MLTIC2
00018 *
00019 * ON RETURN, 32-BIT
00020 * SIGNED RESULT IS IN
00021 * RESULT AND 16-BIT
00022 * SIGNED RESULT (IF
00023 * VALID) IS IN RS16
00024 *
00025 *************************
00026 *
00027 M1616   EQU     $4327   UNSIGNED MULTIPLY ROUTINE
00028 MLTIC1  EQU     $CB     MULTIPLICAND #1 (SCRATCHPAD)
00029 MLTIC2  EQU     $CD     MULTIPLICAND #2 (SCRATCHPAD)
00030 RESULT  EQU     $CF     32-BIT RESULT (SCRATCHPAD)
00031 R16     EQU     $D1     SCRATCH INTERNAL UNSIGNED 16-BIT
00032 RS16    EQU     $D9     16-BIT RESULT (SCRATCHPAD)
00033         ORG     $43A8
00034 MS1616  PSHS    A,B
00035         LDA     MLTIC1  MLTIC1 HIGH BYTE
00036         EORA    MLTIC2  EORA MLTIC2 HIGH BYTE
00037         PSHS    CC      SAVE RESULT SIGN
00038         LDD     MLTIC1  TEST SIGN OF MLTIC1
00039         BPL     MS16A   GO IF +
00040         LDD     #0
00041         SUBD    MLTIC1  ABSOLUTE VALUE
00042         STD     MLTIC1  REPLACE
00043 MS16A   LDD     MLTIC2  TEST SIGN OF MLTIC2
00044         BPL     MS16B   GO IF +
00045         LDD     #0
00046         SUBD    MLTIC2  ABSOLUTE VALUE
00047         STD     MLTIC2  REPLACE
00048 MS16B   JSR     M1616   DO UNSIGNED MULTIPLY
00049         LDD     R16     16-BIT UNSIGNED RESULT
00050         STD     RS16    SAVE TO SIGNED LOCATION
00051         PULS    CC      GET RESULT SIGN
00052         BPL     MS16C   GO IF POSITIVE RESULT
00053         LDD     #0
00054         SUBD    RS16    NEGATE 16-BIT RESULT
00055         STD     RS16    REPLACE
00056         COM     RESULT  NEGATE 32-BIT RESULT
00057         COM     RESULT+1
00058         COM     RESULT+2
 
 
 
 
 
 
 
 
00059         COM     RESULT+3
00060         LDD     RESULT+2
00061         ADDD    #1
00062         STD     RESULT+2
00063         LDA     RESULT+1
00064         ADCA    #0
00065         STA     RESULT+1
00066         LDA     RESULT
00067         ADCA    #0
00068         STA     RESULT
00069 MS16C   PULS    A,B
00070 ZEND    RTS
00071         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
