; > PrivDoc.MMPM

Still to do on memory management, as of 26-May-93:

; Must be TMD

 + Make SoftCAMMap variable size
 + Finish routine to allocate backing L2 for an area
 + Write routine to allocate logical addresses for areas
 + Write routine to check for overlapping areas
 + Complete Create dynamic area routine
    (done apart from final OS_ChangeDynamicArea to get required size)
 + Write Remove dynamic area routine
    (done apart from initial OS_ChangeDynamicArea to shrink to zero size)
 + Write Return info on dynamic area routine
 + Write Enumerate dynamic areas routine
 + Write Renumber dynamic areas routine
 + Change OS_ReadDynamicArea to use new list
 + Change OS_ValidateAddress to use new list
 + Put in new error messages properly
 * If CreateArea fails to grow area to required size, it should kill area and return error
 * Change ChangeDynamicArea code to use lists:
    + Check enough is working for Wimp_ClaimFreeMemory to use OS_DynamicArea(create)
    * Check PreShrink and PostShrink work completely OK
    * Check PreGrow and PostGrow work (apart from passing in page blocks)
    * Migrate existing areas to new world:
        * Update InitDynamicAreas initially to fake up a node for the RMA, and check it works
        * Use DynamicArea_Create to create RMA from scratch (if feasible)
        * Update InitDynamicAreas to fake up a node for the system heap + check it (no way of using create routine)
        * Change OS_ReadRAMFsLimits to use OS_ReadDynamicArea
        * Write RAMFS area handlers
        * Create RAMFS dynamic area using DynamicArea_Create, + check it works
        * Do similar for font cache, sprite area

    * Put in code to split grow block into chunks, and create page blocks (without checking for updates from PreGrow)
    * Put in checks for PreGrow requesting particular pages, and call alternative code:
        * Do the double shuffle
        * Issue Service_PagesUnsafe/Safe
        * Stop it getting the static pages (esp. cursor/sound page, L1 and maybe L2)
    * Put in extra code to cope with doubly-mapped areas
    * Write area handlers for screen, and move it to new world
 * Change size of application space to 24M (check all refs to 16M in whole image)
 * Put in indirections for hardware vector poking
 * Change FPE to use indirections (KWelton)
 * Move RMA to &02100000, and change size of app space to 28M
 * Conversion to do late aborts
 
; Could be done by ANOther

 * OS_Memory:
        a) conversion bits
        b) read phys.memory arrangement
        c) read amounts of various sorts of memory
        d) read controller addresses