VOGONS


UniPCemu progress

Topic actions

Reply 680 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Improved the packet server a bit. The loopback now has an extra flag for handling detected default gateway routing.
Now the receiver checks for normal IP addresses first, and if that fails it resolves to the default gateway IP, if not from the host network (pcap).
Connected clients can now actually perform as a default gateway (using IP and subnet mask unconfigured with IPCP, thus both being 0.0.0.0).
The default gateway will route any packets it sends to that client if it detects one using those settings (although only one client is allowed with such a setting).
And the configured default gateway on the host network (if not loopback isn't enforced) will of course override it.

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

Reply 681 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

But the default gateway can only be for one client at a time.
So if you want a specific default gateway with a specific IP address, you need to connect with one dial-up connection for the normal IP connection (the direct connection for TCP/IP requests) and connect using a second modem with the default gateway to handle that. It will then receive/send normal packets over the first connection. The second connection sends the same, but receives all packets for the default gateway only.
Of course, combining the two will provide a full router: one IP address (or range) with it's directed packets or broadcasts, one adapter that just receives the packets for the default gateway.
So for example, on Dosbox this can be done by using two serial modem dial-up connections at the same time, one requesting automatic IP address (with subnet mask setup for the network), the other connection handling the default gateway for receiving only (and sending just as the default gateway incoming data).

Of course, UniPCemu's server only will allow one such a default gateway being connected, others are simply denied their IP/subnet combination (and giving the client a non-zero IP address).

Also, if UniPCemu's server has a default gateway client connected but a default gateway on a host machine is configured to use (the default gateway MAC field), that default gateway gets prioritized (routing there instead).
The default gateway only gets handled of course for outgoing packets from unmatching IP addresses from it's clients (it doesn't handle the actual host's defaults gateway for such a default gateway client).
Basically, it's only used when the default gateway isn't configured, the rules for the clients not matching any clients and one client has a default gateway IP/subnet combination (being 0.0.0.0/0 actually).

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

Reply 682 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. Windows XP home still crashes.
Looking at the address of the first parameter, I find:
44 00 46 00 80 38 12 E1
Then that's followed by the following string(using C syntax here): "\\ArcName\\%s" (zero terminated).
So it's trying to load some data from disk with a sprintf input? So is some sprintf function failing somehow (it almost looks like that's the case)?
So some kind of string parsing error?

The STOP error is still the same (7B,0xFC90E63C,0xC000...,0x0...,0x0...)

Perhaps I should look into that string pointed to (address E1123880)? That should be the unicode string (length 44h out of 46h bytes? Perhaps a buffer overflow?). So it's length is 68 out of 70 bytes available.

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

Reply 683 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just had an idea: the CD-ROM has a txtsetup.sif.
And what's inside txtsetup.sif?

[SetupData]











SetupSourcePath = "\"
MajorVersion = 5
MinorVersion = 1
DefaultPath=\WINDOWS




















OsLoadOptions = "/fastdetect /noguiboot /nodebug"





ForceScsi = 1
ForceDiskClass = 1
ForceCDRom = 1

Architecture = i386

DriverCabName=driver.cab

ProductType = 4
DisableAsr = 1
LoadIdentifier = %wks_id%
LoadIdentifierCancel = %cancel_id%
LoadIdentifierWin9x = %9x_id%
BaseVideoLoadId = %wks_id_vga%




Show last 6 lines



RequiredMemory = 67108864

Pagefile = 115,250

