VOGONS


Compaq Deskpro 386 CPU emulation issues?

Topic actions

Reply 120 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just improved jump instructions doing the same as CALL instructions in protected mode, except not switching stacks and copying data between stacks), both depending on the operand size either the instruction used(D-bit combined with operand-size override prefix) or gate size(for call gate) for stack operations and data copying(between the two stacks). Also improved IRET support for (E)FLAGS and unchanging flags(IOPL and Interrupt flag).Now, no exceptions occur after the initial mode set(HIMEM.SYS moving memory high?), before triple faulting with 3 #GP nested exceptions on a INT 21h(0x00000000 size 0xFFFF IDT?)?

Filename
debugger_UniPCemu_20180425_1026_Windows3.0_booting.7z
File size
840.69 KiB
Downloads
77 downloads
File comment
Current Windows 3.0 protected mode until triple fault?
File license
Fair use/fair dealing exception

Anyone?

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

Reply 121 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Eventually improved the seperation between the two sublevels of instruction steps(instruction level(the instruction handler itself) vs internal level(the general instruction handlers) vs modr/m level(which both can be on either instruction level or internal level)). Having seperated those properly, Windows 95 setup now continues on somewhat, without saying anything(eventually clearing the screen into what seems like graphics mode), ending up at an infinite HLT(with interrupt flag cleared).

Something I do see occuring, is that it's moving data using MOVSB between two memory areas, eventually executing RET and ending up into initialized RAM(Filled with 0x0000 words, which execute as a valid MOV instruction until eventually crashing)?

Anyone has a log at 3000kIPS(like from Dosbox) which shows what's running when executing MS-DOS 5.0 from the harddisk, then running the SETUP.EXE on the root of a Windows 95B CD-ROM?

Edit: Running it again with only HIMEM.SYS, VIDE-CDD.SYS and MSCDEX.EXE loaded in memory, it now crashes on a opcode 63h /5 #UD in real mode? It happens at C132:D4FA? That would equal physical address CE81A, which would be kind of strange, seeing as it's within the hard disk ROM? C6000 is the start of the hard disk ROM, which ends at C8000, but after that there's only the copy of the physical BIOS that's mapped as shadow RAM, which goes from E0000-FFFFF?

Edit: Managed to make a common emulator log of it running until the #UD(ARPL) instruction.
Edit: The compressed log:

Filename
debugger_Windows95setup_UniPCemu_20180505_1810_split.001.7z
File size
4.77 MiB
Downloads
95 downloads
File comment
UniPCemu logs of Windows 95 setup running it's course.
File license
Fair use/fair dealing exception
Filename
debugger_Windows95setup_UniPCemu_20180505_1810_split.002.7z
File size
934.18 KiB
Downloads
70 downloads
File comment
Second part of the split 7z file.
File license
Fair use/fair dealing exception

To use, rename 001.7z to 7z.001 and 002.7z to 7z.002 and open the archive for the log file(7GB when extracted).

Can anyone see why the setup fails? What's going wrong?

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

Reply 122 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just ran the IBM AT again with the Supersoft/Landmark BIOS. It still tries to somehow load 0x0000 into CS through an IRET? Can anyone see why it's actually loading that value into CS? Is there a stack problem somehow?

Filename
debugger_SuperSoftLandmarkDiagnosticsBIOS_UniPCemu_20180507_1411.7z
File size
170.27 KiB
Downloads
75 downloads
File comment
SuperSoft/Landmark BIOS running in protected mode.
File license
Fair use/fair dealing exception

Anyone?

Edit: Noticed the bug at the end where the SP values change after a task switch to the same task. This has now been fixed, but the software still crashes at the same point?

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

Reply 123 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just found a bug that caused non-code segment descriptors to not check for lower privilege when loading said descriptor without a gate. Now all descriptor loads(as well as task switches) should properly check CPL against either the gate descriptor or against the segment descriptor itself(when not gated).

Edit: Whoops, it seems that task switches were also pushing error codes of -1 when triggered through a segment write(loading CS with a TSS or TSS gate), even though it shouldn't do that.

So in this case, it was pushing an error code of 0 each time a task was switched or -2 during an interrupt causing a task switch.

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

Reply 124 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

I've fixed a little bug in setting the active LDTR(it was loading the descriptor cache, but not loading the segment selector with it).

Now, looking at the task switches themselves, it looks fine. But when performing the second task switch(which should use identical physical base addresses of the TSS(just different segment selectors)), somehow the wrong TSS seems to be loaded?

My notes on the task switching that happens:

TSS @TSSaddr(DESCaddr=TSS descriptor)=Task Selector
TSS @00044C(0420=TSS descriptor)=Task 48
TSS @00044C(04FC=TSS descriptor)=Task 58
TSS @000478(050C=TSS descriptor)=Task 68

1. Set task 68h active(not nested yet). DS=0020
2. Switch to task 0048(CALL). Afterwards, DS=000C. Task 0048=Nested because of the CALL.
3. Task switches from 0048 to 0058(different descriptor, same TSS, as shown by the initial loads at the start of the protected mode test(the TSS notes above)) using JMP. SP and FLAGS change state drastically(SP:0800 becomes 0600, FLAGS: 4046 becomes 0002, becoming an invalid task)?

The task switch from 0048 to 0058(which should be the very same task, just different selectors&descriptors pointing to the same task):

