Skip to the content
PCBKitNew board
2 layers93 × 70 mmGPU12864, the printed circuit board in 3D

Simple Arduino-based GPU.

Size
93 × 70 mm
Copper layers
2
Thickness
1.6 mm
Parts
8
Nets
45
Pads
82
Tracks, vias
176, 8
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Jul 2026
Updated
24 Aug 2026

Overview

GPU12864 is an open-source printed circuit board by html-css-js-python, from the html-css-js-python/GPU12864 repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 93 × 70 mm with 8 parts on 45 nets, routed with 176 tracks and 8 vias.

It belongs with the AVR (ATmega, ATtiny) boards of this library.

README

README.md

VidiaG Force RT-X12864

KiCad Arduino Python License Issues Stars

VidiaG Force RT-X12864 is an open-source, microcontroller-based GPU designed for 128x64 GLCD displays. It acts as a dedicated graphics processing unit, handling framebuffer management, rendering, and communication with the display independently from the main CPU.

Unlike a typical GLCD library, the CPU does not directly control the display. Instead, it sends high-level drawing commands to the RT-X12864 GPU, which performs all rendering operations and updates the GLCD using its own framebuffer.

Features

  • Dedicated GPU architecture for 128x64 GLCD displays
  • Independent framebuffer management
  • I²C communication between CPU and GPU
  • Text rendering with 5x7 and 8x8 fonts
  • Pixel, line, rectangle, and filled rectangle drawing
  • Circle and filled circle rendering
  • Bitmap rendering from PROGMEM
  • Open-source hardware and software
  • Expandable command-based communication protocol

Architecture

text
CPU (Master)
    |
    | I²C Commands (400 kHz)
    v
VidiaG Force RT-X12864 GPU
    |
    | Framebuffer Rendering
    v
CustomGLCD Driver
    |
    v
128x64 GLCD Display

[!IMPORTANT] The CPU only sends high-level commands such as drawing pixels, lines, text, and bitmaps. The GPU handles all low-level rendering and display communication.

Hardware

ComponentDescription
GPUArduino Uno R4 WiFi
CPUAny compatible I2C master (tested with Arduino Nano Every)
DisplayAG12864AHF / KS0108-compatible 128x64 GLCD
InterfaceI²C Fast-Mode (400 kHz)
VRAM1 KB framebuffer
Power ConsumptionApproximately 255 mA including the display (idle)

Installation

  1. Upload gpu_soft/ScreenI2C/ScreenI2C.ino to the Arduino Uno R4 WiFi.
  2. Connect the GLCD display to the GPU according to the schematic.
  3. Connect the CPU board to the GPU via I²C using GND, VCC, SCL, and SDA.
  4. Include GPU12864.h in your CPU project.
  5. Call gpuBegin() before using any GPU functions.

Basic Usage

cpp
#include "GPU12864.h"

void setup()
{
    gpuBegin();
    gpuClear();

    gpuDrawText(1, 1, "Hello, World!", FONT_5X7);
    gpuDrawLine(0, 0, 127, 63);

    gpuUpdate();
}

void loop()
{
}

Available Commands

The API is function-based rather than object-oriented.

Functions, yes, functions. Because yes.

It was simpler to implement this way. :P

CommandFunction
gpuBegin()Begins communication between CPU and GPU (takes about 1.2 s)
gpuClear()Clear the framebuffer
gpuUpdate()Send the framebuffer to the GLCD
gpuDrawPixel(uint8_t x, uint8_t y, bool color = true)Draw a single pixel
gpuDrawLine(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, bool color = true)Draw a line
gpuDrawRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, bool color = true)Draw a rectangle
gpuFillRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, bool color = true)Draw a filled rectangle
gpuDrawCircle(uint8_t x, uint8_t y, uint8_t r, bool color = true)Draw a circle
gpuFillCircle(uint8_t x, uint8_t y, uint8_t r, bool color = true)Draw a filled circle
gpuDrawText(uint8_t x, uint8_t y, const char* text, uint8_t fontId, bool color = true)Render text
gpuDrawBitmap(uint8_t x, uint8_t y, const uint8_t *bitmap, uint8_t width, uint8_t height)Render a bitmap stored in PROGMEM