So I can specify some load options to load the kernel of the setup phase?
To be specific: OsLoadOptions , which might support debugging the kernel?
https://techshelps.github.io/MSDN/DNWINNT/HTML/D1E/S833A.HTM
So that'd be: "/fastdetect /noguiboot /nodebug /debug /debugport=COM2 /BAUDRATE=57600".
Then run the OS with that and a debugger on a serial loopback connected to UniPCemu (just like I did earlier with putty+COM0COM debugging NT4's kernel).
Next, configure UniPCemu for nullmodem mode 4 (simple nullmodem with dial out without handshake), to make it connect using phonebook entry #0 to the packet server build (like dialling out on a modem, but when it gets DTR set/cleared(hangup) instead).
The packet server build then is performing an IPv4 TCP port to serial passthrough (using COM0COM).
COM0COM then loops back into another virtual serial port.
Putty then connects to said virtual serial port and receives/sends data to the OS listening to the serial port inside UniPCemu.

The exact same setup I used when debugging NT4. Only this time with a newer Windows NT version (XP home).
If Windows actually uses the serial port (and raises DTR), I should see something happening on the connected Putty terminal 🤣.

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

Reply 684 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just modified the UART receiver buffer to no more being able to get stuck if receiving data, allowing incoming data from hardware to be received.
Although this allows the connected hardware interface to keep sending data and overflow the buffer (if enough time passes for the data to be received), but it will prevent some external protocols from getting stuck (like the Dosbox-compatible serial line handshakes when routed over the TCP connection).

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

Reply 685 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Fixed some dialing out issue when the TCP connection was being set up. The TCP asynchronous dialling was being started to make a connection, but after the time it detected the raising of the DTR line on the client it wouldn't update the dialling process anymore.
Now the main connection handling (which is timed like normal data bytes) performs said check too, calling the linde update function to make it continue the dialling process to connect correctly.
Edit: Fixed some more issues relating to hanging up too.

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

Reply 686 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. Observing communication, I see Windows XP home's detecting hardware (before blue screen when loading drivers) sending 3 bytes saying "DSs" over the serial line a few times.

It's receiving "iiii\x06" followed by 11 zeroes. Or 69h times 4 06h times 1 00h times 11.
It (windbg) keeps sending such a packet over and over while windows is loading.

Interestingly enough, 69h is 0110 1001 when in binary. Perhaps some kind of synchronization.
Then 06 is 0000 0110.
So all in all:
"0110 1001 0110 1001 0110 1001 0110 1001 0000 0110" is the packet being received on the Windows XP home side.

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

Reply 687 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. Some bugfixes on the serial connection later, I now get a proper connection between the host (Windows 10 running windbg) and the client (inside UniPCemu, running Windows XP home build 2600).

Output that's running inside WinDBG for Windows 7.1 (the only version compatible with that Windows XP builf afaik):

Opened \\.\COM6

Microsoft (R) Windows Kernel Debugger Version 3.0.0020.0
Copyright (c) Microsoft Corporation. All rights reserved.

Waiting to reconnect...
Symbol search path is: srv**http://msdl.microsoft.com/download/symbols
Symbol search path is: srv**http://msdl.microsoft.com/download/symbols;c:\windowsxprtm2600\symbols
Verbose mode ON.
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Loaded dbghelp extension DLL
Loaded ext extension DLL
Loaded exts extension DLL
Loaded kext extension DLL
Loaded kdexts extension DLL
*** Create process f0f0f0f0
Symbol search path is: srv**http://msdl.microsoft.com/download/symbols;c:\windowsxprtm2600\symbols
Executable search path is:

Process created: f0f0f0f0.1
PsLoadedModuleList not initialized yet. Delay kernel load.
Windows XP Kernel Version 2600 MP (1 procs) Free x86 compatible
Built by: 2600.xpclient.010817-1148
Kernel base = 0x807c2000 PsLoadedModuleList = 0x8083ce28
System Uptime: not available
ModLoad: 807c2000 809aa000 ntkrnlmp.exe
ModLoad: 80190000 801b4000 halapic.dll
ModLoad: fc9bb000 fc9bcb80 kdcom.dll
ModLoad: fc8cb000 fc8ce000 BOOTVID.dll
ModLoad: fc427000 fc499d80 setupdd.sys
ModLoad: fca83000 fca83d80 SPDDLANG.SYS
ModLoad: fc4bb000 fc4ca400 pci.sys
ModLoad: fc3fb000 fc426c00 acpi.sys
ModLoad: fc9bd000 fc9be100 WMILIB.SYS
ModLoad: fc4cb000 fc4d3c00 isapnp.sys
ModLoad: fc8cf000 fc8d1d80 acpiec.sys
ModLoad: fca84000 fca84d80 OPRGHDLR.SYS
ModLoad: fc4db000 fc4e8880 ohci1394.sys
ModLoad: fc4eb000 fc4f7180 1394BUS.SYS
ModLoad: fc3de000 fc3fa680 pcmcia.sys
ModLoad: fca85000 fca85d00 pciide.sys
ModLoad: fc73b000 fc740c80 PCIIDEX.SYS
ModLoad: fc9bf000 fc9c0200 intelide.sys
ModLoad: fc9c1000 fc9c2100 viaide.sys
ModLoad: fc9c3000 fc9c4a00 cmdide.sys
ModLoad: fc9c5000 fc9c6380 toside.sys
ModLoad: fc9c7000 fc9c8480 aliide.sys
ModLoad: fc4fb000 fc504280 mountmgr.sys
ModLoad: fc3bf000 fc3dd880 ftdisk.sys
ModLoad: fc743000 fc747900 partmgr.sys
ModLoad: fc74b000 fc751680 fdc.sys
ModLoad: fc9c9000 fc9ca700 dmload.sys
ModLoad: fc39b000 fc3beb80 dmio.sys
ModLoad: fc50b000 fc514280 sbp2port.sys
ModLoad: fc51b000 fc523280 lbrtfdc.sys
ModLoad: fc8d3000 fc8d6d00 usbohci.sys
ModLoad: fc37c000 fc39a180 USBPORT.SYS
ModLoad: fc753000 fc757a00 usbuhci.sys
ModLoad: fc52b000 fc537600 usbhub.sys
Show last 60 lines
ModLoad: fc9cb000 fc9cc280   USBD.SYS
ModLoad: fc75b000 fc761180 usbccgp.sys
ModLoad: fc8d7000 fc8d9580 hidusb.sys
ModLoad: fc763000 fc768c80 HIDPARSE.SYS
ModLoad: fc53b000 fc543180 HIDCLASS.SYS
ModLoad: fc54b000 fc55a400 serial.sys
ModLoad: fc8db000 fc8dea80 serenum.sys
ModLoad: fc76b000 fc770500 usbstor.sys
ModLoad: fc773000 fc777c80 vga.sys
ModLoad: fc55b000 fc56ae00 VIDEOPRT.SYS
ModLoad: fc56b000 fc577700 i8042prt.sys
ModLoad: fc8df000 fc8e2680 kbdhid.sys
ModLoad: fc77b000 fc780b80 kbdclass.sys
ModLoad: fc366000 fc37bf80 SCSIPORT.SYS
ModLoad: fc8e3000 fc8e6a80 cpqarray.sys
ModLoad: fc350000 fc365280 atapi.sys
ModLoad: fc8e7000 fc8ea200 aha154x.sys
ModLoad: fc783000 fc787a80 sparrow.sys
ModLoad: fc8eb000 fc8eef80 symc810.sys
ModLoad: fc57b000 fc588e80 aic78xx.sys
ModLoad: fc78b000 fc78f480 i2omp.sys
ModLoad: fc8ef000 fc8f2980 dac960nt.sys
ModLoad: fc58b000 fc593180 ql10wnt.sys
ModLoad: fc8f3000 fc8f5f00 amsint.sys
ModLoad: fc793000 fc799780 asc.sys
ModLoad: fc8f7000 fc8faa00 asc3550.sys
ModLoad: fc79b000 fc79f380 mraid35x.sys
ModLoad: fc8fb000 fc8fee80 ini910u.sys
ModLoad: fc59b000 fc5a4e00 ql1240.sys
ModLoad: fc33d000 fc34fd80 tffsport.sys
ModLoad: fc5ab000 fc5b8780 aic78u2.sys
ModLoad: fc7a3000 fc7aaf80 symc8xx.sys
ModLoad: fc7ab000 fc7b1ee0 sym_hi.sys
ModLoad: fc7b3000 fc7ba7e0 sym_u3.sys
ModLoad: fc7bb000 fc7c0780 asc3350p.sys
ModLoad: fc7c3000 fc7c8c00 abp480n5.sys
ModLoad: fc9cd000 fc9cee00 cd20xrnt.sys
ModLoad: fc5bb000 fc5c3f80 ultra.sys
ModLoad: fc324000 fc33ce00 adpu160m.sys
ModLoad: fc7cb000 fc7cfee0 dpti2o.sys
ModLoad: fc5cb000 fc5d4d80 ql1080.sys
ModLoad: fc5db000 fc5e6f80 ql1280.sys
ModLoad: fc5eb000 fc5f6100 ql12160.sys
ModLoad: fc7d3000 fc7d9aa0 perc2.sys
ModLoad: fc7db000 fc7e1560 hpn.sys
ModLoad: fc8ff000 fc902680 cbidf2k.sys
ModLoad: fc2f8000 fc323d80 dac2w2k.sys
ModLoad: fc5fb000 fc604500 hpt3xx.sys
ModLoad: fc199000 fc257a80 dmboot.sys
ModLoad: fc7e3000 fc7e7d00 flpydisk.sys
ModLoad: fc60b000 fc616980 cdrom.sys
ModLoad: fc61b000 fc625f80 CLASSPNP.SYS
ModLoad: fc62b000 fc633380 disk.sys
ModLoad: fc903000 fc905900 sfloppy.sys
ModLoad: fc907000 fc909300 ramdisk.sys
ModLoad: fc185000 fc198780 ksecdd.sys
ModLoad: fc161000 fc184580 fastfat.sys
ModLoad: fc0de000 fc160400 ntfs.sys
ModLoad: fc63b000 fc64a300 cdfs.sys

The bottom of the window says: "Debugee is running..."

Triggering a Break using the menu gives me (after opening some other status windows too):

The attachment UniPCemu_20250319_1816_WinDBG_WindowsXP2600_break triggered from WinDBG.png is no longer available

So although slow (probably due to the serial connection), I can now debug Windows XP home build 2600 (RTM) properly. 😁

Edit: Bingo!

The attachment UniPCemu_20250319_1816_WinDBG_WindowsXP2600_BSOD Windows XP-5.1.2600_BugCheck7BerrorDebugging.png is no longer available

Time to debug this! 😁

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

Reply 688 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

And of course with all this new functionality, something had to break.

Found an issue in the UART that caused errors to be cleared, but not re-detected when a new error occurs (even if the line status register is read to reset said flags). In this case the line status change wasn't detected, thus any handling of the line status register changes wouldn't properly re-trigger as they should.

Now buffer overflow correctly still sets the two bits (overrun error and data ready) when such a overrun happens. Then, once the line status register is read, it's cleared as usual, but now updating the line status difference data properly to update the triggering of new changes if an error is set again.

Noticed said bug when I was trying to view a memory address from the debugger (the structure containing the unicode path and size/length data for the 7B stop code handling's documentation).

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

Reply 689 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. It's probably called IopInitializePlugPlayServices (80968aa8). After that, a TEST EAX,EAX triggers a jge to the call IopInitializeBootDrivers. That function has just ran IopCreateArcNames, doing something with the partition table next I think it said. Unfortunately, when investigating further the above bugs popped up inside UniPCemu's UART, so I need to start again.
Luckily I know where to look this time (although it's still a very slow connection at 57600 baud).

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

Reply 690 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Improved the MIDI synthesizer a bit.

Now if it detects two samples being used, it'll still play the samples on two channels (each with their own samplerate).
But if it detects a mono sample for a note, it'll now optimize the channel to only use the left channel that was reserved to play the mono sample, panned into the stereo field.
The other channel (for the right sample) that was reserved will simply not be active for such a mono sound (as it's identical).

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

Reply 691 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Fixed some CPU/BIU issues causing the emulation to lock up (not progressing) when waitstates are performed during a HALT or related cycle.
Now the BIU proceeds to finish it's active cycles until it's properly ready.

Edit: The AT now POSTs again. Although perhaps giving an error (video output failing a bit) because the CMOS isn't setup.

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

Reply 692 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

And fixed the MDA and compatiblity modes to properly setup the video RAM memory mapping to compatible values (the RAM appearing at the correct location for the CPU to access). It was incorrectly setup for RAM location A0000-AFFFF, which is of course incorrect behaviour.

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

Reply 694 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Although I forgot to connect the debugger beforehand, I did open UniPCemu's debugger and looked at the string that it's trying to boot:
The structure at FC90E63C:
44 00 (string length)
46 00 (
e111f5d8

e111d5d8 points to a string:
"\ArcName\multi(0)disk(0)cdrom(159)" in Unicode format (2 bytes/character, every second byte is zeroed, zero-terminated).

The CD-ROM drive is located at the secondary master in the emulation setup, on the i440fx onboard IDE device.

Is 159 correct for CD-ROM booting? what about disk(0)?

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

Reply 695 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Fixed an issue found in the 386+ 0F opcode information tables. The SHLD r/m16,r16,CL instrution (opcode 0FA5) used an invalid special handling parameter on it's modr/m settings.
Although it should have no effect on the emulation, as the value of 1 is ignored by the current implementation of modr/m from what I can see.

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

Reply 696 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Some more progress on the Windows XP home crash:
FC9BB62D: Reached when a byte is received.
Sets FC9BBD79 to FFh when received.
Jmps to FC9BB7A4.
FC9BB876 reached.
FC9BB87A reached for no error.
FC9BB93A function called from some table?
Jmps to FC9BBCF8.

Jumps dynamically to 80197E5C (the ntos kernel module?).
Function selects I/O port 2F8, reads it and returns.

So function 80197E5C is the read function for reading data from the serial port at least (AL=result, EDX=port).
Data received is stored at BP+13 (FC90D98C+13).
FC9BB8C4 reached.
Some ptr into EAX (FC90D9B2), byte received into CL. Store it there.
Jumps to FC9BB8B1.
Returns to caller.
Zero extend AX(FC900000) to EAX to clear.
Return to caller.
@FC9BBE32.
@FC9BBE41: Read the read data from the I/O port into AL.
30h read found: going to FC9BBE51.
FC9BBE29 reached.
Pointer to read data into AL 9 it seems (FC90D9B2, from EBP-02 offset).
Save pointer to stack (32-bit PUSH EAX).
Call function FC9BB984 (CALL).
Push 00000001h to stack.
Push the offset to the data received onto the stack.
Push FC9BBD20 to the stack.
Call function FC9BB810 (opcode E8h).
Basic stack setup (BP,SP).
Push ESI(1).
FC9BBD20 into ESI.
Check if it's cleared. It's not, so jump to FC9BB82D.
Push EBX, then clear it.
Set it to 1.
Check if FC9BBD08 is zero.
Push EDI (0).
Not zero, so jump to FC9BB855.
Load some value from memory.
Negate (=>FFh).
SBB EAX,EAX.
EAX becomes all ones.
And to become 31FFFh.
Incrase to 32000h.
To EDI.
Not zero, so FC9BB866.
Function call near: FC9BB5BD.
Stack setup, 64 bytes of local function area.
Push ESI at FC90D930.
Load ESI to get the data storage of the received data.
Load into EAX. @FC9BB5C7.
Its port 2F8h.
Select port 2FDh.
Read the port (@80197E62).
Check it for FFh.
Save it at FC90D970+0B (EBP+0B).
Zero, so FC9BB604.
FC9BB63D reached.
Some kernel hander at 80195F00h reached. Does nothing.
Load status, compare, FC9BB712 reached.
Check bit 6 of EBP+F (FC90D970).
AL 1 if it's zeroed (SETZ).
Increase it to 2.
Or it into FC9BBD84 (02h or'ed).
Did that value become 03h?
Nope, conditional jump to FC9BB762h.
Push 03h.
EDX=FC9BBD80h.
ESI=FC9BBD0C.
ECX=EBP-18=FC90D958h.
POP EDI(=03h).
Load AL from FC9BBD80 (=00h).
Is cleared, so jump to FC9BB782.
20202020h into ECX offset @ FC9BB782 (to FC90D958).
Some very slow data transfers occur.

Now, the WinDBG debugger has dumped:

Microsoft (R) Windows Kernel Debugger  Version 3.0.0020.0
Copyright (c) Microsoft Corporation. All rights reserved.

Waiting to reconnect...
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Loaded dbghelp extension DLL
Loaded ext extension DLL
Loaded exts extension DLL
Loaded kext extension DLL
Loaded kdexts extension DLL
Symbol search path is: srv*DownstreamStore*https://msdl.microsoft.com/download/symbols
Executable search path is:
PsLoadedModuleList not initialized yet. Delay kernel load.
Windows XP Kernel Version 2600 MP (1 procs) Free x86 compatible
Built by: 2600.xpclient.010817-1148
Kernel base = 0x807c2000 PsLoadedModuleList = 0x8083ce28
System Uptime: not available

*** Fatal System Error: 0x0000007b
(0xFC90E63C,0xC0000034,0x00000000,0x00000000)

Break instruction exception - code 80000003 (first chance)

A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.

A fatal system error has occurred.

Will request initial breakpoint at next boot.
Will breakin on first symbol load at next boot.
Verbose mode ON.
Engine is busy, try again
ntkrnlmp.exe
WARNING: Stack unwind information not available. Following frames may be wrong.
WARNING: Stack unwind information not available. Following frames may be wrong.
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************

Use !analyzebugcheck -v to get more information.

BugCheck 7B, {fc90e63c, c0000034, 0, 0}
*** Bugcheck Analysis may not be correct, please followup with the following.
Followup : MachineOwner

ntkrnlmp+2784c:
807e984c cc int 3

Edit: And I got a debugging interface now!

The attachment 20250409_Debugging Windows XP home again.png is no longer available
Last edited by superfury on 2025-04-09, 00:01. Edited 1 time in total.

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

Reply 697 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

Hmmm. Interesting:

WARNING: Stack unwind information not available. Following frames may be wrong.
kd> !devnode 0 1
Error retrieving address of IopRootDeviceNode

Some normal commands work though:

kd> lm
start end module name
80190000 801b4000 halapic (deferred)
807c2000 809aa000 nt (deferred)
fc0de000 fc160400 ntfs (deferred)
fc161000 fc184580 fastfat (deferred)
fc185000 fc198780 ksecdd (deferred)
fc199000 fc257a80 dmboot (deferred)
fc2f8000 fc323d80 dac2w2k (deferred)
fc324000 fc33ce00 adpu160m (deferred)
fc33d000 fc34fd80 tffsport (deferred)
fc350000 fc365280 atapi (deferred)
fc366000 fc37bf80 scsiport (deferred)
fc37c000 fc39a180 usbport (deferred)
fc39b000 fc3beb80 dmio (deferred)
fc3bf000 fc3dd880 ftdisk (deferred)
fc3de000 fc3fa680 pcmcia (deferred)
fc3fb000 fc426c00 acpi (deferred)
fc427000 fc499d80 setupdd (deferred)
fc4bb000 fc4ca400 pci (deferred)
fc4cb000 fc4d3c00 isapnp (deferred)
fc4db000 fc4e8880 ohci1394 (deferred)
fc4eb000 fc4f7180 1394bus (deferred)
fc4fb000 fc504280 mountmgr (deferred)
fc50b000 fc514280 sbp2port (deferred)
fc51b000 fc523280 lbrtfdc (deferred)
fc52b000 fc537600 usbhub (deferred)
fc53b000 fc543180 hidclass (deferred)
fc54b000 fc55a400 serial (deferred)
fc55b000 fc56ae00 videoprt (deferred)
fc56b000 fc577700 i8042prt (deferred)
fc57b000 fc588e80 aic78xx (deferred)
fc58b000 fc593180 ql10wnt (deferred)
fc59b000 fc5a4e00 ql1240 (deferred)
fc5ab000 fc5b8780 aic78u2 (deferred)
fc5bb000 fc5c3f80 ultra (deferred)
fc5cb000 fc5d4d80 ql1080 (deferred)
fc5db000 fc5e6f80 ql1280 (deferred)
fc5eb000 fc5f6100 ql12160 (deferred)
fc5fb000 fc604500 hpt3xx (deferred)
fc60b000 fc616980 cdrom (deferred)
fc61b000 fc625f80 classpnp (deferred)
fc62b000 fc633380 disk (deferred)
fc63b000 fc64a300 cdfs (deferred)
fc73b000 fc740c80 pciidex (deferred)
fc743000 fc747900 partmgr (deferred)
fc74b000 fc751680 fdc (deferred)
fc753000 fc757a00 usbuhci (deferred)
fc75b000 fc761180 usbccgp (deferred)
fc763000 fc768c80 hidparse (deferred)
fc76b000 fc770500 usbstor (deferred)
fc773000 fc777c80 vga (deferred)
fc77b000 fc780b80 kbdclass (deferred)
fc783000 fc787a80 sparrow (deferred)
fc78b000 fc78f480 i2omp (deferred)
fc793000 fc799780 asc (deferred)
fc79b000 fc79f380 mraid35x (deferred)
fc7a3000 fc7aaf80 symc8xx (deferred)
fc7ab000 fc7b1ee0 sym_hi (deferred)
fc7b3000 fc7ba7e0 sym_u3 (deferred)
Show last 35 lines
fc7bb000 fc7c0780   asc3350p     (deferred)                 
fc7c3000 fc7c8c00 abp480n5 (deferred)
fc7cb000 fc7cfee0 dpti2o (deferred)
fc7d3000 fc7d9aa0 perc2 (deferred)
fc7db000 fc7e1560 hpn (deferred)
fc7e3000 fc7e7d00 flpydisk (deferred)
fc8cb000 fc8ce000 bootvid (deferred)
fc8cf000 fc8d1d80 acpiec (deferred)
fc8d3000 fc8d6d00 usbohci (deferred)
fc8d7000 fc8d9580 hidusb (deferred)
fc8db000 fc8dea80 serenum (deferred)
fc8df000 fc8e2680 kbdhid (deferred)
fc8e3000 fc8e6a80 cpqarray (deferred)
fc8e7000 fc8ea200 aha154x (deferred)
fc8eb000 fc8eef80 symc810 (deferred)
fc8ef000 fc8f2980 dac960nt (deferred)
fc8f3000 fc8f5f00 amsint (deferred)
fc8f7000 fc8faa00 asc3550 (deferred)
fc8fb000 fc8fee80 ini910u (deferred)
fc8ff000 fc902680 cbidf2k (deferred)
fc903000 fc905900 sfloppy (deferred)
fc907000 fc909300 ramdisk (deferred)
fc9bb000 fc9bcb80 kdcom (deferred)
fc9bd000 fc9be100 wmilib (deferred)
fc9bf000 fc9c0200 intelide (deferred)
fc9c1000 fc9c2100 viaide (deferred)
fc9c3000 fc9c4a00 cmdide (deferred)
fc9c5000 fc9c6380 toside (deferred)
fc9c7000 fc9c8480 aliide (deferred)
fc9c9000 fc9ca700 dmload (deferred)
fc9cb000 fc9cc280 usbd (deferred)
fc9cd000 fc9cee00 cd20xrnt (deferred)
fca83000 fca83d80 spddlang (deferred)
fca84000 fca84d80 oprghdlr (deferred)
fca85000 fca85d00 pciide (deferred)

Other than the symbol paths, the interface seems to be properly connected now 😁

Anyone knows how to get the symbol paths installed on the connected WinDBG program's machine (that's connected to the Windows XP Home installation that's being debugged over the serial loopback connection) hard drive into the debugger to make it recognise it?

OK, gotten the symbols loaded:

c:\windowsxprtm2600\symbols;;srv*c:\myserversymbols*https://msdl.microsoft.com/download/symbols;c:\windowsxprtm2600\symbols;srv*c:\myserversymbols*https://msdl.microsoft.com/download/symbols

Now I get this:

Break instruction exception - code 80000003 (first chance)
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run kd.exe) or, *
* CTRL+BREAK (if you run WinDBG), *
* on your debugger machine's keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the "g" key, then *
* press the "Enter" key now. This message might immediately reappear. If it *
* does, press "g" and "Enter" again. *
* *
*******************************************************************************
ntkrnlmp!RtlpBreakWithStatusInstruction:
807e984c cc int 3
kd> !devnode 0 1
Dumping IopRootDeviceNode (= 00000000)
00000000: Could not read device node

Edit: OK, this should help:

kd> bp pciidex!DriverEntry
kd> bl
0 eu 0001 (0001) (pcipciidex!DriverEntry)
1 e fc73f04a 0001 (0001) PCIIDEX!DriverEntry

Edit: A slight revision later:

kd> bp pcipciidex!DriverEntry
Bp expression 'pcipciidex!DriverEntry' could not be resolved, adding deferred bp
kd> bp pciidex!DriverEntry
kd> bl
0 eu 0001 (0001) (pcipciidex!DriverEntry)
1 e fc73f04a 0001 (0001) PCIIDEX!DriverEntry

kd> bc pcipciidex!DriverEntry
^ Syntax error in 'bc pcipciidex!DriverEntry'
kd> bc 0
kd> bl
1 e fc73f04a 0001 (0001) PCIIDEX!DriverEntry

So now I can debug the PCIIDEX driver at least. 😁

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

Reply 698 of 698, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. Somehow, it reached the bugcheck (7B) again, never hitting the PCIIDEX!DriverEntry breakpoint.

So could it be an issue in the PCI driver then? Or perhaps the ESCD isn't properly setup somehow (it seems to somehow get corrupted or something like that, seeing as the BIOS corrupts itself from what I can see)?

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