All projects
EMBEDDED & CONTROLS

6502 computer & robotic arm

From data buses to inverse kinematics.

  • 6502 assembly
  • Peripheral interfaces
  • Inverse kinematics
The hand-assembled 6502 computer on connected breadboards.
My 1 MHz computer, built from Ben Eater’s base design and extended for the arm.

A Ben Eater-based computer extended with joystick and servo interfaces, plus independently derived arm kinematics calculated in assembly.

This was one of my early personal projects: build a computer, understand its buses and addressing, then use it to solve and control something physical.

My contribution

  • Build the computer from Ben Eater’s design.
  • Add joystick threshold inputs and bit-banged I2C through the VIA.
  • Derive a two-link geometric inverse-kinematics solution.
  • Implement arithmetic and trigonometric subroutines in 6502 assembly.
01 / THE PROCESS

Giving the computer a physical interface

The computer ran at 1 MHz. To drive the arm’s servos, I connected a 16-channel I2C-to-PWM device and bit-banged the I2C signalling through the VIA. A joystick interface used voltage thresholds and a dead zone to turn analogue movement into digital direction inputs.

Ben Eater’s design supplied the computer foundation. The peripheral interfaces and arm program were my additions.

02 / THE PROCESS

Calculating the angles on the computer

I did not want to rely only on a lookup table of precomputed servo angles. I independently worked through a geometric inverse-kinematics solution using two intersecting circles to locate the elbow, then calculated the relative shoulder and elbow angles.

To evaluate that solution on the computer, I first built arithmetic routines and Taylor-series-based trigonometric calculations in assembly. It was an opportunity to understand how mathematical operations can be built from much smaller machine-level steps.

03 / THE PROCESS

The unresolved jitter

The arm moved, but the servos were not consistently stable. I could not fully determine whether the problem came from signalling, power or PWM configuration, and I did not have a logic analyzer to diagnose it properly.

That limitation is part of the outcome. The project taught me a great deal about low-level software and circuit debugging even though it did not become a precision arm.

WHERE IT LANDED

A learning prototype, not a precision machine.

I built and extended a working computer and implemented the arm mathematics on it. Servo jitter remained unresolved. The circuit-debugging experience later helped me investigate problems in other embedded builds.