UniPCemu build 2018/02/04 16:02 is now live!

It's been a long month, with many improvements(on the AT architecture, hardware and CPU) and bugfixes. Not many gamebreaking improvements on the Compaq Deskpro 386(except the 80386 itself and hardware fixes), still unable to boot floppies on it and use EMM386, but on the hardware side...

- Fixed IDE memset to use correct pointers for clearing buffers.
- Implemented the Microsoft Corporation: Media Status Notification Support Specification, Version 1.03 into the CD-ROM drives, in limited form(only reporting the disk as changed when changed instead of eject/insert).
- Extended CD-ROM support to support the Microsoft Media Status Notification Support Specification better, with proper media change requests and eject handling. Insertion will ensure in the usual way(always allowed on CD-ROM drives).
- Implemented missing required ATAPI/MMC Mandatory command.
- Various ATA/ATAPI bugfixes.
- Various CPU bugfixes.
- Implemented x86 Virtual 8086 mode on 80386+ processors.
- Improved SDL2 window management to keep the window centered on the screen when not moved by the user.
- Seperated physical(disk) floppy cylinder from FDC(logical) cylinder to allow BIOSes to detect 40-track vs 80-track drives.
- Improved floppy seeking a track updating ST3.
- Implemented slight IRQ delays into the ATA(PI) disk IRQ timing.
- Improved PSP-style input for PSP buttons locking properly.
- Fixed BIOS menu opening during debugging.
- Fixed debugger rechecking during debugging.
- Fixed debugger delay locking durign debugging.
- Fixed debugger skip step mode 4(breakpoint on jump followed).
- Added debugger support for current and previous modr/m debugging.
- Added the current modr/m reg value as an opcode extension to the reported opcode in the debugger.
- Decreased power usage when inactive by using large delays.
- Fixed HLT being privileged on 80286+ in protected/Virtual 8086 modes.
- Improved protected mode EXT bit for interrupts.
- Improved x86 signed/unsigned imm32(s) to prevent errors.
- Added CGA/MDA static memory emulation(unmapped memory).
- Fixed emulated Sound Blaster default option.
- Fixed debugger overflow bug.
- Increased debugger buffer to prevent overflow.
- Optimized 16/32-bit conditional jumps.
- Implemented 32-bit repeated instructions using the REP prefix and related prefixes.
- Improved response time to single percent digits or bigger when updating the screen processing HDD disk image convertions and defragmenting.
- Added support for a REDIRECT.TXT to redirect the root directory on Android from the default path only(not recursive, contents is destination path, on Android only).
- Improved various compiler warnings.
- Fixed BIOS Menu bugs.
-,Android releases are now built with Android Studio(with downgraded NDK to r12b for inline compatibility). This drops(deprecates) all other Android ABI platforms due to Google updates, leaving only x86 and armeabi-v7a architectures to be available for compiling releases(unable to re-enable after downgrade).
- Fixed 8086+ instruction timing bugs and added documentation on ModR/M source/dest for the modrm_src0/modrm_src1 variables in the timings table.
- Added deliberate #UD for the 80286 on opcode 0F0B.
- Improved dynamic disk image creation to create disk images that are compatible with older UniPCemu builds when using the compatibility disk CHS mode, making them fully compatible again(removing unneeded headers from the file).
- Fixed 80286 deliberate #UD instruction to have no special operands.
- Fused various common x86 instructions (with reversed parameter orders only) to remove duplicates and decrease core size.
- Improved main Settings menu to support all combinations of rebooting (with requirements) and saving/discarding settings.
- Fixed plain emulator restart options in the Settings menu to work properly.
- Improved LXS(LDS,LES,LFS,LGS,LSS) instructions to be #UD or NOP when using registers as a source.
- Fixed dynamic disk image and static disk image geometry detection to use the correct file size in sectors instead of file size in bytes as input for the CHS geometry formulas. This changes current geometries back to their compatible and correct values. All disk images created and formatted since the support for the new formats are affected, might require reformatting(e.g. MS-DOS boot harddisks) to work properly again.
- Fixed disk types when creating minimal/bochs type disks using the settings menu.
- Fixed ATA buffer overflow and read/write multiple commands.
- Improved BIU handling of byte/word/dword fetches from memory, by detecting the point at which the BIU splits the word/dword access with alignment while processing, using a simple address mask to detect break-during-transfer instead of a precalculated break bases on the base address, improving compatibility with 32-bit buses and 16-bit buses accessing 32-bit quantities from memory.
- Adjusted Inboard 386/AT values based on measured BIOS timings (compared to expected 80286 speeds) and calculated the remaining values based on the XT values due to missing documentation on actual waitstates of the Inboard 386/AT.
- Added a setting for an enforced U-ROM loading for loading normal BIOS ROMs instead of platform general BIOS ROMs, allowing all possible BIOS ROM configurations to be chosen from the Settings menu.
- Improved static image creation when converting as well as cleanup of the disk image files.
- Fixed dynamic disk image to static disk image conversion to use the correct filename.
- Fixed reading of the extended dynamic disk image header for returning the extended information block location, fixing detection of said settings within the disk image file. This affects any disk image in the new format. The geometries of the formats not in UniPCemucompatible CHS format might change the CHS reported to software and cause issues(unbootable MS-DOS harddisks for example).
- Improved 80186+ opcode 8E handling to use the parameters correctly from the lookup table.
- Improved PUSH (E)SP, POP (E)SP instruction handling.
- Fixed Floppy Disk Controller(FDC) bugs.
- Improved and fixed bugs in the PS/2 keyboard and 8042 PS/2 controller.
- Simplified DMA Page register logic to apply to both DMA controllers universally using a simple calculation for the register.
- Improved the FDC to support the full 82072AA instruction set.
- Improved and fixed CMOS chip and RTC(Real Time Clock) emulation.
- Seperated XT and PS/2 CMOS savedata from AT and Compaq Deskpro 386 CMOS savedata respectively.
- All compiled platforms now have the build version(git commit information) as their version information, except for the PSP builds.
- Added an option to run the CMOS in cycle-accurate mode, with time starting at midnight 1-1-1970(epoch start time) instead of realtime(OS time, like Windows, Android, PSP, Linux current time).
- Made changing architecture from XT to AT and up redetect memory automatically.
- Added support for the 80286 BIU Waitstate BUS I/O.
- Fixed various CPU bugs.
- Decreased 8086-80386 modrm checks and related memory checks to only once each instruction(before the memory is accessed).
- Added logging of starting an instruction with BIU response data buffered(thus unprocessed). It will log and discard the buffer for the new instruction to be able to run.
- Removed invalid memory checks that can abort in the middle of a memory transaction. It shouldn't be there due to having no effect on a real Execution Unit(It might access part of existing memory after all. The other half being protected by normal protection means already applied).
- Fixed various PSP&MinGW compiler warnings.

So the IBM AT emulation is close to accurate(except Memory refresh and I/O BUS waitstates), with many bugfixes and improvements(at the cost of a bit of speed).

Happy emulation!


UniPCemu.apk 1 MB
14 days ago
UniPCemu_win32.zip 1 MB
14 days ago
UniPCemu_win64.zip 1 MB
14 days ago

Get UniPCemu

Leave a comment

Log in with your itch.io account to leave a comment.