UniPCemu build 2020/05/28 14:11 is now live!


Various small changes have been made, along with some bigger changes this update.

Highlights:

  • Various optimizations to both the CPU and hardware emulation.
  • Various CPU bugfixes.
  • Less unneeded prefetching on 80286+ CPUs in IPS clocking mode.
  • Improved DAC command register on the Tseng chips.
  • IMD disk images are now fully supported.
  • Various bugfixes on the floppy disk controller(verified working on all major operating systems(MS-DOS, Windows NT 3.1, Windows 9x, Windows 3.x and Linux)).
  • Disk mounting is fixed.
  • Fixed mounted checks of DSK and IMD disk images.
  • DMA is now working properly again and not crashing Windows 95 RTM when verifying data (due to fixed verify operation not behaving like memory writes anymore).
  • All standard floppy disk commands are now supported.
  • Fixed debugger display issue displaying CS instead of the proper DS register.
  • DMA EOP is now handled.
  • Improved response to recreating static disk images mounted as a floppy disk and floppy disk images that are mounted by the emulator to properly reload the disk in the emulator(eject and insert).
  • Implemented a Settings menu option for creating empty unformatted IMD floppy disk images using geometry settings like the other floppy disk image creation option.
  • Floppy and hard disk changing when mounting/unmounting and changing to a different file is now improved.
  • Hard disks no longer unmount when the emulator is running (e.g. due to external file changes or being unreadable due to file sharing issues with other programs).
  • Implemented Compaq Deskpro 386 second PIT timer, according to the documentation.
  • IR lines and parallel IR lines are now improved and fixed.
  • The UART is improved.
  • Improved the PIC.
  • Fixed ATAPI audio playback to be protected against buffer overflows.
  • Improved CD-ROM identification to be an unique ID.
  • Fixed various ATAPI problems.
  • Improved parallel port and connected sound devices emulation.
  • Fixed ATA harddisk emulation issues.
  • Fixed U18/U19 ROM to be properly read.
  • Added some more buffer underflow protection to the cue disk image parsing.
  • Improved 808X timings (although breaking the 8088 MPH credits code because of the more accurate timing on some instructions).
  • Moved all CPU-specific settings (emulated CPU, data bus size, CPU speed, Turbo CPU speed, Turbo CPU Speed mode, clocking mode) to the architecture-specific settings with backwards compatibility on the old settings.
  • Added some text to the settings menu to show the currently active architecture that the settings apply to (for settings that are architecture-specific).
  • Fixed starting threads to be waiting for the thread to actually start before returning to the caller with an unstarted thread.

