

M0+rixPCB
ECE319H Game
- Size
- 140.8 × 66.4 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 50
- Nets
- 77
- Pads
- 199
- Tracks, vias
- 415, 57
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 17 Mar 2025
- Updated
- 21 Mar 2026
Overview
M0+rixPCB is an open-source printed circuit board by SuryaUT, from the SuryaUT/TheM0trix_Segfaulted repository on GitHub. It is a 2-layer board of 140.8 × 66.4 mm with 50 parts on 77 nets, routed with 415 tracks and 57 vias.
It is built around the TSOP31438 and ULN2003BD. Its parts include 17 resistors, 6 connectors, 5 ICs, 5 switches and 4 capacitors.
Main components
2TSOP31438
SIP-3-2.54mm2.5V~5.5V 24m 350uA 38kHz 45° SIP-3-2.54mm Infrared Remote Receiver (IRM) ROHSVishay IntertechnologyInfrared Remote Receiver (IRM)ULN2003BD
SOIC-16-40℃~+105℃ 1.4V 10mA 30V 500mA 500nA 50V 5pF Seven channels SOIC-16 Darlington Transistor Arrays ROHSTexas InstrumentsDarlington Transistor Arrays
README
README.md🕶️ The M0+rix: Segfaulted
A Matrix-themed multiplayer FPS built entirely on the MSPM0G3507 microcontroller. Featuring low-level graphics rendering via raycasting, joystick control, UART-based multiplayer, and a fully custom 3D-printed enclosure.
Table of Contents
- 🎮 Game Description
- 🔥 Features
- 🚀 Getting Started
- 🔩 Parts List
- 🎮 Controls
- 🖼️ Screenshots / Demo
- 🛠️ Enclosure
- 👥 Authors
🎮 Game Description
Reality is a pointer… and you just dereferenced NULL.
Welcome to The M0+rix: Segfaulted, a handheld first-person shooter where the only way out is through the system’s deepest vulnerabilities. Running on the MSPM0 microcontroller, this game turns embedded systems into battlegrounds, with PVP combat over UART and a retro-style 3D world.
Dodge enemy fire, navigate the simulation, and exploit every loophole in the code—because in this world, even one bad instruction could bring everything crashing down. Are you the debugger or just another broken process?
🔥 Features:
- ✅ First-person shooter with a Matrix-inspired digital battlefield
- ✅ Real-time PVP over UART – battle your opponent in low-level style
- ✅ Optimized for MSPM0 – embedded gaming meets high-speed action
- ✅ Handheld experience – take the simulation anywhere
- ✅ Segfault or escape? – The system is unstable, and only one player will survive
💾 Flash in. Boot up. Overwrite reality.
🚀 Getting Started
-
Clone this repo
bash git clone https://github.com/SuryaUT/TheM0trix_Segfaulted.git -
Import into Code Composer Studio
Open CCS. Go to File > Import > Code Composer Studio Projects. Select the cloned folder. Make sure the target is set to MSPM0G3507. Click Finish. -
Build and Flash
Plug in the LaunchPad. Press the build button. Flash to the board.
🔩 Parts List
| Ref. | Value | Datasheet | Footprint | Qty |
|---|---|---|---|---|
| C1 | 1uF | ~ | ECE319K:CP_Radial_Tantal200mil | 1 |
| C2 | 4.7uF | ~ | ECE319K:CP_Radial_Tantal200mil | 1 |
| C3, C4 | 0.1uF | ~ | ECE319K:C_Axial_200mil | 2 |
| D1, D4 | LED | Link 1, Link 2 | ECE319K:LED_D5.0mm | 2 |
| H1, H2, H3, H4 | – | ~ | ECE319K:MountingHole_4_40 | 4 |
| J1 | AudioJack | ~ | ECE319K:Jack_3.5mm_CUI_SJ1-3523N_Horizontal | 1 |
| J2 | Speaker | ~ | ECE319K:PinHeader_1x02_P2.54mm_Vertical | 1 |
| J3 | UART1 | ~ | ECE319K:PinHeader_1x03_P2.54mm_Vertical | 1 |
| J6 | GND | ~ | ECE319K:Testpoint_1x02_P2.54mm | 1 |
| J7 | DACOUT | ~ | ECE319K:Testpoint_1x02_P2.54mm | 1 |
| J8 | Joystick | SparkFun | ECE319K:SparkfunJoystick | 1 |
| JP1 | TExaS | ~ | ECE319K:PinHeader_1x03_P2.54mm_Vertical | 1 |
| JP2, JP3, JP4 | Jumper_3_Open | ~ | ECE319K:PinHeader_1x03_P2.54mm_Vertical | 3 |
| R1 | 470Ω | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 1 |
| R4–R8 | 1.5kΩ | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 5 |
| R9–R11 | 12kΩ | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 3 |
| R12–R15, R17, R19 | 10kΩ | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 6 |
| R16 | 20kΩ | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 1 |
| R18 | 220Ω | Resistors | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | 1 |
| SW1 | RELOAD | ~ | ECE319K:SW_PUSH_6mm | 1 |
| SW2 | LEFT | ~ | ECE319K:SW_PUSH_6mm | 1 |
| SW3 | SWAP | ~ | ECE319K:SW_PUSH_6mm | 1 |
| SW4 | RIGHT | ~ | ECE319K:SW_PUSH_6mm | 1 |
| SW5 | SHOOT | ~ | ECE319K:Side_Switch | 1 |
| TP1 | 3.3V | ~ | ECE319K:Testpoint_1x02_P2.54mm | 1 |
| U2 | LP-MSPM0G3507 | TI Dev Board | ECE319K:ti_LP_MSPM0G3507 | 1 |
| U3 | MCP34119P | Datasheet | ECE319K:DIP-8_W7.62mm_LongPads | 1 |
| U4 | HiLetGo_ST7735R | Display | ECE319K:hiletgo_st7735r | 1 |
| U5 | ULN2003B | ULN2003B | ECE319K:DIP-16_W7.62mm | 1 |
| U6 | TSOP31438 | TSOP31438 | ECE319K:TSOP31438 | 1 |
| ~ | SD Card | ~ | ~ | 1 |
| ~ | Wire Pack | ~ | ~ | 1 |
Note: Side_Switch was a custom footprint made by placing surface mount plates the width of switch legs on the front and back of the PCB, such that a switch could be soldered to face away from the side of the PCB, acting like a trigger.
📦 Full schematic & PCB design files available in “M0+rixPCBFiles” folder
🎮 Controls
| Control | Action |
|---|---|
| Joystick | Move Forward, Backward, Strafe Left and Right |
| Trigger Button | Fire weapon |
| Left Button | Rotate Left |
| Right Button | Rotate Right |
| Top Button | Reload/Respawn |
| Bottom Button | Switch Item |
🖼️ Screenshots / Demo
Gameplay demo available on YouTube here.
🛠️ Enclosure
- Designed in Fusion 360
- Snap-fit top cover
- Gamepad-style ergonomic shell
👥 Authors
- Elijah Silguero
- Surya Balaji
Special thanks to Dr. Yerrabali, Dr. Valvano, and Dr. Tiwari at The University of Texas at Austin for their instruction and help with this project!
Parts
50| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 10k | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R12, R13, R14, R15, R17, R19 |
| 5 | 1.5k | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R4, R5, R6, R7, R8 |
| 4 | ~ | ECE319K:MountingHole_4_40 | H1, H2, H3, H4 |
| 3 | 12k | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R9, R10, R11 |
| 3 | Jumper_3_Open | ECE319K:PinHeader_1x03_P2.54mm_Vertical | JP2, JP3, JP4 |
| 2 | 0.1uF | ECE319K:C_Axial_200mil | C3, C4 |
| 2 | LED | ECE319K:LED_D5.0mm | D1, D4 |
| 1 | 1uF | ECE319K:CP_Radial_Tantal200mil | C1 |
| 1 | 20k | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R16 |
| 1 | 220 | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R18 |
| 1 | 3.3V | ECE319K:Testpoint_1x02_P2.54mm | TP1 |
| 1 | 4.7uF | ECE319K:CP_Radial_Tantal200mil | C2 |
| 1 | 470 | ECE319K:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal | R1 |
| 1 | AudioJack | ECE319K:Jack_3.5mm_CUI_SJ1-3523N_Horizontal | J1 |
| 1 | DACOUT | ECE319K:Testpoint_1x02_P2.54mm | J7 |
| 1 | GND | ECE319K:Testpoint_1x02_P2.54mm | J6 |
| 1 | HiLetGo_ST7735R | ECE319K:hiletgo_st7735r | U4 |
| 1 | Joystick | ECE319K:SparkfunJoystick | J8 |
| 1 | LEFT | ECE319K:SW_PUSH_6mm | SW2 |
| 1 | LOGO | ECE319K:Pibble | G*** |
| 1 | LOGO | LOGO | G*** |
| 1 | LP-MSPM0G3507 | ECE319K:ti_LP_MSPM0G3507 | U2 |
| 1 | MCP34119P | ECE319K:DIP-8_W7.62mm_LongPads | U3 |
| 1 | RELOAD | ECE319K:SW_PUSH_6mm | SW1 |
| 1 | RIGHT | ECE319K:SW_PUSH_6mm | SW4 |
| 1 | SHOOT | ECE319K:Side_Switch | SW5 |
| 1 | SWAP | ECE319K:SW_PUSH_6mm | SW3 |
| 1 | Speaker | ECE319K:PinHeader_1x02_P2.54mm_Vertical | J2 |
| 1 | TExaS | ECE319K:PinHeader_1x03_P2.54mm_Vertical | JP1 |
| 1 | TSOP31438 | ECE319K:TSOP31438 | U6 |
| 1 | UART1 | ECE319K:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | ULN2003B | ECE319K:DIP-16_W7.62mm | U5 |
Similar boards
- 4 layers179.3 × 72.5 mm

