Skip to the content
PCBKitNew board
4 layers100 × 66 mmTinyllama, the printed circuit board in 3D

A tiny x86 retro computer

Size
100 × 66 mm
Copper layers
4
Thickness
1.6 mm
Parts
114
Nets
283
Pads
663
Tracks, vias
1,397, 122
Pours
6
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
23 Jan 2022
Updated
8 Mar 2023

Overview

Tinyllama is an open-source printed circuit board by eivindbohler, from the eivindbohler/tinyllama repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 100 × 66 mm with 114 parts on 283 nets, routed with 1,397 tracks and 122 vias.

It is built around the 24LC08B/P, AMS1117-3.3 and CR1220-2. Its parts include 37 capacitors, 31 resistors, 11 connectors, 6 ICs and 4 diodes.

Main components

3

README

README.md

Note
Version 2 of the TinyLlama is out!
Go here to read more: https://github.com/eivindbohler/tinyllama2



  • A fully-fledged 486/Pentium-class PC in a tiny form factor
  • Integrated Sound Blaster Pro-compatible audio
  • Add a Raspberry Pi Zero 2 for Roland MT-32 and General MIDI music
  • Open-source hardware schematics, board layout and BIOS - build your own!
  • Perfect for playing DOS games!
  • YouTube feature

Table of Contents


Project Goals

The goal of the TinyLlama project is:

  • To create a fully x86-compatible DIY DOS computer with a sound card
  • To keep the size as small as possible while keeping decent connectivity
  • To keep the cost low

History

While I regularly use and enjoy real hardware from the 80's and early 90's - this stuff is often hard to get hold of, expensive, large, heavy, unreliable and proprietary.

In 2019 this made me look into modern recreations of old hardware, and I came across Sergey Kiselev's fantastic Micro 8088 and various peripheral board designs. Wanting a challenge, I modified most of these into the PC/104 form factor and successfully made a few prototypes:


However, being born in the early 80's and growing up playing games on 386/486-era computers, I started searching for similar projects with later hardware - and couldn't really find any. I discovered industrial boards and modules with varying degrees of ISA expandability, but these were all wildly expensive.

Then, I found the 86Duino line of products from DMP.
The cheap 86Duino hardware, tailored for robotics tinkerers, seemed like a promising path. I ordered a few boards and system-on-modules and made a prototype carrier board with break-out ISA header pins. I intended to build an add-on sound card board, but this just proved too complex at the time, and I abandoned the project.

Fast-forward to 2021, and I saw Rasteri's YouTube videos detailing his experiments using different Vortex86-based industrial boards and modules, and most importantly how easy it was to utilize the powerful (and still readily available) Sound Blaster Pro-compatible Crystal CS4237B sound chip.

As fate wanted it, The Raspberry Pi Foundation had just released their Zero 2 W board, and I thought if I could put Dale Whinham's fantastic MT32-Pi bare-metal MT-32 / General MIDI synth software on it, I would be very close to my DIY dream DOS computer.

The TinyLlama and this GitHub repo is the result.

Full system specs (revision 1.1)

Hardware

  • 86Duino System-on-module
    • Vortex86EX CPU running at 60-500 MHz
    • 16 KB L1 cache (can be disabled)
    • 128 KB L2 cache
    • 128 MB DDR3 RAM
    • 8 MB programmable flash ROM
  • Vortex86VGA module running off a x1 PCI-e lane
    • Maximum resolution: 1024x768, 60 Hz
    • 4 MB SRAM
  • Crystal CS4237B all-in-one audio chip
  • 12mm PC-speaker
  • CR1220 battery for persistent real-time clock
  • Power and reset buttons
  • Connectivity
    • USB Micro-B for power (draws ~4.5W with a Pi attached, ~3W without, depending on CPU frequency)
    • 2 x USB Type-A 2.0 connectors for keyboard/mouse/storage
    • MicroSD slot for storage
    • DE-9 RS232 serial port (COM1)
    • Internal 3-pin TTL serial connector (COM2)
    • Internal 2-pin power connector for a fan (5V or 3.3V selectable)
    • 3.5mm line-out audio jack
  • MT32-Pi subsystem
    • 40-pin connector for a Raspberry Pi Zero 2
    • 9 holes for attaching a GY-PCM5102 I²S DAC module
    • Button for toggling between MT32/General MIDI mode
    • Button for switching between audio ROM's / soundbanks
    • 4-pin I²C connector for an OLED display

