Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Emulation of old PCs, PC hardware, or PC peripherals.

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-6-23 @ 16:09

I still see something strange happening with the Calimera II setup on WFW3.11. When at the GNU license agreement screen, clicking the next button(or selecting it) makes Windows 3.11 lock up completely?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-6-25 @ 11:27

Just compiled Linux 0.01 again with the gcc compiler tools, then copied the freshly generated disk "Image" file over the start of UniPCemu's empty formatted(with empty FAT) 720K disk image(to make sure the BIOS nor Linux will have issues with the drive(since it can be a 1.44MB/2.88MB drive, although the BIOS reports 720K for any of those)). Then booted the disk image and... I immediately after the loading part see it triple faulting on what seems to be a LSS instruction, which loads a very invalid segment:offset pair into the SS register? The segment/offset pair that's loaded looks like a very invalid part of code? Perhaps a memory-related issue?

The segment selector contains 0x6562. That's a very strange one for such an instruction?

Edit: It happens at 0008:000D. Paging is disabled, so it must be VERY early during the boot process? Perhaps at the start of the kernel?
Edit: It seems so: the base of CS is 0, limit 7FFFFF(8MB). So it's perhaps almost immediately after the boot loader?

Edit: I believe the compiler was from https://virtuallyfun.com/wordpress/2015 ... indows-10/ , but it doesn't seem to have objdump within it?

Edit: The main issue is, there's not even enough headers in it to compile the binutils 1.9 part of the toolchain, which contains my required objdump program to analyze the source code!

Edit: OK, looking at the code being executed, it's the very first lines of boot/head.S?

So, perhaps there's an issue decompressing the kernel image?
Edit: Looking again at boot.S, I see sectors=18 being defined(for a 1.44MB floppy) but it's 720K(thus 9) in my configuration... Whoops!
Edit: Having fixed the SPT(sectors) define in the linux 0.01 source code, it now loads the kernel correctly, as well as correct LSS data being loaded :D
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-6-25 @ 14:32

Hmm... Having fixed the disk image for 720K (sectors=9), Linux 0.01 now loads way further, until a page fault on the stack of a CALL(opcode E8) instruction makes it hang? It now displays a bit more: "Linux 0.01 compiled by GCC version 1.40".

