UniPCemu build 2020/10/07 19:00 is now live!


This time it's a smaller update, with mostly bugfixes, MIDI rendering improvements and new CPU's being added (Pentium Pro and Pentium II, both without hardware FPU (like the Pentium)). Also improved support for 4K monitors, UART bugfixes and CD-ROM removable media status notification bugfixes.

Two bugfixes have also been released after 2020/10/07 14:48, which are from the same date, but at later times(17:06 for the first and 19:00 for the second). This fixes some bugs with regards to various CPU Paging features and memory allocation issues.

UniPCemu itself:

  • Fixed the RTC update in progress to update properly.
  • Improved CMOS clock to set the status register A update bit(bit 7) for the specified time(144uS) when the time changes for the CMOS in seconds.
  • Fixed CMOS typo.
  • Implemented a setting for a 4K output with 4:3 aspect ratio.
  • Implemented non-realtime modulators on the MIDI ADSR.
  • Fixed serial modem firmware version to report correctly.
  • Properly initialize all MIDI ADSR parameters.
  • Fixed ADSR decay to use the proper length.
  • Improved MIDI ADSR to handle decay properly.
  • Improved MIDI ADSR to not base sustainability on the sustain percentage anymore.
  • Improved MIDI ADSR to behave better.
  • Improved MIDI ADSR handling of the release phase.
  • Implemented MIDI ADSR convex attack for the modulator envelope attack slope.
  • Implemented MIDI synth sostenuto.
  • Made MIDI voice stealing aware of sostenuto.
  • Fixed sostenuto only handling running pressed notes.
  • Fixed MIDI sostenuto CC to use the correct number(66).
  • Implemented MIDI exclusive class.
  • Fixed MIDI exclusive class compiler issues.
  • Simplified the ADSR to have a normalized scale again.
  • Optimized MIDI attenuation.
  • Reduced MIDI reverb time to 2.65ms.
  • Optimized MIDI chorus.
  • Fixed MIDI chorus compiler error.
  • Fixed recording of the originating volume and modulation envelopes.
  • The attack envelope of the MIDI Volume ADSR is to be convex.
  • Combined the two MIDI chorus backtrace buffers into one single backtrace buffer.
  • Cleaned up an unused MIDI voice allocation variable.
  • Check MIDI sound channel allocation when allocating a voice to use.
  • Check MIDI sample rate being usable when allocating a voice to use.
  • Fixed midi voice structure definition.
  • Properly keep the MIDI voice allocated flag.
  • Implemented the Soundfont LFO and their modulation.
  • Fixed MIDI LFO sinus generation.
  • Improved LFO sinus wrapping.
  • Improved and fixed the MIDI LFO modulators.
  • Improved the MIDI chorus effect to behave better, with a proper frequency being used.
  • Implemented the MIDI LFO delay timing.
  • Added some documentation to the MIDI LFO variables.
  • Improved MIDI LFO modulation to no longer be rounded down.
  • Fixed volume adjusting LFO to be properly applied.
  • Cleaned up MIDI renderer code.
  • Implemented the Pentium Pro without FPU and it's instructions.
  • Fixed missing information in the settings file about the new Pentium Pro emulation.
  • Fixed Settings menu installed CPU option to work properly with the newly added CPU.
  • Fixed missing Pentium Pro default speed.
  • Fixed missing CPU address pins and address wrapping entries for the Pentium Pro.
  • Fixed Pentium Pro instruction limit buffer overflow.
  • Fixed missing PIQ size and bus masks for the Pentium Pro.
  • Fixed invalid BIU reference sizes.
  • Fixed the channels except the MIDI renderer to use the high-pass filter to filter out noise.
  • Fixed the channel name of the CD-ROM player.
  • Improved i686 CPUID to function better, implementing leaf 02h.
  • Fixed Pentium Pro CPUID stepping result.
  • Fixed a bug in the ATAPI get media status command for the removable media status notification feature set.
  • Improved removable media status notification feature set to be better software controlled.
  • Fixed missing error bit needing to be set when the GET MEDIA STATUS command gives a result in the error register.
  • Fixed the error bit in the ATAPI removable media status notification GET MEDIA STATUS command to set the correct slave.
  • Fixed ATAPI reset to clear the MCR bit, as it's invalid after disabling the media status notification.
  • Improved GET MEDIA STATUS no media reporting taking the tray into account.
  • Inserting the tray is always allowed. It isn't blocked by anything.
  • Allow changing of CD-ROM media when the tray is ejected always.
  • Improved CD-ROM ejection when choosing the CD-ROM options in the settings menu.
  • Made the MIDI LFO become realtime for the inputs it's based on.
  • Implemented linked modulators on the MIDI synth.
  • Cleaned up MIDI renderer unused variable when updating the LFO settings.
  • Improved the low-pass filter frequency and it's modulators to be realtime.
  • Fixed MIDI low-pass filter storage containers being floating point.
  • Properly clear and reset the continuous controllers that are undocumented as well.
  • Only clear the MIDI backtrace buffers when needed.
  • Improved MIDI linked modulators normalizing.
  • Improved MIDI modulator linking and protection against circular linking.
  • Properly protect against circular references with Soundfont modulators.
  • Improved soundfont modulators with linking and zero.
  • Improved linked modulators according to 2.04 specs.
  • Improved soundfont modulator amount source being ignored when set to linked.
  • Fixed variable case.
  • Optimized MIDI synth LFO updating.
  • Fixed Pentium Pro CPUID to report it's results correctly.
  • Made the different CPUID instructions all call one common CPUID instruction to return the information.
  • Fixed ATAPI Read CD command to use a proper block amount to transfer.
  • Implemented the Pentium II CPU placeholder without any extensions added yet.
  • Added missing Pentium 2 CPU identification.
  • Fixed unused Pentium 2 opcode information.
  • Improved Pentium II CPUID results.
  • Implemented Pentium II SYSENTER and SYSEXIT instructions and their MSRs.
  • Renamed the Pentium Pro instructions to match the other CPU 0F opcodes.
  • Added missing debugger information to the WRMSR, RSTDC, RDMSR and CMPXCHG8B instructions for all CPUs using them.
  • Made Pentium II CPUID report it's SYSENTER and SYSEXIT instructions.
  • Added limits on the inputs read from the settings file.
  • Seperated CPUID CPU identification and reported features to be incremental on newer CPUs.
  • Improved Pentium II CPUID identification.
  • Fixed RDTSC debugging.
  • Fixed Pentium II compiler warnings.
  • Implemented Pentium Pro RDPMC instruction.
  • Fixed Pentium Pro RDPMC CPL detection.
  • Implemented the Pentium Pro MSRs on the Pentium Pro and Pentium II, without any functionality of the MSRs themselves.
  • Fixed RDMSR unmapped MSR label.
  • Implemented missing instruction mapping of the Pentium Pro generic MSR handling.
  • Implemented the missing Pentium II MSRs.
  • Implemented missing Pentium II MSR 17h.
  • Improved Pentium II detection to a lower decominator.
  • Cleaned up invalid Pentium 2 MSR.
  • Made MIDI samples perform proper stereo support instead of enforcing mono.
  • Fixed MIDI loop end address detection.
  • Fixed MIDI stereo support to work and compile properly.
  • Mute finished voices when the other stereo counterpart is still playing.
  • Fixed the MIDI attenuation to also apply to the right channel.
  • Made heavy running hardware not update when the music player is running.
  • Changed Pentium Pro and up MSRs to become Pentium Pro and up.
  • Moved the Pentium Pro MSR handling to the Pentium.
  • Added support for the high MSR numbers with the MSb set.
  • Implemented Pentium-only MSRs.
  • Changed Pentium Pro MSRs to not show up on the Pentium.
  • Fixed Pentium MSR variable name.
  • Implemented MSR write-only bit support.
  • Renamed MSR write only bit definition variable to apply to reads.
  • Implemented Pentium write-only MSR bits.
  • Fixed MSR read protection initialization variable name.
  • Fixed MSR write-only issue.
  • Added missing Android Kotlin settings.
  • Implemented Paging PAE on Pentium Pro and up.
  • Fixed the Paging bit passthrough mask needing to be cached with the other most recent read results.
  • Fixed TLB tag way request with cached most recent tag to be reported correctly.
  • Fixed TLB tag valid with any combination of valid bits by using a separated valid flag.
  • Fixed Paging tag to be cached properly.
  • Fixed the PAE PDBR to use the correct amount of address bits.
  • Improved MIDI chorus and reverb to be using correct percentages.
  • Improved MIDI chorus/reverb precalcs variable sizes.
  • Improved MIDI reverb filters.
  • Updated the common emulator framework to the latest commit.
  • Improved 32-bit paging to be properly unsigned extended to 64 bits.
  • Fixed BIOS disks menu item list to display the correct amount of items.
  • Enabling the UART THR empty interrupt causes the UART to fire a THR empty interrupt if not transmitting anything.
  • Made the serial modem backspace the text following AT/at when receiving AT/at(case sensitive) in a command string after the AT/at prefix.
  • Improved modem backspace character to properly be echoed.
  • Made the modem perform backspaces to AT/at from an cleared input buffer.
  • Improved PAE PDPT and PTE to use improved zero-extending and properly calculate the addresses and shifts.
  • Removed unused Paging dir and table shift values.
  • Fixed MSRs not being available on pre-Pentium CPUs and the emulator crashing on it's initialization.
  • Fixed modemconnect.slip.scp most recent version date.
  • Filter away TCP packets on the packet server TCP port.
  • Don't log discarded packets anymore because they're empty.
  • Raise the send data IRQ when setting the transmitter holding IRQ to on state or leaving it on when the holding register is empty. Don't take the transmitter itself into account.
  • Improved UART IRQ triggering and pending behaviour.
  • The modem Interrupt ID register only clears the pending THR empty interrupt if acnowledging it.
  • Make sure that the modem line status is properly updated when handling input and output on the data line shift registers.
  • Added documentation on the UART 8250A Interrupt Enable Register.
  • Android manifest: Made the app persistent.
  • Fixed paging define warnings.
  • Fixed PAE to use a proper 36-bits of physical address of the paging structure instead of 64-bits.

