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.
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.
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.
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.
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.
Got a system that needs looking at?
Tell us what the equipment is, what processor it runs on, and what needs to change.
support@powerslave.devOr see what to put in the first email.