Currently the Page faults happen at the following locations(all being caused by non-present NULL PTE/PDE):
0028:802000BD, error code 0. Cause: Linear address 06f4011e. Page fault handler at 0028(32-bit mode flat descriptor):80005EE4. Cause Opcode: 0FB706h MOVZX instruction.
0028:80007FDC, error code 0. Cause: Linear address 0782002f. Page fault handler at 0028(32-bit mode flat descriptor):80005EE4. Cause Opcode: 32-bit 830B08h OR instruction.
It then returns to the MS-DOS prompt?
- Filename
- debugger_Windows3.0_faultingtwice_exittoMSDOS5prompt.7z
- File size
- 1.3 MiB
- Downloads
- 172 downloads
- File comment
- Common emulator log from the first page fault until reaching the MS-DOS prompt(visible on the screen and usable).
- File license
- Fair use/fair dealing exception
Edit: It seems to look for bit 2 of a byte that's at the address 2Eh bytes above the bottom of the stack, but the stack of the fault(Page fault after all) only contains 10h bytes pushed by the interrupt handler(the kernel is the cause of the page fault after all)?
Edit: Currently using https://defuse.ca/online-x86-assembler.htm to help me disassemble the instructions UniPCemu fetches to verify them. Originally used ODA, but that website seems to keep giving 500 errors?
Can you tell me something about this, crazyc? It seems to return to real mode, even though it's a protected-mode kernel???
Edit: Hmmm.... Some problems seem to have arisen booting Minix somewhere after the commit of 2018/05/29 15:55... Guess it's checking time to find out said bug(booting Minix 2.0.4 until it crashes, at which point the causative commit should have been found)...
Edit: In essence, a few big changes have been made since then: fixing stack problems with privilege level switch using RETF/IRET to lower privilege level(as well as fixing hardware to time properly in small ammounts, e.g. CD-ROM emulation problems) at commit 2016/06/05 13:42, REP fix at 2018/06/07 11:43, small updates until 2018/06/10 19:23, start of modr/m fixes and 8086 undefined opcodes at 2018/06/11 14:50, then the 32-bit ModR/M and relative JUMP/SET fixes in the most recent commits.
Edit: The privilege level switch commit checks out.
Edit: Still running until the REP(Z/NZ) fix. All that's left until the start of the ModR/M fixes are the RETF/IRET conditional clearing(when invalid at the lower privilege level) of the segment registers, the CMOS fixes and the saving of the CMOS when entering the Settings menu, at which point it's back to the last ModR/M fixes.
Edit: Whoops. The checks used when returning to a lower privilege level using RETF/IRET were clearing/zeroing the segment register when the present bit was set(so with valid segments instead of invalid segments) or the system bit was set(thus a valid code/data segment), instead of cleared. Thus clearing the segment registers even when not supposed to. 😖
Edit: Having fixed the privilege lowering RETF/IRET bug, Minix boots again 😁