Skip to content

MartyPC v0.2.1

Compare
Choose a tag to compare
@dbalsom dbalsom released this 09 Jun 15:50

MartyPC v0.2.1

MartyPC v0.2.1 contains dozens of bugfixes, accuracy improvements, new debugger features, a new CPU (NEC V20), new video cards, machine types and more!

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)

Known Issues

  • Area5150: Some minor glitches during the Elephant effect text scroll (left side character glitch) and the end credits
    have a periodic black scanline inserted. These were introduced with some new CRTC logic that is demonstrably more
    correct in other scenarios, but clearly has a few bugs to iron out.