VOGONS


First post, by superfury

User metadata
Rank l33t++
Rank
l33t++

It's both in 8-bit mode. Anyone can see why it won't detect the hard disks on AT, but it detects it on the XT(same settings used on both architectures):
https://bitbucket.org/superfury/unipcemu/src/ … ide.c?at=master

On the XT version it sends an identify command and properly reads all parameters, but on the AT it reads the first word, then gives up(The value read is 0x0440)? Anyone knows why the AT IDE BIOS simply aborts after that?

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

Reply 1 of 3, by Jepael

User metadata
Rank Oldbie
Rank
Oldbie
superfury wrote:

It's both in 8-bit mode. Anyone can see why it won't detect the hard disks on AT, but it detects it on the XT(same settings used on both architectures):
https://bitbucket.org/superfury/unipcemu/src/ … ide.c?at=master

On the XT version it sends an identify command and properly reads all parameters, but on the AT it reads the first word, then gives up(The value read is 0x0440)? Anyone knows why the AT IDE BIOS simply aborts after that?

I don't quite follow. You use XT-IDE bios on AT machine, even if AT bios supports hard drives directly?

Reply 2 of 3, by superfury

User metadata
Rank l33t++
Rank
l33t++

The hard disks I'm using are 20MB(C) and 8GB(D(Contains all games and testing software)). The 20MB disk might be supported, but afaik the 8GB won't be supported on the IBM PC AT 286 BIOS?

Btw I'm starting to create a little Turbo XT Expansion ROM(C0000-DFFFF range ROM) to add AT support to the Generic Super PC/Turbo XT BIOS. Although I would have to add ROM patching support to modify the final 0xFE byte to it's AT value to UniPCemu to satisfy software dependant on it for detection. I might also have to add some XT vs AT detection to it(Softdebugger hardware) and UniPCemu to allow for it to work both on XT and AT architectures.

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

Reply 3 of 3, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just found about an error in the CPU emulation: The REP/REPNZ prefixes weren't implemented for the INSB/W and OUTSB/W string instructions. This caused stuff like the Identify command to fail loading all data, since the REP INSB became a single INSB instruction, thus reading only the first byte of the Identify result. This probably also happens with other input/output in blocks on 186+ compilations of the XT-IDE BIOS. Since the XT version uses the 8086 version, which uses the normal IN/OUT instructions within a loop, this wasn't effected by this bug. I've implemented the proper REP/REPNZ processing now. It should now properly read the entire results and store entire results on the 186+ build of the XT-IDE BIOS. The only one affected by this afaik is the AT-IDE BIOS build of it(built for the AT, the XT binary is simple a 8086 build).

Edit: I've managed to fix the CMOS that was causing troubles with the 80186+ HDD BIOS, but now the 80286 AT BIOS crashes at another address. This is mentioned in my IBM PC AT BIOS thread, as it related to the AT BIOS itself.

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