2024-06-10

MartyPC v0.2.1

EmuCR: MartyPC MartyPC v0.2.1 is released. MartyPC is a cross-platform IBM PC emulator written in Rust. Development began April, 2022. It should build on Windows, Linux and MacOS (Including M1)

MartyPC Changelog:
New BIU logic
0.2.0 introduced new BIU logic. Unfortunately, 0.2.0 took so long that this 'new' logic already needed
replacement. With the discovery of the 8088's 7-cycle bus access time, far simpler BIU logic is possible and has been
implemented in 0.2.1. For more information, see
my corresponding blog post.
Along with this new logic comes a slightly different cycle log format; I'm probably the only person on earth that reads
these logs, but it's worth mentioning. Several old state columns are gone, and now bus and T-cycles are displayed within
two separate 'pipeline slots'.
New CPU Framework
MartyPC now has a framework to support multiple CPU types, so we can have CPUs other than the Intel 8088.
There is a slight performance hit involved in not hardcoding a specific CPU, but I believe there are some strategies
I can use to mitigate this.
New CPU Type
An initial implementation of the NEC V20 has been added. All native-mode V20 instructions are implemented (except BRKEM).
This is not cycle-accurate yet, as it was copied and modified from the 8088.
The Arduino8088 project and the test generation engine of MartyPC were refactored and
improved to enable generation of a CPU test suite for the V20, which will be used to incrementally improve V20 emulation
accuracy over time. 8080 emulation mode will be added in the future.
The V20 test suite can be found here.
You can add a V20 to any 8088-based machine by adding the cpu_v20 overlay.
New Machines
Added Tandy 1000 and IBM PCJr machine types and ROM definitions. These are still very much a work in progress.
Tandy 1000 is mostly functional, and can accept a ibm_xebec hard disk controller (I will eventually dump the Tandy
hard disk controller ROM, but it is a Xebec controller).
IBM PCJr needs cartridge browser support and PIO mode implemented for the floppy disk controller.
RAW cartridge images can be loaded as ROMs using the standard ROM definitions; however this is less than ideal.
I will be adding support for standard PCJr ROM dump formats.
New Video Types
To go with these new systems, there is now a TGA graphics type. Again, a work in progress.
Tandy BIOS identifies the TGA and will boot into 8x9 text mode. Display apertures were tweaked for TGA to support
this "tall" mode.
TGA adapter operates very differently from other adapter types as it does not have its own VRAM.
New core functionality was required to allow mapping of MMIO reads and writes back to system memory.
High-resolution 640x200 2bpp mode not yet implemented.
PCJr graphics are implemented as a subtype of TGA adapter
Initial support for Hercules graphics card as a subtype of MDA adapter. Still a bit glitchy.
Frontend Bug Fixes / Improvements
Added missing overlay for dual 360k floppy configuration (thanks DragomirPazura)
Fixed loading of keyboard mapping files
Added CPI (Cycles Per Instruction) to benchmark mode.
Debugger Bug Fixes / Improvements
Added cycle stopwatch UI to CPU Control window. The stopwatch allows you to set two 'breakpoints' and measure execution
time between them.
'Step-over' logic overhauled. Step-over cycle timeout removed. A step over may not terminate, but this is in line with
other debuggers. On further feedback, dropping you off in a random location after timeout was not useful.
The expected return address will be displayed in the CPU Control window in the event a step over does not return.
You can now step-over rep string operations.
Re-entrant instructions such as rep string operations and hlt will remain at top of disassembly until completed
and will not flood the instruction history with repeated entries
Instruction history now shows when hardware interrupts, traps and NMIs occur (in dark red)
Instruction history now shows when jumps were taken (in dark green)
New IO Statistics display
Shows you each IO port accessed, port description, and number of reads and writes.
Overhauled PPI viewer (work in progress)
Added tooltips to CPU Control buttons to clarify operations
Core Bug Fixes / Improvements
VALIDATOR: Improvements to CPU validation system to support initial generation of V20 tests.
VALIDATOR: Improvements to test generation allow prefetched tests for 8088/V20
8080: Fixed panic due to microcode slice overrun (Thanks Vutshi)
8080: Implemented all undefined flags except for division
8088/V20: Corrected Trap delay after trap flag pop (Fixes Landmark Service Diagnostics)
8088: Refactored instruction decode to a table-based lookup, replaced custom flags with values from group decode ROM.
8088: Converted SegmentOverride enum to Option, simplifying segment resolution logic in many places
8088: New 7-cycle bus access logic
8088: Refactored CycleText log format
8088: Added cyle stopwatch support
8088: Don't count individual REP iterations toward instruction counter
8088: Fixed call stack tracing (recursive calls will still cause overflow)
Reduced size of call stack history to avoid ridiculously tall windows
8088: Fixed cycle count reporting in Instruction History
8088: Added Interrupt, Trap and NMI history types
EGA: Can now specify EGA dipswitch in machine configuration.
Added an ibm_ega_on_cga config overlay with the right dipswitch for running FantasyLand
BUS: Require IoDevice trait implementations to provide port description strings
BUS: Add new functionality for MMIO trait implementors to access main memory (Supports TGA)
BUS: Add PCJr-specific keyboard logic to generate NMI on keypress
PIT: Preserve latch value across mode changes (Fixes Tandy 1000 POST)
PPI: More accurate PPI emulation
Tandy 1000 and IBM PCJr specific PPI details added
Control register implemented, and PPI group modes are now tracked
New state dump format for new frontend PPI Viewer
Implemented keyboard scancode serializer for PCJr (Still has some bugs)
CGA: Fixed last-line CRTC flag logic. Fixes some severe glitches in Area 5150 I didn't notice because I have only been
testing the first and last effect. (Thanks Sudo)

Download: MartyPC v0.2.1
Source: Here

0 Comments

Post a Comment