UniPCemu emulator releases

Schedules and announcements about program releases.

UniPCemu emulator releases

Postby superfury » 2016-7-27 @ 19:09

I've been working on getting some bugs fixed, but here it finally is: The first version of UniPCemu(previously named x86EMU), which stands for Universal PC emulator!

UniPCemu build 2016/07/27 20:42
(769.33 KiB) Downloaded 68 times

Code: Select all
- Changed emulator name to UniPCemu.
- Changed settings file from BIOS.DAT to SETTINGS.DAT(which is fully compatible with the old BIOS.DAT file).
- Changed BIOS Settings menu to plain Settings menu, since it doesn't only apply to normal BIOS settings, but emulator settings as well.
- Changed Pascal files to match the new name.
- Softdebugger interface has been changed to use a new identifier string(starting with COMMAND:SFHB_UniPCemu) instead of the old identifier string (COMMAND:SFHB_x86EMU).
- SDL2 rendering has been improved and optimized.
- Visual Studio support has been cleaned up and renamed.
- Fixed a bug making the emulator stop rendering anything to the window.
- Added a Linux makefile for compiling on Linux(untested), based on the Windows makefile.
- Changed the paths the emulator searches for disks, music and soundfonts. It now searches for those files in the "disks", "music" and "soundfonts" subfolders instead.
- Reenabled PC speaker and MIDI testing routines (when using the Sound testing functionality).

The repository itself can be found at(for compiling for Linux or PSP) it's new location:
Last edited by superfury on 2017-8-31 @ 08:35, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-7-28 @ 16:45

My latest UniPCemu build:
UniPCemu build 2016/07/28 18:39
(769.21 KiB) Downloaded 27 times

Code: Select all
- Fixed VGA vs SVGA detection needing redetection of (S)VGA memory.
- Optimized text rendering.
- Fixed Windows ALT-F4 and RALT-F4 handling crashing the application and terminating the application when not supposed to.
- Added better locks on window events.
- Improved joystick cleanup.
- Removed manual handling of SDL_QUIT event being pushed, instead jumping straight to the relevant code.
- Optimized CMOS year calculations.
- Fixed adlib octave size warnings.
- Fixed joystick packet size warnings.
- Fixed ET4000 protection warnings.
- Fixed VGA precalcs missing return statement, resolving warnings(although never reached).
- Optimized text rendering.
- Optimized key releasing.
- Optimized epoch time retrieval on Windows platform.
Last edited by superfury on 2017-8-31 @ 08:35, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-8-06 @ 15:13

The latest UniPCemu build:
UniPCemu build 2016/08/06 16:24
(776.33 KiB) Downloaded 30 times

Code: Select all
- Optimized various parts of the emulator.
- Implemented Game Blaster emulation(based on Dosbox SVN information).
- Fixed releasing keys in SDL2 builds, it won't end up with stuck keys anymore.
- Fixed various hardware responding to too many I/O port addresses due to the port address being filtered too much.
- Fixed input mapping bug.
- Fixed default Sound Source volume.
- Moved audio rendering to the main thread instead of the audio thread for improved audio response.
- Fixed MID playback bug hanging the emulator when the emulator is terminated while a file is playing.
- Disabled many MIDI locks locking audio resources for a significant sound emulation speedup.
Last edited by superfury on 2017-8-31 @ 08:36, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-8-18 @ 13:05

My latest UniPCemu build:
UniPCemu build 2016/08/18 14:06
(787.61 KiB) Downloaded 22 times