[!TIP] You can use gpuFillRect() instead of gpuClear() when you want to clear only part of the screen to avoid screen flashing on refresh.

Demos

The repository includes several demonstration programs:

  • Hello World
  • Font rendering demo
  • Shapes and primitives demo
  • Sine wave graph
  • Live scrolling graph
  • Bouncing ball animation
  • Rotating 3D cube
  • Benchmark demo
  • Full demonstration sequence

Arduino IDE Package

For developers who want to use GPU12864 and additional drivers without copying files into every sketch.

Download the Arduino IDE package (ZIP)

After installing the ZIP through Sketch → Include Library → Add .ZIP Library…, use:

cpp
#include <GPU12864.h>
#include <adrv/AdditionalDriver.h>

instead of:

cpp
#include "GPU12864.h"
#include "AdditionalDriver.h"

Ready-to-use sketches are available in File → Examples → GPU12864 IDE Pack.

PCB

The repository includes the complete KiCad project and manufacturing files for the RT-X12864 adapter PCB, including:

  • .kicad_pro project file
  • .kicad_sch schematic
  • .kicad_pcb PCB layout
  • Gerber files (.gbr)
  • Drill files (.drl)
  • gerber.zip ready for PCB fabrication

Documentation

Hardware Files

[!NOTE] This is not an RTX graphics card. It is a custom, microcontroller-based 2D GPU for GLCD displays.

This project is released as open-source hardware and software. You are free to study, modify, and distribute it under the terms of the license.

Parts

8
QtyValueFootprintReferences
1AG12864AHFConnector_PinHeader_2.54mm:PinHeader_1x20_P2.54mm_VerticalJ1
1Arduino_Uno_R4_WiFi_ShieldPCM_arduino-library:Arduino_Uno_R4_WiFi_ShieldA1
1ContrastPotentiometer_THT:Potentiometer_Runtron_RM-065_VerticalRV1
1INPUTConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ2

The 4 most common of 8 parts.

Questions

How big is the GPU12864 PCB?

It measures 93 × 70 mm and has 2 copper layers, 1.6 mm thick.

What parts does the GPU12864 use?

8 parts. 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 GPU12864 KiCad files?

From the html-css-js-python/GPU12864 repository on GitHub, at the commit this page was made from: the board is hardware/GPU12864/GPU12864.kicad_pcb and its schematic hardware/GPU12864/GPU12864.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the GPU12864 design in my own project?

Its repository publishes it under the Apache-2.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 layers20.5 × 24.8 mmPi interface, the printed circuit board in 3D

    Pi interface

    opulo-inc/lumenpnp

    The LumenPnP is an open source pick and place machine.

    8 parts3.7k
  • 2 layers59.9 × 25.7 mmBuffer, the printed circuit board in 3D

    Buffer

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    8 parts1kGPL-3.0
  • 2 layers52 × 12.6 mmUSB, the printed circuit board in 3D

    USB

    shanteacontrols/OpenDeck

    A platform for building interactive control and sensing devices using MIDI and OSC built with Zephyr RTOS.

    8 parts960Apache-2.0
  • 2 layers87.5 × 48.5 mm7 input macropad, the printed circuit board in 3D

    7 input macropad

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    8 parts915
  • 2 layers36.2 × 63.1 mmPicoMemcard pico, the printed circuit board in 3D

    PicoMemcard pico

    dangiu/PicoMemcard

    Emulating PSX Memory Card (or controller) using a Raspberry Pi Pico

    8 parts694GPL-3.0
  • 2 layers36 × 10 mmPCB4-PWR BTN Rev.A, the printed circuit board in 3D

    PCB4-PWR BTN Rev.A

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    8 parts578Apache-2.0