Note: The last PAE change to become proper 36-bits was found just after the initial release of the build of 14:48. It's now released in the quick bugfix released directly after it (build 2020/10/07 17:06 being this patched version).

Another bug was found when checking the app after releasing it. This time with memory allocation itself, Pentium underflow bug and CPU paging passthrough for large pages in both PAE and non-PAE modes. The later build number (2020/10/07 19:00 has these bugfixes).

UniPCemu itself (2020/10/07 19:00):

  • Updated the common emulator framework to the latest commit.
  • MSR 1Bh doesn't exist on the Pentium, only on Pentium Pro and up.
  • Fixed Paging passthrough bits mask for large pages in both PAE and non-PAE mode.

Common emulator framework (2020/10/07 14:48):

  • Added 4K aspect ratio support.
  • Improved aspect ratio rendering correctly.
  • Fixed missing 4:3 aspect ratio for 4K resolution.
  • Improved global sound filter volume.
  • Reversed the volume reduction for the high pass filter back to it's old value.
  • Disabled the sound module high pass filter.
  • Made the sound low pass filter allow to disable.
  • Disabled the low pass filter.
  • Re-enabled the low-pass nyquist filter only, at full volume.
  • Optimized 64-bit FIFO buffer read/write operations.
  • Fixed the double 32-bit FIFO buffer reads/writes to work properly.
  • Fixed the 32-bit double fifo buffer read.
  • Modified the sound high-pass filter to be applied on a channel level instead.
  • Fixed the channel-specific high-pass filter to operate correctly.
  • Implemented support for Android builds not to stop rendering audio when SDL2 supports the functionality, keeping it playing when backgrounded.
  • Added support for heap canaries.