So, it reaches line 93 of init/main.c at least?
That happens at 000F:52A2. ESP is 18EA4. The PDE is 7FE027, the PTE is 18065? The CPL is 3, so it's in user mode at least?
Edit: Input seems to be responsive, but nothing is done?
Edit: OK, a single Ctrl-Alt-Del reboots the machine(instead of MS-DOS/Windows' need of pressing del twice with ctrl+alt pressed). So at least that part is working properly. Perhaps a part on the Init process's fault?
Edit: Hmmm... I see the IRET for bopping down to user mode (during the init process's start, init/main:93, just before the call to fork())?
Edit: Hmmm... The bopping down to user mode seems to have been a success. Then a 32-bit opcode 0x83 follows it.
Edit: Hmmm... I then see it add 8 to ESP(probably cleaing up some more stack), so 18E9C becomes 18EA4. So far at address 000F:5284. Then a MOV EAX,2 instruction. Then a INT 80h is issued(a call down into the Linux kernel). Hmmm... So far everything seems to be fine(at least theoretically).
Edit: Hmmm.... EAX's value is 2 for said syscall. Could that be the fork() system call?
Edit: The syscall seems to return the value 1(the child's PID) in EAX(so it's the parent again that's gotten control back), the value 18EA4 in ESP. The SS value is correctly gone back up to 0x17(the user-mode data segment), so that's successful.
It has now returned to 000F:528E.
Edit: Then a TEST EAX,EAX on the result check.
Edit: Then a JGE 529E, which is taken. So it's determined that the PID is bigger than zero? So it enters the inner of the fork statement?
Edit: Then another TEST EAX,EAX at EIP 529E.
Edit: Then a JNZ 52A7. That's taken.
Edit: Then a MOV EDX,192BC.
Edit: Then a MOV EAX,1D.
Edit: Then a INT 80h is issued. According to the unistd.h header, that's the pause() kernel call. So so far, so good.
Edit: I see the child running(without any IRET from the kernel), which on the call at 000F:52A2 calls 537B immediately causes a page fault. The error code pushed on the stack is 7. The PTE is 18065. The PDE is 7FE027. So present, not writable, user. So that's probably the COW mechanism going into effect?
Edit: I see an IRET to 52A2 again. ESP is returned to 18EA4 again. SS of 0x17. So are all other segment registers.
From F:538A there's an INT 0x80(function 0)? That's setup() being called. Thus it ends up at sys_setup() in hd.c?
Edit: I see an read sectors command to the first hard disk, then an IRET back to 52B3 of task F. So that's the idle task?
Edit: I see another INT 80h, function 1Dh(once again the pause() command). That seems to continue onwards?
Edit: I do see an IRQ0 being thrown. But after that, due to the Visual Studio debugger crashing, the netire debugging process go aborted :(
Edit: Looking at the hard disk controller, I see it erroring out on a read sector transfer that's executed? The LBA registers are loaded with values A0A90201h(drivehead(A0), cylinderhigh(A9), cylinderlow(02), sectornumber(01) registers). The hard drive is immediately erroring out, with no interrupt being fired? Perhaps that's the problem? According to the source code, it's trying to read sector #0(the MBR)? The code seems to expect an interrupt always, even if it's an error?
Edit: Hmmm.... Weird. I see the hard disk registers being written their values for sector #0(using CHS addressing method), but the register queue of the hard disk are completely different?
Edit: Aha! It's just writing it's parameters to the hard disk, BUT it's writing to the primary slave, while it's supposed to be writing to the Primary Master! When it's written all data to the primary slave, then writing the data for the primary master's drive/head register, switching the drive to the primary master(incurring a slight delay on the hard disk). Then(with all data entered into the primary slave) it's written the drive/head register only, finally executing a command to the primary master(0x20 read sector(s) command), while almost all registers are left in an unidentified state!
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-6-27 @ 05:44

Well, those issues have been fixed by making writes to most register(all but the head/drive register and command register) go to both drives. So booting succeeds with regards to that.

With Linux 1.0.9 there's some strange issue about exexve somehow failing to execute even /bin/sh, so not sure yet what's going wrong there? Hard disk mounting(the minix partition) succeeds without problems.

Now trying to reinstall Internet Explorer 5 in WFW 3.11. So far it goes a lot better than previous times. Instead of immediately crashing when getting to the IE5 part of installation, it now seems to properly continue :D 30% so far.

Edit: It seems to manage to proceed to the modem setup(Windows 95-style "Install new modem". It tries to detect it at COM2, but cannot find the modem?
Edit: The setup wizard finishes properly, it seems. I only let the browser customizations abort(because it's missing some files it seems) and the Modem detection cancelled, because I'm currently still in the process of building said support(which has just been implemented, just still need an identification string to give the app).

Anyone knows the identification string for a generic Hayes-compatible modem when using serial modem PNP?

Edit: Skipping the modem configuration and completing setup seems to work. But when I try to run the internet connection wizard again after installing, the wizard dll seems to crash, according to Windows 3.11?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-6-27 @ 20:08

Hmmmm... Strange that the wizard when it was running, Windows reporting that it had a bad execution at segment selector 0001h? Since that's an invalid CS selector, no matter what?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-20 @ 15:37

About the ENGINE.EXE at the beginning of the thread, I now notice it crashing on not a FPU instruction(just cwsdpmi, 80486 and no FPU nor emulation) when running CWSDPMI, then ENGINE.EXE, on what seems to be an segment limit violation(#GP(0) fault))? The limit is 64KB(0xFFFF), but it tries to jump there at 375e6?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-20 @ 19:04

Just tried the WFW3.11 Calmira 3.3 setup once again, and it's getting past the GNU liscence screen now, at least until it copies the files! :D Maybe that's something fixed by the last update, but it might also be because it's a fresh WFW 3.11 install again(together with all extra Win32s stuff downloaded again(IE5, Calmira, CBInst)? Although I didn't reinstall anything other than the ET4000 drivers again(before firing up the Calmira 3.3 setup).

Edit: It seems to work like a charm now :D So that's part of Windows 95 working in UniPCemu already(Calmira) :D Even though the actual Windows 95 still has issues booting :/
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-21 @ 16:01

Just tried some debian 1.x CD-ROM. I see it immediately crashing on loading(MOV) segment 0x18 into DS? For some reason that fails(perhaps CPL==3, didn't check yet).
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-27 @ 16:38

Just tried it again after the latest bugfixes were made(mostly the hardware and the CPU RETF/IRET bugfix for the SS of the lower privilege stack(of CPL 3)). It doesn't crash immediately anymore, but eventually crashes after a RETF at 001e768D to address 65706174 being invalidly returned to?

Edit: Hmmm.... The stack has address block 00202xxx in it's ESP value. That's mapping high to C0202xxx, which entry in the TLB maps C020201D(the key) to 00000000? Can that normally happen during boot with linux? That a block of virtual memory is mapped to physical location 0?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-28 @ 03:20

Just tried running One Must Fall 2097 (no updates applied). It seems to run without problems(although a bit slow, mostly because the emulation is slow as well(at ~20% of realtime speed)). :D
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-28 @ 04:46

Now trying the Titanic: Adventure out of time game. It seems to be using a cue/bin file. Luckily, I've just completed implementing support for that file format(and audio tracks too, although they're not in those disk images, as they're pure data disks with 2352 byte sectors(previously UniPCemu could only open ISO images with 2048 byte sectors)). Also, now the CD-ROM is finally feature complete(both audio and data CD-ROM tracks for all basic mandatory commands(and audio playback commands) are now supported). So now all those commands are also fully functional in UniPCemu :D

edit: The installation is properly finished as far as I can see. Now to run it for the first time...

I did see something strange, though, during returning to a lower privilege level: FS and GS were having a value of 0, with their present bits in their descriptor caches cleared, but the notpresent precalc was somehow 0? That means that the precalcs are probably not always updating when neccesary?

Edit: But, the precalcs are updated whenever it's successfully loaded from memory? Does that means there's another weird case where the precalcs are somehow not being updated when the segment selector is zeroed?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-28 @ 11:35

Just tried to run the Titanic game on WFW 3.11(with Calmira installed as well). It seems to hang somewhere in kernel mode? I don't see the user-mode CS being loaded anymore(only 0x28 code segments)?

I only see IRETD at 80006DA1 returning to an address at kernel mode?
Edit: Hmmm.. I see a lot of IRETD's to 800092D* addresses? Perhaps a hanging kernel loop?

So far, I see returns to:
0x800092D4
0x80009417
0x8000948D
0x80009232
0x800092D0
0x800092D5
0x800092D9

Edit: The only interrupt I see firing is interrupt 0x50(the PIT interrupt)?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-7-31 @ 09:48

Just tried the half-installed(until first reboot) version of NT Workstation 3.1 again. It now gives a STOP 0x0000000A?

144.jpg
BSOD on NT Workstation 3.1 first reboot.
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-01 @ 07:57

Just tried reinstalling NT Workstation 3.1. It's crashing the same?

145.jpg
Crash after reinstall.


Hmmm... 28h is the Task Register? Perhaps a stack issue?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-01 @ 18:40

Anyone knows some more software to verify if the protection rules themselves are correctly applied? I want to know if all privilege exception checks are properly working.
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-01 @ 19:36

With Windows NT, at the point of the 00000028 page fault, the last memory accessed by an instruction is at ff8fdbff, while EIP after the instruction being fetched is 8001175e(the instruction starting at 8001175b).

Perhaps it's supposed to be using FS instead of the normal segments? Seeing as FS is currently the only non-zeroed base segment?

Edit: TR is 0028:80203000(UniPCemu format breakpoint), CR3 is 0x30000. CR0 is E005001F.

The executed instruction is located at segment 0008.

The current instruction stream is 0x8B, 0x7A, 0x28. That's MOV EDI,EDX(which is 0x28)+0x28? Thus a strange address, since it's reporting to error out on address 28h? Perhaps EDX+imm8 is wrongly decoded by the ModR/M decoder?
Edit: Hmmm... EDX is 0 at that point, but the BSOD says 0x28 instead?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-01 @ 22:49

Just tried Linux 0.01 again. It fails to see the harddrive properly.

Then I tried Linux 1.0, which somehow seems to boot somewhat, even still mounting the filesystem. I also see no exit() calls so far!

Edit: I do see page faults for address 0x62060 and linear address 0(An ADD instruction, opcode 00h) continuing?
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-01 @ 23:32

Just tried Slackware 1.0 (from http://www.qemu-advent-calendar.org/2014/ ; day 1 ), then used "qemu-img convert -f qcow2 -O raw slackware.qcow2 slackware-1.0.img", then created a slackware.img.bochs.txt file for UniPCemu to mount it as a Bochs disk image and tried booting it... It actually booted at least until login:

1110-Slackware pre-1.0-xmas edition.jpg
Slackware running on UniPCemu at the login prompt!


:D

That's so far the very first Linux distro I've gotten running in UniPCemu! :D
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-02 @ 11:31

Tried compiling the kernel. Running slowly, but surely:
1114-gcc on Slackware pre-1.0 compiling the kernel again.jpg
GCC on Linux 0.99 (Slackware pre-1.0)
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: Any good MS-DOS 80386/80486/Pentium(on slow system) games for testing Protected mode emulation and instructions?

Postby superfury » 2019-8-02 @ 12:57

Compiling the kernel has successfullly completed:

1115-gcc-compiling-the-kernel-completed-successfully.jpg
Linux 0.99 successfully compiled on UniPCemu.


:D
superfury
l33t
 
Posts: 3206
Joined: 2014-3-08 @ 11:25
Location: Netherlands

PreviousNext

Return to PC Emulation

Who is online

Users browsing this forum: No registered users and 1 guest