Skip to content
tomato

The build journal

The decisions behind the computer.

My record of designing, testing, soldering, and programming Tomato. These entries capture the project at the time they were written—including ideas that changed along the way.

Envelop × Tomato

Virtual Tomato,
not an invented answer.

Bounded compute, explicit targets, and why a hardware timeout never becomes an automatic virtual replay.

Read the dispatch
Tomato OS menu captured from the FPGA display path
15 Sep 2026

Virtual Tomato, Not an Invented Answer

Bounded compute keeps the program visible and the execution target explicit.

15 Sep 2026

Do Not Discard the Preview

The development preview becomes a browser journey built from the generated OS image.

14 Sep 2026

Synthesis Bypass

A local preview shortens software iteration without pretending to be physical execution.

14 Sep 2026

Multiple Participants

The messenger grows from a two-party demonstration into conversations with named participants.

14 Sep 2026

Envelop — Tomato Gets a Message App

A messenger becomes a real Tomato OS application, not merely a host-side mockup.

13 Sep 2026

ISA Upgrade: Nine New Tricks

Nine new instruction names exposed work the Dual-LUT datapath could already perform.

11 Sep 2026

HDMI, Properly Captured

An HDMI capture card and OBS—record the stream, not the monitor with a phone.

11 Sep 2026

Of Course Tomato Needs Sudoku

Arrows plus a digit-cycle button. The game does not wait on the full keyboard matrix.

11 Sep 2026

Wallpaper, Polish, and the Rest of the Computer

TomatoOS grows a wallpaper; the site gets less overwhelming; ~2,987 lines locked as a cut.

11 Sep 2026

When assembly is still too high-level

Growing past 52 burns: named mnemonics can hide what Dual-LUT already computes.

29 Aug 2026

Register Upgrade

32,768 General Purpose Register File — 15-bit depth; half a Blackwell SM; using less wastes the SRAMs.

29 Aug 2026

Tomato works beautifully!

HDMI signal and a GUI on a TV, running over 2,300 lines of assembly.

28 Aug 2026

One Press, One Key

Fixing the keyboard matrix bounce and growing the vocabulary with pseudo-instructions.

28 Aug 2026

Exploring Beyond Vivado

Open-source FPGA synthesis: Yosys, nextpnr-xilinx, Project X-Ray, openFPGALoader.

28 Aug 2026

Pixels on the glass

12-bit DVI PMOD soldered and flashed. Color bars on HDMI from the Nexys.

26 Aug 2026

The PMOD pivot

VGA adapters failed. A Digilent PMOD is in transit for FPGA pixels.

23 Aug 2026

The invisible logic

No on-board FSM. Drive A/B/C and opcodes from outside — about 1 Hz.

21 Aug 2026

First lights and flux

Muxes, adders, LEDs, headers down. The board lights up — nothing shorted.

20 Aug 2026

The gallery paradox

A slideshow with captions beat the magazine-inside-a-magazine layouts.

18 Aug 2026

First phase of assembly

DigiKey on the desk. Every 74ACT151 down. The board next to the sim.

16 Aug 2026

Web optimization

Shrinking the KiCad GLB to 1.26 MB Draco, correcting the first draft, and what the stack is now.

15 Aug 2026

PCBs arrive

Five boards. Continuity on power is clean. No islands.

15 Aug 2026

ISA as a Wire

Parametric datapath, not an emulator. About 37 family maps — the number moves as the copper does.

13 Aug 2026

Solder station arrives

Through-hole assembly begins. Tomato waits on copper and DigiKey.

13 Aug 2026

Front-page news in Ashtown Valley

The paper is a 90s broadsheet. Ashtown Valley, the Bay Perimeter.

07 Aug 2026

Ordered Tomato

Boards on JLCPCB. Parts on DigiKey. The dual-LUT ALU left the screen.

02 Aug 2026

Designing additional boards

The ALU was the hard part. The rest is 32-bit plumbing while fab runs.

31 Jul 2026

Falling back to 32b

A 40-bit word doubled the explanation without doubling silicon on the bench.

31 Jul 2026

The lingering catch

A throwaway FSM that becomes Tomato anyway — or build the rest of the machine.

30 Jul 2026

Redesign into 40b

The bottleneck was the instruction word, not the ALU. The next day takes it back.

13 Jul 2026

Truth table latch

If the next op is still ADD, pass operands. Keep the opcode latched.

13 Jul 2026

Pipelined FPGA — what if

If the winds stop, then we die. Flexibility has a physics.

13 Jul 2026

Downgrade for an upgrade

Do not fab one 240 mm monster. Cascade 16-bit cells.

13 Jul 2026

Demo ideas

Fibonacci is too small. A self-programming FSM on a 4-bit slice.

13 Jul 2026

Architecture upgrade

If LUT2 costs four chips, build the second LUT3.

27 Jun 2026

Elimination of mode multiplexers

LUT3 feeds the adder. Logic rides the arithmetic path instead of racing it.

26 Jun 2026

ALU refinement

NAND the generate. Spare gates as inverters. 74283 per nibble.

26 Jun 2026

Redesign with 74251

Three chips for a cell was the wrong optimization. Same logic, no contention.

19 Jun 2026

ALU segment display

Thirty-two digits. One ROM. Latches so they stay bright.

16 Jun 2026

Microcode control modularization

Split decode onto small boards with local EEPROMs so ribbons stay short.

15 Jun 2026

Multiplication and division

Naïve shift-add is slow. A Wallace tree eats the board. Priority-encoder loop.

11 Jun 2026

Load/store pipeline

Every opcode indexes a 48-bit microcode word. Two phases, or three if memory waits.

10 Jun 2026

Implementing the mul-div engine

Multiply in four cycles. Divide is the trick. 74xx284/85 sequenced.

Origin

Welcome to Tomato 32

The first page of the vault. From simple gates to a parametric datapath.