Skip to the content
2 layers190 × 100 mmMicroMicro, the printed circuit board in 3D

A tiny byte-syzed 65c02 microcomputer

Size
190 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
126
Nets
130
Pads
762
Tracks, vias
2,042, 368
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
7 Oct 2024
Updated
12 Jan 2026

Overview

MicroMicro is an open-source printed circuit board by smaldragon, from the smaldragon/MicroMicro repository on GitHub, published under the Unlicense licence. It is a 2-layer board of 190 × 100 mm with 126 parts on 130 nets, routed with 2,042 tracks and 368 vias.

It is built around the 74HCT540D, 74HC590ADW and 74HC10D, with the 74HC14, 74HC166D and 74HC174D among its other parts. Its parts include 41 diodes, 32 switches, 17 capacitors, 12 ICs and 8 resistors.

Main components

8

README

README.md

MicroMicro

PCB Render Emulator Screenshot

The MicroMicro (working name) is a project designed for a series I inteded(intend) to write, about how microcomputers work and how to go about developing one. It was designed to use a relatively small amount of integrated circuits (13), not use any programmable chips, microcontrollers or obselete parts, and to be a self-contained architecture that handles its own input and output (ie. not serial based).

With these requirements in mind, the overall specs are humble but capable:

  • an 65c02 8bit cpu, running at 2Mhz
  • 32KiB of ram, 8K of which are video ram
  • 256x240 black and white display, via vga
  • 1bit "beeper" audio
  • Ultra-compact 30 Key keyboard using the "gherkin" layout
  • Tape Interface for loading and storing data
  • Cartridge port for rom programs and peripheral expansion
  • 2 atari-style joystick ports

Potential Features

  • custom case made from pcbs

The software side is still up in the air, but I'm aiming for the following features:

  • A text editor
  • An high-level programming language (undecided on which)
  • A built-in assembler
  • Saving and loading via the tape interface

This code would likely be custom and documented to follow the article structure of the hardware side of things.

System Schematic Keyboard Schematic

Memory Map

text
+---------------------+-------+-----------+
| Name                | Size  | Location  |
+---------------------+-------+-----------+
| Zero Page & Stack   | 512   | 0000-01FF |
| Video Data          | 7680  | 0200-1FFF |
| General Purpose RAM | 24576 | 2000-7FFF |
| IO Registers        | 8192  | 8000-9FFF |
| Expansion ROM       | 8192  | C000-DFFF |
| Bios ROM            | 8192  | E000-FFFF |
+---------------------+-------+-----------+ 
* the area from A000-BFFF is an invalid bus conflict region

Video Data Format

Each byte corresonds to a line of 8 horizontal pixels on the screen. The screen addresses are organized as 32x30 character cells of 8x8 pixels each. 8 Consecutive bytes build one character.

This non-linear format was chosen to speed up the rendering of characters to the screen.

Keyboard and Joystick

The state of the keyboard and joysticks can be read at the following addresses:

text
+---------------------+----------+-------------------------+
| Name                | Address  | Value (bits 0-5)        |
+---------------------+----------+-------------------------+
| Keyboard Col 1      |   9FFE   |  Q   A  Shf  z   S   W  |
| Keyboard Col 2      |   9FFD   |  E   D   X   C   F   R  |
| Keyboard Col 3      |   9FFB   |  T   G   V   B   H   Y  |
| Keyboard Col 4      |   9FF7   |  U   J   N   M   K   I  |
| Keyboard Col 5      |   9FEF   |  O   L  SPC ALT ENT  P  |
| Joystick 1          |   8FFF   |  ↑   ↓   ←   →   L   R  |
| Joystick 2          |   97FF   |  ↑   ↓   ←   →   L   R  |
+---------------------+----------+-------------------------+

Beeper and Tape Interface

The Beeper is a 1bit register that is used for both audio generation and to load and save programs to tape. It can be accessed through the following registers:

text
+---------------------+-------------+-----------+
| Name                | Address     | Value     |
+---------------------+-------------+-----------+
| State               | 9FFF (read) | TB.. .... |
| Toggle Beeper       | FFFF (write)| 0000 0000 |
+---------------------+-------------+-----------+
T = Tape Input
B = Beeper State (top 2 bits of input register)

The tape interface is a 4-pin trs connector that be connected directly to a computer using an appropriate aux cable.

Note: While these registers can be accessed from alternative locations, the addresses and values on this table ensure no bus conflicts occur.

Expansion Interface

The MicroMicro has an expansion interface that allows extending the base capabilities of the system in various ways:

Expansion Interface

