For detailed hardware and original software information, please refer to the source: ZX_RGBI2VGA-HDMI.
- Video Output:
- Added new resolutions on VGA output (800x600, 1024x768, 1280x1024).
- Introduced scanline effect at higher resolutions.
- Configuration via Serial Terminal:
- Text-based menus.
- Frequency presets for self-synchronizing capture mode (supports ZX Spectrum 48K/128K timings).
- Real-time settings adjustments for capture delay, image position, scanline effects, and buffering modes.
- PIO Clock Divider Optimization: Enhanced precision in self-synchronizing capture mode.
- Test/Welcome Screen: Styled like the ZX Spectrum 128K.
- GOTEK floppy drive emulator I2C OSD: FlashFloppy firmware I2C 40x4 on-screen display, VGA and HDMI output supported.
- PS/2 Keyboard: PS/2 - ZX Spectrum 58-key extended keyboard interface with CH446Q analog switch array in serial mode.
- GOTEK control: Navigate FlashFloppy menu with PS/2 keyboard.
- Analog to Digital Conversion: Converts Analog RGB to digital RGBI.
- Based on the RGBtoHDMI project.
- Z80 CLK external clock source.
TL;DR: Connect GOTEK SDA and SCL pins to Pico GP16/GP17 pins (GP26/27 for RP2040-Zero). SDA and SCL lines should be pulled up to 3.3V with 4.7~10K resistors. Also support PS/2 keyboard for ZX Spectrum and OSD control.
VGA and HDMI OSD output implemented.
OSD can be controlled with connected PS/2 keyboard.
Based on flashfloppy-osd 1.9 by Keir Fraser
Implementation: github.com/proboterror
I2C communications to the host:
- Emulate HD44780 LCD controller via a PCF8574 I2C backpack. Supported screen size 20x4 characters.
- Support extended custom FF OSD protocol with bidirectional comms, up to 40x4 characters.
Use Visual Studio Code.
Install "Arduino Community Edition" extension.
Check and correct paths to rp2040 packages / Arduino CLI executable in .vscode/c_cpp_properties.json and scripts/make.ps1.
Run "Terminal/Run Task.../Build"
Do not use Arduino IDE, it uses different SDK / libraries resulting in capture sync issues.
Add '#define WAVESHARE_RP2040_ZERO' in g_config.h when targeting WaveShare RP2040-Zero.
- Connect host computer to Raspberry Pi Pico USB. Do not forget to disconnect +5V line from ZX.
- Use putty / minicom to connect to RP Pico COM port (9600 baud).
- Press 'h' for menu help.
I2C OSD uses 2 wires: SDA and SCL to connect RGBI2VGA adapter and GOTEK. Connect GOTEK SDA and SCL pins to Pico GP16/GP17 pins. SDA and SCL lines should be pulled up to VCC(3.3V) with 4.7~10K resistors on GOTEK or RGBI2VGA side.
OSD also can be used with any device supporting LCD PCF8574 16x2/20x4 protocol.
WaveShare RP2040-Zero board supported with keyboard interface disabled (GP26/GP27 for SDA/SCL).
GOTEK configuration:
flashfloppy/wiki/Hardware-Mods#lcd-display
flashfloppy/wiki/FF.CFG-Configuration-File
FF.CFG:
for FF OSD protocol with dual OLED/LCD support:
set:
display-type=auto
or
display-type = oled-128x64
with
osd-display-order = 3,0
osd-columns = 40
and
display-off-secs = 0-255 (60 by default)
display-order and osd-display-order can be set independently.
for single PCF8574 20x4 LCD display protocol:
set:
display-type=lcd-20x04
with
display-order=3,0,2,1
and
display-off-secs = 0-255 (60 by default)
Russian filenames are supported, requires flashfloppy-russian patched flashfloppy GOTEK firmware.
- Selected USB keyboards can be used with passive USB->PS/2 adapter: requires explicit support in keyboard's internal controller. Not tested.
- CTRL+RIGHT - right
- CTRL+LEFT - left
- CTRL+UP - directory up
- CTRL+DOWN - select item
- F10 - PAUSE (Z80 BUSRQ/) (trigger)
- F11 - MAGIC (Z80 NMI/)
- F12 - RESET (Z80 RST/)
- Input: CH446Q pin 5: common/GND
- Output: CH446Q pin 15: MAGIC, pin 13: RESET, pin 11: PAUSE.
Selectable runtime HDMI palettes in separate branch (setting save not implenented).