Software

Building

Sourcing Parts

Full BOM (bill of materials) can be found in the wiki.

  • The TinyLlama PCB
  • Modern SMD and through-hole components, as seen in the BOM
  • 86Duino system-on-module (SOM-128-EX)
  • Vortex86VGA Mini PCI-e module
  • Crystal CS4237B 100-pin TQFP. Discontinued, but readily available
  • A CR1220 battery if you want persistent real-time clock
  • One or more USB flash drives and/or a microSD card
  • A Micro USB-B power adapter (minimum 2A)
For MT-32/MIDI - optional, but highly recommended

Assembly

Solder all components onto the TinyLlama PCB. As always, it's easier to start with the low-profile ones first, like resistors and capacitors. If you're willing to spend slightly more, I recommended you let the PCB manufacturer pre-assemble most of the common components for you. Plus, some of the SMD components can be fairly tricky to solder without solder paste and a heat gun (or even better, a reflow oven).
Take a look at the wiki for more in-depth assembly instructions.

Programming the BIOS

When purchasing the SOM-128-EX module from DMP, its ROM chip comes preinstalled with an Arduino-like bootloader which is useless to us. Also, the "crossbar" is configured for using the module with the 86Duino Zero/One boards - meaning its default pin layout is completely different from what we need for the TinyLlama.

