Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Boot failed, error 00 #12

Open
ImanolBarba opened this issue Nov 19, 2023 · 4 comments
Open

Boot failed, error 00 #12

ImanolBarba opened this issue Nov 19, 2023 · 4 comments

Comments

@ImanolBarba
Copy link

Been trying out a monster FDC card on a few test machines with no issues, but after trying today on the target machine where I actually want it installed, I got the message in the title.

AFAICT from the code, this means that it failed attempting to reset the drive, correct? Which would be causes for the code to fail there? How can I debug this? My best guess is that the BIOS equipment list word is being shadowed somehow and any INT 13h calls to floppy simply fail, I still have to verify the equipment list value after booting though.

The machine itself is a Vortex86DX SBC that has no conflicting FDC (that I know of, documentation does not say there is one at least), it does have a lot of onboard devices: USB controller, onboard LAN etc, so while I would expect an IRQ conflict, I already reserved IRQ6 since it's a PnP BIOS just in case. Still, I would expect some response from the card in that case, I just think the BIOS is failing to run anything since it is not expecting a floppy drive to be present at all.

Any ideas?

Thanks!

@ImanolBarba
Copy link
Author

ImanolBarba commented Nov 20, 2023

Nevermind the above. It would appear that because the board has an IDE controller (that I tried disabling), the floppy bios is installing itself on INT 40h so I think the IDE controller interrupt routine does not redirect calls to INT 40h when dealing with floppies. Would a preferrable alternative to the logic in set_interrupts be to:

  1. Before installing the interrupt, get the installed 13h handler routine. There's a few user-reserved interrupts that we can use for storing it, which can even be user-configurable.
  2. Replace INT 13h routine with the Floppy BIOS one
  3. Any INT 13h calls directed at hard disks result in a call to the original routine

@ImanolBarba
Copy link
Author

This is what I was proposing:

master...ImanolBarba:floppy_bios:master

I will test this at some point this week.

@skiselev
Copy link
Owner

I didn't do any testing of my BIOS with newer PnP BIOSes. People have reported mixed results with these. PnP BIOSes supposed to use a fairly involved procedure to initialize BIOS extensions. That might or might not be compatible with "legacy" BIOS extensions. See the Plug and Play BIOS Specification. Trying to make the floppy BIOS PnP compatible it is on my long list of things to do. You're welcome to check that specification, as I suspect the behavior that you're seeing the result of your BIOS being a PnP BIOS.

Here is the current logic:
An IDE/SCSI/other HDD BIOS supposed to re-install the original floppy BIOS INT 13h handler at INT 40h. And the Multi-Floppy BIOS extension actually checks if that is the case. If the INT 13 has not been relocated to INT 40h, Multi-Floppy BIOS will install itself at INT 13h, otherwise it will install itself at INT 40h.

@ImanolBarba
Copy link
Author

That makes sense, however, the HDD BIOS should in theory redirect the INT 13h calls directed at floppies to INT 40h, correct?

If so, what seems to be happening with this particular HDD controller BIOS I'm testing is that the HDD controller BIOS is completely omitting this step.

It seems to me there isn't a good "universal" solution in this case. The best approximation I could come up with to a universal solution is that code I wrote, which instead of relying on the HDD controller BIOS doing it's job, we flip the model and just let the floppy BIOS (which we control) do what's "correct" (functionally speaking).

I understand that each HDD controller BIOS will have it's own quirks and it's not practical to do this whole thing for a few ones that don't do what's supposed to be done, but I wonder what other alternatives are there in this case

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants