VOGONS


First post, by superfury

User metadata
Rank l33t++
Rank
l33t++

I notice that when running AMIDIAG on the i430fx with 1 CPU installed that when it says Initializing multiprocessor... (or something equal to that) it completely locks up.

It won't respond to interrupts anymore(despite executing some IRQ-based timing loop(PIT0 ticks tight loop of 3 instructions)). I see that LINT0 is set to 10100h, thus the line on the LINT register is disabled(masked off)?

So in that case, the PIC won't be able to generate IRQs anymore, even though the loop depends on them firing to continue (just a cmp of the number in the BDA, followed by jz (waiting for it to increase) which is taken, followed by 2 jmp instructions back to the first instruction)?

Or am I missing something regarding the PIC? It's only connected to the LINT0 pin on the CPU, isn't it?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 1 of 4, by superfury

User metadata
Rank l33t++
Rank
l33t++

Hmmmm... How is the IMCR detected by the BIOS? I know of writing 0x00 and 0x01 for blocking PIC/NMI getting to the BSP, but otherwise nothing is known about how the BIOS knows it's there or not?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 2 of 4, by mr.cat

User metadata
Rank Member
Rank
Member

This stuff goes way over my head, but here's something:
https://reverseengineering.stackexchange.com/ … ned-in-the-docs

The IMCRP bit of the MP feature information bytes (refer to Chapter 4) enables the operating system to detect whether the IMCR is implemented.

There's also a mention of apic.c in Linux sources as a good use case (well I'm guessing you've probably read that already 😀

Reply 3 of 4, by superfury

User metadata
Rank l33t++
Rank
l33t++

Also, why does the image of the IMCR in the schematics contain the number "E0"?

Edit: My question is actually: How is IMCRP determined by a BIOS(I'm using a i430fx/i440fx motherboard emulation)? How does it probe the hardware to know if it exists?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 4 of 4, by mr.cat

User metadata
Rank Member
Rank
Member
superfury wrote on 2021-02-18, 01:01:

Also, why does the image of the IMCR in the schematics contain the number "E0"?

Edit: My question is actually: How is IMCRP determined by a BIOS(I'm using a i430fx/i440fx motherboard emulation)? How does it probe the hardware to know if it exists?

Maybe a stupid question but can't it be hardwired to BIOS (so no probing necessary)?
SeaBIOS doesn't seem to be using those feature bytes at all (mptable.c), they're set to zero.