00001 *************************
00002 *
00003 * SAA.ASM
00004 * MDJ 11-19-90
00005 *
00006 * U-STACK OPERATORS
00007 *
00008 *************************
00009 *
00010 * REQUIRES: M1616
00011 *           D3216
00012 *
00013 *************************
00014 *
00015 S0      EQU     $FE     BOTTOM OF STACK ADDRESS
00016 MLTIC1  EQU     $CB     WORKING MULTIPLICATION VARIABLES
00017 MLTIC2  EQU     $CD
00018 R16     EQU     $D1
00019 DIVDND  EQU     $CB     WORKING DIVISION VARIABLES
00020 DIVSOR  EQU     $CF
00021 M1616   EQU     $4327   16 BY 16 UNSIGNED MULTIPLY
00022 D3216   EQU     $437E   32 BY 16 UNSIGNED DIVIDE
00023         ORG     $4800
00024 *
00025 *************************
00026 *
00027 * QDUP
00028 * (16b -- 16b 16b) or
00029 * (0 -- 0)
00030 * DUPLICATES THE TOP 16b
00031 * ON THE U-STACK IF IT IS
00032 * NON-ZERO
00033 *
00034 *************************
00035 *
00036 QDUP    PSHS    A,B     ?DUP
00037         PULU    A,B
00038         PSHU    A,B
00039         CMPD    #0
00040         BEQ     QDUP1
00041         PSHU    A,B
00042 QDUP1   PULS    A,B
00043         RTS
00044 *
00045 *************************
00046 *
00047 * DROP
00048 * (16b -- )
00049 * REMOVES THE TOP 16b
00050 * FROM THE U-STACK
00051 *
00052 *************************
00053 *
00054 DROP    PSHS    A,B
00055         PULU    A,B
00056         PULS    A,B
00057         RTS
00058 *
 
 
 
 
 
 
 
 
00059 *************************
00060 *
00061 * DEPTH
00062 * (-- +n)
00063 * +n IS THE NUMBER OF 16b
00064 * VALUES ON THE U-STACK
00065 * BEFORE +n WAS PLACED ON
00066 * THE U-STACK (ANY 8b
00067 * REMAINDER IS IGNORED)
00068 *
00069 *************************
00070 *
00071 DEPTH   PSHS    A,B
00072         CLR     DIVDND
00073         CLR     DIVDND+1
00074         CLR     DIVSOR
00075         STU     DIVDND+2
00076         LDD     S0
00077         SUBD    DIVDND+2
00078         STD     DIVDND+2
00079         LDA     #2
00080         STA     DIVSOR+1
00081         JSR     D3216
00082         LDD     DIVDND+2
00083         PSHU    A,B
00084         PULS    A,B
00085         RTS
00086 *
00087 *************************
00088 *
00089 * DUP
00090 * (16b -- 16b 16b )
00091 * DUPLICATES THE TOP 16b
00092 * ON THE U-STACK
00093 *
00094 *************************
00095 *
00096 DUP     PSHS    A,B
00097         PULU    A,B
00098         PSHU    A,B
00099         PSHU    A,B
00100         PULS    A,B
00101         RTS
00102 *
00103 *************************
00104 *
00105 * SWAP
00106 * (16b1 16b2 --
00107 *  16b2 16b1)
00108 * EXCHANGES THE TOP TWO
00109 * U-STACK ENTRIES
00110 *
00111 *************************
00112 *
00113 SWAP    PSHS    A,B,X
00114         PULU    A,B
00115         PULU    X
00116         PSHU    A,B
 
 
 
 
 
 
 
 
00117         PSHU    X
00118         PULS    A,B,X
00119         RTS
00120 *
00121 *************************
00122 *
00123 * OVER
00124 * (16b1 16b2 --
00125 *  16b1 16b2 16b3)
00126 * 16b3 IS A COPY OF 16b1)
00127 *
00128 *************************
00129 *
00130 OVER    PSHS    A,B
00131         LDD     2,U
00132         PSHU    A,B
00133         PULS    A,B
00134         RTS
00135 *
00136 *************************
00137 *
00138 * ROT
00139 * (16b1 16b2 16b3 --
00140 *  16b2 16b3 16b1)
00141 * THE TOP THREE U-STACK
00142 * ENTRIES ARE ROTATED,
00143 * BRINGING THE DEEPEST
00144 * TO THE TOP
00145 *
00146 *************************
00147 *
00148 ROT     PSHS    A,B,X,Y
00149         PULU    A,B
00150         PULU    X
00151         PULU    Y
00152         PSHU    X
00153         PSHU    A,B
00154         PSHU    Y
00155         PULS    A,B,X,Y
00156         RTS
00157 *
00158 *************************
00159 *
00160 * PICK
00161 * (+n -- 16b)
00162 * 16b IS A COPY OF THE
00163 * +nth STACK VALUE, NOT
00164 * COUNTING +n ITSELF
00165 *
00166 *************************
00167 *
00168 PICK    PSHS    A,B,X
00169         CLR     MLTIC2
00170         LDA     #2
00171         STA     MLTIC2+1
00172         PULU    A,B
00173         STD     MLTIC1
00174         JSR     M1616
 
 
 
 
 
 
 
 
00175         TFR     U,D
00176         ADDD    R16
00177         TFR     D,X
00178         LDD     ,X
00179         PSHU    A,B
00180         PULS    A,B,X
00181         RTS
00182 *
00183 *************************
00184 *
00185 * ROLL
00186 * (+n -- )
00187 * THE +nth U-STACK VALUE,
00188 * NOT COUNTING +n ITSELF,
00189 * IS FIRST REMOVED AND
00190 * THEN TRANSFERRED TO THE
00191 * TOP OF THE U-STACK,
00192 * MOVING THE REMAINING
00193 * VALUES INTO THE VACATED
00194 * POSITION
00195 *
00196 *************************
00197 *
00198 ROLL    PSHS    A,B,X,Y
00199         PULU    X
00200         TFR     X,Y
00201 ROLL1   CMPX    #0
00202         BEQ     ROLL2
00203         PULU    A,B
00204         PSHS    A,B
00205         LEAX    -1,X
00206         BRA     ROLL1
00207 ROLL2   PULU    A,B
00208         TFR     Y,X
00209         TFR     D,Y
00210 ROLL3   CMPX    #0
00211         BEQ     ROLL4
00212         PULS    A,B
00213         PSHU    A,B
00214         LEAX    -1,X
00215         BRA     ROLL3
00216 ROLL4   PSHU    Y
00217         PULS    A,B,X,Y
00218 ZEND    RTS
00219         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