Generic Banked Expansion Rom

An 8KiB region is set aside in the memory map for expansion roms ($C000-$DFFF), the emulator implements a simple banked rom cartridge where the current bank can be switched by reading from $A0xx, where xx is the bank number, the selected bank is also automatically set to zero on reset.

The bios will automatically jump to address $C008 on boot if it detects an expansion rom that begins with the sring CART-RUN.

Currently expansion roms can be loaded by dragging and dropping a file into the emulator window.

IC List

The design uses only 12 integrated circuits:

  • 65c02 - 8bit CPU
  • 62256 - 32KiB SRAM
  • 39SF010 or 28C64 or 27C256 - 8KiB Program ROM
  • 74hc10 - Tripple 3inNAND
  • 74hc14 - Hex inverter
  • 74hc32 - Quad 2inOR
  • 74hc166 - 8bit parallel-to-serial shift register
  • 74hc174 - 6bit d-type latch
  • 74hc541 - 8bit buffer
  • 74hc590*2 - 8bit Counters
  • 74hc4520- Dual 4bit Counters

Operating System

The 8k bios provides a simple command line operating system with the following commands:

CommandDescription
helpLists all available commands
clearClears the display
fileThe Size and Name of the currently loaded file
newCreate a new file
name <name>Rename the current file
editOpen the file editor
saveSave file to tape
loadLoad file from tape
runRun Loaded File
peek <addr> <bytes>Read contents of Memory
poke <addr> <bytes>Write to Memory
prun <addr>Run a Machine Code Subroutine

More info on the bios can be found here

Changelog

A2

Interactive BOM

  • Reset is now performed using a MCP-100 voltage supervisor, this primarly serves to replace the 74HC14 Schmitt Trigger Hex NOT with a 74HCT04, reducing delays, improving reliabiliy of the clock oscillator circuit, and freeing 1 NOT gate for the video circuit
  • Video glitches (leftmost pixel column doubled on right, junk at the bottom of the screen) are now gone
  • VGA video output is now better centered on the screen
  • The small 6mm buzzer has been replaced with an header for a small speaker, improving volume and sound clarity
  • Filtering capacitor added to data output
  • Needless diodes removed
  • Fixed footprint for headphone jack
  • 2 additional M2 screw posts added to the center region of the board
  • Schematic rearranged

Parts

126
QtyValueFootprintReferences
371N4148PCM_Diode_THT_AKL_Double:D_DO-35_SOD27_P7.62mm_HorizontalD1, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24 +21
13100nFPCM_Capacitor_THT_AKL_Double:C_Disc_D3.0mm_W1.6mm_P2.50mmC4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C17
4MountingHole_PadMountingHole:MountingHole_2.2mm_M2_ISO7380_PadH1, H2, H3, H4
31N4148Diode_THT:D_DO-34_SOD68_P2.54mm_Vertical_KathodeUpD2, D3, D4
327KΩPCM_Resistor_THT_AKL_Double:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR3, R4, R6
2120ΩPCM_Resistor_THT_AKL_Double:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR7, R8
274HC590APackage_DIP:DIP-16_W7.62mm_LongPadsU1, U2
2DE9_PlugSmal:DSUB9-AtariJ7, J8
2R_Network04Resistor_THT:R_Array_SIP5RN2, RN3
110µFPCM_Capacitor_THT_AKL:CP_Radial_D5.0mm_P2.00mmC16
116MhzPCM_Crystal_AKL_Double:Crystal_HC49-4H_VerticalY1
11MΩPCM_Resistor_THT_AKL_Double:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR2
122pFPCM_Capacitor_THT_AKL_Double:C_Disc_D3.0mm_W1.6mm_P2.50mmC1
127pFPCM_Capacitor_THT_AKL_Double:C_Disc_D3.0mm_W1.6mm_P2.50mmC2
1330ΩPCM_Resistor_THT_AKL_Double:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR1
14.7µFPCM_Capacitor_THT_AKL:CP_Radial_D4.0mm_P1.50mmC3
15.6KΩPCM_Resistor_THT_AKL_Double:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR5
162256Package_DIP:DIP-28_W15.24mm_LongPadsU3
174HC10Package_DIP:DIP-14_W7.62mm_LongPadsU9
174HC14Package_DIP:DIP-14_W7.62mm_LongPadsU8
174HC166Package_DIP:DIP-16_W7.62mm_LongPadsU7
174HC174Package_DIP:DIP-16_W7.62mm_LongPadsU11
174HC32Package_DIP:DIP-14_W7.62mm_LongPadsU10
174HC4520Package_DIP:DIP-16_W7.62mm_LongPadsU12
174HCT540Package_DIP:DIP-20_W7.62mm_LongPadsU6
1ASmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW11
1ALTSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW30
1AudioJack4Smal:Jack_3.5mm_PJ320A_HorizontalJ3
1BSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW26
1Barrel JackConnector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_HorizontalJ6
1BuzzerBuzzer_Beeper:MagneticBuzzer_Kingstate_KCG0601BZ1
1CSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW24
1Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ1
1Conn_02x17_Odd_EvenConnector_IDC:IDC-Header_2x17_P2.54mm_HorizontalJ4
1DSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW13
1ESmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW3
1ENTSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW20
1FSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW14
1GSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW15
1HSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW16
1ISmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW8
1JSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW17
1KSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW18
1LSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW19
1LEDPCM_LED_THT_AKL:LED_Indicator_D3.0mm_W4.6mm_L6.5mmD41
1MSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW28
1NSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW27
1OSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW9
1PSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW10
1QSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW1
1RSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW4
1R_Network06Resistor_THT:R_Array_SIP7RN1
1SSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW12
1SHIFTSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW21
1SPACESmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW29
1SST39SF0x0Package_DIP:DIP-32_W15.24mm_LongPadsU4
1SW_PushButton_Switch_THT:SW_Tactile_SKHH_AngledSW31
1SW_SPDTButton_Switch_THT:SW_Slide_SPDT_Angled_CK_OS102011MA1QSW32
1TSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW5
1USmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW7
1VSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW25
1VGAConnector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mmJ2
1WSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW2
1W65C02SxPPackage_DIP:DIP-40_W15.24mmU5
1XSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW23
1YSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW6
1ZSmal:SW_Redragon_MX_LowProfile_PCB_1.00u_OtherSW22

