home *** CD-ROM | disk | FTP | other *** search
- ***************************************
- ;Routine : Speicher_Reservieren
- ;Parameter: D0=Größe des benötigten Speichers
- ;Rückgabe : D0=Adresse des Speicherbereichs
- ; oder 0 bei Speichermangel!
-
- Speicher_Reservieren:
- movem.l d2/a6,-(a7)
- addq.l #4,d0 ;Größe+4 Bytes reservieren
- move.l #$10001,d1 ;MEMF_CLEAR!MEMF_PUBLIC
- move.l d0,d2 ;Größe merken
- move.l 4.w,a6
- jsr -198(a6) ;AllocMem
- tst.l d0 ;Fehler -> Routine beenden!
- beq.s 1$
- move.l d0,a0 ;Größe vor den Beginn des
- ;Speicherbereichs schreiben
- move.l d2,(a0)+
- move.l a0,d0 ;Adresse+4 zurückgeben
- 1$
- movem.l (a7)+,d2/a6
- rts
-
- *******************************************
- ;Routine : Speicher_Freigeben
- ;Parameter: D0=Adresse des Speicherbereichs
- ;Rückgabe : -
-
- Speicher_Freigeben:
- move.l a6,-(a7)
- tst.l d0 ;überhaupt reserviert?
- beq.s 1$ ;nein -> nicht freigeben!
- move.l d0,a1
- move.l -(a1),d0 ;Größe des reservierten
- ;Speicherbereichs holen
- move.l 4.w,a6
- jsr -210(a6) ;FreeMem aufrufen
- 1$
- move.l (a7)+,a6
- rts
-
-