cbmeeks / pico-vdp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pico-VDP RC2014 Board

In a nutshell, this project is a 39-pin RC2014 compatible multimedia board and associated software, providing video output, audio output, keyboard input, mouse input and RomWBW driver for Z80 retro computers. At the time of writing, it has been tested only with the SC126 computer but should work with others.

A goal is to emulate hardware that could, in an alternate history, have been implemented for an 8-bit home micro circa 1985.

Another goal is for the design to have era-reminiscent "quirks," which might be cleverly exploited to improve performance and/or capabilities. Some of these will intentionally remain undocumented, even if I take time to write documentation.

A Raspberry Pi Pico microcontroller board, not to be confused with the Raspberry Pi computer, provides the "brains." It was chosen because it provides a cheap way to host USB devices and generate a VGA video signal, because it is DIY soldering friendly and because it doesn't require special hardware to program - just a regular USB cable.

The reason for not emulating actual 1985 vintage hardware, such as the VDP9938 chip, is because I'm doing this primarily for my own entertainment.

The schematic and PCB layout files are for DesignSpark PCB.

Current Status

These are the features supported by the revision 1 hardware and associated software at the time of writing. This is a work in progress. Expect the hardware, both actual and emulated, and the software to break backwards compatibility as work progresses.

  • Graphics
    • VGA connector
    • 192KB VRAM
    • Text modes
      • 40x24 & 40x30 characters @ 16 colors
      • 80x24 & 80x30 characters @ 16 colors
    • Tile modes
      • 2 layers of 40x30 tiles @ 16 colors per tile from 1 of 8 palettes
    • Bitmap mode
      • possible using tile mode with unique tile per position
    • 256 hardware sprites
      • max 16 per scan line
    • Hardware assisted horizontal & vertical scrolling
  • Audio
    • PCB mount speaker
    • 2x emulated AY-891x programmable sound generators
      • 6 tone channels
      • 2 noise channels
      • 2 envelopes
    • 16 cycle accurate emulation
  • USB
    • Hub supported
    • Keyboard
      • MSX International keyboard matrix
      • Programmable IO controls keyboard LED
    • Mouse
      • 8-bit X, 8-bit Y, button state
  • Software
    • RP2040 firmware
    • RomWBW HBIOS VDA driver
    • RomWBW TUNE.COM plays AY-891x chip tunes
  • Microcontroller over-clocking
    • Over-clocking not needed if audio disabled
    • 201.6MHz over-clock needed for both video & audio

Contemplated Future Projects

  • Revision 2 board
    • Reduce board height, increase PCB area
    • Line level mono audio output instead of PCB mounted speaker
    • Mount Raspberry Pi Pico with castellated through holes rather than headers
    • Increase space between USB port and VGA port
    • Change address decoding logic to locate AY-891x IO ports at same addresses as a popular board
    • Optional enhanced RC2014 header pins
      • For mechanical support only
      • Keep full support for 39/40 pin unenhanced RC2014 connection
    • Remove UART support
    • Remove mute header
  • Single board computer utilizing the Pico-VDP
  • FUZIX driver
  • Video display processor SDK
  • BASIC interpreter with bitmap graphics modes & commands
    • CP/M and/or FUZIX
  • Documentation
    • Hardware Manuals
    • SDK Reference
  • Integrate HBIOS and FUZIX drivers into respective source repositories
  • 256 color mode
  • Image viewer program
  • Paint program
  • Port a game

AY-891x Accuracy

Hello AY-3-8910 aficionado! Unfortunately the AY emulator only emulates every 16th cycle, i.e. the emulator is not cycle accurate. Another difference is, unlike the original chips, this uses pulse width modulation. Unlike some AY emulators, this one is quite constrained by the performance of the $1 microcontroller it runs on. I tried some existing AY emulators but none were fast enough. That's why I wrote a new one, which trades off accuracy for performance. Making the emulation sound more like the original chips is desirable and hopefully it can be improved but making it sound exactly like the original chips is not a goal.

About

License:GNU General Public License v3.0


Languages

Language:C 58.3%Language:Assembly 40.9%Language:CMake 0.8%