home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / OUT.ZIP / SOURCE.ZIP / MEM.I < prev    next >
Text File  |  2003-02-04  |  1KB  |  60 lines

  1. ; memory management object.
  2.  
  3. ; Resets internal administration.
  4. Mem.init:
  5.     clr.l    Mem.max
  6.     rts
  7.  
  8. ; Takes max mem needed out of all register calls. The returned block is
  9. ; longword aligned.
  10. ; OUTPUT:
  11. ; d0.l: blockaddress (0: failed)
  12. Mem.take:
  13. ; Increase blocksize to account for alignment.
  14.     move.l    Mem.max,d0
  15.     addq.l    #3,d0
  16.  
  17. ; Allocate block.
  18.     move.l    d0,-(sp)
  19.     move.w    #$48,-(sp)
  20.     trap    #1
  21.     addq    #6,sp
  22.     tst.l    d0
  23.     beq.s    .end
  24.  
  25. ; Save address, for eventual freeing up of block.
  26.     move.l    d0,Mem.adr
  27.  
  28. ; Align address to longword.
  29.     addq.l    #3,d0
  30.     andi.w    #%1111111111111100,d0
  31.  
  32. .end:    rts
  33.  
  34. ; INPUT:
  35. ; d0.l=size of block (bytes)
  36. Mem.register:
  37.     cmp.l    Mem.max,d0
  38.     bls.s    .end
  39.     move.l    d0,Mem.max
  40. .end:    rts
  41.  
  42. ; Frees up all taken mem.
  43. Mem.free:
  44.     move.l    Mem.max,-(sp)
  45.     move.w    #$49,-(sp)
  46.     trap    #1
  47.     addq    #6,sp
  48.     rts
  49.  
  50. ; OUTPUT:
  51. ; d0.l: block address
  52. Mem.getBlock:
  53.     move.l    Mem.adr,d0
  54.     rts
  55.  
  56.     bss
  57.  
  58. Mem.max:ds.l    1                    ; allocated size
  59. Mem.adr:ds.l    1                    ; address of allocated block
  60.