• Ben Avison's avatar
    Support permanent mapping of IO above 4GB using supersections · 9024d1f6
    Ben Avison authored
    This is facilitated by two extended calls. From the HAL:
    * RISCOS_MapInIO64 allows the physical address to be specified as 64-bit
    
    From the OS:
    * OS_Memory 21 acts like OS_Memory 13, but takes a 64-bit physical address
    
    There is no need to extend RISCOS_LogToPhys, instead we change its return
    type to uint64_t. Any existing HALs will only read the a1 register, thereby
    narrowing the result to 32 bits, which is fine because all existing HALs
    only expected a 32-bit physical address space anyway.
    
    Internally, RISCOS_MapInIO has been rewritten to detect and use supersections
    for IO regions that end above 4GB. Areas that straddle the 4GB boundary should
    also work, although if you then search for a sub-area that doesn't, it won't
    find a match and will instead map it in again using vanilla sections - this is
    enough of an edge case that I don't think we need to worry about it too much.
    
    The rewrite also conveniently fixes a bug in the old code: if the area being
    mapped in went all the way up to physical address 0xFFFFFFFF (inclusive) then
    only the first megabyte of the area was actually mapped in due to a loop
    termination issue.
    
    Requires RiscOS/Sources/Programmer/HdrSrc!2
    9024d1f6
VMSAv6 30.3 KB