PowerSlave Developments

Services · 6502 · 68000 · 80x86

Low-Level Systems

Assembler for manufacturing and engineering teams whose equipment still runs on it — from an engineer who understands exactly what the processor is doing, so nothing is left to guesswork.

No guesswork

When equipment on the floor runs on assembler, a change to it can't be a guess. You need an engineer who reads the code and knows what the processor will do with every instruction: which registers it touches, how many cycles it takes, what happens when an interrupt lands halfway through. That means the details the job turns on, like 6502 zero-page addressing, page and bank switching to reach memory the CPU can't address directly, and I/O, whether that's memory-mapped registers or 80x86 port access. And the limits that cause real faults: an 8-bit index register that wraps at 256 bytes, a 64K segment boundary, a 256-byte 6502 stack that wraps round and silently overwrites itself, arithmetic that carries or overflows without a word. Then a fix is something you can explain, not something you try and hope.

Dominic started out writing assembler — 6502, then 68000 and 80x86 — long before any of the languages on the rest of this page existed. For most products that layer is history. Manufacturing and engineering are the exception: controllers, test rigs and instruments written decades ago are still doing their job, and engineers who really understand that code are getting hard to find.

What we do

Maintain and extend what you have

You have the source; the person who wrote it has moved on. Bug fixes, new features, a new sensor, protocol or hardware variant — made carefully, in the style of the code that's already there, without rewriting what works.

Firmware maintenanceControllersTest rigsInstruments

Write it where it has to be tight

Interrupt handlers, bootloaders, timing-critical loops, and routines that have to fit a fixed ROM or a cycle budget. Sometimes the right answer is still a few hundred lines of hand-written assembler — and when it isn't, we'll say so.

InterruptsZero pageBank switchingMemory-mapped I/OPort I/O

Debug below the compiler

When C or C++ firmware misbehaves in a way the source can't explain — an optimiser surprise, a corrupted stack, a timing fault — reading the generated instructions shows what the machine is actually doing, not what the source suggests it should.

C/C++ firmwareOverflowsIndex limitsStack faultsTimingOptimiser issues

Connect it to modern systems

Getting data off older equipment and into dashboards, IoT platforms and mobile apps, over the serial and parallel interfaces it already has, down to driving the UART directly — so the kit keeps running while the rest of the plant moves on.

UARTRS-232RS-485Parallel I/OIoTDashboards

Plan the move, when it's time

Porting assembler to C or onto a current microcontroller, with the existing system's behaviour pinned down by tests first, so the replacement is shown to match rather than assumed to. The same rule as any inherited codebase: a rewrite has to earn it.

PortingModern MCUsBehavioural testsObsolescence

Got a system that needs looking at?

Tell us what the equipment is, what processor it runs on, and what needs to change.

Or see what to put in the first email.