Skip to content

Latest commit

 

History

History
390 lines (280 loc) · 19.1 KB

10-Inspirations.md

File metadata and controls

390 lines (280 loc) · 19.1 KB

YAPC - Inspirations

From the release of the Raspbery Pi Pico in January 2021 till now (december 2023), there are many projects around VGA and DVI/HDMI screen output, surrounded by a more ancient wave of other retro computers using other micro-controllers and/or 8 or 16 bits CPUs, mainly because old 8 bits computers are either too old or too expensive compared to what Arduino, ESP32 & al. cost and are able to achieve.

NB: As of august 2024, with the release of the RP2350, we now have 512 KB of internal RAM and 8 MB of PSRAM is easy to add.

Here's now a list of projects that are related to this:

My road to VGA on a modern micro-controller

I think I have to give some background informations about me.

My first "computer" was a Texas Instruments TI-57 around 1980, and then a Tandy TRS-80 PC-2 / Sharp PC-1500 circa. 1983.

In between, my brother bought a Sinclair ZX-81 in kit form and built it.

In 1985, for my Baccalauréat in electrical engineering, I got the short lived Amstrad CPC 664 with the monochrome GT-65 monitor.

In 1987, I got my DUT in electrical engineering and industrial computing.

Due to administrative concerns, I had to work for one year before returning to university and earned enough to afford my first Atari ST, an Atari 1040 STF and shortly after a PC-XT compatible.

I got my master's degree in "Micro Computing and Micro Electronics" in 1990, when micro controllers and FPGAs were a dream or too expensive to do at home.

If I summarize after that since this intro begins to be a little too long:

  • I never worked in the electronics world, but in IT
  • I discovered Free and Libre Open Source Software (and GNU/Linux) around 1994 and most of my geek instincts were satisfied, even if only at home...
  • I still work as a developer, with databases and "serious" web stuff mostly, using Visual Basic, ASP/VBScript, ASP.NET/C#, and now PHP, Symfony & al
  • I learned about and tried Arduino Uno around 2010, but didn't got very interested as they were rather limited even if the programming with a simple USB cable seduced me
  • I got interested in Raspberry Pis 2, 3 & 4, too, and got an Xbox 360 to play Fable II...

In 2021, shortly after I learned the existence of the RP2040 and the Pico, I stumbled on this forum thread and is still hooked up:

First thread about VGA on the Raspberry Pi forums

  • That's what interested me in this stuff, I bought a couple Picos in early 2021 and then the VGA demo board
  • cf. https://forums.raspberrypi.com/viewtopic.php?p=1829133
  • I had to (re)learn C and its low level (WTF, no objects nor associative arrays?)
  • It's so easy to reprogram it through USB!

VGA scanvideo from pico-extras by the Raspberry Pi Foundation

VGA demo board by Pimoroni

GPIO# Function
0-4 VGA: RED 0-4
6-10 VGA: GREEN 0-4
11-15 VGA: BLUE 0-4
16 VGA: VSYNC
17 VGA: HSYNC
18-22 SD CARD & SERIAL
25 ONBOARD LED
26 ONLY 1 FREE?
27-28 PWM OR DAC

HAGL by tuupola

Generic library for bitmap graphics, originally written with I²C or SPI LCD panels in mind.

HAGL HAL for Pico VGA board by CHiPs44 (it’s me ;-))

Pico stuff

pshell by lurk101

Serial accessible shell with C compiler & editor

  • base commands: ls, cd, mkdir, cat, ...
  • vi editor (from an old busybox version)
  • cc, C compiler generating ARM M0+ and now M33 code
  • cf. https://github.com/lurk101/pshell
  • Uses internal flash by default with LittleFS, SD card support for VGA board
  • Could be reworked to implement the terminal as an embedded VGA console

pt52-lua by DarkElevenAngel

Lua embedded on PT52 (a re-imagining of the VT52 by Digital)

Neotron Pico by Jonathan Pallant (the JPster)

Neotron - the Rust based home computer platform is a family of 1980's style home computers, powered by ARM Cortex-M processors, with a ROM written in Rust, and a fully open-source design.
> Neotron Pico - a microATX form-factor computer powered by the Raspberry Pi Pico (or rather its RP2040 Microcontroller)

  • cf. https://github.com/Neotron-Compute & https://github.com/Neotron-Compute/Neotron-Pico
  • VGA is a 12 bits (RGB444) implementation of scanvideo to limit the amount of GPIO pins used
  • Code is written in Rust (and intended as a showcase of embedded Rust)
  • There is an I/O controller and it is not a Pico, but there is an interesting notion of BIOS and an API to communicate via SPI (or serial ?)
  • Motherboard is in micro ATX form factor and embeds several expansion connectors usable with SPI (or I²C?)
  • Jonathan was one of the selected persons that got involved by RPi (under NDA) in the RP2350's development (cf. https://thejpster.org.uk/blog/blog-2024-08-08/)

CLUATRON by Jalecko

Standalone computer with shell (F1), Lua & editor (F2)

  • cf. https://github.com/jaleck0/CLUATRON
  • scanvideo based
  • fixed 320x240, 16 colors palette, 4x6 ASCII (32-126) font
  • USB keyboard & mouse
  • no SD card nor sound yet
  • references Gigatron for the name & Pico 8 for other inspirations

