README.md
# F1C100S Linux Game Boy
A 106 Ć 150 mm, four-layer handheld Linux board built in tscircuit from the
tested F1C100S Linux dev board. It integrates the F1C100S and its 32 MiB RAM,
16 MiB SPI NOR, a removable 2.8-inch ILI9341 SPI display, ten game buttons,
speaker amplifier and volume control, USB-C/FEL, and a 3 Ć AA boost supply.
## Hardware
- Allwinner F1C100S with the proven power, clock, DDR and boot-flash circuit
- LCDWiki MSP2807/ILI9341 display on a keyed 14-pin 2.54 mm header
- PCA9535 I²C GPIO expander for Up/Down/Left/Right, A/B/X/Y, Select and Start
- F1C100S analog codec output, wheel volume control, PAM8403 mono BTL amplifier,
filtered speaker output and JST connector
- USB-C device/power port with 5.1 kΩ CC pull-downs and USB ESD protection
- 3 Ć AA input, power slide switch, MT3608 5 V boost and automatic USB/battery
isolation
- UART0 debug pads and removable SPI-flash CS boot/FEL jumper
- Single-sided component placement; through-hole connectors insert from the top
The display module and speaker are user-fitted accessories. Every fitted PCB
component has an explicit JLCPCB/LCSC part number; current availability is in
`fabrication/jlcpcb-availability.json`.
## LCD header
| Pin | Signal | F1C100S |
|---:|---|---|
| 1 | +5 V display power | ā |
| 2 | Ground | ā |
| 3 | Chip select | PE7 / SPI1 CS |
| 4 | Reset | PE3 |
| 5 | Data/command | PE2 |
| 6 | MOSI | PE8 / SPI1 MOSI |
| 7 | Clock | PE9 / SPI1 CLK |
| 8 | +3.3 V logic | ā |
| 9 | MISO | PE10 / SPI1 MISO |
| 10ā14 | Not connected | ā |
The four display mounting holes use the LCDWiki mechanical pattern. Confirm the
exact module outline and header orientation before purchasing an enclosure.
## Linux
`firmware/carrier.dtsi` enables the SPI flash, ILI9341 display, PCA9535 gamepad,
native audio codec, UART console and USB peripheral controller against upstream
`suniv-f1c100s.dtsi`. See `firmware/README.md` for kernel options and integration
notes. A compact Buildroot-style image is appropriate for the 32 MiB RAM and
16 MiB flash budget. A bootable binary image is not bundled because flash
partitioning and emulator selection are product choices.
Normal boot uses the SPI flash with `JP_BOOT` fitted. The jumper is in the
right-side service area beside the LCD, outside the display outline. Remove the
shunt to force the SoC ROM into USB FEL for recovery/programming. UART0 is 3.3 V logic at
115200 8N1: board TX to adapter RX, board RX to adapter TX, and common ground.
## Build and verify
```sh
npm ci
npm run typecheck
npm run build
npm run verify
npm run check
```
`npm run check` runs the tscircuit source, netlist, pin-specification and shorts
checks. `npm run verify` independently asserts the board size/layer count,
zero emitted error elements, all critical connectivity, explicit JLC identifiers,
top-only assembly, and every routed via at exactly 0.30 mm drill / 0.45 mm pad.
The manufacturing outputs are in `fabrication/`: Gerbers and drill files,
JLCPCB BOM/CPL, generic BOM/PnP, PCB render, schematic PDF, circuit JSON and the
machine-readable verification report.
## Manufacturing notes
- Order as a four-layer, 1.6 mm FR-4 board. Confirm the fabricator stack-up and
impedance settings before ordering; geometric DRC alone does not guarantee
USB 90 Ī© differential impedance.
- Requested via geometry is 0.30 mm finished drill and 0.45 mm copper pad for
every routed via.
- The 5 mm battery-cable notch is unplated and opens through the lower board
edge; do not convert it to a closed plated slot.
- The LCD and speaker are not SMT assembly line items. Fit them after assembly.
- The class-D speaker output is differential. Do not connect either speaker lead
to ground.
- Begin bring-up from current-limited USB power before testing the battery path.
- This design is derived from a tested Linux core, but the new handheld carrier
and its power/audio/display integration still require first-article electrical,
thermal and enclosure validation.
## References
- [Tested F1C100S Linux dev board](https://tscircuit.com/seveibar/f1c100s-linux-dev-board)
- [Reference tscircuit Game Boy](https://tscircuit.com/abse/gameboy)
- [Upstream F1C100S device tree](https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/allwinner/suniv-f1c100s.dtsi)
- [Upstream ILI9341 binding](https://www.kernel.org/doc/Documentation/devicetree/bindings/display/ilitek,ili9341.txt)