Code: Select all
- Added Sound Blaster 1.5, as well as Sound Blaster 2.0 emulation, partially based on Dosbox(the ADPCM decompression functions), but with improvements and accuracy.
- Sound Blaster emulation now automatically enables Adlib and MPU emulation. If no soundfont is specified, the Sound Blaster won't emulate(since it requires MPU-401 support for it's Soundfont emulation, as well as MIDI output).
- Added 286+ double and triple faulting support.
- Added slightly more 286+ multitasking support, although no interrupts nor task switching itself is implemented yet(nor usable yet, due to unemulated 286+ instructions).
- Extended the Programmable Interrupt Controller to handle shared IRQs(for the Sound Blaster and other devices to share IRQ5).
- Improved Single-cycle DMA for the Sound Blaster to work.
- Game Blaster is now 100% Sound Blaster compatible, with the high ports (past 3X4 disabled) when Sound Blaster emulation is active.
- Fixed OPL2 compiler warnings.
- Improved performance by removing unneeded locks.
- The emulator now supports an On-Screen Keyboard(OSK). Click/tap(Android) on the input status indicator(saying K(eyboard),M(ouse),D(irect),G(aming) or O(nscreen Keyboard) to active and deactivate the OSK. When the Finger OSK is disabled, clicking on the left third of the screen clicks the left mouse button in emulation, the right third does the same to the right mouse button. The top middle third handles the middle mouse button(currently unsupported in the emulated mouse). The rest(middle center and middle bottom thirds) of the screen can be used on touch-devices to move the mouse, as it isn't mapped to any buttons, just to movement of the virtual mouse. When the BIOS Settings menu is opened a glowing O will appear to indicate an active OSK, a non-glowing O is just be the button to activate the OSK.
- The PIC has been moved to initialize earlier to fix registration of channels used.
- Fixed bug that caused the event filter to handle too many events, resulting in a deadlock when the Direct Input mode is used with the Middle mouse button.
- Optimized sound rendering by using more efficient integer algorithms.
- Optimized FIFO buffers to work more efficiently.
- Added support for compilation for Android devices, together with a BIOS Setting option for Android builds to switch between using the Internal SD vs External SD storage medium(this is now auto-detected by checking the location of the SETTINGS.DAT settings file).

The Finger OSK can be used to replace normal keyboard input, just like normal keyboard input, with both mouse and touch support in normal modes(non Direct-Input modes). Direct input modes only support touch, since the mouse is directly mapped to input, and thus is unusable by the mouse.

The Sound Blaster emulation has been tested with various applications: Wolfenstein 3D, 8088 corruption, 8088flex and the original Sound Blaster 2.0 floppy disks samples. Sound Blaster DSP MIDI isn't working atm, the cause is currently unknown, although it's mapped to give it's output to the emulated MPU-401 and MIDI device emulation.
Last edited by superfury on 2017-8-31 @ 08:36, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-8-19 @ 18:55

A little update containing a big Settings bugfix, as well as a new Turbo mode for 8086 emulation:
UniPCemu build 2016/08/19 20:37
(788 KiB) Downloaded 28 times

Code: Select all
- Implemented Turbo XT BIOS Turbo functionality, speeding up the CPU to ~10MHz(Default setting) or the specified speed in the Settings.
- Fixed Settings checksum calculations. This makes the new SETTINGS.DAT checksum compatible with original versions before the bug(post-CRC32 method) and the format upwards compatible again. It used to make a checksum of the first byte multiplied by the entire SETTINGS.DAT data size, instead of all bytes in the file. This bug can be fixed manually by adding all bytes after the first four bytes together and storing it in the first four bytes(32-bit Little-Endian value). This bug has been present in all versions since 2015/10/19, commit https://bitbucket.org/superfury/unipcemu/commits/8845719d55205b2686312eaaacfb2f6a17bb3c00 , which changed from the CRC32 checksum to a (should have been) upwards compatible BIOS using a simple checksum. The post-increment was missing until now, creating this bug with incompatible upgraded (BIOS) settings ever since(Since BIOS version 2. Currently it's version 8 ).
Last edited by superfury on 2017-8-31 @ 08:36, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-9-07 @ 14:04

My latest UniPCemu build:
UniPCemu build 2016/09/07 15:28
(797.56 KiB) Downloaded 42 times

Code: Select all
- Fixed a bug in the MIDI device notes size, causing overflow problems.
- Fixed disk, soundfont and music path sizes.
- Improved MIDI audio locking and feedback.
- Added Finger OSK visual feedback by toggling border and active border color.
- Removed invalid input initialization from the main function: it caused double initialization of the input. This is now only executed once, as required.
- Fixed and optimized IO module
- Added default Game Blaster volume
- Moved all default Settings values to bios.h to apply it in the Settings menu
- Made all specified default settings of Settings apply to the Settings menu defaults as well. This makes the Settings menu apply Settings defaults of the emulator when the Default button is used(PSP Triangle) on all lists supporting it.
- Fixed Blaster volume defaulting to 100%.
- The clickable text input is now more precise: it now won't respond anymore when empty characters (like space or background) is clicked.
- Added a constant 14MHz clock for different hardware to use(decreasing individual timing calculation using microseconds passed). Most hardware now use this timing, to improve performance.
- Fixed Game Blaster sample rate to ue a proper division of 2 to get the chip's rate, which is further divided by 256 for the sampling rate
- Optimized GPU text rendering. This is now much faster.
- Optimized Adlib rendering by precalculating Tremolo/Vibrato values.
- Added PCI configuration change handler support.
- Changed IDE ATA device to Force it's Interrupt line to 0xFF, meaning no assignment(unused with PATA devices).
- Fixed a bug causing text surfaces to draw too much memory and skipping drawing input.
- Added support for a case-insensitive "nosound" parameter. When issued, this disables the sound initialization, termination and rendering functionality. This allows systems without sound output to work correctly. Simply give the application the "nosound" parameter to disable any sound rendering and recording(e.g. executing "UniPCemu.exe nosound" from the command prompt or shortcut).
- Fixed SDL and SDL2 high resolution timer wrapping around 32-bits instead of 64-bits.
- Made audio be able to run when the CPU is at the 1 cycles setting, by increasing the shared double-buffers to be able to buffer a full second of audio.
- Fixed a bug causing the sound module to write over invalid memory when requesting an absurd amount of samples to be generated.
- Fixed various paths used for different files in the emulator.
- Fixed Dynamic image creation path.
- Fixed Static and Floppy disk image creation paths.
- Fixed converting image creating of paths.
- Fixed VGA data dumping paths.
- Fixed initial log and BMP clearing paths.
- Fixed ISO boot disk creation paths.
- Fixed GPU not clearing the screen (for text surface rendering) when no resized surface is available.
- Reorganized the OSK.
- Modified the OSK to increase the clickable area to 1 more row and column, to use bigger buttons. Also added clickable area sizes that area determined when the OSK is shown.
- Fixed VGA Timer initialization requiring an active VGA to be set.
- Optimized GPU to only try and render frames that are actually dirty.
- Increased text surface performance by letting it process the entire character row fonts at once, then render the pixels to the dirty display based on the newly rendered character row fonts.
- Fixed DRO player not responding to the termination of the emulator.
- Added Sound Blaster recording of the current recorded sample, at automatic rate quality, if it's supported by SDL2. The emulator is currently supplied with SDL 2.0.4. Use the current version from the SVN to enable recording functionality in UniPCemu. Simply grab the latest SDL2.dll from https://buildbot.libsdl.org/sdl-builds/sdl-visualstudio/?C=M;O=D . It can be found at SDL/lib/win32 within the latest archive. Simply replace UniPCemu's SDL2.dll with it to enable the recording functionality.
- UniPCemu now has icons added to it's executable and windows etc.
- Added a Settings menu option to disable the Turbo CPU functionality completely.
- Optimized the VGA rendering.
Last edited by superfury on 2017-8-31 @ 08:37, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-12-15 @ 19:45

I figured that since the last release of UniPCemu was some time (more than 3 months) ago, I'll release the latest version(although the new 80286 CPU still has some slight unfindable problems, even though it's base(the 80(1)86 is working without problems. The only problems found so far are with Prince of Persia running with the MPU-401 MIDI enabled and used).

UniPCemu build 2016/12/15 19:44
(871.69 KiB) Downloaded 16 times

Code: Select all
- Optimized the VGA rendering.
- The 80286 CPU as well as the rest of the IBM AT is now almost fully emulated with cycle-accurate emulation(only privilege changes are not fully implemented yet). It boots with only problems on the Floppy disk controller and Keyboard controller(can be ignored by pressing F1 to continue on the IBM AT BIOS. It runs at 8MHz by default(rev 3 IBM AT BIOS)).
- POP SS now properly inhabits interrupts on all CPUs.
- Added missing 8086/8088 SALC debugger text.
- Seperated general BIOSROM.BIN from BIOSROM.XT.BIN ROMs. Now BIOSROM.BIN overrides BIOSROM.XT.BIN, while BIOSROM.XT.BIN is only loaded on XT settings (80(1)86/88 CPUs).
- Fixed CMOS locking problems.
- Added IBM PC AT Diagnostics port output to the PPI hardware.
- Added an Diagnostics port display to the CPU Settings menu(Square enables a debugger breakpoint at the current value, Choosing it sets a custom value(while triangle/Numpad 8 clears the breakpoint when selecting a new breakpoint value)).
- The System Control Port B now fully toggles the PIT output bits.
- Fixed the debugger hanging the emulator when it's quitting while debugging.
- Removed the 80286 unfinished information: it's fully implemented now.
- Fixed Settings menu reboot during debugging.
- Added missing DMA page buffer at address 80h.
- Added support for a BIOSROM.AT.BIN ROM to be used with AT systems, besides a general overruling BIOSROM.BIN.
- Optimized the debugger. It now won't start a thread for every instruction executed, only when not skipping. It only will update the screen when required, giving it a bigger speedup.
- Added a Settings menu debugger log option to log POST Diagnostic Codes only.
- Added a proper timeout setting for POST Diagnostic code breakpoints. This can be from the first instruction up to 4G instructions.
- Improved NMI and related behaviour on XT and AT.
- Improved debugger, using 16-bits protected and virtual 8086 mode(except virtual 8086 flags).
- IRQs now handle more accurately by responding to raising and lowering of it's Interrupt Request signals(raising the signal(Edge-triggered) triggers IRQs now).
- Added support to the debugger to run until a REP instruction is finished, otherwise run until the instruction following it is reached, when the square option(skip REP instruction / run until next instruction) is used.
- Optimized the debugger by checking for a verification file when the emulation is initialized.
- Fixed PPI not clearing it's bits as requested on invalid memory and I/O errors.
- Implemented memory support for both low (below 1MB) and high (below 16MB) memory holes.
- Implemented PIT read back command.
- Fixed PIT timers and various modes, completing the PIT emulation.
- Improved PIT latching behaviour.
- Fixed some OPL2(adlib sound card) bugs, making it more accurate.
- Fully upgraded the PIT to the 8254 chip for full PC XT&AT compatibility.
- Added an extended information field to the header to support lists for newly createn dynamic disk images(.sfdimg disk images).
- Applied the suggested patches to the adlib sound card emulation for releasing keys. This makes the Adlib emulation more accurate.
- Added XT and AT-specific memory block sizes (16KB and 64KB).
- Reimplemented BIOS memory reallocation option. It now forces a reboot and resets memory for redetection upon restart.
- Improved modr/m 16-bit decoding offset wrapping.
Optimized VGA text mode.
- Optimized PIT rendering.
- Optimized VGA blank/retrace checks.
- Optimized VGA block processing.
- Optimized protected mode checks.
- Improved IBM PC AT memory autoalign: it will now simply align the used memory to 64K when needed. Otherwise(with no memory, less than 64K), it will be redetected(as it's zeroed).
- Fixed MOVs to segment register bugs on 80186.
- Implemented IBM XT Diagnostics port.
- Improved PS/2 mouse and keyboard.
- Improved the 8042 microcontroller emulation, with timed keyboard and mouse responses which are more accurate.
- Fixed 80(1)86 Far return and Far CALL instructions.
- Fixed PS/2 keyboard translation required on XT systems.
- Improved UART timing by adding a general shared clock at the documented frequency.
- Improved Serial mouse with proper power, reset and movement detection.
- Added missing (E)IP loading of the current address when CS might be loaded with a new value during modr/m segment writes, 16-bit MOVs into CS and LDS/LES segment loading.
- Improved Serial mouse packets with better movement bits and clipping of movement to it's limits and full 8-bit resolution(instead of the earlier 7-bit numbers).
- Improved 80(1)86+ CALL and RETF instructions.
- XT vs AT vs PS/2 architecture can now be selected using the new Settings menu option(PS/2 only adds the PS/2 mouse port to the AT architecture).
- Modified EMS memory to be used only on XT architectures.
- The 80386 CPU now enforces AT/PS/2 architecture (it won't run on XT architectures). The 80286 can run on a XT.
- The selected architecture now also loads either XT ROMS or AT ROMs, depending on the selected architecture in the settings, instead of basing on the CPU.
- Implemented a simple ICEBP instruction on 286+ processors.
- Optimized MIDI playback using the MIDI player and normal emulation of the MIDI synthesizer.
- Added support for a general XT 286 BIOS ROM (BIOSROM.XT286.BIN) as well as split odd/even ROMs (u34/u35), instead of the usual u18/u19 ROMs.
- Improved the debug directory execution mode to use the folders in the ROM directory, as it's actually loaded as BIOS ROMs.
- Made the debugger independant of the main thread, instead just locking the CPU itself(being able to be used both on the main and Settings thread(during verification ROMs)).
- Fixed debug files terminating the emulator.
- Fixed terminating the emulator during Settings or BIOS menu delay.
- Optimized audio response during normal and paused(during Music player playing music) playback.
- Improved floppy disk emulation. This now also uses timed input and output accordingly(only disk seeks are currently timed).
- Removed unneeded entry in the CPU NEC V30 opcode jumptable.
- Made 8042 output perform timed output (12 clocks to send, 11 clocks to receive) at a 16.7kHz frequency.
- Applied proper 8042 scan code translation, basic on Bochs information and a lookup table from https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html
- Fixed Keyboard scancode set results to be untranslated properly.
- Fixed default scancode set being 2 instead of 3.
- Modified the keyboard input to process actual emulated time instead of actual time passed (fixed bug with the BIOS updating huge amounts of time).
- Made the IDE harddisk be able to lower it's IRQ line always.
- Fully implemented ATAPI-4 revision 2.6 CD-ROM emulation on the ATA controller emulation.
- Implemented XT vs AT specific ROM options by specifying *.[XT/AT].number.BIN or adding .XT before the .BIN extension with Graphics Adapter ROMs.
- Improved ATA emulation.
- Implemented support to prevent medium removal when requested by software(ATAPI Prevent/Allow Medium Removal command).
- Limited HDD generation to 2TB, since this is the hard limit currently imposed on sfdimg disk images.
- Implemented ISO track selection support (ISO CD-ROM images only supports one track).
- Fixed ATA no error.
- Improved ATA-1 HDD and ATAPI/ATA-4 drive parameters.
- Implemented missing 80186+ REP processing for INSB/W and OUTSB/W instructions.
- Improved CMOS emulation.
- Improved emulator-based single stepping using the debugger: when a breakpoint is triggered, it will use forced breakpoint until the instruction has been confirmed using triangle or cross. When debugging the next instruction, normal settings apply again, allowing the user to use normal debugger settings from that point on (using LTRIGGER and RTRIGGER debugger toggles normally as defined by the emulator Settings).
- Fixed the CMOS chips don't exist on IBM PC XT systems.
- Improved CMOS timing, making it cycle accurate.
- Disabled the XT RTC chip on AT systems.
- The CMOS timing now is based on a 64kHz square wave signal, allowing for all possible frequencies to be used.
- Fixed immediate words being immediate words instead of immediate word truncated to bytes(NEC V30+).
- Improved the debugger with all new registers.
- Compacted 16 and 32-bit debugger registers on display and logging.
- Fixed 32-bit and 16-bit memory coordinates of the debugger
- Implemented logging of the control and debugger registers, as well as the new Reset flag(indicating the CPU has been reset).
- Added logging of trap and hardware interrupts to the debugger logging.
- Added support to stop CPU emulation when the 8042 permanently enables the reset line.
- Added debugger support for the new CPU deadlock. It will now show * to indicate that the CPU has been stopped permanently.
- When the CPU is held reset, interrupts won't be fired anymore.
- Chorus and Reverb effects have been implemented into the MIDI Synthesizer.
- Improved sound playback from the Settings menu by disabling VGA rendering when playing back sound.
- Fixed reversed type comversion on CPU 16-bit PUSH instructions.
- BOUND instruction has been improved.
- Fixed x86 stack readability/writeability checks
- Fixed the wrong segment and index register used with INS/OUTS instructions.
- Fixed NECV20/V30 BOUND instruction timings with it's correct values(correct parameter handling).
- Fixed floppy READ ID command crashing without a floppy inserted, which has no geometry.
- Fixed instruction fetches registering as instruction fetches instead of normal memory fetches.
- The PIC now processes parallel IR lines, so that more than one device can share the same Interrupt Request line.
- The PIC now better handles the resulting interrupt when the second PIC handles it's data(Redirecting to IR15 instead of IR7).
- Implemented invalid modr/m unknown opcode exception.
- Changed the default floppy disk type to 1.2MB for AT systems.
- Updated the floppy disk to never raise Not Ready.
- Invalid track during seek operations now reports success with ST2 cleared.
- Modified floppy Interrupt Request line to be lowered on write to the data port.
- Applied the floppy DOR register to IRQs as well.
- Optimized floppy Locked and NDM check.
- Seeking to invalid tracks now raises an IRQ as well.
- Improved floppy seeking routines.
- Made Sense Drive Status set the selected drive's head.
- Optimized text rendering.
- Improved 8042 and PS/2 hardware.
- Applied the 80286+ stack address size to the stack push/pop checks.
- Modified BIOS ROMs to allow any size, with u18/19, u34/u35 and u27/u27 chips size total determining the start address in memory.
- Optimized the VGA emulation.
- Made CS loads always flush the prefetch queue, no matter what actually happens during the load.
- Made IP loads during coprocessor opcodes flush the PIQ.
- Implemented improved 8086 and 8088 IN/OUT timing.
- Moved the MIDI player to the main thread to improve performance.
- Implemented Sierra 16-bit Hi-color DAC on the ET3000/ET4000 SVGA cards.
- Improved and seperated ET4000 banking and memory modes from ET3000 banking and memory modes, as they're working differently.
- Fixed loading of type-2(Multiple type-0) MID(I) files.
- Improved and fixed the ET3000 and ET4000 graphics card emulation to work better.
- UniPCemu is now Big-Endian compatible and can be built for Windows x64 as well!
- Implemented UHD-1 4K display aspect ratio option and rendering support. Also added the option to the Settings menu aspect ratio options.
- Improved 8086 (I)MUL instructions according to documentation.
- Fixed 80186+ IMUL instruction needing to be signed.
- Improved naming conventions on debugger IMUL and PUSH instructions on 80186+ CPUs.
- Improved 80186+ IMUL instruction debugger text and processing.
- Renamed emulator exection mode "Normal operations" to "Use emulator internal BIOS".
- Added two Settings menu options for specifying 1kHz cycles per second for non-default (Turbo) CPU timings.
- Improved timings to use with non-Turbo and Turbo CPU speeds, with simplified lookup.
- Added support for floppy disk timing accuracy with fully implemented floppy disk timing tables.
- Implemented floppy RPM.
- Implemented automatic geometry information generation for DSK images.
- Updated UniPCemu to use the latest SDL2 2.0.5.
- Fixed screen capture row pitch in pixels, fixing screen capture support.
- Fixed 80286+ PUSH SP behaviour for proper detection of the CPU.
- The rerouting of IR9 to IR2 is done by software, not hardware. This happens on IBM AT with 2 PICs only.
- Fixed the start index of faulty sector copying during disk being reported with a base of 1 instead of 0.
- Fixed reading multiple sectors worth of data from disk images using the I/O handler. This also fixes the disk conversion and defragmenting errors.
- Fixed debugging text having priority over protection faults. This now generates proper debugger information, instead of giving undefined information on GRP opcode exceptions due to protection faults.
- Optimized high and low pass audio filters.
- Fixed the emulator crashing when starting or stopping recording in the Settings Menu.
- Implemented backtrace of fifo buffers to implement the sample speedup history buffer(to implement MIDI aftertouch history for reverb&chorus effects, at the cost of a little bit more memory).
- Added support for always logging from the debugger without logging the register state for every instruction(register state and other states are omitted from the log).
- Optimized MIDI sampling by converting factor to cents.
- Improved general volume formula by the recommended MIDI formula.
- Added an option to the Settings menu to render MIDI using the OS(Only Windows is supported currently).
- Fixed MIDI reset clearing variables, destroying buffers in the process(by removing their references).
- Made the MPU-401 use different IRQs on XT(IR2) and AT&PS/2(IR9) architectures.
- Implemented shared IRQ5 on the XT IDE controllers(Shared with the UART. It uses the normal IR14/IR15 on the AT).
- Disabled all interrupts by default(when emulation is started) by setting the Interrupt Mask Register(s) to mask interrupts off.
- Made the MIDI active sense lock the main thread correctly.
- Moved the MPU-401's timing to the main thread to prevent timing issues and multithread corruption.
- Fixed missing IR4 registration of the COM1/3 serial ports.
- Split sound high and low pass filters into a type definition containing all used values and precalcs to be used by all hardware implementing it.
- Optimized the new Sound filtering.
- Optimized MIDI low pass filtering, by only changing the sound filter when changing the low-pass frequency.
- Fixed reading 16/32-bits of CPU fetching parameter data from the buffer on big endian machines.
- Improved the FIFO buffer to apply endianness conversion during word and dword reads and writes(always storing it as little-endian values for compatiblity).

Or, in short(big updates):
Code: Select all
- Many bugfixes.
- Optimizations have been done.
- The MIDI synthesizer now supports Chorus and Reverb effects.
- The Serial port mouse(XT only) now works better.
- The IBM AT is now emulated.
- Interrupt Request 9 vs 2 has been fixed.
- Disk handling has been improved and fixed.
- SDL is updated to SDL2 2.0.5.
- 80(1)86 emulation has been improved and fixed various problems.
- Rendering is optimized.
- Volume control is improved on all hardware.
- Floppy emulation is now more accurate.
- UniPCemu is Big-Endian compatible now.
- Cycles can be specified as 1kHz cycles or Instructions per Millisecond(Dosbox-style).
- ET3000/ET4000 emulation has been improved and the Sierra Hi-color DAC is now emulated.
- The original emulation mode(Using it's own internal BIOS) has been renamed.
- CPU reset is now fully emulated.
- CMOS emulation has been improved on the AT(AT only, different chip is emulated on the XT(XT RTC used by TIMER.COM)).
- CD-ROM using the ATAPI-4 protocol is now fully emulated.
- XT/AT/PS/2 architectures can now be selected.
- Breakpoints can now be set for different Diagnostics Port 60h(XT)/80h(AT) writes, with it's value being displayed in the CPU menu.
- PIT emulation has been improved.
- CPU emulation on x86 CPUs is now more accurate.
Last edited by superfury on 2017-8-31 @ 08:37, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2016-12-23 @ 21:59

My latest UniPCemu release:

UniPCemu build 2016/12/23 18:37
(867.36 KiB) Downloaded 20 times

Code: Select all
- Fixed 8086 only supporting four segment registers, wrapping the others to produce a copy of the first four in the last four selectors.
- Fixed various ET3000/ET4000 bugs.
- Improved ET3000/ET4000 pixel boost support for 8-bit colors.
- Optimized FIFO buffer 16-bit and 32-bit reads.
- Optimized FIFO buffer backtrace position and discarding either the read or one value from the bottom of the FIFO, while ignoring remaining data in the process.
- Mapped the Escape key to PSP Circle for compatibility with PC(also in the Settings menu).
- Mapped Start to Cross in the BIOS Settings menu for PC compatibility.
- Fixed ET3K/ET4K TS Auxiliary mode register check.
- Implemented ET3K/ET4K dynamic ROM mapping.
- Fixed internal video BIOS bugs.
- Implemented missing VGA Internal BIOS ROM tables.
- Optimized (S)VGA memory accesses.
- Added RDP parameter to force Windows Remote Desktop mouse cursor speed patching.
- RDP is automatically detected, while forced to patch with RDP parameter.
- Fixed internal BIOS using 8086-style addressing always, since it's never used in protected mode(it's a real-mode only BIOS).
- Fixed the 80286 taking cycles during emulator memory accesses.
- Made UniPCemu center itself when ran automatically.
- Changed the default speed of the 80286 to it's IBM AT-compatible 6MHz.
- Changed the default turbo clock of the 80286 to still use the IBM AT speed(unchanged).
- Moved Tseng double horizontal timings only to apply on the VGA CRTC registers(not applied to the Tseng extensions apparently).
- Enabled support for MDA adapter to apply video mode 7h for compatibility on Internal video BIOS init.
- Disabled floppy and CPU interrupt interrupt logging for the release build.
Last edited by superfury on 2017-8-31 @ 08:37, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-1-02 @ 23:17

My latest UniPCemu release. Happy new year everyone!

UniPCemu build 2017/01/02 23:57 x86
(869.22 KiB) Downloaded 17 times

Also, for the first time, the x64 build of UniPCemu(which is slightly faster):
UniPCemu build 2017/01/02 23:57 x64
(941.92 KiB) Downloaded 15 times

Code: Select all
- Improved PC Speaker low-pass filter cut-off frequency.
- Improved timing model by seperating I/O cycles from MMU read/write cycles.
- Optimized Little Endian vs Big Endian storage on FIFO buffers.
- Optimized MIDI Synthesizer audio rendering by using seperate backtrace buffering of the voice's chorus output sample streams(at the cost of more memory being required to use it).
- Removed CPU unused variable.
- Fixed MIDI Synthesizer reverb volume.
- Fixed internal emulator video ROM to use it's full 64K ROM to store all data, instead of crashing when initializing the ROM(due to added ROM tables).
- Optimized emulator callback using little-endian conversion only when needed.
- Modified the internal video BIOS ROM's signature to properly indicate that it's a 64K ROM.
- Fixed mapping 64K and bigger Option ROMs(OPTROM.*.BIN files). These now no longer will overlap incorrectly when 64K in size or bigger.
Last edited by superfury on 2017-8-31 @ 08:38, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-1-05 @ 15:35

My latest UniPCemu release, fixing a few little bug and adding a breakpoint(Real, Protected mode and Virtual 8086 mode(Still unused, since the 80386+ CPU core isn't fully finished yet) setting to the Settings menu(single-step debugger is enabled until the opcode is confirmed(By using PSP Cross/Numpad 2)).

UniPCemu build 2017/01/05 16:34 x86
(871.14 KiB) Downloaded 25 times

UniPCemu build 2017/01/05 16:34 x64
(944.43 KiB) Downloaded 15 times

Code: Select all
- Moved the AT VGA IRQ to line IR9.
- Fixed VGA IRQ sharing with the MPU-401, using parallel IR line on XT and AT&PS/2.
- Disabled emulator hardcoded single-step breakpoint and added a Settings menu option to set it(Square sets the current mode and address as it's breakpoint). It uses hexadecimal address in segment:offset, with suffix V(irtual 8086 mode) and P(rotected mode) being allowed. Input is done the same way as other text fields in the emulator(using the Direct Input mode or the PSP OSK). So F000:FFFF being real mode, F000:FFFFV being Virtual 8086 mode, F000:FFFFFFFFP being Protected mode. Lengths are dynamic, with the :-sign being required, P/V suffix being optional, at least one segment and offset nibble being required and no more than 16-bits segment and either 16-bits offset(real mode/Virtual 8086 mode) or 32-bits offset(Protected mode) being allowed.
- Fixed floppy disk controller reset lowering the Interrupt Request line properly, fixing resets(and thus loading data off a floppy disk).

Edit: A quick bugfix for the Diagnostics Port single-step debugging, which activated too soon(with invalid register and debugging data):
UniPCemu build 2017/01/05 17:56 x86
(871.12 KiB) Downloaded 23 times

UniPCemu build 2017/01/05 17:56 x64
(944.39 KiB) Downloaded 35 times
Last edited by superfury on 2017-8-31 @ 08:38, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-3-29 @ 19:08

Since the last update was quite a while ago, I've built the current version again on MinGW. Lots of bugfixes and improvements have been added:

UniPCemu build 2017/03/29 15:44 x86 and x64 combined package
(1.85 MiB) Downloaded 45 times

Code: Select all
- ATAPI Inquiry command succeeds without media as well.
- Implemented missing ATAPI lowering device IRQ(both on Control Register reset and device only on Command register writes).
- Optimized and fixed the ENTER instruction and fixed the stack protection on it.
- Fixed 80186+ OUTSB/OUTSW instructions.
- Fixed many other ATAPI bugs.
- Fixed a bug in DRO file copying the old-style header for usage with the early-style header.
- Various optimizations of the emulations of various hardware.
- Increased the GPU framerate to 60FPS for better video quality.
- Optimized transparent text pixels on stretched GPU Text surfaces.
- Cleaned up 80386 code.
- Fixed protection on POP SS/DS/ES instructions.
- Improved ATA configuration space for better detection.
- Implemented Tseng and VGA PCI configuration area for detection.
- Disabled writes to the VGA PCI configuration space.
- Disabled writes to the ATA/ATAPI configuration space for unsupported addresses.
- Improved 80286+ memory and waitstate timings.
- Improved protected mode to be more accurate.
- Fixed POP/MOV to SS also inhabiting Single-step and NMI interrupts.
- Implemented a slight 3us busy delay when resetting the ATA/ATAPI controller.
- Fixed CMOS binary decoding of stored BCD data.
- Implemented ATA drive select keeping the controller busy for a short time.
- Fixed CMOS timekeeping using divergeance.
- Added an option to the Settings menu to synchonize time with the current system time.
- Improved the CMOS and RTC emulation in various ways.
- Optimized transparent and dirty text surface rendering.
- Modified the executable name generated to UniPCemu_x86.exe for x86 platform and UniPCemu_x64.exe for x64 platform.
- Improved ENTER instruction with exception handling like 80486- processors when needed.
- Improved 80486 and earlier processors' buggy ENTER instruction behaviour.
- Fixed path of creating a floppy disk image.
- Added options for selecting the unimplemented and unfinished CPUs.
- Improved support for Big-Endian machines.
- Improved multitasking support.
- Added task switching information and 80386+ exceptions to the debugger.
- Fixed various bugs.
- Fixed TSS table size.
- Fixed task switching bugs.
- Fixed various protected mode bugs.
- Enabled the Set button to open the settings menu for other platforms besides Android, but not for the PSP, as it doesn't support clicking text surfaces.
- Improved invalid return values when reading invalid opcode parameters.
- Fixed CPL vs DPL vs RPL privilege levels.
- Fixed IDT Task gates on 16-bit 80286 being valid.
- Improved Settings menu reboot checking.
- Fixed Settings menu requiring reboot on Video Adapter change.
- Fixed ModR/M errors.
- Improved Midi reverb/chorus effects with full support.
- Fixed 80286 LOADALL loading of EIP to be loading a dword instead of a word into EIP(IP zero extended).
- Fixed various instructions signed/unsigned immediate values.
- Fixed various instructions on newer and older CPUs.
- Improved Game Blaster LFSR polynomial based on mame commit c11c22b3e83bdf7ac8d48f0a8e3be48ba31786f8 by Lord Nightmare.
- Improved Game Blaster with full accurate rendering(3.57MHz) like the original chip did. See this topic: http://www.vogons.org/viewtopic.php?f=9&t=51695
- Optimized low-pass filtering.
- Fixed graphics debugging combined with emulator shutdown.
- Fixed various locks in the emulator.
- Implemented sound debugging shutdown response.
- Implemented verification ROM executing mode shutdown response.
- Stop recording audio when terminating the sound service automatically.
- Fixed filters to start out with a zero signal(just like actual output) instead of the first sample directly.
- Optimized the filters.
- Fixed 80186+ 16-bit IMUL sign bit.
- Implemented 80386 instructions to complete the 80386 CPU emulation. Some errors are still confirmed to exist within the emulation of 286+ CPUs(currently unknown what's going wrong exactly).
- Enabled 80286+-compatible default NOP cycle timings for unimplemented timings on 80386+ processors.
- The 80386+ now will use 286+ cycle timings as far as it's available and implemented.
- Improved 186+ BOUND instruction not using immediate parameters, except ModR/M.
- 80186+ opcode C1 uses 16-bit reads and writes, not 8-bit.
- Fixed GDTR/IDTR on-screen debugging location.
- Improved 0f 80386+ text identifying a 80386+ unknown 0F instruction.
- Extended the #UD log with a 0F noticiation(whether or not it's a 0F opcode that caused any jump, if any).
- Fixed compiler warnings on MinGW, Android, Visual C++ and PSP.
- Fixed 8086+ GRP3a/GRP3b TEST instruction parameters using immediate byte/word data.
- Fixed correctly applying the Operand size to the timings table instead of the Address size.
- Split stack address size being based on the Stack descriptor B-bit, but code/data on the Code descriptor D-bit(overridable with Address and Operand size overrides).
- Fixed MMU checks actually using dword sizes if needed.
- Improved 80486 and Intel Pentium detection using flags.
- Added ModR/M ESP/EBP missing return/break statements.
- Fixed 32-bit ModR/M SIB addressing.
- Fixed 32-bit ModR/M memory addressing identifying itself as memory.
- Fixed 8086 PUSH SegReg instructions to properly check the stack.
- Implemented 80386 CR0 register writes updating the CPU mode correctly.
- Marked the 80386 CPU as being finished: all 16-bit and 32-bit opcodes have been implemented.
- Fixed memory writes of 32-bit operands actually writing the full 32 bits instead of clearing the upper 16 bits due to truncation of the value.
- Improved MMU/memory logging not logging characters 0x00(end of string) and 0xD/0xA(line control characters, breaking lists, due to being interpreted as newline characters).
- Fixed opcode 87h being a write to both register/memory operands.
- Implemented 80486+ #UD handler.
- Implemented 80586+ Test Register instructions to raise #UD.
- Implemented 80386 Test Registers and their loading/storing instructions.
- Fixed loading of causative debugger text during #UD exceptions.
- Fixed the Settings menu opening while SELECT is pressed during debugging. Also implemented the Set button to work during debugging to open the settings menu.
- Improved ModR/M: the /r isn't forcing the parameters to load from registers(MOD=3), instead it just specifies (according to the Intel 80386 programmers reference manual(1986)): "/r: indicates that the ModR/M byte of the instruction contains both a register operand and an r/m operand", in contrast to only using the r/m operand(GRP opcodes, indicated with /n, with n being a number in the range of 0-7).
- Improved processing of 32-bit BIOS ROM loaded.
- Implemented loading of BIOSROM.32.BIN on 80386+ CPUs.
- Implemented support for extended 32-bit ROMs replacing 16-bit AT ROMs.
- Made XT architecture available to the 80386 CPU(Intel Inboard 386).
- Improved XT 286 address bus width.
- Improved memory hole support.
- The stack pointer always increases with POP operations and decreases with PUSH operations.
- Improved address handling with topdown data segments.
- Fixed most of the data segment handling for memory accesses. debug_graphics.c and the various emulator internal BIOS interrupt handlers need to be patched to compile again.
- Fixed 80286 destination of task switches clearing the upper bits of the registers.
- Improved IRET behaviour within Virtual 8086 mode.
- Fixed operand size during virtual 8086 mode IRET.
- Improved Sound Blaster ADPCM decoding.
- Implemented EGA+ MUX bits into the (S)VGA emulation.
- Added support for an EGA reversed ROM to be used with a special EGA mode option.
- Fixed bugs in the VGA IO module.
- Improved EGA ROM support and fixed Video ROM type detection.
- The EGA video card is now emulated (subset of VGA). Errors are still present in using the BIOS ROM(failing to POST).
- Port 3CA always can access the Feature Control register.
- Optimized accesses to the Feature Control register.
- Implemented base 14MHz and 16MHz clocks on the EGA emulation.
- Improved EGA+ switch emulation.
- Added support for 80386+ 32-bit operand size cycle timings.
- Implemented basic Inboard 386 A20 mapping.
- Implemented 80386 waitstates for the Inboard 386.
- Segment descriptor rights are only checked when loading segment registers.
- Check conforming only with Executable Segment descriptors.
- Improved ModR/M to decode 32-bit addresses as 32-bit pointers and 16-bit addresses as 16-bit pointers.
- Made high memory blocks round itself to 1MB chunks automatically.
- Implemented safety into XT ROM addresses.
- Fixed ISA BIOS ROM writes.
- Limited extended memory on the Inboard 386 to 1MB chunks, with 640K base memory.
- Improved 80286+ PUSHF(D)/POPF(D) instruction behaviour.
- Fixed Moving low memory high on AT+ boards and non XT-386 emulation.
- Fixed a bug in the BIOS ROM mapping.
- Improved the debug log modes with a mode that logs when skipping instructions.
- Optimized MIDI rendering.
- Seperated the Paging/Memory address generation and protection process from the normal MMU read/write operations for linear memory access.
- Mapped the descriptor loading and saving through the Paging Unit to be able to fully support Protected Mode Paging.
- Improved double fault raising with specific cases only.
- Applied x86 fault checking to all available fault and exception handling.
- Made the CPU logging and on-screen debugger use 32-bits addressing, registers and flags when they might be used(on 386+ CPUs in any relevant modes).
- Fixed opcode 3A exceptions.
- Improved 16-bit vs 32-bit (conditional) JMP and CALL instructions applying correct IP and EIP with masks.
- Added proper JMP/CALL protection against jumps to invalid addresses.
- Improved 80386 and 80486 undefined flags for detection of the CPU.
- Implemented GPU light pen support using the right mouse button to use the light pen. The left mouse button acts as the switch while the right mouse button is pressed.
- Improved EGA and CGA light pen emulation with more accurate handling of the light pen input and latches.
- Implemented EGA/CGA light pen location and button using the new GPU light pen input.
- CGA/EGA light pen is now emulated and working(confirmed on CGA).
- Implemented 80386 CPU Wait States.
- Implemented Inboard 386 Wait States.
- Implemented XT 80836(Intel Inboard 386) default clock speed of 16MHz.
- Optimized the FIFO buffer.
- Protected mode debugging using the debugger registers (DR0-DR7) are implemented.
- Optimized FIFO buffer backtracing(MIDI chorus/reverb effects).
- Implemented 80386 Trap flag, Task switching behaviour, Single-step trap, Data address breakpoint, Instruction Address Breakpoints and TSS Traps.
- Fixed CS access rights without PIQ.
- Fixed #SS fault segment value.
- Fixed EIP during CPU reading opcodes and parameters.
- Virtual 8086 mode is now supported.
- Improved faults resetting segment registers, SS and EFLAGS besides CS:EIP.
- Fixed a bug in the XT Expansion Unit parameters.
- Fixed XT Expansion Unit BUS data latch.
- Fixed IDT entry fault reporting.
- Fixed faults happening before executing an instruction keeping the CPU from executing the instruction to be executed next.
- Fixed TSS Trap bit only activating on active TSS(TR being loaded with a non-zero value).
- Added support for the Compaq Deskpro 386 u13/u15 ROMs on 32-bit systems.
- Made failing to load Deskpro 386 ROMs try AT ROMs instead.
- Improved operand sizes during privilege level switch.
- Fixed CPL changing pushing SS instead of SP.
- Stack storage is dependant on TSS size or call gate type(when reading) instead.
- Implemented the Compaq 386 BIOS ROM being doubled in memory (at *F0000-F7FFF and *F8000-F8FFF, * being 0x0 or 0xFFF).
- Implemented BIOS ROM and MMU support for the special Compaq low memory physical mapping and ROM mapping.
- Fixed missing POP SS during task return to Virtual 8086 mode.
- Fixed VGA ROM mapping only taking effect on the video BIOS ROM.
- Improved memory handling with reserved memory mapped at address 0xFE0000, that can be remapped to it's low-memory area and write protected.
- Improved stack address size in various situations, using the B bit directly for error handling compatibility.
- Implemented interlevel returns during IRET, interrupts and improved CALLF/RETF handling of interlevel causing stack switching.
- Fixed CPU_resetOP also needing to reset the raw CS register for reporting purposes(don't need to reload).
- Fixed debugger EIP pointing incorrectly.
- Added seperate support for the Compaq Deskpro 386 architecture.
- Made Compaq architecture 386+ load BIOS ROMs u13/u15.
- Improved Compaq 8042 input port.
- Improved Compaq memory diagnostics input.
- Improved video defaulting to color mode on EGA+ video cards(Miscellaneous Output Register).
- Improved Option ROM scanning with a single function doing the scanning, while the non-video ROMs are now handling 32-bits Compaq architecture ROMs as well.
- Improved video ROMs supporting Compaq 32-bits ROMs.
- Improved 80386+ port protection handling.
- Improved valid vs invalid descriptor loading on 286+ and 386+ CPUs.
- Improved valid vs invalid protection on 286+ and 386+ CPUs.
- Implemented precalcs of pixel pitch when fetching pixels from surfaces.
- Fixed PSP vs PC screen buffer size, fixing invalid buffer sizes causing writes past buffers in 4K outputs on non-PSP systems.
- Improved double/triple fault handling.
- Fixed stack accesses only using the Stack segment descriptor, instead of the overridden descriptor(which can be anything). Stacks are Stack descriptor only.
- Implemented a Settings menu option to switch BIOS ROM files between DIAGNOSTICS ROMs(.DIAGNOSTICS added to the filename after the filename, before the extension(e.g. BIOSROM.U18.DIAGNOSTICS.BIN for the XT U18 ROM)) and Normal BIOS ROMs for easy switching to/from diagnostic modes.
- Replaced bzero with either a cleardata macro(bzero universal replacement) or memset call.
- Fixed 8086+ INT3 interrupt to use the correct define.
- Fixed storing the OPTROM filename correclty by initializing the filename before storage(instead of initializing nothing(0 bytes)).
- Implemented 80386 identification and stepping during reset.
- Fixed INC/DEC not affecting the carry flag.
- Enabled cycle-accurate clock for the 80486/Pentium CPUs.
- Fixed 32-bit ptr16:32 immediate parameters.
- Fixed 80386+ Paging check on protected mode.
- Setting Paging without protected mode is forbidden, raising a General Protection fault.
- IRET to an available task results in a #GP fault.
- IRET to non-busy task results in a #TSS instead of a #GP.
- Modified 8086+ 8-bit INC/DEC to use their proper internal functions instead(modifying the flags correctly).
- Improved 8086+ algorithmic adjustment instructions with unmodified flags.
- Improved x86 shift instructions with undefined bits and Auxiliary flag updating.
- Fixed x86 8-bit increment allowing memory to be used.
- Fixed 16-bit and 32-bit INC instruction.
- Fixed 16-bit PUSHW instruction reporting as PUSHW instead of plain PUSH.
- Fixed debugger text to use EIP to mask properly.
- Improved debugger IP vs EIP parameter sizes.
- Improved high resolution clock with gettimeofday support for microsecond accuracy over SDL's millisecond accuracy.
- Improved high resolution timer failing reporting no time passed and automatic method selection.
- Improved Linux sleeping using nanosleep instead of SDL delays for better accuracy.
- Implemented emulation of the Compaq Deskpro 386 diagnostics port.
- Implemented EISA second PIT chip support on Compaq Deskpro 386 architecture.
- Improved Compaq memory remapping according to PCem.
- Improved memory mapping on Compaq Deskpro 386 to be more accurate, according to documentation.
- Implemented proper Compaq A20 gate support, which isn't like normal AT A20(only wrapping the second megabyte of memory).
- Fixed exit() always being used to terminate.
- Implemented stereo FIFO buffer, allowing to store and read two 32-bit values at the same time.
- Modified MIDI chorus backtrace to use the new stereo buffer instead of two seperate buffers for each chorus channel.
- Optimized FIFO buffer 32-bit aligned reading.
- Fixed and improved 16-bit and 32-bit FIFO buffer reads and writes managing bigger chunks of memory to read/write data.
- Fixed Port 62 input also being available on the XT architecture.
- Seperated the Game Blaster filtering and audio output from the main emulation loop like the PC Speaker output to speed it's rendering up.
- Fixed PIT and Game Blaster depleting the buffer too fast, resulting in empty output buffers during rendering(skipping samples as well).
- Optimized text rendering using more efficient code ordering.
- Modified the Game Blaster noise frequencies to be based at ~13982Hz.
- Implemented all Game Blaster PDM waveforms, making the Game Blaster render with those waveforms.
- Implemented Jepael's LFSR algorithm, based on his code, instead of the old Dosbox algorithm.
- Fixed conflicts between Game Blaster left/right sample variables and Sound Blaster left/right sample variables.
- Renamed Sound Blaster left and right sample variables to prevent conflicts between hardware.
- Created a new UniversalTimeOfDay type to keep time with(with higher accuracy than plain SDL_getTicks).
- Made the Sound Blaster available without MPU as well, disabling the MIDI support. Sound Blaster now doesn't use the MIDI output anymore.
- Optimized the default filters for low-pass filtering on GNU C compilers.
- Fixed locking up the main thread by starting sound recording.
- Implemented a red R in the top right of the disk indicators to indicate it's recording audio.
- Optimized the Game Blaster to work reasonably fast on the tested PC(4.0GHz i7-4790K tested), running at up to ~60-70% using NEC V30 emulation with all hardware enabled. Without Game Blaster, it's up to ~90% speed.
Last edited by superfury on 2017-8-31 @ 08:38, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby breiztiger » 2017-5-21 @ 07:10


any new build version with last advance on 8088mph demo ?

thanks in advance

Posts: 4
Joined: 2016-3-05 @ 10:13

Re: UniPCemu emulator releases

Postby superfury » 2017-5-21 @ 12:39

breiztiger wrote:hi

any new build version with last advance on 8088mph demo ?

thanks in advance


I'm still sorting out some errors in the newer CPU cores(286+) with the new improved cycle-accurate handling. Once that's fixed, I'll release it(Even though the credits SMC hangs it due to timing inaccuracies(causing the SMC to fail)).
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-7-20 @ 14:51

A new UniPCemu release:
https://www.dropbox.com/s/ww29fcueq6y1o ... 1.zip?dl=0

Code: Select all
- 80386SX/DX is now emulated, on a Compaq Deskpro 386 with u13/u15 ROM support added.
- CD-ROM emulation on 80386 is now working (tested with VIDE-CDD.SYS driver and MS-DOS 6.22 MSCDEX.EXE).
- First release of an Android build. It's finally fast enough to be usable somewhat(depending on used rendering settings, up to 20% 8088 speed on Samsung Galaxy S7).
- Lots of little bugfixes in the CPU cores and hardware, as well as various optimizations.
- Seperated AT/PS/2 and Compaq CMOS data storage to fix incompatibilities.
- The Inboard 80386 now has an option in the CPU menu to start without waitstates(to fix slow booting on XT when used, at the expanse of initial BIOS speed compatibility).
- ROMs are now used and loaded as a globally used setting, instead of specific cases depending on CPU. It's now based on Architecture, with subchoices on CPU when required(e.g. plain XT vs XT 286).
- Non-cycle based emulation has been removed.
- Cycle-based emulation has been made more accurate.

Note on testing: Tested with the Megarace demo version, which is running(full version unusable still due to MS-DOS conventional memory shortage). OAKCDROM.SYS is untested(might not work yet). EMM386.EXE still hangs on a 80386+ for unknown reasons.

I've uploaded it externally, as the Android executable makes it too big to upload here on the forums for the very first time.
Last edited by superfury on 2017-8-31 @ 08:39, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-7-22 @ 20:49

I've been working on the Android executable a bit, adding a few improvememts:
https://www.dropbox.com/s/8gkxg08ko1imb ... 0.apk?dl=0

Code: Select all
- Improved handling of time-critical Android-specific events, now handling them in an seperate event handler(critical events only, like application termination and activity changes(switching to another app, low memory(unhandled, since nothing can be cleaned up atm)). These caused forced closures before.
- Added support for Android app pausing/resuming. Pausing the app now mutes audio and pauses emulation as well.
- Improved handling of mouse movement on touch screens. It now converts the movement based on that the screen dimensions are like that of a Samsung Galaxy S7, in mm. That way, movement will move the same as with a real mouse(changes PC behaviour to scale like that with touch movement as well).
Last edited by superfury on 2017-8-31 @ 08:39, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby superfury » 2017-7-28 @ 19:29

The latest UniPCemu release(PC and Android):
https://www.dropbox.com/s/7kxdmolnkd321 ... 1.zip?dl=0

Code: Select all
- Improved automatic direct plot(choosing between forced and disabled rendering mode automatically) on devices with static screens(like Android and PSP).
- Made resuming the Android application refresh the screen properly(previously could cause a black screen until something is changed on the screen).
- Added support for the Set button to the Settings menu text shown when emulation starts.
- Always show the screen capture button.
- Improved 1MB memory BIOS ROM address allowing the full 128KB to be used on AT+ architectures(XT has EMS memory mapped there).
- Fixed floppy MSR RQM bit not clearing after being set.
- Improved floppy disk IRQs.
- Improved floppy disk reporting of seeking in the MSR.
- Added Inboard 386/AT memory waitstates to make it perform better with AT BIOSes.
- Optimized memory segment registers.
- Improved Inboard 386/AT waitstates and CPU clock speed back to 16MHz.
- The Inboard 386/AT seems to run at 32MHz, so adjusted the clock speed and slow waitstate.
- Prevent the CPU waiting during HLT for a BIU that's still has something to do. The BIU now simply continues until nothing is left to do.
- Improved CPU HLT not affecting the BIU that's still busy to do something.
- Optimized descriptor usage by precalculating descriptor base addresses, speeding up memory accesses using them.
- Floppy disk Specify command doesn't raise an IRQ, according to noted documentation on osdev.org.
- Improved floppy disk timing to be able to use parallel seeks and recalibrates, as well as DMA theoretically ticking in parallel(although just one command at a time).
- No IRQ with floppy Specify/Set drive data command.
- NonDMA is only set during execution phase of data transfer commands(read/write commands etc.).
- Floppy Specify command doesn't set ST0.
- Improved x86 Paging Unit with a simple TLB implemented, according to i386 documentation.
- Adjusted the image size generator to map key input differently: L(Q on PC keyboard)=GB or R(W on PC keyboard)=MB, else KB. Left=x100, Right=x10, Up/Down increases or decreases by the specified amount.
- Added disk change detection Sense information and accompanying IRQ to CD-ROM devices.
- Improved ATAPI defined and undefined bits.
- Implemented 80386+ TLB, based on the 80386 documentation.
- Fixed 80386 SCASD instruction properly reading 32-bits of data instead of 16-bits.
- Fixed ATA write multiple command to write data correctly.
- Fixed ATA disk write LED to work correctly.
- Made ATA disk reset turn the disk LED off(as any running command is aborted).
- Implemented 80486 opcodes and exceptions, completing the 80486 CPU emulation.
Last edited by superfury on 2017-8-31 @ 08:39, edited 1 time in total.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby anormal » 2017-8-22 @ 11:48

I've tried to use it. It seems you develop it thinking in its use in a PSP.

I've been trying to use it for some time, failed. Is this usable now? or you plan to add a working menu, a text modifiable settings file, some readme explaining how to use, the meaning of things in the screen? etc... ? or is it some kind of prealpha?

I've been using emus for 20 years, worked int It 30 years, usually use dosbox with advanced configs (bootable hds, etc) and Hampa PCE, 86box, etc... And i've been unable to simply boot a dos in this.

Thanks for helping!

Edit: maybe i am slow today... Will try again later, but no readme no nothing. I've tried to generate a empty disk (really don't need it, i got many forms of doing it) it let me use the size and when i hit enter, some strange gibberish appears and that's all, keyboard don't do anything? must i use with a joypad? Have you thought in improving the menu, contextual help in the status bar?, bigger fonts, more interlinear space? I suppose a working standard menu or a button bar is far away from this version? Thanks friend

Edit2:i want to test some difficult floppy disk/controller emulation, because no current emu is able to work in this things.
Posts: 8
Joined: 2005-10-28 @ 17:30

Re: UniPCemu emulator releases

Postby superfury » 2017-8-22 @ 15:40

A sort of manual I've written is provided on the UniPCemu project wiki itself: https://bitbucket.org/superfury/unipcemu/wiki/

The main page contains basic info about the emulator and it's directories.
The other pages contain information about various aspects of the emulator.

The text in the bottom right are buttons. They can be clicked to activate their function(Cap for screen captures, Set for opening the Settings menu etc.). The Settings menu options can be controlled using up/down/enter/escape. Left/right switches between pages of settings(Main menu, Manage mounted drives and Advanced menu). Some items also contain submenus(you can get back by using Escape). The various aspects of the settings menu can be found in the Controls page. If an option refuses to be clicked or chosen, it's usually because it's forbidden to modify when emulation is running(e.g. changing hard disks, soundfonts, video card(VGA Mode), VGA Synchronization, Emulated CPU and data bus size, Architecture, as well as the Sound settings when emulation is running is impossible, because software might depend on it or is using it. You usually won't remove hardware cards etc. from a running machine, would you(without making things go very wrong on the motherboard)?)).
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands

Re: UniPCemu emulator releases

Postby anormal » 2017-8-22 @ 19:02

So is this emulator designed to be used with a joypad? I will be happy just booting a floppy.
Thanks for wiki, already read it.
Posts: 8
Joined: 2005-10-28 @ 17:30

Re: UniPCemu emulator releases

Postby superfury » 2017-8-23 @ 14:42

Indeed. Originally it was to be used with the PSP(although it grew too heavy for it, as well as the compiler on Windows 10 eventually crashing on the biosmenu.c module each time I try to compile it with a (protection) fault). Eventually I added support for using it on PC keyboards&mice. Then came Android support, which needed some more features to make it work on that device. Atm, it's mostly bugfixing and improving the already mostly working emulator to become more perfect(and cycle-accurate).

The way it handles a joypad is exactly mapped the same as it works on a PSP, using the original PSP mappings, but on the joypad instead. Plugging in a joypad makes it automatically switch to the joypad on the SDL2 builds(except when built for SDL1, which requires a Settings menu option that's SDL1-specific to switch between the both of them). I originally started it as to be a better usable and better gaming alternative to Dosbox(Dosbox on the PSP only has a crappy way of entering input as far as I noticed, and I wanted to be able to game properly on the device). Eventually things expanded with stuff like cycle-accuracy(being one of the only two ground-breaking PC-emulators I know of that actually do that with such precision, the other being Vladstamate's CAPE emulator), but the basic interface that originated on the very first PSP builds(until the PSP compiler broke) still is present to this day. A big plus is that, in it's current form, it's exactly the same on all platforms it compiles for(PSP, Android, PC), so once you're familiar with one version, you're familiar with all of them(since the interface is the same on all devices). That's also the reason why I didn't add stuff like Windows menu bars etc., since they can't be converted to the PSP or Android.
Posts: 2102
Joined: 2014-3-08 @ 11:25
Location: Netherlands


Return to Release Announcements

Who is online

Users browsing this forum: No registered users and 2 guests