home *** CD-ROM | disk | FTP | other *** search
-
- ; Makros zum Einklammern einer Prozedur. PROC/ENDPROC dürfen nicht
- ; geschachtelt werden ! Benutzung:
- ;
- ; ProzName PROC Registerliste
- ; ...Code der Prozedur...
- ; ENDPROC
- ;
- ; Zusätzlich können per LOCAL lokale Variablen auf dem Stack belegt werden.
- ; Diese werden durch ENDPROC wieder freigegeben. Beispiel:
- ;
- ; ProzName PROC Registerliste
- ; LOCAL Varname1,Vargröße1,Varname2,Vargröße2,...
- ; LOCAL VarnameN,VargrößeN
- ; SETLOC ; stellt den Stackpointer ein
- ; ...Code der Prozedur...
- ; ENDPROC
- ;
- ; Es müssen immer Name und Größe angegeben werden. Variablen sollten größer
- ; als ein Byte sein. Der Stackpointer sollte im Code nicht verändert werden,
- ; weil die Variablen über ihn zugegriffen werden:
- ; move.l Varname1(SP),d0
-
-
- PROC MACRO
- IFC '','\1'
- PROC_reglist set 0
- ELSE
- PROC_reglist set 1
- PROC_list setreg \1
- movem.l PROC_list,-(SP)
- ENDC
- PROC_varcount set 0
- ENDM
-
-
- LOCAL MACRO
- IFNC '','\1'
- \1 set PROC_varcount
- PROC_varcount set PROC_varcount+\2
- LOCAL \3,\4,\5,\6,\7,\8,\9,\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k
- ENDC
- ENDM
-
-
- SETLOC MACRO
- IFNE PROC_varcount
- PROC_varcount set (PROC_varcount+1)&(~1)
- sub #PROC_varcount,SP
- ENDC
- ENDM
-
-
- ENDPROC MACRO
- IFNE PROC_varcount
- add #PROC_varcount,SP
- ENDC
- IFNE PROC_reglist
- movem.l (SP)+,PROC_list
- ENDC
- rts
- ENDM
-
-
- ; Der folgende ist wie ENDPROC ohne rts, ermöglicht also das direkte Springen
- ; auf danach auszuführenden Code.
-
- BRKPROC MACRO
- IFNE PROC_varcount
- add #PROC_varcount,SP
- ENDC
- IFNE PROC_reglist
- movem.l (SP)+,PROC_list
- ENDC
- ENDM
-
-
-
-
-
- ; Makros zum Aufrufen von Bibliotheksfunktionen. Benutzung:
- ; CALL OpenLibrary
- ; oder
- ; CALL OpenLibrary,_SysBase
-
-
- CALL MACRO
- IFEQ NARG-2
- move.l \2,a6
- ENDC
- IFLE NARG-2
- jsr _LVO\1(a6)
- ELSE
- FAIL CALL MACRO: PARAMETERFEHLER
- ENDC
- ENDM
-
-
- CALLRTS MACRO
- IFEQ NARG-2
- move.l \2,a6
- ENDC
- IFLE NARG-2
- jmp _LVO\1(a6)
- ELSE
- FAIL CALLRTS MACRO: PARAMETERFEHLER
- ENDC
- ENDM
-
-