Systems project

Assembly · Embedded Systems

ARM Cortex-M0 Paint

A cursor-based paint application implemented under low-level register and instruction constraints, with timer-driven input and canvas updates.

ARM AssemblyCortex-M0SysTickMemory-mapped I/O
Year
2025
Type
Embedded systems assignment
Role
Low-level implementation
Architecture view

Interrupt-to-pixel control flow

Each timer tick advances a small deterministic state machine from physical input to a bounded canvas write.

01 / Context

What I built
and why.

Overview

A minimal paint application written for the ARM Cortex-M0 environment. Directional input moves a cursor across a memory-mapped canvas, while drawing and erasing operations update the active cell under strict low-level constraints.

The challenge

Without high-level data structures or an application framework, every state transition has to be explicit. Input timing, coordinate boundaries, address calculation and register use all need to stay correct at the same time.

The approach

A SysTick interrupt provides a predictable update rhythm. Each tick reads the current input, resolves the requested action, applies boundary checks and translates the cursor position into a canvas address before updating memory.

02 / Engineering

Key decisions

The choices that shaped the system—not only the technologies that appear in it.

01

Use a timer-driven loop

SysTick creates a consistent control cadence and keeps input handling independent from arbitrary busy-wait timing.

02

Guard coordinates first

Movement is validated before address calculation so the cursor cannot write outside the canvas region.

03

Keep state compact

Cursor position and drawing mode are represented with a small, explicit state that maps cleanly to registers and memory.

Technical toolkit

Built with

ARM AssemblyCortex-M0SysTickMemory-mapped I/O
03 / Reflection

What the project taught me

  • Interrupt-driven control changes how state and timing must be reasoned about.
  • Memory layout becomes part of the application design at the assembly level.
  • Small boundary checks can protect an entire memory region from invalid writes.

This page uses a system diagram to document the current technical structure. Product screenshots and experiment outputs can be added here as each project evolves.