Follow these steps to flash the ROM with the TinyLlama BIOS for the first time:

  1. Find a USB flash drive, must be minimum 32 MB in size (shouldn't be a problem these days). Note that not all USB drives are bootable. Use a well-known bootable drive.
  2. Unzip the INITBIOS.ZIP file from this GitHub repo and do a block-level transfer of the INITBIOS.IMG to the USB drive. Use Balena Etcher, or the command line if you know what you're doing (macOS example):
text
$ diskutil list
(Find your USB drive, eg. /dev/disk2)
$ diskutil unmountDisk /dev/disk2
$ sudo dd if=INITBIOS.IMG of=/dev/rdisk2 bs=1m
  1. Insert the flash drive into the TinyLlama and turn it on. You should be able to enter the boot menu using F12. Select the USB drive and boot into a stripped-down FreeDOS installation. Then, to flash the ROM, type:
text
C:\>anybios w initbios.rom

...and reboot. For subsequent BIOS updates, you can use the built-in BIOS updater selection available from the boot menu (press F12). This will boot into the same minimal FreeDOS installation, but from the virtual floppy drive integrated into the ROM itself.
From there you'll only need a USB stick formatted as FAT16/FAT32 with the new BIOS file.

Installing DOS

  1. Format a microSD card or USB flash drive as a FAT32 partition with a MBR (Master Boot Record).
  2. Insert it, turn on the system, press F12 to bring up the boot menu, and select the "TinyLlama BIOS updater".
  3. Use fdisk from the command prompt to partition the SD/USB drive and set it to be Active.
  4. Reboot and re-enter the BIOS updater boot environment. Use format c: /s to format the drive and copy over system files. Finally use fdisk /mbr to make sure the Master Boot Record is correct and the drive should be bootable.
  5. Shut down the TinyLlama, eject the drive and copy over FreeDOS from another computer. I suggest putting FreeDOS in the \FDOS directory.
  6. Set up appropriate FDCONFIG.SYS and FDAUTO.BAT files (FreeDOS equivalent versions of CONFIG.SYS and AUTOEXEC.BAT). Look at the wiki for examples.

Programming the CS4237B Firmware

  1. Copy the CS4237B and UNISOUND folders from this GitHub repo over to the SD/USB drive and start the system.
  2. To program the firmware, run the RESOURCE.EXE command below and check that you get the same output:
text
C:\>cd cs4237b
C:\CS4237B>resource /f=0x120 /r=cs4237b.asm /e

Reading data from CS4237B.ASM
Length = 292    Programming EEPROM Block: 1 2    EEPROM programmed

Verifying EEPROM:
Verifying CS4237B.ASM against EEPROM . . .      Verified OKAY
  1. Reboot the system, set a BLASTER environment variable and run UNISOUND.EXE; you should get the following output:
text
C:\>set BLASTER=A220 I7 D1 P330 T4
C:\>cd unisound
C:\UNISOUND>unisound
Universal ISA PnP Sound Card Driver for DOS v0.76f. (c) JazeFox 2019-21
-----------------------------------------------------------------------
PnP card found: [CSC7537] CS4237B
BLASTER environment var found! Loading settings...
ADD:220 WSS:534 OPL:388 IRQ:7 DMA:1/1 MPU:330/I9 CTR:120 JOY:200
Initialization done.
Crystal Mixer [VOL:85 WAV:80 FM:80 LIN:0 CD:0 MIC:0]
  1. If everything went ok, add the BLASTER variable and UNISOUND command to your FDAUTO.BAT/AUTOEXEC.BAT file:
text
SET BLASTER=A220 I7 D1 P330 T4
C:\UNISOUND\UNISOUND.EXE /V60 /VW60 /VF60 /VL60 /VP60 /VC0 /VM0
  1. Feel free to experiment with the different volume levels, look at the C:\UNISOUND\UNISOUND.TXT file for further guidance.
  2. Fire up a few games to test that Adlib, SoundBlaster FM and Digital sound effects are working properly.

Wiki

For an in-depth discussion of the various components, installation, configuration, etc, take a look at the wiki.

Help

This project is indended for people with a fair bit of hardware- and DOS knowledge. If you have questions or need help, please look at the wiki and FAQ section first.

Roadmap

Coming.
In the mean time feel free to post an issue if you have tips, suggestions or want to report an error.

License

GNU General Public License v3.0

Contact

Vogons thread
@eivindbohler

Acknowledgements

Many thanks to

  • Sergey Kiselev for a fantastic open-source suite of DIY computers, and sparking my interest in designing and building these myself.
  • Rasteri for his cool videos about small DOS computers and the CS4237B chip.
  • The Vogons forum for inspiration, help and support.
  • 86Duino for making a kick-ass system-on-module at an affordable price.
  • Dale Whinham / mt32-pi for making the best synth emulator software package ever.

Parts

114
QtyValueFootprintReferences
150.1uFCapacitor_SMD:C_0603_1608MetricC9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23
747kResistor_SMD:R_0603_1608MetricR25, R26, R27, R28, R29, R30, R31
610uFCapacitor_SMD:C_0805_2012MetricC30, C31, C32, C33, C34, C35
633Resistor_SMD:R_0603_1608MetricR2, R3, R4, R5, R6, R7
50.1uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC24, C25, C26, C27, C28
41nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC3, C4, C5, C6
44.7kResistor_SMD:R_0603_1608MetricR14, R15, R16, R17
46.8kResistor_SMD:R_0603_1608MetricR18, R19, R20, R21
4H_HOLEllama_shared:H_440_HOLEH1, H2, H3, H4
4H_HOLE_TOOLINGllama_shared:H_TOOLINGHT1, HT2, HT3, HT4
3620Resistor_SMD:R_0603_1608MetricR10, R11, R12
210kResistor_SMD:R_0603_1608MetricR22, R23
222pFCapacitor_SMD:C_0603_1608MetricC1, C2
247uFCapacitor_SMD:C_1206_3216MetricC36, C37
2FFuse:Fuse_0603_1608Metric_Pad1.05x0.95mm_HandSolderF2, F3
2FBResistor_SMD:R_0805_2012MetricFB1, FB2
2L_EMI_FILTERllama_shared:L_EMI_FILTER_MCM2012B900GBEL1, L2
10Resistor_SMD:R_0603_1608MetricR1
110nFCapacitor_SMD:C_0603_1608MetricC8
116.9344MHzllama_shared:X_Crystal_SMD_HC49-SD_HandSolderingX1
11N4148Diode_SMD:D_SOD-323FD4
11kResistor_SMD:R_0603_1608MetricR13
11uFCapacitor_SMD:C_0805_2012MetricC29
12.7nFCapacitor_SMD:C_0603_1608MetricC7
1200Resistor_SMD:R_0603_1608MetricR8
120kResistor_SMD:R_0603_1608MetricR24
124LC08llama_shared:U_SOIC-8_3.9x4.9mm_P1.27mm_HandSolderingU3
1470Resistor_SMD:R_0603_1608MetricR9
1AMS1117-3.3llama_shared:U_SOT-223-3_NOTABU1
1AudioJack3llama_shared:J_AUDIO35_C95463J6
1CONNDiode_SMD:D_0603_1608MetricD1
1CR1220llama_shared:MY-1220-03BT1
1FFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF1
1FAN_PWRllama_shared:P_CONN_01X03_SQUAREP5
1GY-PCM5102llama_shared:U_GY-PCM5102U4
1I2C_OLEDllama_shared:P_CONN_01X04_SQUAREP4
1J_MINI_PCIEllama_shared:J_MINI_PCIEJ2
1J_PI_ZEROllama_shared:J_CONN_RPIJ5
1Llama_logollama_shared:LLAMA_LOGOLOGO1
1MICRO_SDllama_shared:J_MicroSD_TF01AJ3
1NPNPackage_TO_SOT_SMD:SOT-23Q1
1POWER_SWllama_shared:SW_ALPSALPINE_SPPH420100SW1
1P_DE9Mllama_shared:P_DE9MP2
1P_SOM-128-EXllama_shared:P_CONN_SOM-128-EXP1
1RESET_SWllama_shared:SW_ALPSALPINE_SPPH410200SW2
1ROM_SWllama_shared:SW_ALPSALPINE_SPPH410200SW4
1RXDiode_SMD:D_0805_2012MetricD3
1SPEAKERllama_shared:SPSP1
1SPKR_VOLllama_shared:P_CONN_01X03_SQUAREJP1
1SYNTH_SWllama_shared:SW_ALPSALPINE_SPPH410200SW3
1TTL_SERIALllama_shared:P_CONN_01X03_SQUAREP3
1TXDiode_SMD:D_0805_2012MetricD2
1USB_A_Stackedllama_shared:J_USB_A_C12049J4
1USB_Micro_Bllama_shared:J_USB_MICRO_B_10118194-0001LFJ1
1U_74LVC1G04Package_TO_SOT_SMD:SOT-23-5_HandSolderingU5
1U_CS4237B-KQllama_shared:U_TQFP-100_14x14mm_P0.5mm_HandSolderingU2
1U_MAX3243llama_shared:U_SSOP-28_5.3x10.2mm_P0.65mm_HandSolderingU6

Questions

How big is the Tinyllama PCB?

It measures 100 × 66 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Tinyllama use?

114 parts, built around the 24LC08B/P, AMS1117-3.3 and CR1220-2. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Tinyllama KiCad files?

From the eivindbohler/tinyllama repository on GitHub, at the commit this page was made from: the board is kicad/TinyLlama.kicad_pcb and its schematic kicad/TinyLlama.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Tinyllama design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers114.3 × 40.6 mmKSGER Controller REV 2.0, the printed circuit board in 3D

    KSGER Controller REV 2.0

    omega9380/KSGER-Coverplates

    T12 Soldering Iron control board. A design based on schematics created by Mindstorm88 on the EEVBlog forums.

    54 parts5
  • 4 layers87.3 × 56.7 mmCM4ClusterHat, the printed circuit board in 3D

    CM4ClusterHat

    will127534/Miniature-CM4-Cluster

    A dense cluster for four Raspberry Pi Compute Module 4

    240 parts96MIT
  • 4 layers254.9 × 150.1 mmWomo, the printed circuit board in 3D

    Womo

    muccc/WomoLIN

    Open Source Steuerung von LIN Bus Geräten im Caravan Bereich.

    534 parts84GPL-3.0
  • 4 layers101.6 × 147.3 mmKarabas go, the printed circuit board in 3D

    Karabas go

    andykarpov/karabas-go-pcb

    Karabas-Go PCB

    311 parts3
  • 4 layers70 × 69.8 mmKarabas mini, the printed circuit board in 3D

    Karabas mini

    andykarpov/karabas-mini-pcb

    Karabas Go Mini PCB

    222 parts2
  • 4 layers59 × 31 mmStlinux, the printed circuit board in 3D

    Stlinux

    VladisM/stlinux

    Board for messing around MMU less variant of Linux

    80 parts2WTFPL