- 2 layers114.3 × 88.9 mm

CrickHit PCB
devanshjoshi08/CrickHit
Real-time cricket batting game on the TI MSPM0G3507 (ARM Cortex-M0+) with triple-ISR architecture, custom KiCad PCB, 5-bit DAC audio, and 3D-printed enclosure. Built for ECE 319H at UT Austin.
54 parts1 - 2 layers132.5 × 83 mm

- 2 layers114.3 × 88.9 mm

- 2 layers114.3 × 88.9 mm

Jc224364
se1yu/BlockBlast
Using knowledge from ECE 319H at UT Austin (Intro to Embedded Systems) to build a custom video game console and to program Block Blast from scratch.
54 parts - 2 layers114.3 × 88.9 mm

MVM833
SiddharthaG09/319KFinalProject
For our final project, we recreated Space Invaders in C, using a custom-designed PCB and an MSPM0G3507 microcontroller.
46 partsMIT - 2 layers118 × 100 mm

DuelTank
SathvikY3533/DuelTanks
Duel Tanks is a real-time two-player artillery game built completely from scratch on the MSPM0G3507 microcontroller.
72 parts - 2 layers187.2 × 26.6 mm

Questions
How big is the M0+rixPCB PCB?
It measures 140.8 × 66.4 mm and has 2 copper layers, 1.6 mm thick.
What parts does the M0+rixPCB use?
50 parts, built around the TSOP31438 and ULN2003BD. 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 M0+rixPCB KiCad files?
From the SuryaUT/TheM0trix_Segfaulted repository on GitHub, at the commit this page was made from: the board is M0+rixPCBFiles/M0+rixPCB.kicad_pcb and its schematic M0+rixPCBFiles/M0+rixSchematic.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the M0+rixPCB design in my own project?
Its repository states no licence, so its author keeps all rights: ask SuryaUT before reusing the design.