• Hello MLAers! We've re-enabled auto-approval for accounts. If you are still waiting on account approval, please check this thread for more information.

How does the L2 cache work on NuBus (PowerPC)

Looks like there's still some issues in your output for DecoderInfo and NKHWInfo.
  • DecoderInfo and DecoderInfoHeader incorrectly overlap. DecoderInfoHeader should be 40 bytes before Decoder table. Many offsets in ProductInfo point to the middle of a record like DecoderInfoPtr.
  • NKHWInfo and NKSystemInfoPtr are overlapping which cannot be correct.
  • NKHWInfo.MacROM_Base and NKHWInfoPtr are the same address?
  • NKHWInfo.VectorLookupTable and NKNanoKernelInfoPtr are the same address?
  • NKHWInfo.VectorMaskTable overlaps NKNanoKernelInfoLen?
  • NKHWInfo.ISASlave8259 and NKSystemInfoPtr are the same?
  • It appears that every 32 bits in the 4K page at 0x5FFFF### returns 0xA55A2258. This is common for I/O - many addresses access the same hardware register since address decode doesn't use all address bits. Since this page is I/O and not RAM, it cannot be part of NKHWInfo.
Thanks, I can find and fix those things, but before I do, is this type of output useful for dingusppc?
According to your output, the hardware CPU ID of 0x2258 must be converted during startup into a ProductInfo CPU ID 0x3258.
Interesting! Is there any value in getting the data from a live system or is taking it out from ROM generally better?
I made some changes to Hex Fiend so that I can copy lables/values of a selected node or all nodes. I've attached sample output from the 5200/6200 ROM (use a large tab width to align the value column). I still need to add parsing for ImmgPrimPtr and IconInfoPtr. Search for 0x3258 to find the ProductInfo in the output.

I improved the "Show in Template" command in Hex Fiend so that it selects the template entry that has the smallest range that encompasses the byte that was right-clicked. Previously, it had a problem with multiple sections or nodes with discontiguous ranges that encompassed the same byte.
Very nice!
 
Thanks, I can find and fix those things, but before I do, is this type of output useful for dingusppc?

Interesting! Is there any value in getting the data from a live system or is taking it out from ROM generally better?

Your output shows that only having the ROM is not sufficient to determine how to emulate a machine.
The ROM has many ProductInfo's that are not Power Mac 5200 so we don't know which ProductInfo is for the Power Mac 5200.
Even if we knew the CPU ID was 0x2258, we can't tell from the ROM that it results in ProductInfo 0x3258.

Without documentation, data from a live system is necessary to ensure that emulation produces the same result (makes the same choices) as the live system. There are other chips that have registers with IDs that are unknown that may need to be known. Output from MacsBug can show how the registers of a chip are laid out - how they repeat in the memory range for that chip. Writing values to registers and reading them back can help determine which bits are writable. etc.

Since a ROM has many ProductInfo's, does that mean a later ROM that includes a ProductInfo for an older system can be used for the older system? For example, The Power Mac 5200 has a ProductInfo for Centris 650 or Power Mac 6100.
Can this ROM work on a Centris 650? That can be tested in MAME.
Can this ROM work on a Power Mac 6100? That can be tested in DingusPPC.

Are the various ProductInfo's after 0x3258 for variants of the Power Mac 5200? or Power Mac 6200? or for other Macs in development?

Code:
InfoPDM    -> 0x210AC
InfoPDMcoldFusion    -> 0x21110
InfoPDMCarlSagan    -> 0x21174
InfoVail16    -> 0x204F8
InfoLCIII    -> 0x2055C
InfoVail33    -> 0x205BC
InfoWombat20    -> 0x20620
InfoCentris650    -> 0x20684
InfoQuadra650    -> 0x206E8
InfoQuadra800    -> 0x2074C
InfoWombat40    -> 0x207B0
InfoWombat40F    -> 0x20814
InfoCentris610    -> 0x20878
InfoQuadra610    -> 0x208DC
InfoWLCD33    -> 0x20940
boxLC475 ; LC 475 (cpuIDHiEnd|$221)    -> 0x209A4
boxQuadra605 ; Quadra 605 (cpuIDHiEnd|$225)    -> 0x20A08
boxOptimus25 ; Unknown (0x222D)    -> 0x20A6C
boxLC575 ; LC 575 (cpuIDHiEnd|$22E)    -> 0x20AD0
boxSlimus25 ; Unknown (0x2252)    -> 0x20B34
boxSlimus25 ; Unknown (0x2253)    -> 0x20B98
boxSlimus33 ; Unknown (0x225A)    -> 0x20BFC
boxSlimus33 ; Unknown (0x225B)    -> 0x20C60
boxCarnation25 ; Unknown (0x3258)    -> 0x20CC4
boxCarnation16 ; Unknown (0x3250)    -> 0x20D28
boxCarnation25 ; Unknown (0x325E)    -> 0x20D8C
boxCarnation16 ; Unknown (0x3256)    -> 0x20DF0
boxCarnation25 ; Unknown (0x3259)    -> 0x20E54
boxCarnation16 ; Unknown (0x3251)    -> 0x20EB8
boxCarnation25 ; Unknown (0x325C)    -> 0x20F1C
boxCarnation16 ; Unknown (0x3254)    -> 0x20F80
boxCarnation25 ; Unknown (0x325D)    -> 0x20FE4
boxCarnation16 ; Unknown (0x3255)    -> 0x21048
InfoUnknownUnknown    -> 0x213CC
InfoMacLC    -> 0x21304
InfoQuadra700    -> 0x211D8
InfoQuadra900    -> 0x2123C
InfoQuadra950    -> 0x212A0
InfoVISAUnknown    -> 0x21368
InfoUnknownUnknown    -> 0x213CC
 
That's awesome; I need to find the time to roll all this into MacROMan, so people can look up ROM details and not just identify which is which.
 
Back
Top