00001 *************************
00002 *
00003 * SAC.ASM
00004 * MDJ 11-19-90
00005 *
00006 * MEMORY REFERENCE,
00007 * LOGICAL, RELATIONAL,
00008 * AND UTILITY OPERATORS
00009 *
00010 *************************
00011 *
00012         ORG     $4B2D
00013 *
00014 *************************
00015 *
00016 * EXCL
00017 * (16b addr -- )
00018 * 16b IS STORED AT addr
00019 *
00020 *************************
00021 *
00022 EXCL    PSHS    A,B,X   !
00023         PULU    X
00024         PULU    A,B
00025         STD     ,X
00026         PULS    A,B,X
00027         RTS
00028 *
00029 *************************
00030 *
00031 * EXPL
00032 * (w1 addr -- )
00033 * w1 IS ADDED TO THE w
00034 * VALUE AT addr USING THE
00035 * CONVENTION FOR +.  THE
00036 * RESULT IS STORED AT
00037 * addr
00038 *
00039 *************************
00040 *
00041 EXPL    PSHS    A,B,X   +!
00042         PULU    X
00043         PULU    A,B
00044         ADDD    ,X
00045         STD     ,X
00046         PULS    A,B,X
00047         RTS
00048 *
00049 *************************
00050 *
00051 * AT
00052 * (addr -- 16b)
00053 * 16b IS THE VALUE AT
00054 * addr
00055 *
00056 *************************
00057 *
00058 AT      PSHS    A,B,X   @
 
 
 
 
 
 
 
 
00059         PULU    X
00060         LDD     ,X
00061         PSHU    A,B
00062         PULS    A,B,X
00063         RTS
00064 *
00065 *************************
00066 *
00067 * CEXCL
00068 * (16b addr -- )
00069 * THE LEAST SIGNIFICANT
00070 * 8 BITS OF 16b ARE 
00071 * STORED INTO THE BYTE AT
00072 * addr
00073 *
00074 *************************
00075 *
00076 CEXCL   PSHS    A,B,X   C!
00077         PULU    X
00078         PULU    A,B
00079         STB     ,X
00080         PULS    A,B,X
00081         RTS
00082 *
00083 *************************
00084 *
00085 * CAT
00086 * (addr -- 8b)
00087 * 8b IS THE CONTENTS OF
00088 * THE BYTE AT addr
00089 *
00090 *************************
00091 *
00092 CAT     PSHS    A,B,X   C@
00093         PULU    X
00094         LDB     ,X
00095         CLRA
00096         PSHU    A,B
00097         PULS    A,B,X
00098         RTS
00099 *
00100 *************************
00101 *
00102 * AND
00103 * (16b1 16b2 -- 16b3)
00104 * 16b3 IS THE BIT-BY-BIT
00105 * LOGICAL "AND" OF 16b1
00106 * WITH 16b2
00107 *
00108 *************************
00109 *
00110 AND     PSHS    A,B,X
00111         PULU    A,B
00112         ANDA    ,U
00113         ANDB    1,U
00114         PULU    X
00115         PSHU    A,B
00116         PULS    A,B,X
 
 
 
 
 
 
 
 
00117         RTS
00118 *
00119 *************************
00120 *
00121 * NOT
00122 * (16b1 -- 16b2)
00123 * 16b2 IS THE ONE'S 
00124 * COMPLEMENT OF 16b1
00125 *
00126 *************************
00127 *
00128 NOT     PSHS    A,B
00129         PULU    A,B
00130         COMA
00131         COMB
00132         PSHU    A,B
00133         PULS    A,B
00134         RTS
00135 *
00136 *************************
00137 *
00138 * OR
00139 * (16b1 16b2 -- 16b3)
00140 * 16b3 IS THE BIT-BY-BIT
00141 * INCLUSIVE "OR" OF 16b1
00142 * WITH 16b2
00143 *
00144 *************************
00145 *
00146 OR      PSHS    A,B,X
00147         PULU    A,B
00148         ORA     ,U
00149         ORB     1,U
00150         PULU    X
00151         PSHU    A,B
00152         PULS    A,B,X
00153         RTS
00154 *
00155 *************************
00156 *
00157 * XOR
00158 * (16b1 16b2 -- 16b3)
00159 * 16b3 IS THE BIT-BY BIT
00160 * EXCLUSIVE "OR" OF 16b1
00161 * WITH 16b2
00162 *
00163 *************************
00164 *
00165 XOR     PSHS    A,B,X
00166         PULU    A,B
00167         EORA    ,U
00168         EORB    1,U
00169         PULU    X
00170         PSHU    A,B
00171         PULS    A,B,X
00172         RTS
00173 *
00174 *************************
 
 
 
 
 
 
 
 
00175 *
00176 * ZLT
00177 * (n -- flag)
00178 * flag IS TRUE IF n IS 
00179 * LESS THAN ZERO
00180 *
00181 *************************
00182 *
00183 ZLT     PSHS    A,B,X   0<
00184         PULU    A,B
00185         CMPD    #0
00186         BLT     ZLT1
00187         LDX     #0
00188         BRA     ZLT2
00189 ZLT1    LDX     #$FFFF
00190 ZLT2    PSHU    X
00191         PULS    A,B,X
00192         RTS
00193 *
00194 *************************
00195 *
00196 * ZEQ
00197 * (w -- flag)
00198 * flag IS TRUE IF w IS
00199 * ZERO
00200 *
00201 *************************
00202 *
00203 ZEQ     PSHS    A,B,X   0=
00204         PULU    A,B
00205         CMPD    #0
00206         BEQ     ZEQ1
00207         LDX     #0
00208         BRA     ZEQ2
00209 ZEQ1    LDX     #$FFFF
00210 ZEQ2    PSHU    X
00211         PULS    A,B,X
00212         RTS
00213 *
00214 *************************
00215 *
00216 * ZGT
00217 * (n -- flag)
00218 * flag IS TRUE IF n IS
00219 * GREATER THAN ZERO
00220 *
00221 *************************
00222 *
00223 ZGT     PSHS    A,B,X   0>
00224         PULU    A,B
00225         CMPD    #0
00226         BGT     ZGT1
00227         LDX     #0
00228         BRA     ZGT2
00229 ZGT1    LDX     #$FFFF
00230 ZGT2    PSHU    X
00231         PULS    A,B,X
00232         RTS
 
 
 
 
 
 
 
 
00233 *
00234 *************************
00235 *
00236 * LT
00237 * (n1 n2 -- flag)
00238 * flag IS TRUE IF n1 IS
00239 * LESS THAN n2
00240 *
00241 *************************
00242 *
00243 LT      PSHS    A,B,X   <
00244         LDD     2,U
00245         CMPD    ,U
00246         BLT     LT1
00247         LDX     #0
00248         BRA     LT2
00249 LT1     LDX     #$FFFF
00250 LT2     PULU    A,B
00251         PULU    A,B
00252         PSHU    X
00253         PULS    A,B,X
00254         RTS
00255 *
00256 *************************
00257 *
00258 * EQ
00259 * (w1 w1 -- flag)
00260 * flag IS TRUE IF w1 IS
00261 * EQUAL TO w2
00262 *
00263 *************************
00264 *
00265 EQ      PSHS    A,B,X   =
00266         PULU    A,B
00267         CMPD    ,U
00268         BEQ     EQ1
00269         LDX     #0
00270         BRA     EQ2
00271 EQ1     LDX     #$FFFF
00272 EQ2     PULU    A,B
00273         PSHU    X
00274         PULS    A,B,X
00275         RTS
00276 *
00277 *************************
00278 *
00279 * GT
00280 * (n1 n2 -- flag)
00281 * flag IS TRUE IF n1 IS
00282 * GREATER THAN n2
00283 *
00284 *************************
00285 *
00286 GT      PSHS    A,B,X   >
00287         LDD     2,U
00288         CMPD    ,U
00289         BGT     GT1
00290         LDX     #0
 
 
 
 
 
 
 
 
00291         BRA     GT2
00292 GT1     LDX     #$FFFF
00293 GT2     PULU    A,B
00294         PULU    A,B
00295         PSHU    X
00296         PULS    A,B,X
00297         RTS
00298 *
00299 *************************
00300 *
00301 * DLT
00302 * (d1 d2 -- flag)
00303 * flag IS TRUE IF d1 IS
00304 * LESS THAN d2 ACCORDING
00305 * TO THE OPERATION OF <
00306 * EXCEPT EXTENDED TO
00307 * 32 BITS
00308 *
00309 *************************
00310 *
00311 DLT     JMP     $5113   JUMP TO MODIFIED DLT ROUTINE
00321         ORG     $4C6F
00338 *
00339 *************************
00340 *
00341 * ULT
00342 * (u1 u2 -- flag)
00343 * flag IS TRUE IF u1 IS
00344 * LESS THAN u2
00345 *
00346 *************************
00347 *
00348 ULT     PSHS    A,B,X   U<
00349         LDD     2,U
00350         CMPD    ,U
00351         BLO     ULT1
00352         LDX     #0
00353         BRA     ULT2
00354 ULT1    LDX     #$FFFF
00355 ULT2    PULU    A,B
00356         PULU    A,B
00357         PSHU    X
00358         PULS    A,B,X
00359         RTS
00360 *
00361 *************************
00362 *
00363 * CMV
00364 * (addr1 addr2 u --)
00365 * MOVE u BYTES BEGINNING
00366 * AT addr1 TO addr2.  THE
00367 * BYTE AT addr1 IS MOVED
00368 * FIRST, PROCEEDING
00369 * TOWARD HIGH MEMORY
00370 *
00371 *************************
00372 *
00373 CMV     PSHS    A,B,X,Y CMOVE
 
 
 
 
 
 
 
 
00374         PULU    A,B
00375         PULU    X
00376         PULU    Y
00377 CMV1    CMPD    #0
00378         BEQ     CMV2
00379         PSHS    A,B
00380         LDA     ,Y+
00381         STA     ,X+
00382         PULS    A,B
00383         SUBD    #1
00384         BRA     CMV1
00385 CMV2    PULS    A,B,X,Y
00386         RTS
00387 *
00388 *************************
00389 *
00390 * CMVTO
00391 * (addr1 addr2 u -- )
00392 * MOVE THE u BYTES AT
00393 * addr1 TO addr2.  THE 
00394 * MOVE BEGINS BY MOVING
00395 * THE BYTE AT addr1+u-1
00396 * TO addr2+u-1 AND
00397 * PROCEEDS TO
00398 * SUCCESSIVELY LOWER
00399 * ADDRESSES FOR u BYTES
00400 *
00401 *************************
00402 *
00403 CMVTO   PSHS    A,B,X,Y CMOVE>
00404         LDD     ,U
00405         ADDD    2,U
00406         STD     2,U
00407         LDD     ,U
00408         ADDD    4,U
00409         STD     4,U
00410         PULU    A,B
00411         PULU    X
00412         PULU    Y
00413 CMVT1   CMPD    #0
00414         BEQ     CMVT2
00415         PSHS    A,B
00416         LDA     ,-Y
00417         STA     ,-X
00418         PULS    A,B
00419         SUBD    #1
00420         BRA     CMVT1
00421 CMVT2   PULS    A,B,X,Y
00422         RTS
00423 *
00424 *************************
00425 *
00426 * CNT
00427 * (addr1 -- addr2 +n)
00428 * addr2 IS addr1+1 AND +n
00429 * IS THE LENGTH OF THE
00430 * COUNTED STRING AT addr1
00431 * THE BYTE AT addr1 
 
 
 
 
 
 
 
 
00432 * CONTAINS THE BYTE COUNT
00433 * +n.  RANGE OF +n IS
00434 * 0 TO 255
00435 *
00436 *************************
00437 *
00438 CNT     PSHS    A,B,X   COUNT
00439         PULU    X
00440         LDB     ,X
00441         CLRA
00442         LEAX    1,X
00443         PSHU    X
00444         PSHU    A,B
00445         PULS    A,B,X
00446         RTS
00447 *
00448 *************************
00449 *
00450 * FILL
00451 * (addr u 8b -- )
00452 * u BYTES OF MEMORY
00453 * BEGINNING AT addr ARE
00454 * SET TO 8b
00455 *
00456 *************************
00457 *
00458 FILL    PSHS    A,B,X,Y
00459         PULU    A,B
00460         PULU    X
00461         PULU    Y
00462 FILL1   CMPX    #0
00463         BEQ     FILL2
00464         STB     ,Y+
00465         LEAX    -1,X
00466         BRA     FILL1
00467 FILL2   PULS    A,B,X,Y
00468 ZEND    RTS
00469         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