More from smaldragon/MicroMicro

3
  • 2 layers190 × 100 mmMicroMicro, the printed circuit board in 3D

    MicroMicro

    smaldragon/MicroMicro

    A tiny byte-syzed 65c02 microcomputer

    123 parts2Unlicense
  • 2 layers190 × 100 mmMicroMicro, the printed circuit board in 3D

    MicroMicro

    smaldragon/MicroMicro

    A tiny byte-syzed 65c02 microcomputer

    123 parts2Unlicense
  • 2 layersExcart, the printed circuit board in 3D

    Excart

    smaldragon/MicroMicro

    A tiny byte-syzed 65c02 microcomputer

    7 parts2Unlicense

Similar boards

  • 2 layers234 × 87.3 mmV1a, the printed circuit board in 3D

    V1a

    KITTY-6502/hardware

    the KITTY is a 65c02 homebrew kit microcomputer designed around text mode graphics and cartridge media. It is fully open source, and uses exclusively in-production parts.

    134 parts
  • 2 layers90 × 56.8 mmV0c-512-proto, the printed circuit board in 3D

    V0c-512-proto

    smaldragon/BNUY-ROM

    A famicom discrete logic mapper

    16 parts3Unlicense
  • 2 layers177.8 × 130.8 mmDurango, the printed circuit board in 3D

    Durango

    zuiko21/minimOS

    Scalable OS for 6502/65816

    159 parts23MIT
  • 2 layers284.9 × 96.5 mmFella, the printed circuit board in 3D

    Fella

    agkaminski/FellaPC

    DIY 6502 all-in-keyboard personal computer

    115 parts2CC0-1.0
  • 4 layers188 × 128.3 mmZAK180, the printed circuit board in 3D

    ZAK180

    agkaminski/ZAK180

    DIY all-in-keyboard computer featuring Z180 and floppy drive

    140 parts
  • 2 layers144 × 100 mmCpu td4, the printed circuit board in 3D

    Cpu td4

    nikachu2012/td4cpu

    90 parts1
  • 2 layers160.1 × 101 mmPLC-14500, the printed circuit board in 3D

    PLC-14500

    nicolacimmino/PLC-14500

    Retro trainer board based on the MC14500 1-bit ICU. The project is OSHW certified and a ready to assemble kit is available on Tindie.

    173 parts70GPL-3.0

Questions

How big is the MicroMicro PCB?

It measures 190 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MicroMicro use?

126 parts, built around the 74HCT540D, 74HC590ADW, 74HC10D and 74HC14. 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 MicroMicro KiCad files?

From the smaldragon/MicroMicro repository on GitHub, at the commit this page was made from: the board is Kicad/a1/a1.kicad_pcb and its schematic Kicad/a0/a0.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MicroMicro design in my own project?

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