home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / language / forst / allmacs.s < prev    next >
Encoding:
Text File  |  1993-10-23  |  6.6 KB  |  507 lines

  1. ; MACMATHS: maths macro words 25/3/90
  2. ; Copyright <C> John Redmond, 1989,1990
  3. ; Public domain for non-commercial use.
  4. ;    
  5.     section    text
  6.     even
  7. ;
  8. ; _ADD: (n32,n32--n32)
  9. _add:    pop    d0
  10.     pop    d1
  11.     add.l    d1,d0
  12.     push    d0
  13.     rts
  14. ;
  15. ; _SUB: (32,n32--n32)
  16. _sub:    pop    d0
  17.     pop    d1
  18.     sub.l    d1,d0
  19.     neg.l    d0
  20.     push    d0
  21.     rts
  22. ;
  23. _oneadd: pop    d0
  24.     addq.l    #1,d0
  25.     push    d0
  26.     rts
  27. ;
  28. _onesub: pop    d0
  29.     subq.l    #1,d0
  30.     push    d0
  31.     rts
  32. ;
  33. _twoadd: pop    d0
  34.     addq.l    #2,d0
  35.     push    d0
  36.     rts
  37. ;
  38. _twosub: pop    d0
  39.     subq.l    #2,d0
  40.     push    d0
  41.     rts
  42. ;
  43. _fouradd: pop    d0
  44.     addq.l    #4,d0
  45.     push    d0
  46.     rts
  47. ;
  48. _foursub: pop    d0
  49.     subq.l    #4,d0
  50.     push    d0
  51.     rts
  52. ;
  53. _twomul: pop    d0
  54.     add.l    d0,d0
  55.     push    d0
  56.     rts
  57. ;
  58. _twodiv: pop    d0
  59.     asr.l    #1,d0
  60.     push    d0
  61.     rts
  62. ;
  63. _movrt: pop    d0
  64.     lsr.l    #1,d0
  65.     push    d0
  66.     rts
  67. ;
  68. _lsl:    pop    d0
  69.     pop    d1
  70.     lsl.l    d0,d1
  71.     move.l    d1,d0
  72.     push    d0
  73.     rts
  74. ;
  75. _lsr:    pop    d0
  76.     pop    d1
  77.     lsr.l    d0,d1
  78.     move.l    d1,d0
  79.     push    d0
  80.     rts
  81. ;
  82. _asr:    pop    d0
  83.     pop    d1
  84.     asr.l    d0,d1
  85.     move.l    d1,d0
  86.     push    d0
  87.     rts
  88. ;
  89. _roxl:    pop    d0
  90.     roxl.l    #1,d0
  91.     push    d0
  92.     rts
  93. ;
  94. _roxr:    pop    d0
  95.     roxr.l    #1,d0
  96.     push    d0
  97.     rts
  98. ;
  99. _flip:    pop    d0
  100.     rol.w    #8,d0
  101.     push    d0
  102.     rts
  103. ;
  104. _wflip: pop    d0
  105.     swap    d0
  106.     push    d0
  107.     rts
  108. ;
  109. _negate: pop    d0
  110.     neg.l    d0
  111.     push    d0
  112.     rts
  113. ;
  114. _xnegate:
  115.     neg.l    4(a6)
  116.     negx.l    (a6)
  117.     rts
  118. ;
  119. _ore:    pop    d0
  120.     pop    d1
  121.     or.l    d1,d0
  122.     push    d0
  123.     rts
  124. ;
  125. _xore:    pop    d0
  126.     pop    d1
  127.     eor.l    d1,d0
  128.     push    d0
  129.     rts
  130. ;
  131. _ande:    pop    d0
  132.     pop    d1
  133.     and.l    d1,d0
  134.     push    d0
  135.     rts
  136. ;
  137. _note:    pop    d0
  138.     not.l    d0
  139.     push    d0
  140.     rts
  141. ;
  142. _equal: pop    d0
  143.     pop    d1
  144.     cmp.l    d1,d0
  145.     seq    d0
  146.     ext.w    d0
  147.     ext.l    d0
  148.     push    d0
  149.     rts
  150. ;
  151. _zeroeq: pop    d0
  152.     tst.l    d0
  153.     seq    d0
  154.     ext.w    d0
  155.     ext.l    d0
  156.     push    d0
  157.     rts
  158. ;
  159. _zerolt: pop    d0
  160.     tst.l    d0
  161.     smi    d0
  162.     ext.w    d0
  163.     ext.l    d0
  164.     push    d0
  165.     rts
  166. ;
  167. _zerogt: pop    d0
  168.     tst.l    d0
  169.     sgt    d0
  170.     ext.w    d0
  171.     ext.l    d0
  172.     push    d0
  173.     rts
  174. ;
  175. _ult:    pop    d0
  176.     pop    d1
  177.     cmp.l    d1,d0
  178.     shi    d0
  179.     ext.w    d0
  180.     ext.l    d0
  181.     push    d0
  182.     rts
  183. ;
  184. _lt:    pop    d0
  185.     pop    d1
  186.     cmp.l    d1,d0
  187.     sgt    d0
  188.     ext.w    d0
  189.     ext.l    d0
  190.     push    d0
  191.     rts
  192. ;
  193. _gt:    pop    d0
  194.     pop    d1
  195.     cmp.l    d1,d0
  196.     slt    d0
  197.     ext.w    d0
  198.     ext.l    d0
  199.     push    d0
  200.     rts
  201. ;
  202. ; fetch and store group:
  203. ;
  204. _at:    pop    a0
  205.     move.l    (a0),d0
  206.     push    d0
  207.     rts
  208. ;
  209. _wat:    pop    a0
  210.     moveq.l    #0,d0
  211.     move.w    (a0),d0
  212.     push    d0
  213.     rts
  214. ;
  215. _cat:    pop    a0
  216.     moveq.l    #0,d0
  217.     move.b    (a0),d0
  218.     push    d0
  219.     rts
  220. ;
  221. _store: pop    a0
  222.     pop    d0
  223.     move.l    d0,(a0)
  224.     rts
  225. ;
  226. _wstore: pop    a0
  227.     pop    d0
  228.     move.w    d0,(a0)
  229.     rts
  230. ;
  231. _cstore: pop    a0
  232.     pop    d0
  233.     move.b    d0,(a0)
  234.     rts
  235. ;
  236. _dup:    pop    d0
  237.     push    d0
  238.     push    d0
  239.     rts
  240. ;
  241. _ifdup: move.l    (a6),d0
  242.     beq.s    .ifdx
  243.     push    d0
  244. .ifdx:    rts
  245. ;
  246. _drop:    pop    d0
  247.     rts
  248. ;
  249. _swap:    pop    d0
  250.     pop    d1
  251.     exg    d0,d1
  252.     push    d1
  253.     push    d0
  254.     rts
  255. ;
  256. _over:    move.l    4(a6),d0
  257.     push    d0
  258.     rts
  259. ;
  260. _nip:    pop    d0
  261.     move.l    d0,(a6)
  262.     rts
  263. ;
  264. _spat:    push    a6
  265.     rts
  266. ;
  267. _rpat:    push    a7
  268.     rts
  269. ;
  270. _rgt:    bsr    _ifcomp
  271.     push    #$2d1f        ;push (a7)+
  272.     bsr    _comma
  273.     bsr    plusedge
  274.     rts
  275. ;
  276. _gtr:    bsr    _ifcomp
  277.     push    #$2f1e        ;pop -(a7)
  278.     bsr    _comma
  279.     bsr    edgeoff
  280.     rts
  281. ;
  282. ;
  283. _rat:    bsr    _ifcomp
  284.     push    #$2d17        ;push (a7)
  285.     bsr    _comma
  286.     bsr    plusedge
  287.     rts
  288. ;
  289. _offsetadd:
  290.     pop    d0
  291.     add.l    a5,d0
  292.     push    d0
  293.     rts
  294. ;
  295. _offsetsub:
  296.     pop    d0
  297.     sub.l    a5,d0
  298.     push    d0
  299.     rts
  300. ;
  301. _count: pop    a0
  302.     clr.l    d0
  303.     move.b    (a0)+,d0
  304.     push    a0
  305.     push    d0
  306.     rts
  307. ;
  308. _dtwomul: pop    d0
  309.     pop    d1
  310.     lsl.l    #1,d1
  311.     roxl.l    #1,d0
  312.     push    d1
  313.     push    d0
  314.     rts
  315. ;
  316. _dtwodiv: pop    d0
  317.     pop    d1
  318.     lsr.l    #1,d0
  319.     roxr.l    #1,d1
  320.     push    d1
  321.     push    d0
  322.     rts
  323. ;
  324.     section    data
  325.     even
  326. ;
  327. ; bit manipulation words
  328. ;
  329.     dc.b    $83,'LS','L'!$80
  330.     mptrs    _lsl,d0,5,two_one,16
  331. ;
  332.     dc.b    $83,'LS','R'!$80
  333.     mptrs    _lsr,d0,5,two_one,16
  334. ;
  335.     dc.b    $83,'AS','R'!$80
  336.     mptrs    _asr,d0,5,two_one,16
  337. ;
  338.     dc.b    $83,'RO','L'!$80
  339.     mptrs    _roxl,d0,3,one_one,16
  340. ;
  341.     dc.b    $83,'RO','R'!$80
  342.     mptrs    _roxr,d0,3,one_one,16
  343. ;
  344.     dc.b    $84,'FLIP',$a0
  345.     mptrs    _flip,d0,3,one_one,18
  346. ;
  347.     dc.b    $85,'WFLI','P'!$80
  348.     mptrs    _wflip,d0,3,one_one,18
  349. ;
  350.     dc.b    $82,'OR',$a0
  351.     mptrs    _ore,d0,4,two_one,16
  352. ;
  353.     dc.b    $83,'XO','R'!$80
  354.     mptrs    _xore,d0,4,two_one,16
  355. ;
  356.     dc.b    $83,'AN','D'!$80
  357.     mptrs    _ande,d0,4,two_one,16
  358. ;
  359. ; quick arithmetic words
  360. ;
  361.     dc.b    $82,'1+',$a0
  362.     mptrs    _oneadd,d0,3,one_one,16
  363. ;
  364.     dc.b    $82,'1-',$a0
  365.     mptrs    _onesub,d0,3,one_one,16
  366. ;
  367.     dc.b    $82,'2+',$a0
  368.     mptrs    _twoadd,d0,3,one_one,16
  369. ;
  370.     dc.b    $82,'2-',$a0
  371.     mptrs    _twosub,d0,3,one_one,16
  372. ;
  373.     dc.b    $82,'4+',$a0
  374.     mptrs    _fouradd,d0,3,one_one,16
  375. ;
  376.     dc.b    $82,'4-',$a0
  377.     mptrs    _foursub,d0,3,one_one,16
  378. ;
  379.     dc.b    $85,'CELL','+'!$80
  380.     mptrs    _fouradd,d0,3,one_one,18
  381. ;
  382.     dc.b    $85,'CELL','-'!$80
  383.     mptrs    _foursub,d0,3,one_one,18
  384. ;
  385.     dc.b    $82,'2*',$a0
  386.     mptrs    _twomul,d0,3,one_one,16
  387. ;
  388.     dc.b    $82,'2/',$a0
  389.     mptrs    _twodiv,d0,3,one_one,16
  390. ;
  391.     dc.b    $83,'U2','/'!$80
  392.     mptrs    _movrt,d0,3,one_one,16
  393. ;
  394.     dc.b    $83,'D2','*'!$80
  395.     mptrs    _dtwomul,d0,6,two_two,16
  396. ;
  397.     dc.b    $83,'D2','/'!$80
  398.     mptrs    _dtwodiv,d0,6,two_two,16
  399. ;
  400. ; logic test words
  401. ;
  402.     dc.b    $82,'U<',$a0
  403.     mptrs    _ult,d0,7,two_result,16
  404. ;
  405.     dc.b    $81,'>'!$80
  406.     mptrs    _gt,d0,7,two_result,14
  407. ;
  408.     dc.b    $81,'<'!$80
  409.     mptrs    _lt,d0,7,two_result,14
  410. ;
  411.     dc.b    $81,'='!$80
  412.     mptrs    _equal,d0,7,two_result,14
  413. ;
  414. ;    dc.b    $83,'NO','T'!$80
  415. ;    mptrs    _note,d0,3,one_one,16
  416. ;
  417.     dc.b    $82,'0=',$a0
  418.     mptrs    _zeroeq,d0,6,one_result,16
  419. ;
  420.     dc.b    $82,'0<',$a0
  421.     mptrs    _zerolt,d0,6,one_result,16
  422. ;
  423.     dc.b    $82,'0>',$a0
  424.     mptrs    _zerogt,d0,6,one_result,16
  425. ;
  426. ; integer maths words
  427. ;
  428. ;    dc.b    $86,'NEGATE',$A0
  429. ;    mptrs    _negate,d0,3,one_one,20
  430. ;
  431. ;    dc.b    $81,'+'!$80
  432. ;    mptrs    _add,d0,4,two_one,14
  433. ;
  434.     dc.b    $82,'+!',$a0
  435.     mptrs    _laddat,a0,3,two_none,16
  436. ;
  437. ;    dc.b    $81,'-'!$80
  438. ;    mptrs    _sub,d0,5,two_one,14
  439. ;
  440. ; smart optimising words
  441. ;
  442.     dc.b    $c2,'C@',$A0
  443.     fetch    _cat,a0,4,one_one,16
  444. ;
  445.     dc.b    $c2,'W@',$a0
  446.     fetch    _wat,a0,4,one_one,16
  447. ;
  448.     dc.b    $c1,'@'!$80
  449.     fetch    _at,a0,3,one_one,14
  450. ;
  451.     dc.b    $c2,'C!',$A0
  452.     store    _cstore,a0,3,one_none,16
  453. ;
  454.     dc.b    $c2,'W!',$a0
  455.     store    _wstore,a0,3,one_none,16
  456. ;
  457.     dc.b    $c1,'!'!$80
  458.     store    _store,a0,3,one_none,14
  459. ;
  460.     dc.b    $c3,'NO','T'!$80
  461.     invert    _note,d0,3,one_one,16
  462. ;
  463. ; memory and stack words
  464. ;
  465.     dc.b    $82,'ON',$a0
  466.     mptrs    _on,a0,4,one_none,16
  467. ;
  468.     dc.b    $83,'OF','F'!$80
  469.     mptrs    _off,a0,2,one_none,16
  470. ;
  471.     dc.b    $84,'DROP',$a0
  472.     mptrs    _drop,d0,1,one_one,18
  473. ;
  474.     dc.b    $83,'DU','P'!$80
  475.     mptrs    _dup,d0,3,one_two,16
  476. ;
  477.     dc.b    $84,'?DUP',$a0
  478.     mptrs    _ifdup,noedge,3,one_one,18
  479. ;
  480.     dc.b    $84,'OVER',$a0
  481.     mptrs    _over,noedge,3,none_one,18
  482. ;
  483.     dc.b    $84,'SWAP',$A0
  484.     mptrs    _swap,d0,5,two_two,18
  485. ;
  486.     dc.b    $83,'NI','P'!$80
  487.     mptrs    _nip,d0,2,one_none,16
  488. ;
  489.     dc.b    $85,'2DRO','P'!$80
  490.     mptrs    _twodrop,noedge,1,none_none,18
  491. ;
  492.     dc.b    $83,'SP','@'!$80
  493.     mptrs    _spat,a6,1,$24,16
  494. ;
  495.     dc.b    $83,'RP','@'!$80
  496.     mptrs    _rpat,noedge,1,$24,16
  497. ;
  498.     dc.b    $83,'OS','>'!$80
  499.     mptrs    _offsetadd,d0,3,one_one,16
  500. ;
  501.     dc.b    $83,'>O','S'!$80
  502.     mptrs    _offsetsub,d0,3,one_one,16
  503. ;
  504.     dc.b    $85,'COUN','T'!$80
  505.     mptrs    _count,a0,5,one_two,18
  506. ;
  507.