UniPCemu updates:

  • Optimized EMS memory to have lower priority than BIOS ROM or graphics cards regarding memory mapping.
  • Changed the MMU block alignment to 16 bytes instead of 8, to allow for unaligned descriptors and memory structures to be handled fast as well.
  • Slightly optimized memory reading.
  • Optimized BIOS odd/even ROMs to use less if-clauses and more calculation.
  • Removed impossible U18/U19 check(because it can't overflow).
  • Optimized non-debugger memory read operations.
  • Optimized single-byte BIU prefetches in IPS clocking mode.
  • Further optimized single-byte BIU fetches.
  • Simplified BIU prefetch checking size in IPS clocking mode.
  • Optimized BIU reads/writes.
  • Optimized CPU protection checks.
  • Optimized DMA channel active checks.
  • Further optimized memory writes.
  • Ignore segmentation checks during IPS clocking mode instruction prefetching, as it's not needed to apply multiple times.
  • Added missing segmentation check for specific erroring out on invalid descriptor type when filling up the PIQ in IPS clocking mode.
  • Improved faulting on invalid addresses when fetching instructions into the PIQ in IPS clocking mode.
  • Fixed prefetching from top-down CS descriptors when prefetching in IPS clocking mode.
  • Don't prefetch more than 1 instruction worth of data in IPS clocking mode on 80286+.
  • Optimized descriptor base address applying to be likely to happen for normal segmented descriptor accesses.
  • Removed the unused MMU_generateaddress function.
  • Optimized IPS clocking prefetching only checking for free PIQ space to fill once instead of twice.
  • Optimized logical address wrapping using precalcs.
  • Simplified and compressed MMIO to use compressed lists.
  • Optimized the memory mapped I/O read/write handling loop.
  • Optimized CPU mode changes.
  • Optimized PIQ fetching.
  • Optimized MMU buffering when not buffering anything.
  • Optimized CPU for non-debugging.
  • Made the BIU FIFO debugging code only enabled with the define for it(which is disabled by default).
  • Made PIQ filling inlined again.
  • Fixed BIU PIQ filling routine to use a proper typing on it's physical memory address.
  • Combined BIOS and Option ROM handling into one handler(the BIOS read/write handlers).
  • Made the BIOS and VGA memory areas be called without registering it with the MMU for more speed.
  • Removed indirect pointers from the BIOS and Option ROMs and VGA memory reads.
  • Optimized filling of the PIQ.
  • Slightly optimized TLB reading on most recent entries to be faster.
  • Writing the DAC command register returns it to the PEL Mask Register.
  • Made PIQ fetching from memory inlined again on non-Windows platforms.
  • Optimized paging TLB reads by moving the search Tag generation to the caller instead.
  • Interrupts or exceptions allow interrupts to once again be executed after the interrupt completes(depending on normal factors).
  • Task switches, like interrupts/exceptions, allow interrupts to be recognised again on the following instruction(seeing as the context is different).
  • Moved BUS control and the lock signal to the BIU instead of remaining in the CPU(Execution Unit) for improved speed and simplicity. The other devices on the BUS don't need the status of the EU, just the BIU.
  • Optimized BIU PIQ prefetching with the newly changed BUS activity variable.
  • Implemented IMD disk image file read support and sector info lookup support.
  • Implemented IMD disk image write support.
  • Fixed IMD image support compiler warnings.
  • Improved IMD disk image undo when failing to write a sector that's uncompressed to leave a repaired disk image.
  • Fixed IMD disk images not using the head as a filter.
  • Implemented the IMD disk image into the disk manager and floppy disk controller (based on the DSK images).
  • Added split between IMD disk image and DSK image selection in the floppy disk controller.
  • Implemented the IMD image format in the Settings menu.
  • Improved default values for the IMD image buffers.
  • IMD images do have a head filter and selection in their track information, so filter on that properly.
  • Implemented IMD track formatting support in the IMD disk image handling.
  • Modified the FDC to take the IMD disk image head parameter into account.
  • Fixed the sector type of compressed data when formatting IMD disk images.
  • Improved IMD image enumerations.
  • Improved formatting of the IMD disk image format to use the new track formatting support for IMD disk image files.
  • Improved double density check for IMD disk images.
  • Modified the head select to be seperated in physical(the actual read/write head) and logical(the sector ID as it's used on the disk format).
  • Heads used for the disk access are now selected by the physical head(which determines what side of the track to use).
  • Heads used for filtering disk ID verification to read/write are now using the logical head selection by the command(only if it has one in it's parameters).
  • Improved IMD image handling of the current sector within the sector ordering of blocks, skipping the right amount of data.
  • Fixed sector number issue with jumping over sector information of IMD disk images.
  • Improved IMD image processing labels to include their purpose of info/read/write/format.
  • Removed unused IMD image label.
  • Made IMD image sizeof negative bytes use the correct typing(signed instead of unsigned) before negating it's value.
  • Fixed the check for reaching the sector in IMD disk images to be correct.
  • Disk mounting: Fixed disk type checking to use the full filename instead of the relative filename for DSK/IMD files.
  • Fixed disk validation to properly recognise the IMD image format.
  • Fixed IMD image sectors per track detection.
  • Fixed mounted checks of DSK and IMD disk images.
  • Removed unused IMD disk image sector info data.
  • Fixed IMD read sector filter to filter the logical track number correctly.
  • Fixed IMD image files allowing formatting in a new amount of SPT.
  • Fixed floppy format track to set the requested cylinder correctly.
  • Made the IMD image format track skip the track correctly.
  • Improved sizes and allocation of head and tail buffers, as well as the different sector information buffers and sector data buffer for the track in case of failure.
  • When skipping to the next track to detect the original track size when formatting a track, don't look at the next track's details for filtering it out(they won't match).
  • Fixed the IMD image formatting process to use the correct sector data, increasing it's entry correctly.
  • Fixed the formatted IMD track to properly write the head.
  • Fixed the formatted IMD track to check the tail correctly(it may not be present).
  • Properly error out when a IMD format track operations fails, not when it succeeds.
  • Properly raise the FDC IRQ when finishing the formatting process.
  • Fixed floppy IMD format buffer to no longer underflow incorrectly.
  • Fixed deallocation and invalidation of the sector size map for IMD disk images to properly happen after the track finishes, instead of when the first sector on said track finishes.
  • IMD disk images can have no tail buffer when it's the last sector on the last track(read/write) or last track(format).
  • Floppy: optimized IMD disk image SPT detection for the current track.
  • IMD image: optimized file accesses during the reading of sector info to be using a memory cached copy of the file when skipping tracks.
  • Improved check on failed allocating of the IMD image in memory during sector information reads.
  • Added a function to the IMD disk support for retrieving generic disk information instead of sector information.
  • Made the floppy disk controller use the new IMD generic disk information instead of calculating it manually.
  • Floppy: cleaned up unused variable.
  • Cleaned up unused IMD disk image support variables.
  • Implemented memory conservation of IMD disk image parsing for devices with little available memory.
  • Enabled the memory conservation of IMD disk images on the PSP, as it has relatively little remaining memory to use.
  • Implemented memory conservation of IMD disk formatting a track.
  • Made IMD disk image processing cross-platform again.
  • Disabled memory conservation for IMD disk images for host systems that have enough memory to use it's enhanced buffering in memory capabilities.
  • Removed unused IMD sector info variables when using memory conservation.
  • Improved FDC result phase to be implemented more properly when not finding the sector or track index hole properly.
  • Improved ST1/ST2 and result phase during failing Read sector or Read ID commands.
  • Optimized IMD disk image memory conservation to use a 64KB buffer when moving data between buffers, instead of a single byte.
  • Fixed invalid ST2 during entering the result phase of floppy disk writes to behave correctly.
  • Restored FDC erroring out on invalid drive and no media being inserted.
  • Implemented floppy Read deleted data data mark handling and Skip bit for the read (deleted) data command.
  • Made the read (deleted) data command report the result code and abort after giving the data for the faulting read sector.
  • IMD disk image: added support for Deleted Data Address Mark to be written to the disk.
  • Made the floppy try to write a Deleted Data Address Mark to the disk when it's capable of writing it.
  • Improved floppy EOT handling and setting of the EN bit in ST1.
  • Ignore the EOT field when using DMA with MT.
  • Fixed floppy write ST1 and ST2 registers to behave properly when erroring out and not erroring out.
  • Fixed another ST1 and ST2 zeroing bug in floppy disk writes.
  • Made the floppy requested vs physical cylinder check apply to the static disk image format only(the DSK/IMD image formats handle it differently, through Sector IDs instead).
  • Made floppy track seeking reset the last read sector ID to the first sector on the track.
  • Improved reporting of the next sector number when using the Read ID command on a normal disk image.
  • Floppy seek and recalibrate both reset the current sector on the disk back to the index hole.
  • Fixed floppy Read ID command needing to clear the Seek End flag.
  • Improved floppy Read ID sector size reporting with IMD image files.
  • Less than 128 byte sectors have a sector size byte of 0xFF.
  • Improved IMD disk image formatting the final track.
  • Improved floppy Read ID command handling of the ST0 Seek End bit.
  • Don't do implied seek with the Read ID command.
  • Floppy requested cylinder doesn't apply to the Read ID command, as it has nothing requested.
  • Improved floppy drive selection.
  • Improved floppy format track to no longer seek to another track with implicit seek enabled.
  • Further improved floppy drive selection support.
  • Better handle the unsupported Read Track command.
  • Simplified support for the Read Track command.
  • Implemented the floppy Read Track command.
  • Improved high speed floppy disks supporting all speeds instead of just the 1M speed.
  • Exceptions faulting aren't classified as interrupts anymore.
  • Improved EXT bit reporting during exceptions handlers throwing exceptions.
  • Improved floppy handling to actually be scanning the track once for the first sector, then requiring the sector IDs after that to match.
  • Improved ST1 and ST2 register results when cylinder mismatch occurs with IMD and DSK disk images.
  • Fixed next sector number detection during read track operations.
  • Improved and fixed physical cylinder changes changing the last sector number to the last on the track, back to the index hole when reading the Sector ID.
  • Fixed DSK disk image WC bit to detect the DSK image track correctly.
  • Implemented floppy Bad Track with a physical error(according to the IBM Soft Sector format) emulation when scanning for the sector ID during a read data command for DSK and IMD disk images.
  • Restored the no media behaviour of the Read ID command.
  • Removed extraneous parentheses causing Android compiler warnings.
  • Made the IMD disk image sector size map created during formatting optional. It will only create it if the formatting requires it. Otherwise, it'll use the track header's sector size byte instead for compatibility with other software not supporting the sector size map.
  • Improved IMD disk image support for formatting empty tracks and reserved sector size value requiring the sector size map.
  • Improved IMD disk images to be notified of the sector size field in the format FDC command.
  • Fixed FDC support for the IMD disk image formatting.
  • Improved support for the FDC format track command.
  • Improved IMD disk image format track to allow formatting with non powers of 2 and a custom sector size to be allowed when 0xFF is specified in either the parameters or the format track command itself.
  • Improved response to floppy formatting errors as documented.
  • Cleaned up unused floppy format code.
  • Improved floppy sector increase and finish to be applied to the format sector command as well.
  • Improved floppy format sector to use the same kind of result phase as the floppy write sector uses.
  • Format track doesn't have a MT bit to apply.
  • Fixed floppy format IMD track command to supply the correct amount of sectors.
  • Fixed IMD disk image to properly apply the minimum amount of sectors per track as specified in the specification.
  • Fixed the FDC sector rate during formatting a track to be correct(4 bytes/sector instead of the usual 512 bytes/sector).
  • Implemented support for formatting 0 sectors on a track using a timer to simulate the searching for the track index hole(time of 1 sector being read), instead of reading 4 bytes using DMA(which it shouldn't).
  • Fixed FDC format track command DMA transfers to continue normally.
  • Fixed floppy Format Track command DMA transfers and empty track formatting to be correct.
  • Fixed floppy Format Track 4-byte packets to use correct timing.
  • Fixed floppy Format Track DMA rate issues.
  • Fixed x128 DMA rate on format track parameters to be correct again.
  • Fixed debugger display issue displaying CS instead of the proper DS register.
  • Implemented the EOP signal for hardware to use.
  • Implemented missing DMA EOP in DRAM, FDC and Sound Blaster.
  • Sound Blaster TC is now done automatically and implemented.
  • Fixed memory address 16-bit/32-bit wrapping on various MOV [imm16/32] instructions to be correct.
  • Fixed address logging of RealRAM to log the correct address.
  • Fixed BIU ready condition check error.
  • Improved floppy IRQ pending vs IRQ raised.
  • The XT architecture needs the floppy to lower it's IRQ when executing a new command.
  • Improved response to recreating static disk images mounted as a floppy disk and floppy disk images that are mounted by the emulator to properly reload the disk in the emulator(eject and insert).
  • Implemented support for creating empty unformatted IMD disk images.
  • Implemented a Settings menu option for creating empty unformatted IMD floppy disk images using geometry settings like the other floppy disk image creation option.
  • Improved floppy disk change detection when creating or converting harddisk images or creating floppydisk images.
  • Improved harddisk changed detection when creating disk images or converting between disk image formats.
  • Made converting hard disk image formats able to use an inputted filename instead of automatically generating it's filename.
  • Fixed dynamic to and from static image conversion process text display to be correct again.
  • Fixed missing input text when converting dynamic to static HDD images.
  • Fixed missing filesizes when converting HDD images.
  • LGDT/LIDT: CPL and real/V86 mode have priority over using a register.
  • INVLPG: using a register (invalid) has priority over CPL checks.
  • INVLPG in V86 mode always throws #GP(0).
  • Improved resetting of modrm and instruction-specific state for each opcode.
  • Fixed first 64 opcodes modr/m opcodes timing to properly add and apply post-algorithmic timings.
  • Fixed 8086+ opcodes A2/A3 properly masking the offset.
  • Fixed 8086+ opcode A0/A1 address size to be applied correctly.
  • INVLPG: the register check(#UD) has lower priority than CPL checks(#GP(0)).
  • Implemented Compaq Deskpro 386 second PIT timer, according to the documentation.
  • Fixed Compaq Deskpro 386 Failsafe timer to use the correct channel for it's input.
  • Fixed DMA controller verify mode to behave properly, according to documentation.
  • Fixed missing PIT header for PPI support.
  • Fixed Settings menu IMD disk images info to look at the IMD disk information instead of the first sector.
  • Fixed disk generation sector size map to be properly generated.
  • Floppy not finding a sector is handled like no media being present.
  • Improved floppy no media result only happening when there's no track to read on the disk.
  • Improved floppy read error result.
  • Improved floppy error codes when becoming not ready.
  • Fixed floppy error codes.
  • Fixed floppy format command to behave properly.
  • Improved floppy sector rate during format track commands.
  • Fixed floppy track formatting to be using at least 1 SPT timings instead of at most 1 SPT timings when using the Format Track command.
  • Improved seperation between floppy data rate being valid and the floppy not being mounted.
  • Reverted the floppy not being mounted to it's previous state, with the controller locking up.
  • Disabled the CPL being ignored when throwing protection faults.
  • Fixed floppy DSR not passing through to the data port.
  • Restored Sense Interrupt status to hang the controller after giving the result ST0.
  • Seek End doesn't clear always with a FDC Read Sector command, but is left alone.
  • Improved the EOT detection to be more correct.
  • Improved the floppy End of Cylinder bit to be reported correctly.
  • Improved ST1/ST2 results for read sector/read sector ID/write sector commands not finding the sector specified.
  • Fixed floppy Format Track command to properly set ST0 to a valid value.
  • Improved floppy Read ID command to properly clear the ST1 and ST2 registers.
  • Improved ST1/ST2 result when formatting tracks.
  • Improved format track result to not error out when TC isn't set when it finishes the track.
  • Improved floppy disk read data/read ID/write data to give the correct bits in ST1 for formatted and unformatted disks.
  • Fixed missing Read ID IMD disk unformatted bit required not to be set.
  • Fixed Read ID unformatted track detection to be more accurate.
  • Improved floppy error messages to no longer set the Not Ready and Unit Check bits during normal read data/read id/write data errors of the inserted disk.
  • Changed all checks for non-inserted floppy disks and the drive motor being off to result in the same result: error out with not ready and unit check set and ST1's NID and ST2's and NDAM bits only.
  • Don't set Unit Check with Not Ready when reporting the floppy disk not being inserted.
  • Restored the FDC hanging when executing a data command while no disk is mounted.
  • Improved parallel IR lines to behave properly with the IRR-based parallel IR lines.
  • Improved Soundblaster IRQ detection.
  • Improved UART IRQ detection.
  • Improved UART IRQ determination ordering.
  • Improved interrupts to be properly edge-triggered.
  • Fixed PIC acnowledge flag to not clear incorrectly.
  • Improved UART loopback mode to simulate a transfer and receive of data.
  • Improved modem status update when the UART changes modem control in loopback mode.
  • Made IRQs directly raise IR when it's already set on the AT architecture and up.
  • Fixed AT and up IRQ acnowledgement.
  • Fixed AT architecture and up code IR line acnowledgement issue.
  • Fixed AT architecture and up parallel IRR clearing.
  • Fixed parallel IRR handling on AT architecture.
  • Removed UART IRQ inlining. It isn't needed, since it isn't called fast at all.
  • Improved UART interrupt pending bit to actually be a interrupt not pending bit when set.
  • Improved UART to only raise an IRQ when no interrupt is actually pending.
  • Improved serial mouse to route RTS to CTS and DTR to DSR to allow for a handshake.
  • Made the UART port alternative output 2 raise a Modem Status interrupt when raised.
  • Fixed UART IRQ alternative output 2 to detect rises correctly.
  • Added a cause for the UART IRQ request.
  • Set the UART IRQ request reason to 4.
  • Improved compatibility of the UART interrupt request cause.
  • Fixed the UART IIR interrupt request cause to be compatible with the other causes.
  • The UART IIR register bit 4 is always cleared.
  • Improved writing to the UART modem control with bit 4 set to always trigger an IRQ.
  • Improved the UART interrupt cause to wrap properly for the IIR register.
  • Changed the UART interrupt request cause to use cause 0: the modem status register being changed.
  • Fixed UART loopback mode not affecting the IRQ line.
  • Disabled the special UART IRQ.
  • Fixed serial mouse modem control response.
  • Improved parallel IR lines to be clearing IRR when a line drops(a new IRR is immediately loaded when another request is still set).
  • Fixed IRR interrupt vector's origin not being cleared in some cases.
  • Improved PIC ICW3/4 and OCW1 to behave correctly.
  • Improved PIC ICW1 to behave better.
  • Improved UART to clear the receive buffer before filling it during loopback mode.
  • Fixed 8086 EU delays at the end of the instruction to behave properly.
  • Removed PIC code unused variables when lowering an IRQ.
  • Improved FDC reset to stop polling after the used two drives had their polling data given.
  • Improved floppy dumpreg, version and lock commands to stop the FDC reset polling as well.
  • Implemented a floppy drive reset activation to apply a correct timing, instead of triggering immediately when reset is lifted.
  • Improved floppy to keep itself resetted until raising it's IRQ after some timeout.
  • Improved floppy reset to finish correctly.
  • Reverted the ST0 result when pending reset executing the Sense Interrupt command.
  • Made the FDC reset time smaller.
  • Implemented floppy Read ID command missing drive motor emulation.
  • Changed all floppy read data/write data/format track/read ID commands to delay 0.5 second without disk before erroring out and raising an IRQ, like a real FDC does.
  • Fixed various compilation issues with the new floppy error reporting.
  • Simplified the aborts done with the new method.
  • Removed unneeded tabs for the Read Data command error result phase starting.
  • Fixed floppy read data/write data/format track commands erroring timing to stop properly.
  • Fixed various ST2 registers not being set properly.
  • Fixed various write data command ST1 register values when not readable from the medium or not mounted.
  • Fixed unreadable track information during the Read ID command to give a proper ST2 register.
  • Fixed the floppy Verify and Read ID commands to use correct 0.5s timings when executing and erroring out.
  • Restored the old Read ID command to hang the controller without any disk in the drive.
  • The Read Data, Write Data and Format Track commands must hang the controller like the Read ID command without any disk in the drive for it to be properly detected as such.
  • Fixed IMD disk image Read ID command to correctly search through the right amount of sectors.
  • Fixed CPU cycles compiler warning.
  • Improved loop for UART IRQ detection to count down instead of relying on underflow.
  • Fixed ATAPI audio playback to be protected against buffer overflows.
  • Improved sense interrupt when the Drive Polling mode is Disabled.
  • FDC: don't hang up the floppy on invalid Sense Interrupt. Instead finish the command after the result byte is given.
  • FDC Dumpreg command doesn't raise an IRQ.
  • FDC unknown command doesn't raise an IRQ.
  • Sense Interrupt status without IRQ gives ST0 and returns to command mode, according to the 82077AA documentation, with it's documented value being set.
  • Drive polling mode has no effect on the FDC IRQ being raised after a reset.
  • FDC unknown commands don't raise an IRQ.
  • Unknown FDC commands always report ST0=80h.
  • Improved floppy implied seek to properly apply physical track clipping like a normal seek operation when seeking to a different track, but instantly(using formulas instead of stepping).
  • Improved floppy implicit seek to properly clip to track 0 as well.
  • Improved CD-ROM identification to be an unique ID.
  • Fixed CD-ROM Inquiry command to properly supply the CD-ROM ID.
  • Improved CD-ROM Inquiry to apply a more proper CD-ROM name, according to the emulated drive.
  • Improved CD-ROM Identify Device information to use the CD-ROM drive number as well.
  • Simplified CD-ROM identification.
  • Improved results of the Interrupt ID, Line Status register and Modem Control registers to apply some of their bits permanently low, according to documentation of the NS PC8250A.
  • Implemented a proper loopback adapter for the transmitter shift and receiver shift registers when requesting to send a byte in loopback mode.
  • Enabling the UART loopback mode disconnects it's output and input lines from the hardware, thus aborting any transfer in progress.
  • Optimized UART not updating state in loopback mode.
  • Leave the receiver buffer alone in loopback mode. It will be overwritten with new data received during loopback when something is sent.
  • Make sending with loopback wait for the receiver to receive the loopbacked data before sending a new byte.
  • Made the receiver of the looped back data properly clear it's loopback received flag.
  • Fixed UART loopback mode to be using more accurat behaviour.
  • Fixed UART loopback to receive the correct data.
  • Improved modem documentation on the various parameters used by the commands.
  • Serial modem: follow documentation better and data receiving to be handled better.
  • Improved the modem status register to not register a change when clearing the unrelevant bits during reading the modem status register.
  • Don't unmount mounted unreadable harddisk images when the emulator is running.
  • Fixed larger or equal to 64K ATAPI transfers to set the right result size.
  • Fixed ATAPI edge case of 64K being transferred to set a valid cylinder low/high value that's non-zero.
  • Fixed ATAPI data size to be able to reach it's maximum value.
  • Parallel port hardware raising ACK raises an IRQ.
  • Improved parallel port status register and IRQ to be more accurate.
  • Sound Source: move the buffer full detection to the status register itself, while disabling the manual use of the IRQ.
  • Improved Sound Source of the nACK bit it's giving.
  • Improved the parallel port IRQ to be raised correctly with the nACK line.
  • Improved parallel port IRQ lowering to be based on the ACK output from the peripheral instead.
  • Fixed the parallel port IRQ status bit to report the actual interrupt line instead of whether it's requested or not.
  • Improved sound source emulation buffer full status to become more sticky, except during writes.
  • Fixed sound source buffer being full.
  • Improved sound source and covox speech thing strobe to happen on the raising of said lines.
  • Improved the Disney Sound Source to only last 15 microseconds more when powered down. After that, it will lose all it's data buffers and output state due to loss of power.
  • Fixed Disney Sound Source powerdown function naming issue.
  • Fixed Sound Source power down timer to be of a proper timing type.
  • Improved parallel port IRQ handling when IRQs are disabled.
  • Fixed parallel port ACK lowering check.
  • Fixed the extra parentheses within the parallel port IRQ check.
  • Improved Sound Source and Covox handling of rising/falling edges.
  • Improved parallel port inversion of BUSY, ACK and INIT bits to be handled at the parallel port level.
  • Improved Sound Source ACK according to the INIT line(that's reversed).
  • Improved Sound Source ACK by implementing the equivalent of the transistor to drain.
  • Sound Source ACK isn't based on a full signal, but instead on a not full signal driving the transistor to drain the INIT line which is connected to it and the ACK line.
  • Fixed Sound Source and Covox handling of the control lines, which has the INIT line reversed compared to what the documentation says.
  • Fixed parallel port control register read handler to properly flip the control register's INIT value.
  • Fixed Sound Source empty bit to work as intended, with proper grounding of the signal based on the negated control inputs.
  • Restored the Sound Source buffer full status to not only clear once the buffer becomes empty, but clear immediately.
  • Improved Sound Source documentation.
  • Added Sound Blaster original last command written for checking hardware functionality.
  • Improved ATA hard disk reset to clear the error bit in the status register.
  • ATA-1 harddisk now clears the correct error bit when the device is reset.
  • Fixed U19 ROM to be properly read.
  • Transferring ATA data while busy doesn't set DRDY.
  • Fixed ATA write sector(s) to not raise an IRQ after not being busy anymore for the first sector transfer to start.
  • Fixed ATA IRQ timeout without IRQ being raised to actually be properly handled.
  • ATAPI devices don't report ready when locked during data transfer commands.
  • Improved ATAPI never reporting ready, but only affect the BUSY bit.
  • ATAPI IDENTIFY PACKET DEVICE and PACKET commands report DRDY when starting(IDENTIFY PACKET DEVICE command) or completing(PACKET command).
  • Stop BUSY when executing a PACKET command, start DRDY when the ATAPI packet is fully written(Assumed ATA/ATAPI-4 documentation: "8.21.5.5 Successful command completion").
  • ATAPI PACKET command makes the device set DRDY after command completion.
  • Optimized the ATA read verify sector(s) command to calculate it's results instead of processing it sector by sector.
  • Cleaned up verify sector(s) unused label.
  • Improved the parallel port to update it's status register when the control port changes state, allowing it to be up-to-date.
  • Improved parallel port initialization.
  • All parallel port output pins except the data pins are negated and active low.
  • Fixed Sound Source and Covox emulation to handle the inverted control lines correctly again.
  • Simplified the masking of the INIT control line of the Disney Sound Source for determining the ACK line, since it's already masked later during the last masking for the upper nibble.
  • Fixed the floppy Format Track command to properly write data to the correct position on the disk with normal IMG/IMA disk image files, instead of the incorrect position being the LBA as the byte position.
  • Added some more buffer underflow protection to the cue disk image parsing.
  • Improved Pentium TSS backlinking to properly use a 32-bit backlink.
  • Improved TSS backlink to properly perform protection checks against segmentation and paging.
  • Improved x86 prefix handling with priority on the last prefix of a prefix group, disabling others from the same prefix group.
  • Simplified descriptor limit checking to check in a more simple way for invalid addresses instead of valid addresses.
  • Made the 80486 16-bit BSWAP perform as undocumented.
  • Gated task switches ignore the normal DPL,RPL and CPL checks.
  • Improved multitasking using the TSS to properly check for paging on the incoming task before performing the actual task switch.
  • Removed unused variable when checking physical memory accesses.
  • Improved task switching to keep proper task state when faulting.
  • Improved task switching to keep selectors intact when faulting on loading their descriptors.
  • Conforming code into a data register ignores CPL vs DPL vs RPL and is always allowed.
  • Only make the BIU become not ready when starting a request on the BUS.
  • Implemented DMA HLDA signalling.
  • Don't raise HLDA when the BIU is transferring.
  • HLDA is always active when sampled.
  • Improved privilege checks for conforming code segments being loaded into CS to not use MAX(CPL,RPL) for plain jumps, using CPL instead(as the 80386 programmer's reference manual specifies).
  • Improved most ATAPI commands to clear the CHECK CONDITION status when executing.
  • Optimized 4KB page tag creation after a 4MB tag creation for TLB lookups.
  • Fixed paging tag define.
  • Fixed 80(1)86 opcode GRP2 opcodes to use the correct timings. It's also not using negative timings anymore.
  • Improved 808X HLT timing.
  • Improved 808X PUSH segreg, PUSH reg, POP reg and PUSHF timings.
  • Improved 808X TEST GRP3 timings.
  • Improved 808X NOT/NEG timings.
  • Improved 808X PUSH Ev timings.
  • Improved 808X PUSH segreg and PUSH reg timings.
  • Improved 808X POPF timing.
  • x86 instructions without timing actually don't tick the BIU.
  • Added a notification to the debugger when the CPU starts it's execution phase.
  • Modified the debugger logging of the executed instruction with cycle logging to only log the instruction on the cycle the execution phase starts.
  • Clean up unused debugger logging label.
  • Fixed logging of instructions that aren't finished executing when logging the instruction.
  • Fixed stalling the bus on the x86 CPUs.
  • Fixed x86 bus and BIU stalling to work properly.
  • Fixed x86 bus stall to not use normal cycles on the BIU.
  • Fixed the BIU not ticking not supposed to be logged in the cycle log.
  • Improved disassembly of 2-operand vs 3-operand IMUL instructions when it's using two different registers.
  • Improved 80286 segment descriptor to use a limited base and roof.
  • Implemented CMOS UIP bit in the Status Register A to behave as documented.
  • Improved 808X opcode E6 timing.
  • Improved 8088 opcode EE/EF timings.
  • Improved 8088 timings for opcode E7 based on opcode E6.
  • Fixed CMOS code.
  • Added BIU cycle retrieval support.
  • Fixed the new 808X cycle to compile properly.
  • Improved 8086 CALL Ap instruction timings.
  • Improved 808X JMP Ap timings.
  • Improved GRP5 JMP/CALL timings.
  • Improved 808X string instruction timings and REP timings.
  • Fixed CMPS and SCAS timing issue.
  • Fixed 808X MOVSW timing.
  • Fixed 808X CMPS/SCAS REP vs non-REP timing issue.
  • Improved 808X string instruction pre-instruction timing.
  • Fixes issues with 808X pre-instruction CMPS timing.
  • Fixed issues with 808X pre-instruction REP timing for MOVS/LODS.
  • Removed invalid extra timing for finishing REP timing.
  • Added missing REP finish timing.
  • Improved 808X REP finish condition timing.
  • Improved 808X STOS timing.
  • Improved 808X CMPS timing.
  • The special pre-REP timing only happens when executing a new REP instruction.
  • Moved all CPU-specific settings (emulated CPU, data bus size, CPU speed, Turbo CPU speed, Turbo CPU Speed mode, clocking mode) to the architecture-specific settings with backwards compatibility on the old settings.
  • Fixed CMOS Setting comment entry for the emulated CPU to start a newline correctly.
  • Improved line breaks in the Settings file.
  • Added some text to the settings menu to show the currently active architecture that the settings apply to (for settings that are architecture-specific).
  • Updated the common emulator framework to the latest commit.
  • Updated Android gradle to the latest version.

Common emulator framework updates:

  • Optimized 8-bit fifo empty/full checks.
  • Further optimized full/empty fifo buffer detection.
  • Fixed starting threads to be waiting for the thread to actually start before returning to the caller with an unstarted thread.

In other words:
Windows NT 3.1 can now be installed and run within UniPCemu!
8088 MPH's credits now seem to crash since the new 808X string instruction timings, due to as of yet unknown reasons(probably some of the improved instruction timings throwing another instruction into a specific timing case where the prefetching can't fetch enough for the self-modifying code to continue properly during it's last stage, executing a partly modified incorrect instruction).

Files

UniPCemu.apk 4 MB
May 28, 2020
UniPCemu_PSP.zip 917 kB
May 28, 2020
UniPCemu_win64.zip 1 MB
May 28, 2020
UniPCemu_win64server.zip 1 MB
May 28, 2020
UniPCemu_win32.zip 1 MB
May 28, 2020
UniPCemu_win32server.zip 1 MB
May 28, 2020

Get UniPCemu

Leave a comment

Log in with itch.io to leave a comment.