forked from elliotnunn/powermac-rom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfigInfo.s
160 lines (109 loc) · 6.54 KB
/
ConfigInfo.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
; 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