Reading from RAM(r): 00000524=00 ( )
Reading from physical memory(r): 00000524=00 ( )
Reading from paged memory(r): 00000524=00 ( )
Reading from RAM(r): 00000525=00 ( )
Reading from physical memory(r): 00000525=00 ( )
Reading from paged memory(r): 00000525=00 ( )
Reading from RAM(r): 00000526=58 (X)
Reading from physical memory(r): 00000526=58 (X)
Reading from paged memory(r): 00000526=58 (X)
Reading from RAM(r): 00000527=00 ( )
Reading from physical memory(r): 00000527=00 ( )
Reading from paged memory(r): 00000527=00 ( )
Reading from RAM(r): 00000528=00 ( )
Reading from physical memory(r): 00000528=00 ( )
Reading from paged memory(r): 00000528=00 ( )
Reading from RAM(r): 00000529=85 (…)
Reading from physical memory(r): 00000529=85 (…)
Reading from paged memory(r): 00000529=85 (…)
Reading from RAM(r): 0000052A=00 ( )
Reading from physical memory(r): 0000052A=00 ( )
Reading from paged memory(r): 0000052A=00 ( )
Reading from RAM(r): 0000052B=00 ( )
Reading from physical memory(r): 0000052B=00 ( )
Reading from paged memory(r): 0000052B=00 ( )
Reading from RAM(r): 000004FC=68 (h)
Reading from physical memory(r): 000004FC=68 (h)
Reading from paged memory(r): 000004FC=68 (h)
Reading from RAM(r): 000004FD=00 ( )
Reading from physical memory(r): 000004FD=00 ( )
Reading from paged memory(r): 000004FD=00 ( )
Reading from RAM(r): 000004FE=4C (L)
Reading from physical memory(r): 000004FE=4C (L)
Reading from paged memory(r): 000004FE=4C (L)
Reading from RAM(r): 000004FF=04 ()
Reading from physical memory(r): 000004FF=04 ()
Reading from paged memory(r): 000004FF=04 ()
Reading from RAM(r): 00000500=00 ( )
Reading from physical memory(r): 00000500=00 ( )
Reading from paged memory(r): 00000500=00 ( )
Reading from RAM(r): 00000501=81 ()
Reading from physical memory(r): 00000501=81 ()
Reading from paged memory(r): 00000501=81 ()
Reading from RAM(r): 00000502=00 ( )
Reading from physical memory(r): 00000502=00 ( )
Reading from paged memory(r): 00000502=00 ( )
Reading from RAM(r): 00000503=00 ( )
Reading from physical memory(r): 00000503=00 ( )
Reading from paged memory(r): 00000503=00 ( )
00:03:33:47.03424: Switching task to task 0058
00:03:33:47.03440: Preparing outgoing task 0048 for transfer
Reading from RAM(r): 000004EC=68 (h)
Reading from physical memory(r): 000004EC=68 (h)
Reading from paged memory(r): 000004EC=68 (h)
Reading from RAM(r): 000004ED=00 ( )
Reading from physical memory(r): 000004ED=00 ( )
Reading from paged memory(r): 000004ED=00 ( )
Reading from RAM(r): 000004EE=20 ( )
Reading from physical memory(r): 000004EE=20 ( )
Reading from paged memory(r): 000004EE=20 ( )
Reading from RAM(r): 000004EF=04 ()
Show last 622 lines
Reading from physical memory(r): 000004EF=04 ()
Reading from paged memory(r): 000004EF=04 ()
Reading from RAM(r): 000004F0=00 ( )
Reading from physical memory(r): 000004F0=00 ( )
Reading from paged memory(r): 000004F0=00 ( )
Reading from RAM(r): 000004F1=83 (ƒ)
Reading from physical memory(r): 000004F1=83 (ƒ)
Reading from paged memory(r): 000004F1=83 (ƒ)
Reading from RAM(r): 000004F2=00 ( )
Reading from physical memory(r): 000004F2=00 ( )
Reading from paged memory(r): 000004F2=00 ( )
Reading from RAM(r): 000004F3=00 ( )
Reading from physical memory(r): 000004F3=00 ( )
Reading from paged memory(r): 000004F3=00 ( )
Reading from RAM(r): 000004EC=68 (h)
Reading from physical memory(r): 000004EC=68 (h)
Reading from paged memory(r): 000004EC=68 (h)
Reading from RAM(r): 000004ED=00 ( )
Reading from physical memory(r): 000004ED=00 ( )
Reading from paged memory(r): 000004ED=00 ( )
Reading from RAM(r): 000004EE=20 ( )
Reading from physical memory(r): 000004EE=20 ( )
Reading from paged memory(r): 000004EE=20 ( )
Reading from RAM(r): 000004EF=04 ()
Reading from physical memory(r): 000004EF=04 ()
Reading from paged memory(r): 000004EF=04 ()
Reading from RAM(r): 000004F0=00 ( )
Reading from physical memory(r): 000004F0=00 ( )
Reading from paged memory(r): 000004F0=00 ( )
Reading from RAM(r): 000004F1=83 (ƒ)
Reading from physical memory(r): 000004F1=83 (ƒ)
Reading from paged memory(r): 000004F1=83 (ƒ)
Reading from RAM(r): 000004F2=00 ( )
Reading from physical memory(r): 000004F2=00 ( )
Reading from paged memory(r): 000004F2=00 ( )
Reading from RAM(r): 000004F3=00 ( )
Reading from physical memory(r): 000004F3=00 ( )
Reading from paged memory(r): 000004F3=00 ( )
Writing to paged memory(w): 000004EC=68 (h)
Writing to physical memory(w): 000004EC=68 (h)
Writing to RAM(w): 000004EC=68 (h)
Writing to paged memory(w): 000004ED=00 ( )
Writing to physical memory(w): 000004ED=00 ( )
Writing to RAM(w): 000004ED=00 ( )
Writing to paged memory(w): 000004EE=20 ( )
Writing to physical memory(w): 000004EE=20 ( )
Writing to RAM(w): 000004EE=20 ( )
Writing to paged memory(w): 000004EF=04 ()
Writing to physical memory(w): 000004EF=04 ()
Writing to RAM(w): 000004EF=04 ()
Writing to paged memory(w): 000004F0=00 ( )
Writing to physical memory(w): 000004F0=00 ( )
Writing to RAM(w): 000004F0=00 ( )
Writing to paged memory(w): 000004F1=81 ()
Writing to physical memory(w): 000004F1=81 ()
Writing to RAM(w): 000004F1=81 ()
Writing to paged memory(w): 000004F2=00 ( )
Writing to physical memory(w): 000004F2=00 ( )
Writing to RAM(w): 000004F2=00 ( )
Writing to paged memory(w): 000004F3=00 ( )
Writing to physical memory(w): 000004F3=00 ( )
Writing to RAM(w): 000004F3=00 ( )
00:03:33:47.04528: Saving outgoing task 0048 to memory
Writing to normal memory(w): 0000042E=1F ()
Writing to paged memory(w): 0000042E=1F ()
Writing to physical memory(w): 0000042E=1F ()
Writing to RAM(w): 0000042E=1F ()
Writing to normal memory(w): 0000042F=00 ( )
Writing to paged memory(w): 0000042F=00 ( )
Writing to physical memory(w): 0000042F=00 ( )
Writing to RAM(w): 0000042F=00 ( )
Writing to normal memory(w): 00000430=46 (F)
Writing to paged memory(w): 00000430=46 (F)
Writing to physical memory(w): 00000430=46 (F)
Writing to RAM(w): 00000430=46 (F)
Writing to normal memory(w): 00000431=40 (@)
Writing to paged memory(w): 00000431=40 (@)
Writing to physical memory(w): 00000431=40 (@)
Writing to RAM(w): 00000431=40 (@)
Writing to normal memory(w): 00000432=00 ( )
Writing to paged memory(w): 00000432=00 ( )
Writing to physical memory(w): 00000432=00 ( )
Writing to RAM(w): 00000432=00 ( )
Writing to normal memory(w): 00000433=00 ( )
Writing to paged memory(w): 00000433=00 ( )
Writing to physical memory(w): 00000433=00 ( )
Writing to RAM(w): 00000433=00 ( )
Writing to normal memory(w): 00000434=00 ( )
Writing to paged memory(w): 00000434=00 ( )
Writing to physical memory(w): 00000434=00 ( )
Writing to RAM(w): 00000434=00 ( )
Writing to normal memory(w): 00000435=00 ( )
Writing to paged memory(w): 00000435=00 ( )
Writing to physical memory(w): 00000435=00 ( )
Writing to RAM(w): 00000435=00 ( )
Writing to normal memory(w): 00000436=00 ( )
Writing to paged memory(w): 00000436=00 ( )
Writing to physical memory(w): 00000436=00 ( )
Writing to RAM(w): 00000436=00 ( )
Writing to normal memory(w): 00000437=00 ( )
Writing to paged memory(w): 00000437=00 ( )
Writing to physical memory(w): 00000437=00 ( )
Writing to RAM(w): 00000437=00 ( )
Writing to normal memory(w): 00000438=00 ( )
Writing to paged memory(w): 00000438=00 ( )
Writing to physical memory(w): 00000438=00 ( )
Writing to RAM(w): 00000438=00 ( )
Writing to normal memory(w): 00000439=00 ( )
Writing to paged memory(w): 00000439=00 ( )
Writing to physical memory(w): 00000439=00 ( )
Writing to RAM(w): 00000439=00 ( )
Writing to normal memory(w): 0000043A=00 ( )
Writing to paged memory(w): 0000043A=00 ( )
Writing to physical memory(w): 0000043A=00 ( )
Writing to RAM(w): 0000043A=00 ( )
Writing to normal memory(w): 0000043B=08 ()
Writing to paged memory(w): 0000043B=08 ()
Writing to physical memory(w): 0000043B=08 ()
Writing to RAM(w): 0000043B=08 ()
Writing to normal memory(w): 0000043C=00 ( )
Writing to paged memory(w): 0000043C=00 ( )
Writing to physical memory(w): 0000043C=00 ( )
Writing to RAM(w): 0000043C=00 ( )
Writing to normal memory(w): 0000043D=10 ()
Writing to paged memory(w): 0000043D=10 ()
Writing to physical memory(w): 0000043D=10 ()
Writing to RAM(w): 0000043D=10 ()
Writing to normal memory(w): 0000043E=00 ( )
Writing to paged memory(w): 0000043E=00 ( )
Writing to physical memory(w): 0000043E=00 ( )
Writing to RAM(w): 0000043E=00 ( )
Writing to normal memory(w): 0000043F=00 ( )
Writing to paged memory(w): 0000043F=00 ( )
Writing to physical memory(w): 0000043F=00 ( )
Writing to RAM(w): 0000043F=00 ( )
Writing to normal memory(w): 00000440=00 ( )
Writing to paged memory(w): 00000440=00 ( )
Writing to physical memory(w): 00000440=00 ( )
Writing to RAM(w): 00000440=00 ( )
Writing to normal memory(w): 00000441=00 ( )
Writing to paged memory(w): 00000441=00 ( )
Writing to physical memory(w): 00000441=00 ( )
Writing to RAM(w): 00000441=00 ( )
Writing to normal memory(w): 00000442=20 ( )
Writing to paged memory(w): 00000442=20 ( )
Writing to physical memory(w): 00000442=20 ( )
Writing to RAM(w): 00000442=20 ( )
Writing to normal memory(w): 00000443=00 ( )
Writing to paged memory(w): 00000443=00 ( )
Writing to physical memory(w): 00000443=00 ( )
Writing to RAM(w): 00000443=00 ( )
Writing to normal memory(w): 00000444=04 ()
Writing to paged memory(w): 00000444=04 ()
Writing to physical memory(w): 00000444=04 ()
Writing to RAM(w): 00000444=04 ()
Writing to normal memory(w): 00000445=00 ( )
Writing to paged memory(w): 00000445=00 ( )
Writing to physical memory(w): 00000445=00 ( )
Writing to RAM(w): 00000445=00 ( )
Writing to normal memory(w): 00000446=20 ( )
Writing to paged memory(w): 00000446=20 ( )
Writing to physical memory(w): 00000446=20 ( )
Writing to RAM(w): 00000446=20 ( )
Writing to normal memory(w): 00000447=00 ( )
Writing to paged memory(w): 00000447=00 ( )
Writing to physical memory(w): 00000447=00 ( )
Writing to RAM(w): 00000447=00 ( )
Writing to normal memory(w): 00000448=0C ()
Writing to paged memory(w): 00000448=0C ()
Writing to physical memory(w): 00000448=0C ()
Writing to RAM(w): 00000448=0C ()
Writing to normal memory(w): 00000449=00 ( )
Writing to paged memory(w): 00000449=00 ( )
Writing to physical memory(w): 00000449=00 ( )
Writing to RAM(w): 00000449=00 ( )
00:03:33:47.05696: Switching active TSS to segment selector 0058
Reading from RAM(r): 000004FC=68 (h)
Reading from physical memory(r): 000004FC=68 (h)
Reading from paged memory(r): 000004FC=68 (h)
Reading from RAM(r): 000004FD=00 ( )
Reading from physical memory(r): 000004FD=00 ( )
Reading from paged memory(r): 000004FD=00 ( )
Reading from RAM(r): 000004FE=4C (L)
Reading from physical memory(r): 000004FE=4C (L)
Reading from paged memory(r): 000004FE=4C (L)
Reading from RAM(r): 000004FF=04 ()
Reading from physical memory(r): 000004FF=04 ()
Reading from paged memory(r): 000004FF=04 ()
Reading from RAM(r): 00000500=00 ( )
Reading from physical memory(r): 00000500=00 ( )
Reading from paged memory(r): 00000500=00 ( )
Reading from RAM(r): 00000501=81 ()
Reading from physical memory(r): 00000501=81 ()
Reading from paged memory(r): 00000501=81 ()
Reading from RAM(r): 00000502=00 ( )
Reading from physical memory(r): 00000502=00 ( )
Reading from paged memory(r): 00000502=00 ( )
Reading from RAM(r): 00000503=00 ( )
Reading from physical memory(r): 00000503=00 ( )
Reading from paged memory(r): 00000503=00 ( )
Reading from RAM(r): 000004FC=68 (h)
Reading from physical memory(r): 000004FC=68 (h)
Reading from paged memory(r): 000004FC=68 (h)
Reading from RAM(r): 000004FD=00 ( )
Reading from physical memory(r): 000004FD=00 ( )
Reading from paged memory(r): 000004FD=00 ( )
Reading from RAM(r): 000004FE=4C (L)
Reading from physical memory(r): 000004FE=4C (L)
Reading from paged memory(r): 000004FE=4C (L)
Reading from RAM(r): 000004FF=04 ()
Reading from physical memory(r): 000004FF=04 ()
Reading from paged memory(r): 000004FF=04 ()
Reading from RAM(r): 00000500=00 ( )
Reading from physical memory(r): 00000500=00 ( )
Reading from paged memory(r): 00000500=00 ( )
Reading from RAM(r): 00000501=81 ()
Reading from physical memory(r): 00000501=81 ()
Reading from paged memory(r): 00000501=81 ()
Reading from RAM(r): 00000502=00 ( )
Reading from physical memory(r): 00000502=00 ( )
Reading from paged memory(r): 00000502=00 ( )
Reading from RAM(r): 00000503=00 ( )
Reading from physical memory(r): 00000503=00 ( )
Reading from paged memory(r): 00000503=00 ( )
Writing to paged memory(w): 000004FC=68 (h)
Writing to physical memory(w): 000004FC=68 (h)
Writing to RAM(w): 000004FC=68 (h)
Writing to paged memory(w): 000004FD=00 ( )
Writing to physical memory(w): 000004FD=00 ( )
Writing to RAM(w): 000004FD=00 ( )
Writing to paged memory(w): 000004FE=4C (L)
Writing to physical memory(w): 000004FE=4C (L)
Writing to RAM(w): 000004FE=4C (L)
Writing to paged memory(w): 000004FF=04 ()
Writing to physical memory(w): 000004FF=04 ()
Writing to RAM(w): 000004FF=04 ()
Writing to paged memory(w): 00000500=00 ( )
Writing to physical memory(w): 00000500=00 ( )
Writing to RAM(w): 00000500=00 ( )
Writing to paged memory(w): 00000501=83 (ƒ)
Writing to physical memory(w): 00000501=83 (ƒ)
Writing to RAM(w): 00000501=83 (ƒ)
Writing to paged memory(w): 00000502=00 ( )
Writing to physical memory(w): 00000502=00 ( )
Writing to RAM(w): 00000502=00 ( )
Writing to paged memory(w): 00000503=00 ( )
Writing to physical memory(w): 00000503=00 ( )
Writing to RAM(w): 00000503=00 ( )
00:03:33:47.06352: Loading incoming TSS 0058 state
Reading from RAM(r): 0000044C=00 ( )
Reading from physical memory(r): 0000044C=00 ( )
Reading from paged memory(r): 0000044C=00 ( )
Reading from normal memory(r): 0000044C=00 ( )
Reading from RAM(r): 0000044D=00 ( )
Reading from physical memory(r): 0000044D=00 ( )
Reading from paged memory(r): 0000044D=00 ( )
Reading from normal memory(r): 0000044D=00 ( )
Reading from RAM(r): 0000044E=00 ( )
Reading from physical memory(r): 0000044E=00 ( )
Reading from paged memory(r): 0000044E=00 ( )
Reading from normal memory(r): 0000044E=00 ( )
Reading from RAM(r): 0000044F=06 ()
Reading from physical memory(r): 0000044F=06 ()
Reading from paged memory(r): 0000044F=06 ()
Reading from normal memory(r): 0000044F=06 ()
Reading from RAM(r): 00000450=20 ( )
Reading from physical memory(r): 00000450=20 ( )
Reading from paged memory(r): 00000450=20 ( )
Reading from normal memory(r): 00000450=20 ( )
Reading from RAM(r): 00000451=00 ( )
Reading from physical memory(r): 00000451=00 ( )
Reading from paged memory(r): 00000451=00 ( )
Reading from normal memory(r): 00000451=00 ( )
Reading from RAM(r): 00000452=00 ( )
Reading from physical memory(r): 00000452=00 ( )
Reading from paged memory(r): 00000452=00 ( )
Reading from normal memory(r): 00000452=00 ( )
Reading from RAM(r): 00000453=00 ( )
Reading from physical memory(r): 00000453=00 ( )
Reading from paged memory(r): 00000453=00 ( )
Reading from normal memory(r): 00000453=00 ( )
Reading from RAM(r): 00000454=00 ( )
Reading from physical memory(r): 00000454=00 ( )
Reading from paged memory(r): 00000454=00 ( )
Reading from normal memory(r): 00000454=00 ( )
Reading from RAM(r): 00000455=00 ( )
Reading from physical memory(r): 00000455=00 ( )
Reading from paged memory(r): 00000455=00 ( )
Reading from normal memory(r): 00000455=00 ( )
Reading from RAM(r): 00000456=00 ( )
Reading from physical memory(r): 00000456=00 ( )
Reading from paged memory(r): 00000456=00 ( )
Reading from normal memory(r): 00000456=00 ( )
Reading from RAM(r): 00000457=00 ( )
Reading from physical memory(r): 00000457=00 ( )
Reading from paged memory(r): 00000457=00 ( )
Reading from normal memory(r): 00000457=00 ( )
Reading from RAM(r): 00000458=00 ( )
Reading from physical memory(r): 00000458=00 ( )
Reading from paged memory(r): 00000458=00 ( )
Reading from normal memory(r): 00000458=00 ( )
Reading from RAM(r): 00000459=00 ( )
Reading from physical memory(r): 00000459=00 ( )
Reading from paged memory(r): 00000459=00 ( )
Reading from normal memory(r): 00000459=00 ( )
Reading from RAM(r): 0000045A=00 ( )
Reading from physical memory(r): 0000045A=00 ( )
Reading from paged memory(r): 0000045A=00 ( )
Reading from normal memory(r): 0000045A=00 ( )
Reading from RAM(r): 0000045B=00 ( )
Reading from physical memory(r): 0000045B=00 ( )
Reading from paged memory(r): 0000045B=00 ( )
Reading from normal memory(r): 0000045B=00 ( )
Reading from RAM(r): 0000045C=00 ( )
Reading from physical memory(r): 0000045C=00 ( )
Reading from paged memory(r): 0000045C=00 ( )
Reading from normal memory(r): 0000045C=00 ( )
Reading from RAM(r): 0000045D=00 ( )
Reading from physical memory(r): 0000045D=00 ( )
Reading from paged memory(r): 0000045D=00 ( )
Reading from normal memory(r): 0000045D=00 ( )
Reading from RAM(r): 0000045E=00 ( )
Reading from physical memory(r): 0000045E=00 ( )
Reading from paged memory(r): 0000045E=00 ( )
Reading from normal memory(r): 0000045E=00 ( )
Reading from RAM(r): 0000045F=00 ( )
Reading from physical memory(r): 0000045F=00 ( )
Reading from paged memory(r): 0000045F=00 ( )
Reading from normal memory(r): 0000045F=00 ( )
Reading from RAM(r): 00000460=00 ( )
Reading from physical memory(r): 00000460=00 ( )
Reading from paged memory(r): 00000460=00 ( )
Reading from normal memory(r): 00000460=00 ( )
Reading from RAM(r): 00000461=00 ( )
Reading from physical memory(r): 00000461=00 ( )
Reading from paged memory(r): 00000461=00 ( )
Reading from normal memory(r): 00000461=00 ( )
Reading from RAM(r): 00000462=00 ( )
Reading from physical memory(r): 00000462=00 ( )
Reading from paged memory(r): 00000462=00 ( )
Reading from normal memory(r): 00000462=00 ( )
Reading from RAM(r): 00000463=00 ( )
Reading from physical memory(r): 00000463=00 ( )
Reading from paged memory(r): 00000463=00 ( )
Reading from normal memory(r): 00000463=00 ( )
Reading from RAM(r): 00000464=00 ( )
Reading from physical memory(r): 00000464=00 ( )
Reading from paged memory(r): 00000464=00 ( )
Reading from normal memory(r): 00000464=00 ( )
Reading from RAM(r): 00000465=00 ( )
Reading from physical memory(r): 00000465=00 ( )
Reading from paged memory(r): 00000465=00 ( )
Reading from normal memory(r): 00000465=00 ( )
Reading from RAM(r): 00000466=00 ( )
Reading from physical memory(r): 00000466=00 ( )
Reading from paged memory(r): 00000466=00 ( )
Reading from normal memory(r): 00000466=00 ( )
Reading from RAM(r): 00000467=06 ()
Reading from physical memory(r): 00000467=06 ()
Reading from paged memory(r): 00000467=06 ()
Reading from normal memory(r): 00000467=06 ()
Reading from RAM(r): 00000468=00 ( )
Reading from physical memory(r): 00000468=00 ( )
Reading from paged memory(r): 00000468=00 ( )
Reading from normal memory(r): 00000468=00 ( )
Reading from RAM(r): 00000469=10 ()
Reading from physical memory(r): 00000469=10 ()
Reading from paged memory(r): 00000469=10 ()
Reading from normal memory(r): 00000469=10 ()
Reading from RAM(r): 0000046A=00 ( )
Reading from physical memory(r): 0000046A=00 ( )
Reading from paged memory(r): 0000046A=00 ( )
Reading from normal memory(r): 0000046A=00 ( )
Reading from RAM(r): 0000046B=00 ( )
Reading from physical memory(r): 0000046B=00 ( )
Reading from paged memory(r): 0000046B=00 ( )
Reading from normal memory(r): 0000046B=00 ( )
Reading from RAM(r): 0000046C=00 ( )
Reading from physical memory(r): 0000046C=00 ( )
Reading from paged memory(r): 0000046C=00 ( )
Reading from normal memory(r): 0000046C=00 ( )
Reading from RAM(r): 0000046D=00 ( )
Reading from physical memory(r): 0000046D=00 ( )
Reading from paged memory(r): 0000046D=00 ( )
Reading from normal memory(r): 0000046D=00 ( )
Reading from RAM(r): 0000046E=20 ( )
Reading from physical memory(r): 0000046E=20 ( )
Reading from paged memory(r): 0000046E=20 ( )
Reading from normal memory(r): 0000046E=20 ( )
Reading from RAM(r): 0000046F=00 ( )
Reading from physical memory(r): 0000046F=00 ( )
Reading from paged memory(r): 0000046F=00 ( )
Reading from normal memory(r): 0000046F=00 ( )
Reading from RAM(r): 00000470=04 ()
Reading from physical memory(r): 00000470=04 ()
Reading from paged memory(r): 00000470=04 ()
Reading from normal memory(r): 00000470=04 ()
Reading from RAM(r): 00000471=00 ( )
Reading from physical memory(r): 00000471=00 ( )
Reading from paged memory(r): 00000471=00 ( )
Reading from normal memory(r): 00000471=00 ( )
Reading from RAM(r): 00000472=20 ( )
Reading from physical memory(r): 00000472=20 ( )
Reading from paged memory(r): 00000472=20 ( )
Reading from normal memory(r): 00000472=20 ( )
Reading from RAM(r): 00000473=00 ( )
Reading from physical memory(r): 00000473=00 ( )
Reading from paged memory(r): 00000473=00 ( )
Reading from normal memory(r): 00000473=00 ( )
Reading from RAM(r): 00000474=0C ()
Reading from physical memory(r): 00000474=0C ()
Reading from paged memory(r): 00000474=0C ()
Reading from normal memory(r): 00000474=0C ()
Reading from RAM(r): 00000475=00 ( )
Reading from physical memory(r): 00000475=00 ( )
Reading from paged memory(r): 00000475=00 ( )
Reading from normal memory(r): 00000475=00 ( )
Reading from RAM(r): 00000476=40 (@)
Reading from physical memory(r): 00000476=40 (@)
Reading from paged memory(r): 00000476=40 (@)
Reading from normal memory(r): 00000476=40 (@)
Reading from RAM(r): 00000477=00 ( )
Reading from physical memory(r): 00000477=00 ( )
Reading from paged memory(r): 00000477=00 ( )
Reading from normal memory(r): 00000477=00 ( )
00:03:33:47.07984: Checking for backlink to TSS 0048
00:03:33:47.08000: Marking incoming TSS 0058 busy if needed
Reading from RAM(r): 000004FC=68 (h)
Reading from physical memory(r): 000004FC=68 (h)
Reading from paged memory(r): 000004FC=68 (h)
Reading from RAM(r): 000004FD=00 ( )
Reading from physical memory(r): 000004FD=00 ( )
Reading from paged memory(r): 000004FD=00 ( )
Reading from RAM(r): 000004FE=4C (L)
Reading from physical memory(r): 000004FE=4C (L)
Reading from paged memory(r): 000004FE=4C (L)
Reading from RAM(r): 000004FF=04 ()
Reading from physical memory(r): 000004FF=04 ()
Reading from paged memory(r): 000004FF=04 ()
Reading from RAM(r): 00000500=00 ( )
Reading from physical memory(r): 00000500=00 ( )
Reading from paged memory(r): 00000500=00 ( )
Reading from RAM(r): 00000501=83 (ƒ)
Reading from physical memory(r): 00000501=83 (ƒ)
Reading from paged memory(r): 00000501=83 (ƒ)
Reading from RAM(r): 00000502=00 ( )
Reading from physical memory(r): 00000502=00 ( )
Reading from paged memory(r): 00000502=00 ( )
Reading from RAM(r): 00000503=00 ( )
Reading from physical memory(r): 00000503=00 ( )
Reading from paged memory(r): 00000503=00 ( )
Writing to paged memory(w): 000004FC=68 (h)
Writing to physical memory(w): 000004FC=68 (h)
Writing to RAM(w): 000004FC=68 (h)
Writing to paged memory(w): 000004FD=00 ( )
Writing to physical memory(w): 000004FD=00 ( )
Writing to RAM(w): 000004FD=00 ( )
Writing to paged memory(w): 000004FE=4C (L)
Writing to physical memory(w): 000004FE=4C (L)
Writing to RAM(w): 000004FE=4C (L)
Writing to paged memory(w): 000004FF=04 ()
Writing to physical memory(w): 000004FF=04 ()
Writing to RAM(w): 000004FF=04 ()
Writing to paged memory(w): 00000500=00 ( )
Writing to physical memory(w): 00000500=00 ( )
Writing to RAM(w): 00000500=00 ( )
Writing to paged memory(w): 00000501=83 (ƒ)
Writing to physical memory(w): 00000501=83 (ƒ)
Writing to RAM(w): 00000501=83 (ƒ)
Writing to paged memory(w): 00000502=00 ( )
Writing to physical memory(w): 00000502=00 ( )
Writing to RAM(w): 00000502=00 ( )
Writing to paged memory(w): 00000503=00 ( )
Writing to physical memory(w): 00000503=00 ( )
Writing to RAM(w): 00000503=00 ( )
00:03:33:47.08384: Loading incoming TSS 0058 state into the registers.
00:03:33:47.08384: Loading incoming TSS LDT 0040
Reading from RAM(r): 000004E4=10 ()
Reading from physical memory(r): 000004E4=10 ()
Reading from paged memory(r): 000004E4=10 ()
Reading from RAM(r): 000004E5=00 ( )
Reading from physical memory(r): 000004E5=00 ( )
Reading from paged memory(r): 000004E5=00 ( )
Reading from RAM(r): 000004E6=10 ()
Reading from physical memory(r): 000004E6=10 ()
Reading from paged memory(r): 000004E6=10 ()
Reading from RAM(r): 000004E7=04 ()
Reading from physical memory(r): 000004E7=04 ()
Reading from paged memory(r): 000004E7=04 ()
Reading from RAM(r): 000004E8=00 ( )
Reading from physical memory(r): 000004E8=00 ( )
Reading from paged memory(r): 000004E8=00 ( )
Reading from RAM(r): 000004E9=82 (‚)
Reading from physical memory(r): 000004E9=82 (‚)
Reading from paged memory(r): 000004E9=82 (‚)
Reading from RAM(r): 000004EA=00 ( )
Reading from physical memory(r): 000004EA=00 ( )
Reading from paged memory(r): 000004EA=00 ( )
Reading from RAM(r): 000004EB=00 ( )
Reading from physical memory(r): 000004EB=00 ( )
Reading from paged memory(r): 000004EB=00 ( )
00:03:33:47.08656: Setting Task Switched flag in CR0
00:03:33:47.08672: Loading incoming TSS CS register
Reading from RAM(r): 00000400=29 ())
Reading from physical memory(r): 00000400=29 ())
Reading from paged memory(r): 00000400=29 ())
Reading from RAM(r): 00000401=00 ( )
Reading from physical memory(r): 00000401=00 ( )
Reading from paged memory(r): 00000401=00 ( )
Reading from RAM(r): 00000402=F1 (ñ)
Reading from physical memory(r): 00000402=F1 (ñ)
Reading from paged memory(r): 00000402=F1 (ñ)
Reading from RAM(r): 00000403=A4 (¤)
Reading from physical memory(r): 00000403=A4 (¤)
Reading from paged memory(r): 00000403=A4 (¤)
Reading from RAM(r): 00000404=0F ()
Reading from physical memory(r): 00000404=0F ()
Reading from paged memory(r): 00000404=0F ()
Reading from RAM(r): 00000405=9A (š)
Reading from physical memory(r): 00000405=9A (š)
Reading from paged memory(r): 00000405=9A (š)
Reading from RAM(r): 00000406=00 ( )
Reading from physical memory(r): 00000406=00 ( )
Reading from paged memory(r): 00000406=00 ( )
Reading from RAM(r): 00000407=00 ( )
Reading from physical memory(r): 00000407=00 ( )
Reading from paged memory(r): 00000407=00 ( )
00:03:33:47.08896: Loading incoming TSS Stack address
Reading from RAM(r): 000004C4=FF (ÿ)
Reading from physical memory(r): 000004C4=FF (ÿ)
Reading from paged memory(r): 000004C4=FF (ÿ)
Reading from RAM(r): 000004C5=FF (ÿ)
Reading from physical memory(r): 000004C5=FF (ÿ)
Reading from paged memory(r): 000004C5=FF (ÿ)
Reading from RAM(r): 000004C6=00 ( )
Reading from physical memory(r): 000004C6=00 ( )
Reading from paged memory(r): 000004C6=00 ( )
Reading from RAM(r): 000004C7=10 ()
Reading from physical memory(r): 000004C7=10 ()
Reading from paged memory(r): 000004C7=10 ()
Reading from RAM(r): 000004C8=00 ( )
Reading from physical memory(r): 000004C8=00 ( )
Reading from paged memory(r): 000004C8=00 ( )
Reading from RAM(r): 000004C9=92 (’)
Reading from physical memory(r): 000004C9=92 (’)
Reading from paged memory(r): 000004C9=92 (’)
Reading from RAM(r): 000004CA=00 ( )
Reading from physical memory(r): 000004CA=00 ( )
Reading from paged memory(r): 000004CA=00 ( )
Reading from RAM(r): 000004CB=00 ( )
Reading from physical memory(r): 000004CB=00 ( )
Reading from paged memory(r): 000004CB=00 ( )
00:03:33:47.09104: Loading remaining TSS segment registers
Reading from RAM(r): 00000408=03 ()
Reading from physical memory(r): 00000408=03 ()
Reading from paged memory(r): 00000408=03 ()
Reading from RAM(r): 00000409=00 ( )
Reading from physical memory(r): 00000409=00 ( )
Reading from paged memory(r): 00000409=00 ( )
Reading from RAM(r): 0000040A=00 ( )
Reading from physical memory(r): 0000040A=00 ( )
Reading from paged memory(r): 0000040A=00 ( )
Reading from RAM(r): 0000040B=08 ()
Reading from physical memory(r): 0000040B=08 ()
Reading from paged memory(r): 0000040B=08 ()
Reading from RAM(r): 0000040C=00 ( )
Reading from physical memory(r): 0000040C=00 ( )
Reading from paged memory(r): 0000040C=00 ( )
Reading from RAM(r): 0000040D=92 (’)
Reading from physical memory(r): 0000040D=92 (’)
Reading from paged memory(r): 0000040D=92 (’)
Reading from RAM(r): 0000040E=00 ( )
Reading from physical memory(r): 0000040E=00 ( )
Reading from paged memory(r): 0000040E=00 ( )
Reading from RAM(r): 0000040F=00 ( )
Reading from physical memory(r): 0000040F=00 ( )
Reading from paged memory(r): 0000040F=00 ( )
Reading from RAM(r): 000004C4=FF (ÿ)
Reading from physical memory(r): 000004C4=FF (ÿ)
Reading from paged memory(r): 000004C4=FF (ÿ)
Reading from RAM(r): 000004C5=FF (ÿ)
Reading from physical memory(r): 000004C5=FF (ÿ)
Reading from paged memory(r): 000004C5=FF (ÿ)
Reading from RAM(r): 000004C6=00 ( )
Reading from physical memory(r): 000004C6=00 ( )
Reading from paged memory(r): 000004C6=00 ( )
Reading from RAM(r): 000004C7=10 ()
Reading from physical memory(r): 000004C7=10 ()
Reading from paged memory(r): 000004C7=10 ()
Reading from RAM(r): 000004C8=00 ( )
Reading from physical memory(r): 000004C8=00 ( )
Reading from paged memory(r): 000004C8=00 ( )
Reading from RAM(r): 000004C9=92 (’)
Reading from physical memory(r): 000004C9=92 (’)
Reading from paged memory(r): 000004C9=92 (’)
Reading from RAM(r): 000004CA=00 ( )
Reading from physical memory(r): 000004CA=00 ( )
Reading from paged memory(r): 000004CA=00 ( )
Reading from RAM(r): 000004CB=00 ( )
Reading from physical memory(r): 000004CB=00 ( )
Reading from paged memory(r): 000004CB=00 ( )
00:03:33:47.09520: New task ready for execution.
0004:0000001a EA 00 00 80 00 jmp 0080:00000000 RAM(r):0000044C=00( ); Physical(r):0000044C=00( ); Paged(r):0000044C=00( ); Normal(r):0000044C=00( ); RAM(r):0000044D=00( ); Physical(r):0000044D=00( ); Paged(r):0000044D=00( ); Normal(r):0000044D=00( ); Physical(p):000FA4F1=33(3); Paged(p):000FA4F1=33(3)
Registers:
AX: 0000 BX: 0000 CX: 0000 DX: 0000
SP: 0800 BP: 1000 SI: 0000 DI: 0000
CS: 0004 DS: 000c ES: 0020 SS: 0020 TR: 0048 LDTR: 0038
IP: 001a FLAGS: 4046
CR0: fff9
GDTR: 0000000004a40098 IDTR: 00000000053c0180
FLAGSINFO: 0N00oditsZ0a0P1c
Physical(p):000FA4F2=DB(Û); Paged(p):000FA4F2=DB(Û); Physical(p):000FA4F3=83(ƒ); Paged(p):000FA4F3=83(ƒ)
Physical(p):000FA4F4=3F(?); Paged(p):000FA4F4=3F(?); Physical(p):000FA4F5=01(); Paged(p):000FA4F5=01()
0004:00000000 33 DB xor bx,bx Physical(p):000FA4F6=75(u); Paged(p):000FA4F6=75(u); Physical(p):000FA4F7=1A(); Paged(p):000FA4F7=1A()
Registers:
AX: 0000 BX: 0000 CX: 0000 DX: 0000
SP: 0600 BP: 1000 SI: 0000 DI: 0000
CS: 0004 DS: 000c ES: 0020 SS: 0020 TR: 0058 LDTR: 0038
IP: 0000 FLAGS: 0002
CR0: fff9
GDTR: 0000000004a40098 IDTR: 00000000053c0180
FLAGSINFO: 0n00oditsz0a0p1c

