powermac-rom/ConfigInfo.s

161 lines
6.5 KiB
ArmAsm

; ROM version of NKConfigurationInfo struct, based on Mac OS ROM 8=9=10.
; Lives at ROM + 0x30d000 (and other addresses on OldWorld).
; From start of ConfigInfo to end of LoMemInit = 4k:
; Auto-align fields
aligning on
import RomTop, RomBtm
import Mac68kRomTop, Mac68kRomBtm
import ExTblTop
import NKTop
import EmTop, EmBtm, EmEntry, EmKernelTrapTable
import OpcodeTblTop, OpcodeTblBtm
ConfigInfo
; These sums are not checked on NewWorld, but :Tools:ToolSource:RiscLayout.c calcs them anyway
dcb.l 8, 0 ; 000 ; ROMByteCheckSums ; ROM Checksums - one word for each of 8 byte lanes
dcb.l 2, 0 ; 020 ; ROMCheckSum64 ; ROM Checksum - 64 bit sum of doublewords
dc.l RomTop-ConfigInfo ; 028 ; ROMImageBaseOffset ; Offset of Base of total ROM image
dc.l RomBtm-RomTop ; 02c ; ROMImageSize ; Number of bytes in ROM image
dc.l 0 ; 030 ; ROMImageVersion ; ROM Version number for entire ROM
; ROM component Info (offsets are from base of ConfigInfo page)
dc.l Mac68kRomTop-ConfigInfo ; 034 ; Mac68KROMOffset ; Offset of base of Macintosh 68K ROM
dc.l Mac68kRomBtm-Mac68kRomTop ; 038 ; Mac68KROMSize ; Number of bytes in Macintosh 68K ROM
dc.l ExTblTop-ConfigInfo ; 03c ; ExceptionTableOffset ; Offset of base of PowerPC Exception Table Code
dc.l 0xc000 ; 040 ; ExceptionTableSize ; Number of bytes in PowerPC Exception Table Code (generous)
dc.l RomTop+0x320000-ConfigInfo ; 044 ; HWInitCodeOffset ; Offset of base of Hardware Init Code (no longer exists)
dc.l 0x10000 ; 048 ; HWInitCodeSize ; Number of bytes in Hardware Init Code
dc.l NKTop-ConfigInfo ; 04c ; KernelCodeOffset ; Offset of base of NanoKernel Code
dc.l 0x10000 ; 050 ; KernelCodeSize ; Number of bytes in NanoKernel Code (too small)
dc.l EmTop-ConfigInfo ; 054 ; EmulatorCodeOffset ; Offset of base of Emulator Code
dc.l EmBtm-EmTop ; 058 ; EmulatorCodeSize ; Number of bytes in Emulator Code
dc.l OpcodeTblTop-ConfigInfo ; 05c ; OpcodeTableOffset ; Offset of base of Opcode Table
dc.l OpcodeTblBtm-OpcodeTblTop ; 060 ; OpcodeTableSize ; Number of bytes in Opcode Table
; Offsets within the Emulator Data Page.
string AsIs
@s dc.b 'NewWorld v1.0' ; 064 ; BootstrapVersion ; Bootstrap loader version info
org @s + 16
dc.l 0xf00 ; 074 ; BootVersionOffset ; offset within EmulatorData of BootstrapVersion
dc.l 0x100 ; 078 ; ECBOffset ; offset within EmulatorData of ECB
dc.l 0x070 ; 07c ; IplValueOffset ; offset within EmulatorData of IplValue
; Offsets within the Emulator Code.
dc.l EmEntry-EmTop ; 080 ; EmulatorEntryOffset ; offset within Emulator Code of entry point
dc.l EmKernelTrapTable-EmTop ; 084 ; KernelTrapTableOffset ; offset within Emulator Code of KernelTrapTable
; Interrupt Passing Masks.
dc.l 0x00200000 ; 088 ; TestIntMaskInit ; initial value for test interrupt mask
dc.l 0xff9fffff ; 08c ; ClearIntMaskInit ; initial value for clear interrupt mask
dc.l 0x00e00000 ; 090 ; PostIntMaskInit ; initial value for post interrupt mask
dc.l 0x808e0000 ; 094 ; LA_InterruptCtl ; logical address of Interrupt Control I/O page
dc.b 6 ; 098 ; InterruptHandlerKind ; kind of handler to use
dc.l 0x5fffe000 ; 09c ; LA_InfoRecord ; logical address of InfoRecord page
dc.l 0x68ffe000 ; 0a0 ; LA_KernelData ; logical address of KernelData page
dc.l 0x68fff000 ; 0a4 ; LA_EmulatorData ; logical address of EmulatorData page
dc.l 0x68080000 ; 0a8 ; LA_DispatchTable ; logical address of Dispatch Table
dc.l 0x68060000 ; 0ac ; LA_EmulatorCode ; logical address of Emulator Code
dc.l LowMemVals-ConfigInfo ; 0b0 ; MacLowMemInitOffset ; offset to list of LowMem addr/data values
;
; Then the pagemap init stuff is filled by the trampoline at boot
;
; Address Space Mapping
dc.l 0 ; 0b4 ; PageAttributeInit ; default WIMG, PP settings for PTE creation
dc.l 0 ; 0b8 ; PageMapInitSize ; size of page mapping info
dc.l 0 ; 0bc ; PageMapInitOffset ; offset to page mapping info (from base of ConfigInfo)
dc.l 0 ; 0c0 ; PageMapIRPOffset ; offset of InfoRecord map info (from base of PageMap)
dc.l 0 ; 0c4 ; PageMapKDPOffset ; offset of KernelData map info (from base of PageMap)
dc.l 0 ; 0c8 ; PageMapEDPOffset ; offset of EmulatorData map info (from base of PageMap)
dcb.l 32, 0 ; 0cc ; SegMap32SupInit ; 32 bit mode Segment Map Supervisor space
dcb.l 32, 0 ; 14c ; SegMap32UsrInit ; 32 bit mode Segment Map User space
dcb.l 32, 0 ; 1cc ; SegMap32CPUInit ; 32 bit mode Segment Map CPU space
dcb.l 32, 0 ; 24c ; SegMap32OvlInit ; 32 bit mode Segment Map Overlay mode
dcb.l 32, 0 ; 2cc ; BATRangeInit ; BAT mapping ranges
dc.l 0 ; 34c ; BatMap32SupInit ; 32 bit mode BAT Map Supervisor space
dc.l 0 ; 350 ; BatMap32UsrInit ; 32 bit mode BAT Map User space
dc.l 0 ; 354 ; BatMap32CPUInit ; 32 bit mode BAT Map CPU space
dc.l 0 ; 358 ; BatMap32OvlInit ; 32 bit mode BAT Map Overlay mode
; Only needed for Smurf
dc.l 0 ; 35c ; SharedMemoryAddr ; physical address of Mac/Smurf shared message mem
dc.l -1 ; 360 ; PA_RelocatedLowMemInit ; physical address of RelocatedLowMem
dc.l 0x330000 - 0x30d000 ; 364 ; OpenFWBundleOffset ; Offset of base of OpenFirmware PEF Bundle
dc.l 0x20000 ; 368 ; OpenFWBundleSize ; Number of bytes in OpenFirmware PEF Bundle
dc.l 0xff800000 ; 36c ; LA_OpenFirmware ; logical address of Open Firmware
dc.l 0x00400000 ; 370 ; PA_OpenFirmware ; physical address of Open Firmware
dc.l 0xfff0c000 ; 374 ; LA_HardwarePriv ; logical address of HardwarePriv callback
; There are still some fixed-location fields here that the Trampoline will populate,
; but the ROM we are building contains just zeros.
;
; Key/value pairs for initializing Low Memory Globals.
; (at the end of ConfigInfo's 4k max size)
;
; A wee little macro to write LoMem key/value pairs *below* the asm location counter
macro
LowMem &addr, &val
@b
org @b - 4
dc.l &val
org @b - 8
dc.l &addr
org @b - 8
endm
; Sentinel zero at end (late address) of list
org 4096 - 4
dc.l 0
org 4096 - 4
; The table (older RISC versions have more in here.)
; The 68k emulator's cold-start vector, points to a "JMP StartBoot"
; instruction in the 68k ROM header. (Normally this value would be
; read from the ROM while it was overlaid on RAM at cold start, but
; why emulate that on a PowerPC?)
; SheepShaver patches the 68k reset vector around this location,
; but assumed offset 0xfd8.
LowMem 0x00000004, 0xffc0002a
LowMemVals