home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / DVD!OMA1.DMS / in.adf / Include / macros.i next >
Encoding:
Text File  |  1994-10-13  |  2.0 KB  |  110 lines

  1.  
  2. ; Makros zum Einklammern einer Prozedur.  PROC/ENDPROC dürfen nicht
  3. ; geschachtelt werden !  Benutzung:
  4. ;
  5. ; ProzName PROC    Registerliste
  6. ;          ...Code der Prozedur...
  7. ;          ENDPROC
  8. ;
  9. ; Zusätzlich können per LOCAL lokale Variablen auf dem Stack belegt werden.
  10. ; Diese werden durch ENDPROC wieder freigegeben.  Beispiel:
  11. ;
  12. ; ProzName PROC    Registerliste
  13. ;          LOCAL   Varname1,Vargröße1,Varname2,Vargröße2,...
  14. ;          LOCAL   VarnameN,VargrößeN
  15. ;          SETLOC                       ; stellt den Stackpointer ein
  16. ;          ...Code der Prozedur...
  17. ;          ENDPROC
  18. ;
  19. ; Es müssen immer Name und Größe angegeben werden.  Variablen sollten größer
  20. ; als ein Byte sein.  Der Stackpointer sollte im Code nicht verändert werden,
  21. ; weil die Variablen über ihn zugegriffen werden:
  22. ;          move.l  Varname1(SP),d0
  23.  
  24.  
  25. PROC        MACRO
  26.         IFC    '','\1'
  27. PROC_reglist    set    0
  28.         ELSE
  29. PROC_reglist    set    1
  30. PROC_list    setreg    \1
  31.         movem.l    PROC_list,-(SP)
  32.         ENDC
  33. PROC_varcount    set    0
  34.         ENDM
  35.  
  36.  
  37. LOCAL        MACRO
  38.         IFNC    '','\1'
  39. \1        set    PROC_varcount
  40. PROC_varcount    set    PROC_varcount+\2
  41.         LOCAL    \3,\4,\5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k
  42.         ENDC
  43.         ENDM
  44.  
  45.  
  46. SETLOC        MACRO
  47.         IFNE    PROC_varcount
  48. PROC_varcount    set    (PROC_varcount+1)&(~1)
  49.         sub    #PROC_varcount,SP
  50.         ENDC
  51.         ENDM
  52.  
  53.  
  54. ENDPROC        MACRO
  55.         IFNE    PROC_varcount
  56.         add    #PROC_varcount,SP
  57.         ENDC
  58.         IFNE    PROC_reglist
  59.         movem.l    (SP)+,PROC_list
  60.         ENDC
  61.         rts
  62.         ENDM
  63.  
  64.  
  65. ; Der folgende ist wie ENDPROC ohne rts, ermöglicht also das direkte Springen
  66. ; auf danach auszuführenden Code.
  67.  
  68. BRKPROC        MACRO
  69.         IFNE    PROC_varcount
  70.         add    #PROC_varcount,SP
  71.         ENDC
  72.         IFNE    PROC_reglist
  73.         movem.l    (SP)+,PROC_list
  74.         ENDC
  75.         ENDM
  76.  
  77.  
  78.  
  79.  
  80.  
  81. ; Makros zum Aufrufen von Bibliotheksfunktionen.  Benutzung:
  82. ;       CALL    OpenLibrary
  83. ; oder
  84. ;       CALL    OpenLibrary,_SysBase
  85.  
  86.  
  87. CALL        MACRO
  88.         IFEQ    NARG-2
  89.         move.l    \2,a6
  90.         ENDC
  91.         IFLE    NARG-2
  92.         jsr    _LVO\1(a6)
  93.         ELSE
  94.         FAIL    CALL MACRO: PARAMETERFEHLER
  95.         ENDC
  96.         ENDM
  97.  
  98.  
  99. CALLRTS        MACRO
  100.         IFEQ    NARG-2
  101.         move.l    \2,a6
  102.         ENDC
  103.         IFLE    NARG-2
  104.         jmp    _LVO\1(a6)
  105.         ELSE
  106.         FAIL    CALLRTS MACRO: PARAMETERFEHLER
  107.         ENDC
  108.         ENDM
  109.  
  110.