It's somehow loading the wrong task in this?

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

Reply 125 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

It seems to use the TSS at 000420(actually the TSS ) to store the TSS to leave, instead of the correct location said TSS descriptor at 0420 points to? So it's using the Gate Descriptor base address instead of the TSS descriptor base address?

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

Reply 126 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

OK. First are some LTR checks:
1. Loading task 0058 results in base 044C, selector 0058.
2. Loading task 0048 results in base 0420, selector 0048.
3. Loading task 0068 results in base 0478, selector 0068.

Looking at the TSS sizes, there should be no overlap between the three of them.

Then, it executes the first task switch(task 0068 still loaded in TR as the current task).
So, the first task switch(CALL 0078:0000) saves the task at 000478(When at task 0068). Then it loads task 0048, which has a base of 000420, loads said TSS registers and continues with being a nested task nested within task 0068. Data required is written back to the TSS and execution continues within the new, nested, task.
Then it eventually jumps to 0080:0000. Said descriptor is a gate descriptor to task 0058. A task switch to task 0058 is started. The descriptor points to a base of 44C. State is stored at a base of 000420. Task 0048 is marked idle and it's state is stored at location 000420. The new task(task 0058) is loaded as the new current task(state being stored at a base of 00044C. Since no backlink occurs, the task cannot return to task 0048 and 0068 properly.

