
ArduinoPC
slu4coder/Arduino-Nano-PC
1 Arduino Nano + 1 Logic Chip = Personal Computer with VGA and PS/2
/ArduinoPC.kicad_pcb.jpg)
1 Arduino Nano + 1 Logic Chip = Personal Computer with VGA and PS/2
ArduinoPC is an open-source printed circuit board by slu4coder, from the slu4coder/Arduino-Nano-PC repository on GitHub. It is a 2-layer board of 43.2 × 36.1 mm with 14 parts on 46 nets, routed with 295 tracks and 0 vias.
It is built around the 74HC08D and 74HC166D. Its parts include 8 resistors, 2 ICs and 2 connectors. It belongs with the AVR (ATmega, ATtiny) boards of this library.
I am pushing the limits of how much compute you can get out of an Arduino Nano:
o 320x200 pixels of monochrome VGA output (optional: 16 row colors)
o PS/2 keyboard readout
o requires only 1(!) logic IC 74HC166Set the Nano's fuses for output of the 16MHz system clock on pin D8 (see appendix A below).
Copy the library files 'os.h' and 'os.S' into a folder '../Arduino/libraries/os'.
Start a new sketch with '#include <os.h>'. The following global variables and functions are available:
int os::frames built-in 16-bit 60Hz frame counter
byte os::vram[25][40] character video RAM array
byte os::cram[25] row color RAM array, available colors are:
WHITE, BLACK, GRAY, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN,
DKGRAY, DKRED, DKGREEN, DKYELLOW, DKBLUE, DKMAGENTA, DKCYAN.
os::text(String s, byte x, byte y, byte col = 0) prints text at screen position (x, y), col = 0: don't set row color
os::fill(char c = 32) fills the video RAM with character c
os::scroll() scrolls the video RAM one step upwards
os::wait(int n) waits for n frames
byte os::getkey() returns keystroke ASCII code (none: 0)26KB FLASH (1KB SRAM) of the Nano's 30KB FLASH (2KB SRAM) are usable, respectively. To save SRAM, define constant variables in FLASH memory by adding PROGMEM to the data type. Constant string arguments can be defined in FLASH by using the F("...") macro.
Have fun!
APPENDIX
A. Setting Arduino Nano's fuse bytes via ISP (in-situ programming) for output of system CLK
o Connect two Arduino Nanos in the following way (programmer -> target): D13 -> D13, D12 -> D12, D11 -> D11, D10 -> RESET, 5V -> 5V, GND -> GND
o Arduino IDE: Upload sketch 'examples/ArduinoISP' into programmer and select 'Tools/Programmer/Arduino as ISP'.
o Open the file 'C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt'.
o In section '## Arduino Nano w/ ATmega328P' (line 141), change line 149 'nano.menu.cpu.atmega328.bootloader.low_fuses=0xFF' (default) to '...=0xBF' (output system CLK on Pin D8 (B0)) and save the file.
o Close and re-open the Arduino IDE for the changes to become active.
o Select target board: 'Arduino Nano', processor: 'AtMega328P' and 'Tools/Burn bootloader'.
B. Hardware
Pin A0 (C0): keyboard input CLK
Pin A1 (C1): keyboard input DAT
Pin A2-5 (C2-5): 4-bit color output to 74HC08 (optional)
Pin D0-7 (D0-7): 8-bit pixel output to 74HC166
Pin D8 (B0): CLKO (16MHz system clock output)
Pin D9 (B1): unused
Pin D10 (B2): /VSYNC VGA (timer1, every 1/60s)
Pin D11 (B3): /PE 74166 pixel shift register synchroneous parallel load on rising edge of CP
Pin D12 (B4): /HSYNC VGA (inside ISR, every 32µs)
Pin D13 (B5): LED
| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 1k3 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P2.54mm_Vertical | R1, R2, R3 |
| 3 | 680 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P2.54mm_Vertical | R4, R5, R6 |
| 2 | 68 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P2.54mm_Vertical | R7, R8 |
| 1 | 74HC08 | Package_DIP:DIP-14_W7.62mm | U2 |
| 1 | 74HC166 | Package_DIP:DIP-16_W7.62mm | U1 |
| 1 | Arduino_Nano_v3.x | ArduinoPC:Arduino_Nano | A1 |
| 1 | LOGO | logo:logo | G*** |
| 1 | PS/2 Keyboard | ArduinoPC:FP_MINI_DIN_6_PS2 | J2 |
| 1 | VGA DB15 | ArduinoPC:VGA DSUB15HD_female | J1 |

slu4coder/Arduino-Nano-PC
1 Arduino Nano + 1 Logic Chip = Personal Computer with VGA and PS/2

slu4coder/Arduino-Nano-PC
1 Arduino Nano + 1 Logic Chip = Personal Computer with VGA and PS/2
/ArduinoPC.kicad_pcb.jpg?size=s&soon)
slu4coder/Arduino-Nano-PC
1 Arduino Nano + 1 Logic Chip = Personal Computer with VGA and PS/2

slu4coder/Minimal-64x4-Home-Computer
My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

slu4coder/Minimal-64-Home-Computer
Legacy: Full TTL-only home computer with VGA and PS/2 and twice the processing power of a Commodore 64





slu4coder/Minimal-Terminal
UPDATE 2026: Minimal UART Terminal with 50 x 30 characters VGA output and PS/2 keyboard

It measures 43.2 × 36.1 mm and has 2 copper layers, 1.6 mm thick.
14 parts, built around the 74HC08D and 74HC166D. 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.
From the slu4coder/Arduino-Nano-PC repository on GitHub, at the commit this page was made from: the board is Rev2/KiCAD (color)/ArduinoPC.kicad_pcb and its schematic Rev2/KiCAD (color)/ArduinoPC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask slu4coder before reusing the design.