OK. Having improved things a bit, I see the following happening:
1. Windows 95 setup executes a normal format track command, formatting track 0 head 0 with 18 normal sector values supplied through DMA.
2. It executes a Read Data command to read the data back(bytes 6,0,0,0,1,2,12h,1bh,0), thus for a 18-sector read with MT, MFM and SK set. So the command reads said data from the disk in blocks and supplies it through a DMA transfer.
3. The Read Data finishes with an IRQ(which is raised) and enters result phase.
The MSR is still 0x50(probably until it's updated by reading the result register, which will update the value with actual values for the read?). So the MSR isn't read for the result phase.
The IRQ is actually raised by the FDC, according to it's internal state of the IR line.
Looking at the PIC status, the parallel IR line is actually acnowledged and in the active IRR register waiting to be serviced. It also shows that it's still executing a IRQ0 interrupt(which has it's bit set in all ISR registers).
Edit: Simply moving the mouse around shows that the IRQ0 handler is indeed in some kind of never finishing situation?
So the FDC is actually doing what it's supposed to do, but the IRQ0 handler is somehow hanging itself up?
Anyone knows what might be the cause?
Edit: It seems to be in some kind of infinite loop at F6F6:F7F8?
Edit: It eventually gets to F6F6:F71B, which compares SS(=1799h):36C to 1, which isn't the case, thus jumping to F742, which jumps back to F7F8 at F6F6:F742(logical memory address 1066A2). Perhaps some part of the MS-DOS kernel?
Edit: Hmmm... I see a PUSH SS(opcode 16h), POP DS(opcode 1Fh) instruction in the stream of instructions, but DS isn't changing at all(DS=F6F6, SS=1799)?
Edit: Hmmm.. PUSH SS writes to SS:3FA=17CEA(linear address). It reports success having written it. It's supposed to write the correct value, as seen by the request.
Then POP DS... It request a read a SS:35A=17CEA(linear address). The result of the read is 1799h. So that's OK.
Then it tries to write to DS the value 1799h. So so far so good...
Edit: OK. The instruction finishes and it's still 1799h. But when the next instruction is supposed to start it's debugger, it's suddenly different(unchanged)?
At least, when the instruction of POP DS finishes, the registers (which are still uncommitted) contain the correct values and precalcs. So 1799h is actually loaded into DS at that point, but can still be discarded by any loading instruction that throws stuff like an exception.
Edit: And OF COURSE it's perfect timing for Visual Studio with it's debugger to hang itself up right as I'm trying to get to whatever the next instruction processing is in the debugger stepping through Windows 95's MS-DOS kernel! Yay!
Edit: OK. The watch window literally has a little box in the middle saying "Busy..." and nothing more?
Edit: Just gotten it working after cleaning out various long lists of variables from the watch window that were still there(as well as old x86 register watches that aren't used in the same way anymore).
Managed to create a little log of it running said issue:
- Filename
- debugger.log
- File size
- 199.43 KiB
- Downloads
- 33 downloads
- File license
- Fair use/fair dealing exception
Can anyone see something going wrong or know what's going on?