UniPCemu build 2018/11/16 09:35 is now live!

The latest updates for UniPCemu are now available on itch.io! These include CPU improvements, various hardware improvements and emulator speed optimizations. Also 16-bit protected mode has been improved to be way more accurate! The 8086/8088 has also been improved with more cycle-accurate timings.

Common emulator framework updates:

  • Improved CPU speed display to no longer display 1% when running between 0-1%.
  • Improved GPU speed display to become red when truly 0%.
  • Fixed static framerate item duplicate.
  • Fixed framerate module comment.
  • Improved hanging CPU detection when reading the CPU speed.
  • Improved active/inactive CPU speed to be darker colors. - Optimized sign conversions to process faster.

UniPCemu updates:

  • Updated the common emulator framework to the latest commit.
  • Optimized modrm REG reading to be precalculated for an opcode.
  • Removed modrm EA calculation for the base EA address(already implemented within the modr/m handling).
  • Made relative and absolute EIP loads proper 32-bit when required casting.
  • Fixed settings menu CPU selection initial item detection.
  • Added support for oddly sized floppy disks, generating some default geometry information to use for it.
  • Improved floppy geometry detection.
  • Fixed floppy invalid geometry crash and no floppy geometry being available.
  • Fixed BT* timings to not double it's own EU cycles executed.
  • Improved ARPL timings to be more accurate with writeback.
  • Improved protection on JMP to gates to be properly check the privilege level.
  • Implemented cycle-accurate MUL.
  • Fixed x86 MUL to act as documented.
  • Fixed signed multiplication.
  • Applied cycle-accurate multiplication to all 808X multiplication instructions.
  • Implemented a more cycle-accurate version of the 8086 DIV instruction(still has errors).
  • Slightly improved IDIV.
  • Divide starts out with carry.
  • Fixed 808X header.
  • Improved (I)DIV divisor wrapping.
  • Fixed negative quotient detection.
  • Fixed signed division overflow.
  • Made the Android compiler happy.
  • Implemented AAD cycle accurate timing using MUL.
  • Disabled old (doubled) div/mul cycles calculations.
  • Modified 808X generic support function EU timings based on Reenigne's findings.
  • Modified most basic 808X instruction timings based on Reenigne's findings.
  • Modified the remaining 808X opcode timings based on Reenigne's findings.
  • Added missing cycle.
  • Added missing REP cycles.
  • Added remainder of REP timings.
  • Adjusted CMP cycles to be according to Reenigne's findings.
  • Fixed JMP gated access to be simplified.
  • Improved privilege level checking for data/system and (non-)conforming code segment descriptors.
  • Fixed typo causing compiler errors.
  • Fixed protection code.
  • Fixed privilege level conditions.
  • Don't activate the BUS and tick the BIU when faulting on prefetch: nothing can be transferred in that case.
  • Removed duplicate privilege level check.
  • Lowering CPL on RETF is already done in the segmentWritten function.
  • Cleaned up the protection segment loading code.
  • Moved the present check up: all other bits are invalid when not present.
  • Fixed invalid descriptor check to throw the right error code.
  • Improved VERR and VERW descriptor checking behaviour.
  • Improved and fixed VERR and VERW.
  • Fixed breakpoint triggering on Protected-mode hardware interrupts.
  • Improved breakpoints to work as earlier, but improved conditions.
  • Added missing definition of getLoadedTYPE.
  • Updated the Android Studio project to the latest version.
  • Fixed roof segment descriptor precalcs.
  • Implemented Task breakpoints and CR3 breakpoints.
  • Fixed new code errors.
  • Fixed new settings menu labels.
  • Added missing settings menu debugger case statements.
  • Fixed unassigned new debugger options in the settings menu.
  • Improved zero-extending limit and base precalcs.
  • Fixed CR3 breakpoints.
  • Fixed the CR3 breakpoint to use it's own breakpoint correctly, instead of overwriting the task breakpoint.
  • Fixed CR3 breakpoint address loading.
  • Removed unused variables and labels.
  • Task switches are non-reentrant. Improved clearing old TSS descriptor's busy bit.
  • IRET task switches must allow returning to busy tasks(required).
  • Improved IRET TSS faults.
  • Fixed 16-bit TSS loading.
  • Fixed BIOS settings menu screen clearing to clear the entire screen properly.
  • Fixed advanced log setting loading from the correct section.
  • Improved volume doubling on OPL2/adlib.
  • Improved OPL2 percussion.
  • Fixed OPL2 missing key on for percussion instrument pairs.
  • Completed basic CMOS register map.
  • Added missing interrupt privilege level change timings.
  • Removed various todo comments, as they're resolved.
  • Removed unused variable.
  • Adjusted 10-bit phase to be corrected.
  • Removed unused operator calculation during Hi-hat sample generating.
  • Fixed OPL2 RNG.
  • Added support for a direct value as the source of the phase of a OPL2 signal.
  • Improved OPL2 percussion phase calculation.
  • Improved OPL2 channel volume.
  • Improved DR0 player time display.
  • Fixed Task register loading faulting when using the LDT instead of using a requester privilege level of 2 or 3.
  • Optimized paging ages to only update when writing new entries and when accessing memory using the entry.
  • Optimized Paging aging.
  • Optimized Paging TLB reads.
  • Optimized ModR/M decoding when not requiring debugger information.
  • Optimized paging tag generation.
  • Unlocked the 8042 output buffer.
  • Optimized segment descriptor rights precalcs to be precalculated during the emulator being initialized only.
  • Fixed segment descriptor precalcs to run correctly.
  • Optimized paging using inlining and algorithmic privilege level detection.
  • Improved modem quick dial to properly execute a dial command.
  • Protected against infinitely recursive dials.
  • Improved PIC.
  • Updated required SDK version.
  • Improved PIC shared interrupt handling.
  • PIC IRR now also pends shared raised and lowered interrupts correctly.
  • Fixed PIC compiler issues.
  • Fixed Sound Blaster IRQ being parallel correctly.
  • Optimized debugging instruction disassembly to only be set once.
  • Fixed missing debugger variable.
  • Improved initialization of CR0 on all processors.
  • Improved CR0 on 80486 to keep bits 30/29 as documented.
  • Improved writing of CR0 to only keep and set documented bits of CR0 as documented on 80386 and 80486 processors.
  • Improved differentiating between INIT and RESET signals(INIT only during emulator startup).
  • Fixed compiler warnings.

Various MS-DOS extenders are now running correctly(like Dos/4G and related variants). That means that many 286/386+ games that use them can now run.


UniPCemu.apk 3 MB
Nov 16, 2018
UniPCemu_PSP.zip 828 kB
Nov 16, 2018
UniPCemu_win64.zip 1 MB
Nov 16, 2018
UniPCemu_win64server.zip 1 MB
Nov 16, 2018
UniPCemu_win32.zip 1,004 kB
Nov 16, 2018
UniPCemu_win32server.zip 1 MB
Nov 16, 2018

Get UniPCemu

Leave a comment

Log in with itch.io to leave a comment.