Skip to content

Pico Computer 3 v0.9 (test)

Choose a tag to compare

@UKTailwind UKTailwind released this 17 Jul 20:56

Firmware and manual for the Pico Computer 3 (RP2350B).

New in v0.9

  • 3D engine — draw3d — MMBasic's DRAW3D ported as a module: quaternion-rotated polyhedra with backface culling, painter depth-sorting, per-face colours/fills/flags/lighting, and hidden-line rendering (depthmode=2, the z-buffer wireframe mode — the Elite look). Demos: tests/football.py (Peter's bouncing truncated icosahedron), tests/elite.py and tests/cobra.py (hidden-line wireframe ships).
  • hdmi.RGB640_4 — 640×480 in 16 colours, the fast game mode: the 150 KB framebuffer is half the video SRAM, so hdmi.create()'s off-screen F buffer takes the other half. Double-buffered 3D now runs faster than MMBasic on the same hardware.
  • RGB320 fast double-bufferinghdmi.create() called before hdmi.layer() claims the second half of video SRAM for the F buffer (first come, first served; layer() then errors until close("F"); call layer() first and both coexist as before).
  • Turtle pattern fillst.fillpattern(0..31) (fp), MMBasic's 32 8×8 fill patterns, plus a fix for the speckled border artefact on filled shapes; hdmi.polyfill() exposes the scanline pattern fill to everything else.
  • pcmath.AHRS — Mahony and Madgwick sensor fusion (MMBasic MATH verbatim) for IMU work: feed gyro/accel (/mag), get quaternion or Euler angles.
  • Overclock flash fixscreen(..., 315) / screen(..., 378) no longer hard-hangs: the post-write XIP re-entry now respects the flash's limits at every supported CPU clock (PICO_FLASH_SPI_CLKDIV=4, MMBasic's setting).
  • 4-bpp modes corrected — all C drawing paths now share framebuf's GS4_HMSB nibble order; RGB1024 text and graphics render with columns the right way round.
  • Console robustness — Ctrl-C during a dupterm write no longer kills the screen console; run() always restores drawing (and the console) to the visible display when a program ends, however it ends — no more "dead REPL" after interrupting a double-buffered program.
  • Performance — the 3D engine and drawing core use single-precision hardware FPU arithmetic and horizontal-span fills throughout (MMBasic parity).
  • pye editor sizing — the editor takes its screen size from the active console, fixing the bottom line in RGB320.
  • run() argumentsrun("prog.py", "in.wav", 10) hands the program its command line in sys.argv, exactly as desktop Python (and MMBasic's RUN "prog", cmdline / MM.CMDLINE$); arguments arrive as strings, argv[0] is the program path.
  • Manual and development notes updated throughout.

Flashing

USB HUB switch to DISABLE → connect the Prog port to a PC → hold BOOT, click RESET → drag firmware.uf2 onto the drive that appears → switch back to ENABLE. Your files and settings survive.

The PC emulator

New with this release: pc3emu-linux-x64.tar.gz — the Pico Computer 3 as a PC program. The same interpreter, drawing code, keyboard decoding, audio and Python toolkit as the firmware, with the hardware provided by SDL2: it boots to the banner and >>> in a window and runs the book's programs unmodified (the SD card comes pre-seeded with them). Runs on Linux, and on Windows via WSL2 — INSTALL-WINDOWS.md (also inside the tarball) walks a machine that has never seen WSL all the way to the running emulator, no Linux experience or compiler required. The release assets were refreshed on 18 July: firmware and emulator now build from the same tree, which also brings pico-sdk 2.3.0 and an upstream MicroPython sync (including a fix for pin interrupts on GPIOs above 30).

Compatibility: the prebuilt emulator binary needs glibc 2.43 or newer — Ubuntu 26.04+ (on older releases it stops with version `GLIBC_2.43' not found). On Windows/WSL, install the right version by name: wsl --install -d Ubuntu-26.04 (details in INSTALL-WINDOWS.md). On an older Linux, build from source instead — it works on any distro and takes a few minutes. Clone with git; GitHub's source ZIP/tarball won't build (it lacks the submodules):

sudo apt install -y git build-essential libsdl2-dev python3
git clone --branch pico-computer-3 https://github.com/UKTailwind/micropython
cd micropython
make -C mpy-cross -j$(nproc)
make -C ports/unix VARIANT=pc3 submodules
make -C ports/unix VARIANT=pc3 -j$(nproc)
chmod +x ports/rp2/boards/PICO_COMPUTER_3/emulator/pc3emu
ports/rp2/boards/PICO_COMPUTER_3/emulator/pc3emu