UniPCemu build 2020/03/16 15:16 is now live!

It's been a while since the last update. This update adds various CPU bugfixes and some improved and new features. For the full list, look at the git repository, since it's way too many small changes to document here(567 commits).

The biggest changes (UniPCemu itself):

  • Various CPU improvements and bugfixes accross all emulated CPUs. Windows 95 RTM is now installing and booting without visible issues.
  • The CPU emulation has been optimized more, for up to 75% faster emulation(depending on the emulated system and host).
  • Various hardware improvements (ET4000 has been improved, as have all VGA and CGA/MDA graphics cards).
  • Floppy disk geometry can now be chosen for drives without a disk mounted in them (architecture-specific).
  • SVGA emulation now has B/W monitor conversion as well.
  • The license has been changed to GPLv3.
  • Greyscale has been optimized using precalculated values.
  • All CPU's are now usable with the Intel Inboard emulation.
  • Improved Amber monochrome color to be more accurate.
  • Saving settings now have a status indicator while saving the settings.
  • Improved ROM loading to load more ROMs correctly.
  • The PS/2 (Modern PC) architecture now uses it's own ROM set(optionally) and it's own settings.
  • Larger BIOS ROMs are now supported(depending on their loading location).
  • Improved (S)VGA and MDA line drawing character emulation to behave correctly.
  • MDA now uses more correct 9 pixel wide character cells.
  • Updated Android gradle to the lastest version.
  • RAM memory accesses have been greatly optimized.
  • Updated the common emulator framework to the latest commit.
  • Fixed XT using XT ROMs, even for Inboard 386 or Pentium CPUs.
  • Optimized video card emulation.
  • WHOLECLOCK becomes NEXTCLOCK in VGA timing dumps.
  • Greatly improved floppy disk controller emulation.
  • Improved ATA disk/ATAPI disc drive emulation.
  • Video card emulation now uses half clocks as it's base instead of whole clocks(required for Tseng chipset emulation).
  • CMOS saving and loading doesn't load and save the date/time data anymore. It's now using the time divergeance from actual time or Epoch instead.
  • Fixed PS/2 mouse reset overwriting wrong data in memory.
  • Improved portability on various CPU registers and structures for them.
  • Improved almost all ET4000 video modes to properly render unscaled in their SVGA modes and VGA modes.
  • Improved behaviour of unmapped ATA/ATAPI drives.
  • Unmapped ATA channels don't respond.
  • Improved SRST to always work when the controller is present.
  • Improved handling of present and non-present controllers and registers.
  • Improved IDE PCI BARs to be initialized properly.
  • Fixed Settings menu lists longer than 256 entries to no longer use an incorrect item number to change to when moving up or down the list.
  • Improved the mid memory hole to include a little more RAM for the full 16MB of RAM to be used on Compaq systems.
  • Improved Sound Blaster version detection for v1.0 and v2.0 cards.
  • Improved BIOS settings reporting of 1.5 and 1.0 sound blaster with regards to Game Blaster being enabled or not.
  • Improved Sound Blaster emulation.
  • Stop spinning the drive if ejecting the drive by software.
  • Improved handling of parallel interrupt line acnowledging and their IR reporting in the IRR. Now IR for parallel lines only sets for one cause at a time(and parallel lines take it into account).
  • Implemented Tseng 16-bit wide fonts.
  • Implemented ET4000 extended font width support.
  • Implemented the extended 7 dots/char and 6 dots/char modes according to the WhatVGA documentation.
  • Implemented 16-bit character codes according to the ET4000 manual.
  • Added debugger logging of the descriptor caches.
  • Made the DAC use text-compatibility mode when it's used in hi-color mode with text mode.
  • Implemented a BIOS setting to allow for the RALT key to not be pressed in the emulated system during Direct Input mode.
  • Made MMU memory sizes be architecture-specific instead of a global setting.
  • Improved serial modem emulation.
  • Implemented serial modem PnP.
  • Implemented Accent Grave to Tab and NUM0 to Delete remapping and a setting in the Settings menu.
  • Improved UART emulation.
  • Implemented UART mark state and it's handling by the serial modem.
  • Improved serial modem default settings.
  • Improved serial modem flow control.
  • Improved empty file lists to give a list with an unusable item containing an error message instead.
  • Implemented Sierra SC11487 DAC based on the WhatVGA documentation instead of the old Dosbox documentation-based DAC.
  • Improved Pentium real mode Code Segment behaviour, according to the information by rcollins.org' August 1998 article "The Segment Descriptor Cache".
  • SLIP server: all connected users can receive the packet that's received, not just the first client that accepts it.
  • Spaces in modem commands are now skipped and used.
  • Modem: Added echo of the linefeed following a carriage return(command completion) if it's sent after the carriage return only(even if the echo mode is disabled with the command).
  • Made the modem command mode wait for an additional linefeed up to 0.1 second until executing a command and ignoring the linefeed if one is sent.
  • Fixed UART loopback mode to read RTS and DTR from the Modem Control Register correctly.
  • Implemented the modem &Q0 through &Q6 commands(on effecting the CTS/DSR lines) and their CTS/DSR line affecting, mostly according to documentation.
  • Invalid Hayes modem phonebook SET/GET gives an error.
  • Made phonebook entries use the original case, during all of set, get and dial methods, instead of the uppercase only values.
  • Implemented basic modem ATI commands.
  • Implemented Hayes-compatible ATN commands.
  • Made the modem ignore the T and P commands(they're basic commands for selecting Tone and Pulse dialing respectively).
  • Unknown ATI results simply give OK, unless another command errors out.
  • Improved modem phonebook to have improved phonebook looping detection and handling of infinite looping to take proper "NO CARRIER" route instead of the "ERROR" route.
  • Added missing AT\N5 command.
  • Improved modem handling of ending commands without parameters to assume value 0 as the parameter and start a new command on said value(or End of Command line).
  • Real mode and V86 mode need to check against CS fetches and limits correctly.
  • Fixed 80486+ WBINVD disassembly.
  • Packet server: Implemented a protocol named "ipxslip" for IPX packets  encoded using the SLIP encoding.
  • Implemented the PPP protocol and it's encoding/decoding in the packet server. The PPP protocol uses an existing PPPOE connection server on the current network, otherwise it will fail.
  • Renamed modemconnect.scp to modemconnect.slip.scp because it's for the SLIP connection only.
  • Added modemconnect.ppp.scp for connection to the server using the PPP protocol.
  • Don't start an INT 18h when failing to load required BIOS ROMs. Instead, just put the CPU in a permanent HLT state(Equivalent of the instruction combination CLI followed by HLT).
  • Modified VGA 256-color shift mode and packed shift mode to process in parallel as much as possible.
  • Made the joysticks use their entire address space instead of just port 201h.
  • Improved joystick emulation.
  • Made the Sound Blaster Direct ADC recording method not use the sample rate that's set, but instead use a static sample rate of 1MHz.
  • Improved Sound Blaster Direct DAC sampling to constantly tick instead of just when recording or at the specified sample rate(now a 1MHz constant).
  • Always record sound at the emulated speed, not realtime.
  • Improved 80(1)86 GRP2 opcode timings to be more accurate.
  • Fixed the 80386+ GRP2 opcodes to be more accurate.
  • Fixed VGA write mode 2 only using the lower 4 bits of the written value.
  • 80486: Don't handle CPUID yet, until it's clear how to identify it.
  • DMA: Optimized Page Address Register by preshifting it for all transfers when it's written.
  • Improved floppy DSK sector read/write/format/ID reading to find the requested sector and verify it before reading/writing/formatting, instead of just assuming it's in ascending order for sector 1 to SPT without breaks.
  • Fixed formatting of DSK image files not to require CHS to be incrementing monotonically.
  • Improved the reporting of the floppy disk changed flag.
  • Improved floppy current(idea) vs physical cylinder when seeking during disk accesses.
  • Implemented missing Sound Blaster 2.0 commands.
  • Added more missing Sound Blaster DSP 2.01 commands.
  • Implemented Sound Blaster 2.0 DSP Status command.
  • Improved Sound Blaster 2.0 DMA emulation.
  • Improved top window CRT base to be more correctly setup.
  • The top window CRT base doesn't split onto the next screen. Instead just display the bottom window on the current screen.
  • Increased the amount of breakpoints to 5 breakpoints in parallel.
  • Improved advanced logging to log the previous CS:EIP, if CS changed.
  • Inhibit maskable interrupts only after POP/MOV setting SS while not already inhibiting interrupts for said instruction, instead of always inhibiting unconditionally.
  • Optimized memory holes by caching entire memory address ranges of 64-bits at once.
  • Improved NMI to be triggered from hardware, which sets a flag for the CPU(the actual NMI line).
  • Improved CPU initialization and reset to properly clear the previous execution state that was present, starting the execution state and CPU execution properly.
  • More generic floppy no media errors reporting has been implemented, with a proper read track results phase.
  • Floppy without media being accessed locks up the controller.
  • Improved Compaq memory reporting register to be more accurate.
  • Writing the DAC command register doesn't switch it back to PEL mode.
  • Optimized BIOS ROM accesses to have the highest priority among the memory mapping devices.
  • Optimized PIC IRR3 checking to not check when there's nothing to be done.
  • Memory addresses accessed are now cached on a 8 bytes sized cache, greatly improving speeds (both for CPU and DMA being seperated).
  • Improved floppy ST0 after reset.
  • Improved floppy reset register state.
  • Improved floppy IRQ line raising and lowering behaviour.
  • Made the floppy Read ID command spin the disc from the last read/write/formatted sector on the current track and head, instead of just giving a non-changing sector number.
  • Improved floppy format result with read-only disks.
  • Improved handling of CPU when starting an IRQ or NMI interrupt.
  • Added read-only detection for non-readonly disk images(disk images that are read-only but not marked in the settings as such).
  • Improved floppy write protection status updating.
  • Simplified loading and applying of VGA panning settings.
  • Implemented VGA split screen operation according to the FreeVGA documentation.
  • Don't apply VGA preset row scan when it's past the character height.
  • Made the sequencer use the proper pixel shift count from the top of the current window, instead of the current pixel shift count value that's loaded in the precalcs(and the registers).
  • Horizontal pixel panning of the VGA attribute register combines wrong pixels when set to an odd number in 8-bit mode.
  • Horizontal pixel panning doesn't use the attribute controller and it's latches.
  • Improved VGA undocumented horizontal pixel panning shifts.
  • Improved (S)VGA pixel panning to apply 9 dots/clock text mode special mode of the Horizontal Pixel Panning register instead of all 9 dots/clock modes.
  • Improved reloading of the VGA start address register to happen when starting vertical retrace.
  • Improved video card input status 0 and 1 register and vertical retrace interrupt support.
  • Improved (S)VGA DAC State register and it's effects.
  • Improved VGA attribute controller Palette Address Source(PAS) emulation.
  • Implemented VGA Sequencer register 7 triggering blanking on EGA/VGA graphics cards.
  • Improved handling of (S)VGA index registers to wrap properly.
  • Fixed EGA light pen registers to not write the Vertical Retrace registers when written.
  • Fixed the CRTC EVRA bit on EGA.
  • Fixed the read-only Light Pen registers to be properly applied on all video cards using it.
  • Improved EGA+ horizontal/vertical total applying.
  • Fixed CGA/MDA pixel rendering rate to be correct again.
  • Improved video increasing of the display signal's scanline and rendering scanline to happen when horizontal total is reached, not when horizontal retrace is reached.
  • CGA/MDA loads the start address at the effective vertical total, not when ending the vertical total's effect, so before updating the scanline counter's effective memory address.
  • Fixed EGA+ vertical retrace interrupt to behave properly.
  • The vertical interrupt flag that's raised is actually a hidden flipflop.
  • Improved EGA/VGA+ vertical retrace interrupt support.
  • ET4000 only allows changing bits 0-3 of the Extended start address register.
  • Improved ET4000 8/16-bit color modes to be handled better.
  • Floppy seek command sets a new head to be active.
  • Improved floppy drive selection according to Bochs for various commands when starting up.
  • Floppy recalibrate behaves just like a seek command when already on track 0.
  • Made a FDC reset stop all timers and DMA transfers as well.
  • Implemented missing floppy Read ID command MFM bit emulation.
  • Improved IBM XT BUS waitstates.
  • Improved prefetch cycles delaying the EU from starting again.
  • Wait for the BIU to finish before starting a new instruction.
  • Improved 808X IN/OUT instruction timing with delays of 1 cycle and 2 cycle BIU idle state following it(for non-DX parameters only).
  • Improved CGA/MDA VRAM MMU mode changes to refresh the RAM without CPU timing.
  • Improved 808X 16-bit INC/DEC timings.
  • Improved Jcc 808X timings.
  • Improved 808X opcode E8 CALL, E9 JMP 808X timings.
  • Improved basic ALU instruction timings to be more accurate.
  • Fixed the CGA/MDA memory mode code to properly clear VRAM completely when changing modes, writing the shadow RAM back to VRAM properly after clearing it.
  • Resolved various Visual C++ compiler warnings.
  • Updated SDL2 to the latest commit.
  • SDL2 is now updated to version 2.0.12.

Common emulator framework updates:

  • Improved automatic regeneration of versioning and required files to be compiled based on that.
  • Changed the common emulator framework license to GPLv3.
  • Fixed double floating point dB conversion to work properly using the correct multiplier.
  • Improved RDP state changing to update the GPU textures.
  • Removed invalid GPU locks.
  • Seperated the GPU 8x8 font from the rest of the emulator-specific fonts.
  • Added an Input setting for disabling RALT from being pressed in Direct Input mode.
  • Input: Made accent grave to tab remapping become independent of the RCTRL being pressed or not(allowing stuff like Alt-Tab using this as well).
  • Added NUM0 to Delete remapping support.
  • Modified Accent Grave to Tab remapping to only apply when LALT is pressed.
  • Fixed Client deallocation issue on failed TCP data sending.
  • Improved TCP client connection to cleanup better when failing to allocate structures.
  • Fixed MinGW compiler warnings on the tColorRGBA type definition being used for resizing SDL surfaces.
  • Improved handling and updating of Joysticks to apply always, not just when in Gaming mode with Joystick support(just no input for the joystick otherwise).
  • Improved Logitech Wingman Extreme Digital mapping.
  • Record audio at the emulated speed instead of realtime speed.
  • Fixed fixed negative vertical precise mouse movement to apply the slowdown to the y axis instead of the incorrect x axis.
  • Fixed Windows/Linux/Android platform Makefiles to handle the git reference correctly.
  • Fixed 64-bit file open to properly detect the file size on SDL 1.2 on non-PSP platforms.
  • Resolved various compiler warnings.

In other words:

  • Windows 95 RTM can now be installed and run on UniPCemu.
  • Compiling on Linux can now be done by compiling on the target machine. Simply use the configure script for it (see the repository's README.md file).


UniPCemu.apk 4 MB
Mar 16, 2020
UniPCemu_win64.zip 1 MB
Mar 16, 2020
UniPCemu_win64server.zip 1 MB
Mar 16, 2020
UniPCemu_win32.zip 1 MB
Mar 16, 2020
UniPCemu_win32server.zip 1 MB
Mar 16, 2020
UniPCemu_PSP.zip 891 kB
Mar 16, 2020

Get UniPCemu

Leave a comment

Log in with itch.io to leave a comment.