Several different address spaces are used in MOL. This document will try to straighten things out a bit. 1. Linux virtual addresses ========================== The linux virtual address space is the "normal" address space seen by the mol user-space process. In this space, the memory the virtual machine use for RAM is typically mapped at 0x40000000 but it could be located anywhere. The ROM (in the oldworld setting) is typically mapped to 0x4fc00000; 2. (Linux) physical addresses ============================= These addresses are the "raw" untranslated addresses addresses the hardware uses. This address space is only handled by the MOL kernel module (well, the MOL video driver uses this address space to map the fbdev framebuffer for instance). 3. Mac-physical addresses ========================= The mac-physical address space is the untranslated address space of the virtual machine. RAM is continuous and starts at 0. The ROM (in the oldworld case) is located at 0xfc000000. Physical addresses are used in the communication between a mac-side driver and the mol process. (This is important) 4. Mac-virtual addresses (effective addresses) ============================================== Mac-virtual addresses corresponds to addresses which are to be translated by the mac-MMU to a mac-physical address. What the address space looks like depends on the MMU registers (and the PTE hash table in mac-ram). Maintaining the mac-virtual address space is the responsibility of the mmu-code in the kernel. No code in the user process (mol) except the debugger/monitor code should ever use mac-virtual addresses. In particular: A mac-side driver must pass physical addresses to mol since dereferencing a virtual address might be impossible without a page fault in the virtual machine...