Tinyllama2
A tiny x86 retro computer
Install / Use
/learn @eivindbohler/Tinyllama2README
- 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!
Note
YouTube walkthrough + setup coming soon!
Table of Contents
- Summary
- Project Goals
- What's New In Version 2?
- Full system specs
- Building
- MT-32 / General MIDI
- WiFi Connectivity
- Wiki
- Help
- Roadmap
- Contributing
- License
- Contact
- Acknowledgements
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
What's New In Version 2?
Last year I released [version 1 of the TinyLlama][tinyllama1].
While I was very happy with it and it worked great, there were a couple of things I felt were still missing + a few bugs.
The two main new features in version 2 are:
- Built-in hardware USB HID (keyboard+mouse) to PS/2 emulation using [rasteri's HIDman firmware][hidman] running on a CH559 microcontroller
- On-board Wemos D1 Mini ESP8266 for providing either a Hayes-compatible modem-over-WiFi or ethernet-over-WiFi (SLIP), depending on the firmware on the ESP.
Both the CH559 and the ESP8266 can be easily re-flashed/programmed in-place.
Look at Programming the CH559 and [Programming the ESP8266][wiki-wifi].
Full system specs (revision 2.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
- [Alternative graphics cards][wiki-alternative-gpus]
- Crystal CS4237B all-in-one audio chip
- 12mm PC-speaker
- CR1220 battery for persistent real-time clock
- Power and reset buttons
- Connectivity
- USB-C for power
- 2 x USB Type-A connectors for HID-compliant keyboard and mice
- 2 x USB Type-A connectors for storage devices (USB 2.0)
- MicroSD slot for storage
- DE-9 RS232 serial port (COM1)
- Modem or Ethernet/SLIP over WiFi (COM2)
- Internal 2.54mm pin-header for connecting 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
- Pin headers for attaching a GY-PCM5102 I²S DAC module
- Button for toggling between MT32 / General MIDI mode
- Button for switching between audio ROMs / soundbanks
- 4-pin I²C connector for an OLED display
Software
- [Custom Coreboot/SeaBIOS ROM][bios]
- MS-DOS / FreeDOS
Building
Sourcing Parts
Full BOM (bill of materials) can be found [in the wiki][wiki-bom].
- The TinyLlama PCB rev2.1
- 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
- Wemos D1 Mini ESP8266, optional
- A CR1220 battery if you want a persistent real-time clock
- One or more USB flash drives + an optional microSD card
- A USB-C power adapter (minimum 2A)
For MT-32/MIDI - optional
- GY-PCM5102 DAC module
- Raspberry Pi Zero 2 W with a microSD card
- An [mt32-pi compatible OLED display][mt32-pi-oled], optional but nice
Assembly
Solder all components onto the TinyLlama rev2.1 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 a bit tricky to solder. Take a look at the [wiki][wiki-assembly] for more in-depth assembly instructions.
Programming the CH559
- Download the latest firmware binary from this repo, in the
hidman-binaryfolder. Alternatively, get the latest source code from the [official repo][hidman] and compile it yourself. - Download and install
WCHISPTool_Setup.exefrom [WCH's website][wch]. Unfortunately, this tool only supports Windows. If you're on macOS or Linux, maybe try using virtualization software, or even another computer. - Open the
WCHISPTool_CH54x-55xapplication. - Make sure the TinyLlama is powered off.
- Remove the jumper from the "HID_POWER" pin header on the PCB (to ensure that the computer doesn't backpower the TinyLlama).
- Connect a USB cable (type A to type A) between one of the HID USB ports on the TinyLlama and the Windows computer.
- Press and hold the "PRG" button on the bottom side of the TinyLlama until the CH559 device pops up in the WCHISPTool.
- Select the firmware binary file under Download File -> Object File1.
- Click the "Download" button. Hopefully you'll get a success message in the log section on the right side of the program window.
- Disconnect the USB cable.
- Add the jumper to the "HID_POWER" pin header on the PCB.
- Connect a keyboard to one of the HID USB ports. You should be good to go!
Programming the BIOS
When purchasing the SOM-128-EX module from DMP, its ROM chip comes preinstalled with an Arduino-like bootloader which isn't what we want. 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:
- 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. NB: You have to use a USB stick for this, an SD card won't work since the crossbar is configured to use different pins on the SOM for SD traffic.
- Do a block-level transfer of the
INITBIOS.IMGfrom this repo to the USB drive. Use [Balena Etcher][balena-etcher], or the command line if you know what you're doing (macOS example):
$ diskutil list
(Find your USB drive, eg. /dev/disk2)
$ diskutil unmountDisk /dev/disk2
$ sudo dd if=INITBIOS.IMG of=/dev/rdisk2 bs=1m
- Insert the USB flash drive into the TinyLlama and turn it on. It'll hopefully boot into MS-DOS. Then, to flash the ROM:
C:\>anybios w initbios.rom
...and reboot.
For subsequent BIOS updates, you can use the ROM's built-in virtual floppy drive available from the boot menu (press F12).
When booted from this you'll only need a regular USB stick (formatted as FAT16/FAT32) containing the new BIOS file.
Installing MS-DOS
A note on selecting the DOS type:
I've gone with MS-DOS 6.22 for maximum compatibility.
If you prefer FreeDOS (or another DOS variant), prepare a bootable USB installer disk and use that instead of the built-in virtual floppy.
- Pick a bootable USB drive or Micro SD card to use as the boot drive - for MS-DOS 6.22 you'll be limited to FAT16 and 2 GB per partition (though you can have several). For FreeDOS with FAT32 you can go all the way up to 2 TB.
- Insert it, turn on the system, press F12 to bring up the boot menu, and select the virtual floppy drive.
- Use
fdiskfrom the command prompt to partition the SD/USB drive and set it to beActive. - Restart and again select to boot from the virtual floppy.
Useformat c: /s /uto format the drive and copy over system files. Finally usefdisk /mbrto make sure the Master Boot Record is correct and the drive should be bootable. - Copy over the
DOSfolder from A: to C:.
You can either do this manually and createCONFIG.SYSandAUTOEXEC.BATfiles to your liking, or more conveniently, just run theSETUP.BATscript that'll do this for you. The provided config files lets you choose from a clean boot or a QEMM-based one with XMS, EMS and 631 kB of free conventional memory.
Programming the CS4237B Firmware
- Copy the
CS4237BandUNISOUNDfolders from this GitHub repo over to your SD/USB boot drive and start the system. - To program the firmware, run the
RESOURCE.EXEcommand below and check that you get the same output:
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
- Make sure the correct
BLASTERenvironment variable is set andUNISOUND.COMcommand is called fromAUTOEXEC.BAT. Note that the 8-bit DMA channel is 1 and the IRQ is 7:
SET BLASTER=A220 I7 D1 P330 T4
C:\UNISOUND\UNISOUND.EXE /V60 /VW60 /VF60 /VL60 /VP60 /VC0 /VM0
- Reboot the system, and you should get the following output:
U
Related Skills
node-connect
337.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.3kCommit, push, and open a PR
