This RC2014/RCBus compatible module is based around the Tang Nano 20K FPGA module from sipeed. Its a FGPA module that includes a HDMI output connector.
In conjunction with the appropriate FGPA code, it will emulate a Yamaha V9958 VDP. This emulated processor, supports all the original features of the Yamaha VDP, with some additional extensions included to support higher resolutions and an extended palette size of 256 entries with each entry supporting full 24bit colour depth.
The module also has a 3 pin breakout for attaching an optional WS2812 LED strip.
The Tang Nano 20K (if you select to include it) will come flashed with an image to emulate a V9958 VDP (with extensions). This image will also support the ability to control an optionally attached WS2812 LED strip.
The code for the Tang Nano and the associated notes can be found on its github project site https://github.com/dinoboards/V9958-Super
The FPGA code is derived from https://github.com/lfantoniosi/tn_vdp. The code has been adapted to work with the RC2014/RCBus Z80 interface; the VHDL code converted to verilog; and extensions and other changes have been applied. As such, there is a possibility that there are now some regression to V9958 compatibility.
The HDMI/DVI output has been tested on a handful of monitor and with some passive HDMI to DVI converters. The passive converters will typically not work if the Audio (J1) is shorted.
The full kits includes everything you need (PCB, capacitors, resistors, IC sockets, connectors, and the ICs). The Tang Nano 20K can be optionally included.
Count | Name |
---|---|
4 | 0.1uF |
1 | 22nF |
1 | 1uF |
1 | 1N4148 |
1 | 1K Ω (3.4mm) |
3 | 10K Ω (3.4mm) |
1 | 2k2 Ω (3.4mm) |
1 | MCP3202-BI/P |
1 | 74HCT32 |
3 | 74LVC245 |
1 | Right Angle HEADER 1x3 |
1 | HEADER 1x2 |
1 | HEADER 2x3 |
3 | SHUNT 1x2 |
2 | 1x10 header socket |
1 | Right Angle 40x2 Header |
1 | 8 POS IC SOCKET |
1 | 14 POS IC SOCKET |
3 | 20 POS IC SOCKET |
1 | PCB |
1 optional | TANG NANO 20K |
The Tang Nano 20K is wired to the RC2014/RCBus interface such that the code within the FPGA can be configured to respond to any I/O port request. So the ports this module will respond to are dependant on what image is flashed onto the Tang Nano 20K.
Please see https://github.com/dinoboards/V9958-Super for the code to emulate a V9958. If the Tang Nano 20K is included in the order, it will be supplied with a version from that repository already flashed.
Port | Description |
---|---|
$98 (r/w) | VRAM data |
$99 (w) | VDP register selection |
$99 (r) | Status register |
$9A | Palette access |
$9B | Indirect register access |
$30 | WS2812 Pixel Current Index |
$31 | WS2812 Pixel RGB |
$32 | WS2812 Total Pixel Count |
Name | Description |
---|---|
J1 | When shorted, the module will digitise any incoming analogue signal and send to the HDMI. Please note, passive HDMI to DVI converters may not work with this enabled. |
J2 | Program/Operate. Short the 3 jumpers when in operations. When programming the Tang Nano, its advised to remove these jumpers |
J3 | Transmit a clock signal to the RC2014/RCBus backplane. Do not short this is a clock signal is already supplied to backplane |
H1 | WS2812 connection. Top Pin is GND, bottom pin is 5V and middle pin is the Data (D0) signal |
The Tang Nano 20K is a FPGA module from sipeed.com.
To update or change the flash FPGA code, please review the instruction at: https://github.com/dinoboards/V9958-Super/blob/main/README.md
Have a look at the sample apps included in this repo apps-rc2014.
For specific details on programming the chip, I recommend:
The FPGA code emulating a V9958 VDP has some additional registers to enable the activation of a few higher resolution mode. This feature is still a little experimental.
If you have a
eZ80 for RC
based system, you may want to investigate the support for these resolutions available from the ez80-clang project https://github.com/dinoboards/ez80-clangThe BBC Basic port for the ez80 platform (see https://github.com/dinoboards/eZ80-for-rc-basic) also can utilise these higher resolutions.
For description of the extended registers available, see https://github.com/dinoboards/V9958-Super/blob/main/docs/vdpsuperres.md
There are 3 ports to control an attached WS2812 LED strip.
Port Address | Port Name | Description |
---|---|---|
$30 | WS2812_LEDIDX |
Set the LED strip's pixel read/write zero based index. Once set, send 3 bytes to the WS2812_LEDVAL port to set the RGB values of the pixel. |
$31 | WS2812_LEDVAL |
Write the 3 separate RGB values for current pixel. After assigning the index with port WS2812_LEDIDX , three bytes are expected to be written to this port. The three bytes represent the current pixel's Red, Green and Blue 8 bit values. After the 3 bytes are exchanged, the index is auto incremented. |
$32 | WS2812_LEDCNT |
Define the current maximum number of pixels available on the attached strip. When auto indexing reaches the end (as per this setting), the index is automatically reset back to 0. |
The ez80 clang compiler, includes C libraries to control a V9958 and the higher resolution extensions implemented by this module. It also includes libraries to manage an attached LED strip.
The compiler can be found at: https://github.com/dinoboards/ez80-clang
Some sample applications (for eZ80 only) can be found in the Apps section of https://github.com/dinoboards/ez80-for-rc
Please note that this is a kit, produced by a non-expert (me) for hackers, DIYers' and retro lovers, to tinker with. Please exercise caution and follow good safety practices. You will be working with sharp knives, a hot soldering iron, and small metal components. Be mindful of the risks involved in the build process. I will do my best to answer any questions you may have.
This kit is provided as-is, with no guarantees or warranties. By assembling and using this kit, you acknowledge that you do so at your own risk.
Documentation (dinoboards.com.au)
Normally shipped next working day, however during busy periods this may extend slightly.
It is your responsibility to pay any import duty or other taxes where appropriate.
For EU locations:
* Please see Lectronz's Terms and Condititions (https://lectronz.com/pages/terms_and_conditions)
* For order 150 EUR or over, it will be your responsibility to pay any import duty or other taxes where appropriate.