Demofruit Installation and Use
Software Installation
Head here first to download the latest release UF2 of Demofruit for Fruit Jam.
Enter RP2350 bootloader mode
Entering the RP2350 bootloader is easy. Complete the following steps.
Before you start, make sure your Fruit Jam is plugged into USB port to your computer using a data/sync cable. Charge-only cables will not work!
Turn on the On/Off switch - check that you see the ON light on so you know the board is powered.
To enter the bootloader:
- Press and hold the BOOT/BUTTON1 button down. Don't let go of it yet!
- Press and release the Reset button. You should still have the BOOT/BUTTON1 button pressed while you do this.
- Continue holding the BOOT/BUTTON1 button until you see the RP2350 drive appear.
- You can now release but BOOT/BUTTON1 button.
Drag UF2
Navigate to the folder where you downloaded the uf2 file, then drag it onto the RP2350 drive.
The board will automatically reboot and Demofruit will launch automatically.
Fruit Jam Connections
Plug in an HDMI cable to the Fruit Jam's DVI-D Video Output port, then plug the other end of the cable into an HDMI display.
Plug in a 3.5mm TRS cable to the Fruit Jam's Stereo Headphone jack, and then plug the other end into a set of powered speakers.
Play Demos
You can use the Fruit Jam's buttons to navigate the Demofruit menu. Directions are listed on the main page:
- Button #3 = Up
- Button #2 = Down
- Button #1 = Launch
- Reset = Quit a demo and go back to menu screen
Starfield
A forward-warping star field with per-letter bouncing chrome text. The classic "space + scroller" demo opener.
- Button1 — cycle the text message (`
Adafruit`, `Fruit Jam`, `kqvc`,
`L 4 r 5 5 5`; editable at the top of starfield_impl.h) - Button2 — step warp intensity
- Button3 — randomize star density
Plasma
Palette-cycled plasma — smoothly morphing colored blobs generated from summed sine waves. Originally used the RP2350's hardware palette (DVHSTX8); in the sampler it renders through the shared 16-bit display via a software palette LUT.
- Button1 — cycle palette (Fire / Ice / Toxic / Lava / Rainbow)
- Button2 — toggle palette-rotation vs. full-animate mode
- Button3 — randomize wave frequencies and drift (can produce very large, slow cells)
Chrome Sphere
A dual-core raytracer: a reflective chrome sphere orbiting over a cream-and-red checkerboard, with specular highlights and a shadow. Core 1 renders while core 0 upscales and blits.
- Button1 — randomize light angle
- Button2 — randomize camera height
- Button3 — randomize camera distance
Valley Run
A wireframe trench flythrough with a flat-shaded fighter ship strafing and banking through it — a nod to the vector-landscape demos and to Star Fox.
- Button1 — cycle wire color (ship auto-picks the complementary color)
- Button2 — step scroll speed (5 presets)
- Button3 — randomize terrain
Rotozoom
A tiling bitmap rotating and scaling in real time (a "rotozoomer"), with a blue-tinted spherical lens bubble drifting over it in a Lissajous orbit. Uses fixed-point math and dual-core rendering. The source bitmap is a 128×128 image baked into `texture.h` (see "Creating the rotozoom image" below).
- Button1 — cycle motion preset (Normal / Fast / Reverse / Slow Drift /
Zoom Frenzy) - Button2 — toggle the lens
- Button3 — randomize the zoom range
The Juggler
A port of Eric Graham's 1987 Amiga *Juggler* raytracer — a robotic figure juggling three mirrored balls over a checkered floor. The original took about an hour per frame on a 7 MHz 68000; the Fruit Jam renders a frame in about 1.5 seconds.
On launch it raytraces 24 frames of a juggling cycle into PSRAM (watch the "venetian blind" render, ~20 seconds, both cores working), then loops smooth playback forever — the same render-then-playback architecture as Graham's original `movie` player.
- Button1 — slower playback
- Button2 — faster playback (3/6/12/18/24/30 fps)
- Button3 — pause / resume
Page last edited July 17, 2026
Text editor powered by tinymce.