h6. [[OS SWI Calls]] h6(. » [[OS_Memory]] h6((. » OS_Memory 64 h2. OS_Memory 64 h5. (SWI &68) |_<^{width:4em}. Entry | | |<^. R0 |<^. 64, and [[OS_Memory 0 Flags|flags]], | |<^. R1 |<^. Pointer to [[OS_Memory Page Blocks (64 bit)|64 bit page block]] list | |<^. R2 |<^. Number of entries in page block list | |_<^{width:4em}. Exit | | |<^. R0 |<^. Preserved | |<^. R1 |<^. Preserved | |<^. R2 |<^. Preserved | h4. Use The purpose of this call is to convert between different memory spaces used to specify addresses in a page block, and alter their cache-ability. h4. Notes This call was introduced in RISC OS 5.29, and is an extended form of [[OS_Memory 0]], to allow full interaction with pages which have logical or physical addresses which can't be represented in the [[OS_Memory Page Blocks|32 bit page block]] format. I.e. pages with physical addresses >= 2^32 (possible on ARMv7+ machines which support the Large Physical Address Extension), or pages with logical addresses >= 2^32 (for future AArch64 versions of RISC OS). For AArch32 versions of RISC OS, your code can decide whether to use OS_Memory 0 or OS_Memory 64 by checking bit 21 of [[OS_PlatformFeatures 0]]. The addresses must be in RAM; specifically, they must all correspond to pages which the OS has assigned a valid physical page number to. E.g. I/O memory which has been mapped by OS_Memory 13 will not be recognised. Addresses need not be page aligned. If a page is made uncacheable, the relevant portion of the CPU cache will be flushed. If there is an error processing any page in the block, the call has no effect on any pages. h4. See also * [[OS_Memory]] * [[OS_Memory 0 Flags]] * [[OS_Memory Page Blocks]] * [[OS_Memory 0]]