So the task 0058 is executing as a standalone task, being unable to return to ít's parent task in any normal way(by using normal IRET without stack being manipulated).

The next task switch by the same jump to segment 0080:0000 saves state and restores the state from it's own task, thus continuing the same task after the jump.
Then another one with the very same effect(nothing changes other than the value at DS:[BX]).
And another one x21. So 22 times the very same jump to it's own task.
Then it tries to execute an IRET to return to it's caller, but since the Nested Task has been left at the very beginning(which shouldn't be a problem on it's own), no backlink is stored for said task(to actually return to said task), nor is anything pushed on the stack to do anything valid with the IRET. So this just results in the stack popping NULL(0000h) values(since the SS limit is FFFFh with a base of 1000h).
The IRET pops a IP value of 55AA, CS value of 55AAh and a FLAGS value of 55AAh. It then throws a #GP for CS selector 55AA, external bit set, table being the GDT.

The BIOS doesn't like this, so it terminates the testing?

Anything else happening on other emulators?

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

Reply 127 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just trying to run Microsoft Flight simulator 5.1 seems to install, but once running, nothing is displayed on the screen? Most of the display is just some shade of gray?

489-Microaoft Flight Simulator 5.1-GrayDisplay.jpg
Filename
489-Microaoft Flight Simulator 5.1-GrayDisplay.jpg
File size
15.57 KiB
Views
1967 views
File comment
Microsoft Flight Simulator 5.1 displaying gray display?
File license
Fair use/fair dealing exception