PicoVGA by Miroslav Nemecek aka Panda381

VGA/TV display on Raspberry Pico

MCUME by Jean-Marc Harvengt

M.CU.M.E = Multi CompUter Machine Emulator

PicoBB by Memotech-Bill & others

Picocomputer 6502 by Rumbledethumps

  • cf. https://github.com/picocomputer
  • 8 Mhz 65C02 as CPU + 2 supporting Picos for VGA and I/O
  • Interesting concept of the 4-bits PIX to handle communication between the 2 Picos via PIO
  • Scanvideo features on "GPU" side: 3 selectable layers
    • bitmap
    • tilemap with scrolling
    • sprites and "affine" sprites
    • text
  • 8 channels PSG with waveforms and ADSR parameters (january 2024)

PicoSystem from Pimoroni

Game console on a tiny 1.54" 240x240 pixels LCD, with a C++ SDK or Micropython

PicoDVI by Luke Wren

Bitbanged DVI on the RP2040 Microcontroller
Now less bitbanged with RP2350.

  • cf. https://github.com/Wren6991/PicoDVI
  • License: BSD 3-Clause
  • Blatantly not VGA, but used as the reference for every DVI/HDMI & RP2040 stuff
  • Luke is now also famous as the creator of the Hazard3 RISC core embedded in RP2350!

RP2040-PICO-PC by Olimex

RP2040-PICO-PC allows RP2040-PICO to become a computer with SD card, HDMI display, Audio, USB keyboard, Li-Po charger and battery support, UEXT connector, and I2C connector.

PicoMiteVGA & WebMite by Geoff & others

The PicoMiteVGA is a Raspberry Pi Pico with VGA output, PS2 keyboard input, SD card storage and running the free MMBasic interpreter.
The WebMite is a Raspberry Pi Pico W running the free MMBasic interpreter. This is similar to the PicoMite running on the standard Raspberry Pi Pico but this version includes full support for the WiFi capability of the Pico W.

Picoputer by amen

Emulation of Transputer nodes

Pico-56 by Troy Schrapel

The HBC-56 (65C02/TMS9918A/AY-3-8910 retro computer) fully emulated on a Raspberry Pi Pico

  • 12 bits VGA with homemade PIO (not scanvideo based)
  • 65C02 CPU, 65C22 VIA, TMS9918A VDP, Dual AY-3-8910 PSGs, Dual NES controller inputs, PS/2 keyboard input, 96KB Banked RAM/ROM
  • cf. https://github.com/visrealm/pico-56/, MIT license
  • can be repurposed to be whatever computer, see "episodes" for examples

Neo6502 by OLIMEX

65C02 with RP2040 managing RAM and clock, HDMI output, USB keyboard

PicoVision by Pimoroni

Dual RP2040 (Pico W + RP2040 on board), DVI (HDMI), 2x8MB PSRAM (!)

pico-vdp by Patrick Alastair

Raspberry Pi Pico based Video Display Processor RC2014 Board with video and audio output, keyboard and mouse input

DECstation 2040 by Scott

RP2040 based DECstation 3000 emulator that can run DECWindows (Ultrix + X Window)

Pico Mac by Matt Evans

Runs the umac Mac 128K emulator on a RP2040 Pico (up to Mac 208K)

  • Outputs VGA 640x480@60Hz, 512x342 monochrome, using three resistors and PIO (not scanvideo based)
  • USB HID keyboard and mouse, SD card option, ...
  • cf. https://github.com/evansm7/pico-mac

Hopper by sillycowvalley/biggertiger

Hopper is a modern ";" and "{ .. }" language (like C but with a managed heap like C# and Java) designed to target small devices like the Raspberry Pi Pico (and other RP2040 devices or 8 bit CPUs like the 6502).

Pretty Poly by lowfatcode

Pretty Poly - A super-sampling complex polygon renderer for low resource platforms. 🦜

Raspberry Pi Pico: loading code into RAM and running it by Kevin Boone

Not a library, but an interesting article in 2 parts:

Non Pico stuff

FabGL by Fabrizio Di Vittorio

  • C++ graphics library for ESP32 with 64 colors VGA output supporting PS/2 keyboard and mouse
  • http://www.fabglib.org/

LVGL by the LVGL team

  • Light and Versatile Graphic Library
  • cf. https://lvgl.io/
  • License: MIT
  • Language: C99 (C++ compatible)
  • Very complete / complex
  • Ported to Pico / RP2040 with LCD SPI/I²C screens in mind

raylib by Ramon Santamaria

  • "raylib is a simple and easy-to-use library to enjoy videogames programming."
  • cf. https://www.raylib.com/
  • License: unmodified zlib/libpng
  • Language: C99 (using PascalCase/camelCase notation)
  • Not aware of Pico officially and at first sight

Adafruit GFX Library by Adafruit

  • "This is the core graphics library for all our displays, providing a common set of graphics primitives (points, lines, circles, etc.)."
  • cf. https://github.com/adafruit/Adafruit-GFX-Library
  • License: BSD (2 clauses?)
  • Language: C / C++
  • Arduino IDE oriented?

Pico-8 and TIC-80 fantasy consoles

Agon light 2 from the Byte Attic

RC2014 ecosystem