home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / util / libs / sslib / ssmac.h < prev    next >
Text File  |  1994-12-12  |  8KB  |  650 lines

  1. ; Universal Macros for SS.Library, 3.5
  2. ; (c) 1993,1994 SinSoft, PCSoft & MJSoft System Software
  3. ; ------------------------------------------------------------------------------
  4.  
  5. ; Global definitions
  6.  
  7. v    equr    a5
  8. s_W    equ    1
  9. s_b    equ    1
  10. s_w    equ    2
  11. s_l    equ    4
  12.  
  13. ; Initialization
  14.  
  15. SYSCNT    set    4
  16. execbase    equ    4
  17. _NOARP    equ    1
  18.     code
  19.  
  20.     opt    o+,w+
  21.     opt    chkimm
  22.  
  23. ; Includes
  24.  
  25.     ifnd    ALLSYSTEM
  26.     ifnd    SYSI
  27.     include    "system.gs"
  28.     elseif
  29.     include    "sys.i"
  30.     endc
  31.     elseif
  32.     include    "allsystem.gs"
  33.     endc
  34.     ifnd    NOSS
  35.     include    "Macro:SSL/SS.i"
  36.     endc
  37.  
  38. ; General macros
  39.  
  40. push    macro    *reg
  41.     move.l    \1,-(sp)
  42.     endm
  43.  
  44. pop    macro    *reg
  45.     move.l    (sp)+,\1
  46.     endm
  47.  
  48. mpush    macro    *reglist
  49.     movem.l    \1,-(sp)
  50.     endm
  51.  
  52. mpop    macro    *reglist
  53.     movem.l    (sp)+,\1
  54.     endm
  55.  
  56. rptr    macro    *label
  57.     dc.w    \1-*
  58.     endm
  59.  
  60. ; Data definition macros
  61.  
  62. dv    macro    *.size,name
  63.     ifnc    '\0','b'
  64. SYSCNT    set    (SYSCNT+1)&$FFFE
  65.     endc
  66. \1    equ    SYSCNT
  67. SYSCNT    set    SYSCNT+s_\0
  68.     endm
  69.  
  70. dbuf    macro    *[.size],name,nritems
  71. SYSCNT    set    (SYSCNT+1)&$FFFE
  72. \1    equ    SYSCNT
  73. SYSCNT    set    SYSCNT+s_\0*\2
  74.     endm
  75.  
  76. alignlong    macro
  77. SYSCNT    set    (SYSCNT+3)&$FFFC
  78.     endm
  79.  
  80. ; Special data access macros
  81.  
  82. vpush    macro    *var
  83.     move.l    \1(v),-(sp)
  84.     endm
  85.  
  86. vpop    macro    *var
  87.     move.l    (sp)+,\1(v)
  88.     endm
  89.  
  90. get    macro    *.type,from,to
  91.     move.\0    \1(v),\2
  92.     endm
  93.  
  94. put    macro    *.type,from,to
  95.     move.\0    \1,\2(v)
  96.     endm
  97.  
  98. geta    macro    *from,to
  99.     lea    \1(v),\2
  100.     endm
  101.  
  102. getad    macro    *from,via,to
  103.     lea    \1(v),\2
  104.     move.l    \2,\3
  105.     endm
  106.  
  107. clv    macro    *.type,dest
  108.     clr.\0    \1(v)
  109.     endm
  110.  
  111. tsv    macro    *.type,src
  112.     tst.\0    \1(v)
  113.     endm
  114.  
  115. ; Normal data access macros
  116.  
  117. negv    macro    *.size,to
  118.     neg.\0    \1(v)
  119.     endm
  120.  
  121. notv    macro    *.size,to
  122.     not.\0    \1(v)
  123.     endm
  124.  
  125. stv    macro    *.size,to
  126.     st    \1(v)
  127.     endm
  128.  
  129. clrv    macro    *.size,to
  130.     clr.\0    \1(v)
  131.     endm
  132.  
  133. seqv    macro    *.size,to
  134.     seq    \1(v)
  135.     endm
  136.  
  137. snev    macro    *.size,to
  138.     sne    \1(v)
  139.     endm
  140.  
  141. sccv    macro    *.size,to
  142.     scc    \1(v)
  143.     endm
  144.  
  145. scsv    macro    *.size,to
  146.     scs    \1(v)
  147.     endm
  148.  
  149. tstv    macro    *.size,from
  150.     tst.\0    \1(v)
  151.     endm
  152.  
  153. bchgv    macro    *bitnr,byte
  154.     bchg    \1,\2(v)
  155.     endm
  156.  
  157. bclrv    macro    *bitnr,byte
  158.     bclr    \1,\2(v)
  159.     endm
  160.  
  161. bsetv    macro    *bitnr,byte
  162.     bset    \1,\2(v)
  163.     endm
  164.  
  165. btstv    macro    *bitnr,byte
  166.     btst    \1,\2(v)
  167.     endm
  168.  
  169. subqv    macro    *.type,nr,byte
  170.     subq.\0    \1,\2(v)
  171.     endm
  172.  
  173. addqv    macro    *.type,nr,byte
  174.     addq.\0    \1,\2(v)
  175.     endm
  176.  
  177. vpea    macro    *var
  178.     pea    \1(v)
  179.     endm
  180.  
  181. eorv    macro    *.type,src,dest
  182.     eor.\0    \1,\2(v)
  183.     endm
  184.  
  185. divsv    macro    *src,dest
  186.     divs    \1,\2(v)
  187.     endm
  188.  
  189. divuv    macro    *src,dest
  190.     divu    \1,\2(v)
  191.     endm
  192.  
  193. mulsv    macro    *src,dest
  194.     muls    \1,\2(v)
  195.     endm
  196.  
  197. muluv    macro    *src,dest
  198.     mulu    \1,\2(v)
  199.     endm
  200.  
  201. addv    macro    *.type,src,dest
  202.     add.\0    \1,\2(v)
  203.     endm
  204.  
  205. vadd    macro    *.type,src,dest
  206.     add.\0    \1(v),\2
  207.     endm
  208.  
  209. andv    macro    *.type,src,dest
  210.     and.\0    \1,\2(v)
  211.     endm
  212.  
  213. vand    macro    *.type,src,dest
  214.     and.\0    \1(v),\2
  215.     endm
  216.  
  217. cmpv    macro    *.type,src,dest
  218.     cmp.\0    \1,\2(v)
  219.     endm
  220.  
  221. vcmp    macro    *.type,src,dest
  222.     cmp.\0    \1(v),\2
  223.     endm
  224.  
  225. movev    macro    *.type,src,dest
  226.     move.\0    \1,\2(v)
  227.     endm
  228.  
  229. vmove    macro    *.type,src,dest
  230.     move.\0    \1(v),\2
  231.     endm
  232.  
  233. orv    macro    *.type,src,dest
  234.     or.\0    \1,\2(v)
  235.     endm
  236.  
  237. vor    macro    *.type,src,dest
  238.     or.\0    \1(v),\2
  239.     endm
  240.  
  241. subv    macro    *.type,src,dest
  242.     sub.\0    \1,\2(v)
  243.     endm
  244.  
  245. vsub    macro    *.type,src,dest
  246.     sub.\0    \1(v),\2
  247.     endm
  248.  
  249. vlea    macro    *src,dest
  250.     lea    \1(v),\2
  251.     endm
  252.  
  253. vmovev    macro    *.type,src,dest
  254.     move.\0    \1(v),\2(v)
  255.     endm
  256.  
  257. movemv    macro    *.type,src,dest
  258.     movem.\0    \1,\2(v)
  259.     endm
  260.  
  261. vmovem    macro    *.type,src,dest
  262.     movem.\0    \1(v),\2
  263.     endm
  264.  
  265. ; Text macros
  266.  
  267. tbase    macro    *basereg
  268. t    equr    \1
  269.     section    TEXTS,DATA
  270. TEXTBASE
  271.     code
  272.     endm
  273.  
  274.     ifd    TEXTRACT
  275. dt    macro
  276.     endm
  277. gett    macro
  278.     lea    \1(pc),\2
  279.     endm
  280. tlea    macro
  281.     lea    \1(pc),\2
  282.     endm
  283. tpea    macro
  284.     pea    \1(pc)
  285.     endm
  286.  
  287.     elseif
  288.  
  289. dt    macro    *.type ([c][l]),[label,]text
  290.     section    TEXTS,DATA
  291.     ifne    NARG-1
  292. \1    dc.b    '\2'
  293.     elseif
  294.     dc.b    '\1'
  295.     endc
  296.     ifc    '\0','W'
  297.     dc.b    0
  298.     endc
  299.     ifc    '\0','l'
  300.     dc.b    10,0
  301.     endc
  302.     ifc    '\0','cl'
  303.     dc.b    10
  304.     endc
  305.     ifc    '\0','lc'
  306.     dc.b    10
  307.     endc
  308.     code
  309.     endm
  310.  
  311. gett    macro    *textlabel,areg
  312.     ifd    t
  313.     lea    \1-TEXTBASE(t),\2
  314.     elseif
  315.     lea    \1,\2
  316.     endc
  317.     endm
  318.  
  319. tlea    macro    *textlabel,areg
  320.     ifd    t
  321.     lea    \1-TEXTBASE(t),\2
  322.     elseif
  323.     lea    \1,\2
  324.     endc
  325.     endm
  326.  
  327. tpea    macro    *textlabel
  328.     ifd    t
  329.     pea    \1-TEXTBASE(t)
  330.     elseif
  331.     pea    \1
  332.     endc
  333.     endm
  334.  
  335.     endc
  336.  
  337. dtl    macro    *text,areg
  338.     dt.\0    \@a,<\1>
  339.     gett    \@a,\2
  340.     endm
  341.  
  342. ; System calls
  343.  
  344. call    macro    *[base,]name
  345.     ifeq    NARG-1
  346.     jsr    _LVO\1(a6)
  347.     elseif
  348.     ifc    '\1','exec'
  349.     move.l    4.w,a6
  350.     elseif
  351.     ifc    '\1','ss'
  352.     move.l    (v),a6
  353.     elseif
  354.     move.l    \1base(v),a6
  355.     endc
  356.     endc
  357.     jsr    _LVO\2(a6)
  358.     endc
  359.     endm
  360.  
  361. jump    macro    *[base,]name
  362.     ifeq    NARG-1
  363.     jmp    _LVO\1(a6)
  364.     elseif
  365.     ifc    '\1','exec'
  366.     move.l    4.w,a6
  367.     elseif
  368.     ifc    '\1','ss'
  369.     move.l    (v),a6
  370.     elseif
  371.     move.l    \1base(v),a6
  372.     endc
  373.     endc
  374.     jmp    _LVO\2(a6)
  375.     endc
  376.     endm
  377.  
  378. ; Universal start & finish
  379.  
  380. start    macro
  381.  
  382.     ifd    GATHERTX
  383.     opt    x+
  384.     endc
  385.  
  386.     ifd    DEBUG    ; Stub for passing of arguments
  387.     opt    x+
  388. Debug__Init    move.l    4.w,a1
  389.     move.l    ThisTask(a1),a1
  390.     move.l    pr_GlobVec(a1),a2
  391.     move.l    pr_CIS(a1),d1
  392.     beq.s    3$
  393.     lsl.l    #2,d1
  394.     move.l    d1,a3
  395.     lea    fh_Buf(a3),a3
  396.     move.l    (a3)+,a1
  397.     add.l    a1,a1
  398.     add.l    a1,a1
  399.     clr.l    (a3)+
  400.     move.l    d0,(a3)+
  401.     bra.s    1$
  402. 2$    move.b    (a0)+,(a1)+
  403. 1$    dbf    d0,2$
  404. 3$
  405.     endc
  406.  
  407.     move.l    4.w,a6
  408.  
  409.     ifnd    _nowbstart
  410.     move.l    ThisTask(a6),a0
  411.     moveq    #0,d7
  412.     tst.l    pr_CLI(a0)
  413.     bne.s    Start__1
  414.     lea    pr_MsgPort(a0),a0
  415.     call    GetMsg
  416.     move.l    d0,d7
  417. Start__1
  418.     endc
  419.  
  420.     lea    ssname(pc),a1
  421.     call    OldOpenLibrary
  422.     tst.l    d0
  423.     bne.s    _ssok
  424.  
  425.     ifd    _GlobVec
  426.     move.l    $170(a2),a6
  427.     elseif
  428.     lea    _intname(pc),a1
  429.     call    OldOpenLibrary
  430.     tst.l    d0
  431.     beq.s    _enderr
  432.     move.l    d0,a6
  433.     moveq    #0,d0
  434.     endc
  435.     lea    _ssalert(pc),a0
  436.     moveq    #30,d1
  437.     call    DisplayAlert
  438.     ifnd    _GlobVec
  439.     move.l    a6,a1
  440.     call    exec,CloseLibrary
  441.     endc
  442. _enderr
  443.     ifnd    _nowbstart
  444.     tst.l    d7
  445.     beq.s    _endclierr
  446.     move.l    d7,a1
  447.     ifd    _GlobVec
  448.     move.l    4.w,a6
  449.     endc
  450.     call    ReplyMsg
  451. _endclierr
  452.     endc
  453.     moveq    #100,d0
  454.     rts
  455.  
  456.     ifnd    _GlobVec
  457. _intname    dc.b    'intuition.library'
  458.     endc
  459. _ssalert    dc.b    0,244,16,'You need '
  460. ssname    dc.b    'ss.library',0,0
  461.     even
  462.  
  463. _ssok    move.l    d0,a6
  464.     lea    _startstruc(pc),a0
  465.     call    StartupInit
  466.     ifd    t
  467.     lea    TEXTBASE,t
  468.     endc
  469.     ifd    DEBUG
  470.     vmovev.l stdout,stderr
  471.     endc
  472. go
  473.     endm
  474.  
  475. clistart    macro
  476. _nowbstart    equ    1
  477.     start
  478.     endm
  479.  
  480. tags    macro
  481. _startstruc    dc.w    _SYSCNT,SSVer
  482.     endm
  483.  
  484. finish    macro
  485.     dc.w    0
  486. _SYSCNT    equ    SYSCNT
  487.     ifd    TEXTRACT
  488.     include    "t:TextHunk.i"
  489.     endc
  490.     ifd    GATHERTX
  491.     section    TEXTS,DATA
  492. _TextHunkEnd
  493.     code
  494.     endc
  495.     endm
  496.  
  497. ; Startup tags
  498.  
  499. wbconsole    macro
  500.     dc.w    sst_wbconsole
  501.     endm
  502.  
  503. template    macro    *template
  504.     dc.w    sst_template
  505.     dc.b    '\1',0
  506.     even
  507. SYSCNT    set    (SYSCNT+1)&$FFFE
  508.     dc.w    SYSCNT
  509.     endm
  510.  
  511. defvar    macro    *varname
  512.     dc.w    sst_envvar
  513.     dc.b    '\1',0
  514.     even
  515.     endm
  516.  
  517. exitrout    macro    *routine
  518.     dc.w    sst_exitrout
  519. \@a    dc.w    \1-\@a
  520.     endm
  521.  
  522. errrout    macro    *routine
  523.     dc.w    sst_usererr
  524. \@a    dc.w    \1-\@a
  525.     endm
  526.  
  527. usrtrk    macro    *table
  528.     dc.w    sst_usertrk
  529. \@a    dc.w    \1-\@a
  530.     endm
  531.  
  532. library    macro    *name,version
  533.     dv.l    \1base
  534.     dc.w    sst_library
  535.     dc.b    '\1.library',0
  536.     even
  537.     dc.w    \2,\1base
  538.     endm
  539.  
  540. trylib    macro    *name,version
  541.     dv.l    \1base
  542.     dc.w    sst_trylib
  543.     dc.b    '\1.library',0
  544.     even
  545.     dc.w    \2,\1base
  546.     endm
  547.  
  548. cputype    macro    *min,max
  549.     dc.w    sst_cputype
  550.     dc.b    \1,\2
  551.     endm
  552.  
  553. fputype    macro    *min,max
  554.     dc.w    sst_fputype
  555.     dc.b    \1,\2
  556.     endm
  557.  
  558. sysver    macro    *min,max
  559.     dc.w    sst_sysver
  560.     dc.b    \1,\2
  561.     endm
  562.  
  563. diserr    macro    *flags
  564.     dc.w    sst_errors
  565.     dc.l    \1
  566.     endm
  567.  
  568. wbconname    macro    *name
  569.     dc.w    sst_wbconname
  570.     dc.b    '\1',0
  571.     even
  572.     endm
  573.  
  574. extrahelp    macro    *[text]
  575.     dc.w    sst_extrahelp
  576.     ifne    NARG
  577.     dc.b    '\1',0
  578.     even
  579.     endc
  580.     endm
  581.  
  582. endhelp    macro
  583.     dc.b    0
  584.     even
  585.     endm
  586.  
  587. ; ### Text output ###
  588.  
  589. write    macro    *text
  590.     dtl    <\1>,a0
  591.     call    ss,Puts
  592.     endm
  593.  
  594. writeln    macro    *text
  595.     dtl    <\1>,a0
  596.     call    ss,PutsNL
  597.     endm
  598.  
  599. printfs    macro    *[.L,]text
  600.     dtl.\0    <\1>,a0
  601.     move.l    sp,a1
  602.     call    ss,Printf
  603.     endm
  604.  
  605. printfv    macro    *[.L,]text,variable
  606.     dtl.\0    <\1>,a0
  607.     geta    \2,a1
  608.     call    ss,Printf
  609.     endm
  610.  
  611. printfr    macro    *[.L,]text,register
  612.     push    \2
  613.     dtl.\0    <\1>,a0
  614.     move.l    sp,a1
  615.     call    ss,Printf
  616.     pop    \2
  617.     endm
  618.  
  619. printfl    macro    *[.L,]text,reglist[,numreg]
  620.     mpush    \2
  621.     dtl.\0    <\1>,a0
  622.     move.l    sp,a1
  623.     call    ss,Printf
  624.     ifeq    NARG-3
  625.     ifgt    \3-2
  626.     lea    (\3*4)(sp),sp
  627.     elseif
  628.     addq.l    #4*\3,sp
  629.     endc
  630.     elseif
  631.     mpop    \2
  632.     endc
  633.     endm
  634.  
  635. err    macro    *text
  636.     dtl    <\1>,a0
  637.     jump    ss,ExitError
  638.     endm
  639.  
  640. doserr    macro    *text
  641.     dtl    <\1>,a0
  642.     jump    ss,DosError
  643.     endm
  644.  
  645. errc    macro    *.negcond,text
  646.     b\0.s    \@a
  647.     err    <\1>
  648. \@a
  649.     endm
  650.