Edit: Just tried running the very same application on the img file using Dosbox, where it runs the videos and everything just fine?

Is this maybe a protected mode issue? Or is this a calculation issue? Does it run on plain VGA?

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

Reply 128 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

After fixing some little checks for errors(using a CPU variable to check for errors during protected mode features instead of the proper way: examining return values by segmentWritten function calls), Arachne now seems to run without much problems:D

Time to take out the old UniPCemu server again and check for internet connection! 😁

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

Reply 129 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Finally gotten Arachne running on UniPCemu(setting it up for EMS on the EMM386 driver)! 😁

The only odd problem that happens now, is that it seems to display(and probably send/receive) all modem commands with spaces between each letter.

Where Dosbox displays "ATZ<ENTER>OK"(<ENTER> is a newline), UniPCemu instead displays "A T Z<ENTER>O K"? Something's definitely wrong there?

After that happens on UniPCemu, it tries to load the SLIP8250.COM driver, which starts and fails, hanging the whole emulation(leaving the Arachne Lock file in place, which has the problem that restarting arachne after a reboot causes a terribly slow loading time due to the image on the background of the page being loaded:S).

But it's at least some progress, isn't it? 🤣

491-Lock on Arachne within UniPCemu.jpg
Filename
491-Lock on Arachne within UniPCemu.jpg
File size
150.88 KiB
Views
1951 views
File comment
Arachne being locked(page loads very slow, image showing the page fully loaded).
File license
Fair use/fair dealing exception

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

