skiselev / 8088_bios

BIOS for Intel 8088 based computers
GNU General Public License v3.0
513 stars 61 forks source link

v0.9.9 takes very long to initialize I/O interrupts in SysCheck 2.45. #31

Closed TzOk83 closed 1 year ago

TzOk83 commented 1 year ago

With the new release, it takes very long in CheckIt to "initialize" I/O interrupts, sometimes it hangs a step before, on checking modem on COM2. I'm running on Micro8088, with PT8010AF chipset and NEC V20 CPU.


Correction - SysCheck, not CheckIt

skiselev commented 1 year ago

I am unable to reproduce this issue on my system. Moreover, I don't remember touching anything related to serial ports in the BIOS, and it doesn't do much with serial ports anyway.

I don't have a modem connected to the serial port, but serial port tests work fine on my system - both with and without a loopback. I don't see any delays when initializing interrupts or anywhere in the test.

I recommend checking the following:

TzOk83 commented 1 year ago

I don't have a modem or nothing else connected to the MultiIO card, that's just the message is being displayed in CheckIt. I have 2 switchable BIOSes on my Micro8088, one is this, and the other is GLaBIOS, and on the latter one, CheckIt starts without problems. Furthermore, I don't think it is related to modem nor COM port, more to the next step, which is determining IRQ binding. If it reaches this phase it takes very long to complete, while normally you wouldn't be able to even see those messages. The problem was not occurring on the v0.9.8 BIOS.


Sorry, my mistake - it was SysChk, not CheckIt.

skiselev commented 1 year ago

I indeed can reproduce this issue on my system with both 0.9.9 and 0.9.8 BIOSes. So it doesn't seem to be related to any changes in 0.9.9. More work needed to understand what exactly SysChk is doing when it "initializes I/O interrupts"

TzOk83 commented 1 year ago

As far as I understand, it tries to determine available IRQs and hardware associated with them.

skiselev commented 1 year ago

Yes. In SYSCHK.DOC, it actually says that "Detecting interrupt usage for the parallel and serial ports can often cause the system to hang under certain conditions". I was checking a few things, and here are some findings:

skiselev commented 1 year ago

It took me a few hours to get to the bottom of it.

TL;DR: There is nothing wrong with 8088 BIOS or GlaBIOS. The problem is in the SysChk. As I mentioned in my previous comment, SysChk documentation specifically says that "Detecting interrupt usage for the parallel and serial ports can often cause the system to hang under certain conditions". Congratulations are in order, you've found these conditions! 😄

Long description:

What to do about it:

TzOk83 commented 1 year ago

I went for the last option and added 10k pullups on IRQ lines on the ISA backplane. It was a good choice. Not only SysCheck now works, but it also greatly improved overall system stability. The system boots every time (previously it was sometimes freezing without any bus activity), with any clock speed, and with any combination of ISA cards.