Bugfixes on the Common emulator framework at build 2020/10/07 19:00 :

  • Improved nzalloc and freemem memory allocation to take maximum allocation size into consideration properly, preventing overflow of it's internal counters for allocating memory.

Files

UniPCemu.apk 4.5 MB
Oct 07, 2020
UniPCemu_PSP.zip 959 kB
Oct 07, 2020
UniPCemu_win64.zip 1.2 MB
Oct 07, 2020
UniPCemu_win64server.zip 1.4 MB
Oct 07, 2020
UniPCemu_win32.zip 1.1 MB
Oct 07, 2020
UniPCemu_win32server.zip 1.3 MB
Oct 07, 2020

Get UniPCemu

Comments

Log in with itch.io to leave a comment.

Hello there, Superfury!

I've been looking for a good DOS emulator for the PSP for a while, so I was really glad to stumble upon your project. However, I couldn't get it to boot on my PSP 1000 - it runs out of memory. Perhaps it is incompatible with this model? 

I also tried to get it to work on the PPSSPP emulator, by setting it to emulate a PSP 2000, which has double the RAM. It would boot in this case, but even then, I couldn't get it to reach the BIOS - all it would do was let me change the internal BIOS settings. I also tried some older builds you posted on Vogons, but the result is the same (except, it won't even show the internal BIOS page).

I tried to stick with the most basic tweaks to the settings - 8086 CPU, XT architecture, and CGA graphics. I also tried ET4000, to no avail. I got all the BIOS files from the website linked from your Bitbucket wiki (except for the CGA BIOS), and the same configuration works fine in the Windows version - it boots into BIOS and reads floppy disks correctly. I'll be thankful if you can help me out.