Reply 130 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

It seems that arachne itself is running properly, but miniterm.exe is actually screwing up the AT commands somehow(it sends a correct ATQ command, but doesn't receive it's data correctly(it displays each character received with a space added after it).

The only two commands it sends is ""(Empty command) and ATQ, after which it determines that the modem isn't responding?

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

Reply 131 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just found out that the protected-mode segmentation unit wasn't complete yet: it was still missing it's support for the accessed bit to be set when a segment descriptor is loaded. I've implemented that now. I've also added some additional support for page faults during segment loads/stores, causing a page fault like earlier, but now suppressing the caller from faulting itself(thus causing double/triple faults). So now, once it encounters a fault in any point of the call tree(within the emulator), any fault will cause the tree to be walked up again without causing any new faults(instead of faulting again on the result, causing a double/triple fault when the (double/triple) fault handler is invoked).

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

Reply 132 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just tried reinstalling Windows 3.0(to rule out corrupted files), while running MS-DOS 5.0 with himem, emm386, vide-cdd(high), mscdex and ctmouse loaded. It seems to still having a buggy mouse, while hanging when reaching the "Building program manager groups... Main" step?

Edit: I do see it going through the program groups(until Games) but then it either hangs or becomes very slow? Still testing it out...
Edit: Still no response after that? I don't see any other faults being raised from Virtual 8086 mode other than the interrupt 0x1C and 0x08 interrupts firing? Anyone?

492-Windows 3.0 setup doing nothing when building the Games program group.jpg
Filename
492-Windows 3.0 setup doing nothing when building the Games program group.jpg
File size
163.85 KiB
Views
1927 views
File comment
Windows 3.0 setup hanging in Virtual 8086 mode(EMM386)?
File license
Fair use/fair dealing exception

Anyone knows about problems with Windows 3.0 setup running within Virtual 8086 mode of MS-DOS 6.22 EMM386.EXE?

Edit: It seems to be a problem with the normal code execution itself? It seems to keep loading a 0000h value into AX from DS:[0000] and keeping running the same loop infinitely?

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

Reply 133 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just reversed the (I)MUL code to properly determine various flags(sign, zero, parity) depending on the lower half of the results for all those instructions(for the GRP3a/GRP3b variants of (I)MUL), but the microsoft flight simulator still won't show the 3D models? It does show the cockpit properly, but the entire field that's shown by the view(both view 1 and view 2) results in a gray area?

494-Video not showing up on Microsoft flight simulator 5.1.jpg
Filename
494-Video not showing up on Microsoft flight simulator 5.1.jpg
File size
89.93 KiB
Views
1918 views
File comment
Video not showing up in Microsoft Flight Simulator 5.1
File license
Fair use/fair dealing exception

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

Reply 134 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Now that I think about it: Windows 3.0 setup building the program manager groups usually shows the program manager actually filling up with those groups while it's doing that. But in the UniPCemu running in EMM386 Virtual 8086 mode, that doesn't show, other than the window with the message that it's building the Main program group?

So it's failing to start some program there(probably the program manager)?

Edit: Just tried it again without EMM386.EXE loaded. The program groups get properly built now(running in Real mode instead of Virtual 8086 mode).

Is anything known about issues running the Windows 3.0 setup while having MS-DOS 6.22 EMM386.EXE loaded? Does this happen on a real PC as well?

495-Program groups building up in Real mode.jpg
Filename
495-Program groups building up in Real mode.jpg
File size
137.4 KiB
Views
1912 views
File comment
Program groups building up in Real mode, but not in Virtual 8086 mode?
File license
Fair use/fair dealing exception

Edit: Running said Windows in from real mode with the /S switch makes it hang into trying to execute an invalid 0F17 opcode? So definitely something wrong there...

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

Reply 135 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just tried Flight Simulator 4, running the demo until flying off the airport, then terminating demo mode and resuming flight. Doing nothing, the airplane crashed towards the ground until a crash occurred right away? So does that mean my CPU contains logic that is faulty? Or do you actually need to do something to keep the plane in the air?

Edit: After the last dirty/accessed Paging/Segmentation improvements, EMM386 using EMS is finally detected within Windows 3.0 running in Real mode! 😁

Although, running the MS-DOS prompt within Windows returns to a fullscreen COMMAND.COM prompt with unresponsive input?

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

Reply 136 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Strange that the test386.asm testsuite(which does extended tests on the shift/rotate instructions) passes the x86 shift/rotate instructions, while the 80186 tests(actually 80286 or higher, judging from the high 4 bits of FLAGS not always being set) from the CPC emulator fail those very same instructions? Anyone?

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

Reply 137 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just tried booting a floppy again with correct (0x33 in CMOS RAM byte 0x10) CMOS information loaded. Still, the Compaq Deskpro 386 BIOS still is double seeking the FDC for some odd reason?

This seems to be caused by it reaching F000:909B, at which point it loads 0x61 into the drive information flags for the drive(thus setting it up for double seeking, which is incorrect for the emulated drives).

Edit: The jump at 00009087 to that block of code only happens when the CMOS checksum is bad(which it is), so that will cause the default 0x61 value to be loaded?

	jnz	x909b			; 00009087  7512  'u.'

This only happens when SS:[BP+5]>0x27(>39, thus track 40+?) it seems. SS:[BP+5] is 00h(track 0), so nothing is done about it.

Now the question, what clears the Bad Checksum bit when running the BIOS.

Edit: After setting it up with basic settings (720K floppy drives instead of the actual 1.44/2.88MB drives that are emulated) using the gsetup program from the hard disk, it properly boots the setup floppies, but instead of running normally, I end up at a white screen with the program hanging because of interrupt 21h points to what seems to be a part of then end of an IRQ handler, which acnowledges any remaining interrupts to the PIQ which then terminates, instead of actually doing something in the MS-DOS interrupt 21h handler?

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

Reply 138 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Just finished configuring the Compaq Deskpro 386 with 720K(maximum supported) floppies using GSETUP. Then configured the IBM AT using GSETUP and booted the AT Diagnostics 2.00 disk, which eventually errors out on what seems to be the CMOS(according to the error reported), after which it crashes?

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

Reply 139 of 163, by superfury

User metadata
Rank l33t++
Rank
l33t++

Hmmm... Something odd is happening: The AT BIOS(rev 2 mobo emulated and ROM used@6MHz) seems to hang when no 0xFA is received before 0x55 during the 8042 0xAA self test command, but the diagnostics BIOS doesn't approve, only passing the test without the received 0xFA(only 0x55 received)?

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