Entry into RISC OS:

POST check (if any) complete

CPU & memory systems at full speed
MMU off, SVC32 mode, IRQs+FIQs disabled
All interrupts masked
I/O timings set up
DRAM refresh running
Video system stabilised (off?)


Information passed:
Table of (addr,len) pairs of RAM
Address + amount of VRAM
Memory speed?
CPU speed?
Entry point to HAL






Questions:

How to clear RAM without logical copy? Do we NEED a logical copy?
Yes we do - but logical copy will NOT be contiguous.

Physical  Size      Logical  - offset
F0000000  01000000  80000000   70000000
F1000000  01000000  81000000   70000000
60000000  00001000  82000000   22000000 - fast SRAM - how to signal?

02000000  00200000  80000000   7FE00000
10000000  01700000  80200000   70200000
11B00000  02500000  81900000   6FE00000
14000000  04000000  83E00000   6FE00000

02000000  00200000  82000000   80000000
10000000  01700000  90000000   80000000
11B00000  02500000  91B00000   80000000
14000000  04000000  94000000   80000000




Memory Map


00000000 16K        Kernel workspace
00004000 16K        Scratch space
00008000 Mem-32K    Application memory
0xxxxxxx 3840M-Mem  Dynamic areas
F0000000 160M       I/O space (growing downwards if necessary)
FA000000 1M         HAL workspace
FA100000 8K         IRQ stack
FA200000 32K        SVC stack
FA300000 8K         ABT stack
FA400000 8K         UND stack
FAE00000 1M         Reserved for physical memory accesses
FAF00000 256k       reserved for DCache cleaner address space (eg. StrongARM)
FAF40000 64k        kernel buffers (for long command lines, size defined by KbuffsMaxSize)
FAFE8000 32K        HAL workspace
FAFF0000 32K        "Cursor/System/Sound" block (probably becoming just "System")
FAFF8000 32K        "Nowhere"
FB000000 4M         L2PT
FB400000 16K        L1PT
FB404000 4M-16K     System heap
FB800000 8M         Soft CAM
FC000000 64M        ROM


26-bit system:

00000000 16K        Kernel workspace
00004000 16K        Scratch space
00008000 28M-32K    Application memory
01C00000 32K        SVC stack
01C08000 2M-32K     System heap
01F00000 32K        Cursor/System/Sound
01F08000 32K        "Nowhere"
02100000 15M        Module area
03000000 8M         I/O space
03800000 8M         ROM
04000000 2G-64M     Dynamic areas
80000000 512M       Logical copy of physical space
A0000000 1280M      Dynamic areas
F0000000 224M       I/O space (growing downwards if necessary)
FE000000 1M         HAL workspace
FE100000 8K         ABT stack
FE200000 8K         UND stack
FF000000 4M         L2PT + embedded L1PT
FF800000 8M         Soft CAM


"Soft" resets

Entry through HAL - full HAL initialisation.
HAL must not destroy (much) memory.
RISC OS detects intact memory and makes the reset "soft".
RAM page tables reconstructed from CAM.
Other page tables reconstructed through HAL.


"Break"

RISC OS calls HAL to shut down, then shuts off MMU, and calls HAL_Reset code.
HAL then re-enters RISC OS in the usual fashion.