Memotech MTX patterns.
Find a technique, check its conditions, and adapt it to your game.
Back to the Pattern LibraryFind your technique.
9 patterns
No patterns match these filters. Try a broader search or clear the filters.
A Bounded Event Queue on Amiga
When three things happen before the game gets around to handling them, one event byte can only remember the last one.
A Bounded Event Queue on C64
When three things happen before the game gets around to handling them, one event byte can only remember the last one.
A Bounded Event Queue on NES
When three things happen before the game gets around to handling them, one event byte can only remember the last one.
A Bounded Event Queue on Spectrum
When three things happen before the game gets around to handling them, one event byte can only remember the last one.
A Counted Text-entry Buffer on Amiga
Entering a player name needs more than appending characters.
A Counted Text-entry Buffer on C64
Entering a player name needs more than appending characters.
A Counted Text-entry Buffer on NES
Entering a player name needs more than appending characters.
A Counted Text-entry Buffer on Spectrum
Entering a player name needs more than appending characters.
A Counted-Byte Adventure Parser
Recognise two-word commands without changing the input buffer. Reusable Z80 code, checked vocabulary tables and a working keyboard caller.
A game loop on the raster clock
Wait for a fresh raster boundary, then read, update and draw. Keep timing separate from the work your game does.
A game loop on the ROM clock
Use the 48K ROM interrupt clock to accept one update at a time, including when game work takes longer.
A game loop on the vertical-blank request
Poll a fresh vertical-blank request while the main program owns the machine.
A game loop using MOS
Wait for display sync through MOS, keeping the system keyboard, display and interrupt services running.
A game loop using MOS on the Electron
Reuse the MOS-facing loop while checking the Electron’s own loading, display and workload behaviour.
A game loop with an NMI clock
Let NMI announce elapsed frames while the main loop reads controls and updates game state.
A Music Engine
Step a note pattern once per frame from the NMI, handing each APU channel its note from a timer table — the skeleton of every NES music driver.
A Saturating 16-bit Score on Amiga
A coin worth 300 points should still be worth 300 when the low byte fills up.
A Saturating 16-bit Score on C64
A coin worth 300 points should still be worth 300 when the low byte fills up.
A Saturating 16-bit Score on NES
A coin worth 300 points should still be worth 300 when the low byte fills up.
A Saturating 16-bit Score on Spectrum
A coin worth 300 points should still be worth 300 when the low byte fills up.
A Square Wave
Enable pulse 1 in $4015, then set its duty, volume, sweep and 11-bit timer. It holds a tone with no further CPU work, as long as nothing mutes it.
A Streaming CRC-8 on Amiga
A saved score or a small asset can pick up an accidental changed byte.
A Streaming CRC-8 on C64
A saved score or a small asset can pick up an accidental changed byte.
A Streaming CRC-8 on NES
A saved score or a small asset can pick up an accidental changed byte.
A Streaming CRC-8 on Spectrum
A saved score or a small asset can pick up an accidental changed byte.
A Two-Word Adventure Parser
Turn the player's words into commands your game can understand. A reusable, vocabulary-driven parser with a complete tiny adventure.
AABB Collision Detection
Axis-Aligned Bounding Box collision — fast rectangle overlap test for sprites and objects.
Accept a Stable Run of Input Samples in BBC Micro BASIC
Change a logical byte only after enough consecutive identical samples, retaining candidate and run history.
Accept a Stable Run of Input Samples in C64 BASIC
Change a logical byte only after enough consecutive identical samples, retaining candidate and run history.
Accept a Stable Run of Input Samples in Spectrum BASIC
Change a logical byte only after enough consecutive identical samples, retaining candidate and run history.
Accumulate a Capped Binary Score in BBC Micro BASIC
Add two-byte awards through a wide intermediate, distinguish an exact cap from clipping and preserve the award.
Accumulate a Capped Binary Score in C64 BASIC
Add two-byte awards through a wide intermediate, distinguish an exact cap from clipping and preserve the award.
Accumulate a Capped Binary Score in Spectrum BASIC
Add two-byte awards through a wide intermediate, distinguish an exact cap from clipping and preserve the award.
Action Cooldowns on Amiga
Keep an action timer advancing between requests, and spend its cooldown only when a requested resource is available.
Action Cooldowns on C64
Keep an action timer advancing between requests, and spend its cooldown only when a requested resource is available.
Action Cooldowns on NES
Keep an action timer advancing between requests, and spend its cooldown only when a requested resource is available.
Action Cooldowns on Spectrum
Keep an action timer advancing between requests, and spend its cooldown only when a requested resource is available.
Add and Remove Inventory Stacks on Amiga
Picking up a stack should either fit completely or leave the inventory as it was.
Add and Remove Inventory Stacks on C64
Picking up a stack should either fit completely or leave the inventory as it was.
Add and Remove Inventory Stacks on NES
Picking up a stack should either fit completely or leave the inventory as it was.
Add and Remove Inventory Stacks on Spectrum
Picking up a stack should either fit completely or leave the inventory as it was.
Add Signed Acceleration Without Wrapping in BBC Micro BASIC
Add a signed eight-point-eight velocity increment in a wider range, then clamp to an explicit symmetric limit before encoding the result.
Add Signed Acceleration Without Wrapping in C64 BASIC
Add a signed eight-point-eight velocity increment in a wider range, then clamp to an explicit symmetric limit before encoding the result.
Add Signed Acceleration Without Wrapping in Spectrum BASIC
Add a signed eight-point-eight velocity increment in a wider range, then clamp to an explicit symmetric limit before encoding the result.
Add Words with Saturation on Amiga
A large score or resource total should stop at its ceiling rather than wrap back to a small number.
Add Words with Saturation on C64
A large score or resource total should stop at its ceiling rather than wrap back to a small number.
Add Words with Saturation on NES
A large score or resource total should stop at its ceiling rather than wrap back to a small number.
Add Words with Saturation on Spectrum
A large score or resource total should stop at its ceiling rather than wrap back to a small number.
Advance a Timed Animation on Amiga
A held pose and a running animation need different clocks.
Advance a Timed Animation on C64
A held pose and a running animation need different clocks.
Advance a Timed Animation on NES
A held pose and a running animation need different clocks.
Advance a Timed Animation on Spectrum
A held pose and a running animation need different clocks.
Advance a turn with a command in AMOS BASIC
Keep game state between decisions, accept only useful commands, and leave the clock out until the rules need one.
Advance a turn with a command in Blitz BASIC
Keep game state between decisions, accept only useful commands, and leave the clock out until the rules need one.
Advance an Animation Timeline in BBC Micro BASIC
Return a frame index with configurable duration, looping and one-shot completion.
Advance an Animation Timeline in C64 BASIC
Return a frame index with configurable duration, looping and one-shot completion.
Advance an Animation Timeline in Spectrum BASIC
Return a frame index with configurable duration, looping and one-shot completion.
Aim a Projectile at a Target in BBC Micro BASIC
Compute a bounded two-component velocity towards a target with an explicit dominant-axis speed rule.
Aim a Projectile at a Target in C64 BASIC
Compute a bounded two-component velocity towards a target with an explicit dominant-axis speed rule.
Aim a Projectile at a Target in Spectrum BASIC
Compute a bounded two-component velocity towards a target with an explicit dominant-axis speed rule.
Aim a Projectile with Bounded Integer Speed on Amiga
A turret can fire towards the player without a trigonometry table or floating-point division.
Aim a Projectile with Bounded Integer Speed on C64
A turret can fire towards the player without a trigonometry table or floating-point division.
Aim a Projectile with Bounded Integer Speed on NES
A turret can fire towards the player without a trigonometry table or floating-point division.
Aim a Projectile with Bounded Integer Speed on Spectrum
A turret can fire towards the player without a trigonometry table or floating-point division.
Allocate Slots with a Bitset on Amiga
Eight occupied flags can fit in one byte when objects already live in fixed slots.
Allocate Slots with a Bitset on C64
Eight occupied flags can fit in one byte when objects already live in fixed slots.
Allocate Slots with a Bitset on NES
Eight occupied flags can fit in one byte when objects already live in fixed slots.
Allocate Slots with a Bitset on Spectrum
Eight occupied flags can fit in one byte when objects already live in fixed slots.
Allocate Slots with an Occupied Mask in BBC Micro BASIC
Reserve the lowest free slot and release an occupied slot using one retained eight-bit mask.
Allocate Slots with an Occupied Mask in C64 BASIC
Reserve the lowest free slot and release an occupied slot using one retained eight-bit mask.
Allocate Slots with an Occupied Mask in Spectrum BASIC
Reserve the lowest free slot and release an occupied slot using one retained eight-bit mask.
Apply Damage with Recovery Time in BBC Micro BASIC
Keep health above zero and give a hit a defined recovery interval, with explicit applied and killed results.
Apply Damage with Recovery Time in C64 BASIC
Keep health above zero and give a hit a defined recovery interval, with explicit applied and killed results.
Apply Damage with Recovery Time in Spectrum BASIC
Keep health above zero and give a hit a defined recovery interval, with explicit applied and killed results.
Approach a Target Without Overshoot on Amiga
An enemy can move towards a waypoint without orbiting it forever.
Approach a Target Without Overshoot on C64
An enemy can move towards a waypoint without orbiting it forever.
Approach a Target Without Overshoot on NES
An enemy can move towards a waypoint without orbiting it forever.
Approach a Target Without Overshoot on Spectrum
An enemy can move towards a waypoint without orbiting it forever.
Ask Your Level What Is There
Store a level as tiles, query positions safely and keep gameplay properties separate from artwork. Reusable implementations span all 30 currently emulated systems, with their memory and display differences kept explicit.
Attribute Clash
The Spectrum stores one ink-and-paper colour per 8×8 cell, so pixels and colour live on different grids — the source of colour clash. Understanding it, and the design craft that turns the constraint into the platform's look.
Attribute Writing
Write colours directly to attribute memory for fast, flicker-free graphics without touching pixel data.
AY Envelopes and Noise
Let the AY shape a note's volume in hardware and add its noise channel — a decaying pluck from the envelope generator, an explosion from noise, each fired with a single register write.
AY Music
Step a note pattern once per interrupt, handing each of the AY's three channels its note from a period table — a full three-voice tune that plays in the background while the game runs.
AY Tone
Play a tone on the 128K's AY-3-8912 sound chip — select a register through port $FFFD, write it through $BFFD, and the chip holds the note on its own while the CPU gets on with the game.
Beeper Music
Play an actual melody on the Spectrum's one-bit speaker — a note table for pitch, a length per note — and coax two or more voices from that single bit with phase accumulators.
Bitmap Addressing
Turn an (x, y) pixel into a Spectrum screen address — where consecutive lines are nowhere near each other in memory. The interleaved layout that every Spectrum drawing routine has to reckon with.
Blink on a Clock
PRESS START winks on a 32-frame beat read straight off a frame counter — one AND instruction selects draw or clear. A blink is two renderers taking turns on a clock you already had.
Blitter Copy
Copy an aligned tile plane with reusable Amiga code, with DMA ownership, pitches and completion made explicit.
Blitter Line Draw
The blitter isn't only a copier — in line mode it plots a Bresenham line in hardware, one pixel at a time, straight into a bitplane. Feed it endpoints and an octant; it draws the line while the CPU moves on.
Bounded Signed Acceleration on Amiga
Gravity should keep adding speed until the chosen terminal velocity, not turn a fast fall into an upward launch when an integer overflows.
Bounded Signed Acceleration on C64
Gravity should keep adding speed until the chosen terminal velocity, not turn a fast fall into an upward launch when an integer overflows.
Bounded Signed Acceleration on NES
Gravity should keep adding speed until the chosen terminal velocity, not turn a fast fall into an upward launch when an integer overflows.
Bounded Signed Acceleration on Spectrum
Gravity should keep adding speed until the chosen terminal velocity, not turn a fast fall into an upward launch when an integer overflows.
Buffer Turns Through a Grid on Amiga
A maze feels kinder when a turn pressed just before a junction happens as soon as the route opens.
Buffer Turns Through a Grid on C64
A maze feels kinder when a turn pressed just before a junction happens as soon as the route opens.
Buffer Turns Through a Grid on NES
A maze feels kinder when a turn pressed just before a junction happens as soon as the route opens.
Buffer Turns Through a Grid on Spectrum
A maze feels kinder when a turn pressed just before a junction happens as soon as the route opens.
Build an OAM Page and Share Sprite Dropout
Pack active NES objects into a complete OAM page, hide unused slots and rotate priorities when a row exceeds the hardware limit. Includes a running cartridge.
Build Bounded Spatial Buckets on Amiga
Nearby objects are worth comparing; distant ones usually are not.
Build Bounded Spatial Buckets on C64
Nearby objects are worth comparing; distant ones usually are not.
Build Bounded Spatial Buckets on NES
Nearby objects are worth comparing; distant ones usually are not.
Build Bounded Spatial Buckets on Spectrum
Nearby objects are worth comparing; distant ones usually are not.
Camera Dead Zones on Amiga
A camera need not move every time the player takes a step.
Camera Dead Zones on C64
A camera need not move every time the player takes a step.
Camera Dead Zones on NES
A camera need not move every time the player takes a step.
Camera Dead Zones on Spectrum
A camera need not move every time the player takes a step.
Capture and Restore a Checked Checkpoint on Amiga
A restart point should restore a coherent snapshot, not whichever fields happened to be copied before a failed attempt.
Capture and Restore a Checked Checkpoint on C64
A restart point should restore a coherent snapshot, not whichever fields happened to be copied before a failed attempt.
Capture and Restore a Checked Checkpoint on NES
A restart point should restore a coherent snapshot, not whichever fields happened to be copied before a failed attempt.
Capture and Restore a Checked Checkpoint on Spectrum
A restart point should restore a coherent snapshot, not whichever fields happened to be copied before a failed attempt.
Carry a Passenger with a Platform in BBC Micro BASIC
Apply signed platform movement to a supported passenger, with explicit position bounds and clipping feedback.
Carry a Passenger with a Platform in C64 BASIC
Apply signed platform movement to a supported passenger, with explicit position bounds and clipping feedback.
Carry a Passenger with a Platform in Spectrum BASIC
Apply signed platform movement to a supported passenger, with explicit position bounds and clipping feedback.
Carry a Supported Passenger on Amiga
A passenger should inherit a moving platform’s displacement without changing the platform’s own position.
Carry a Supported Passenger on C64
A passenger should inherit a moving platform’s displacement without changing the platform’s own position.
Carry a Supported Passenger on NES
A passenger should inherit a moving platform’s displacement without changing the platform’s own position.
Carry a Supported Passenger on Spectrum
A passenger should inherit a moving platform’s displacement without changing the platform’s own position.
Centre Text on a Character Screen
Measure a terminated string, divide the unused columns in half, and print it without hard-coded coordinates. Includes a compact 6502 implementation.
Change Inventory Counts Atomically in BBC Micro BASIC
Add or remove a whole quantity from four fixed item categories, rejecting requests that exceed stock or capacity.
Change Inventory Counts Atomically in C64 BASIC
Add or remove a whole quantity from four fixed item categories, rejecting requests that exceed stock or capacity.
Change Inventory Counts Atomically in Spectrum BASIC
Add or remove a whole quantity from four fixed item categories, rejecting requests that exceed stock or capacity.
Change Shared Character Pictures on Atari 800XL
Install a picture, share it across cells, then change every instance or just one. Reusable Atari 800XL routines with explicit character, colour and memory rules.
Change Shared Character Pictures on C64
Reusable install, replace and select routines for C64, with real code, native output and explicit video ownership.
Change Shared Character Pictures on Game Gear
Reusable install, replace and select routines for Game Gear, with real code, native output and explicit video ownership.
Change Shared Character Pictures on Jupiter Ace
Install a picture, share it across cells, then change every instance or just one. Reusable Jupiter Ace routines with explicit character, colour and memory rules.
Change Shared Character Pictures on Master System
Reusable install, replace and select routines for Master System, with real code, native output and explicit video ownership.
Change Shared Character Pictures on NES CHR-RAM
Reusable install, replace and select routines for NES CHR-RAM, with real code, native output and explicit video ownership.
Change Shared Character Pictures on Oric Atmos
Install a picture, share it across cells, then change every instance or just one. Reusable Oric Atmos routines with explicit character, colour and memory rules.
Change Shared Characters on ColecoVision
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for ColecoVision Graphics I.
Change Shared Characters on Memotech MTX
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for Memotech MTX Graphics I.
Change Shared Characters on SG-1000
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for SG-1000 Graphics I.
Change Shared Characters on Sord M5
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for Sord M5 Graphics I.
Change Shared Characters on SVI-328
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for SVI-328 Graphics I.
Change Shared Characters on Tatung Einstein
Install a picture, use it in many cells, then replace the picture or change one instance. Reusable Z80 routines for Tatung Einstein Graphics I.
Character Printing
Print ASCII characters to the screen using the ROM character set. Direct display file access for fast text rendering.
Check a Byte Stream with CRC-8 in BBC Micro BASIC
Retain an eight-bit remainder while feeding a message byte by byte, with two explicit polynomial choices and a clear reset boundary.
Check a Byte Stream with CRC-8 in C64 BASIC
Retain an eight-bit remainder while feeding a message byte by byte, with two explicit polynomial choices and a clear reset boundary.
Check a Byte Stream with CRC-8 in Spectrum BASIC
Retain an eight-bit remainder while feeding a message byte by byte, with two explicit polynomial choices and a clear reset boundary.
Checked Map Queries
Read and change AMOS map cells, look up tile properties and convert world positions with explicit bounds.
Checked Map Queries
Read and change typed Blitz map cells, look up tile properties and convert world positions with explicit bounds.
Choose a Bounded Text Line on Amiga
A dialogue box needs line breaks that fit its width without requiring a second copy of the text.
Choose a Bounded Text Line on C64
A dialogue box needs line breaks that fit its width without requiring a second copy of the text.
Choose a Bounded Text Line on NES
A dialogue box needs line breaks that fit its width without requiring a second copy of the text.
Choose a Bounded Text Line on Spectrum
A dialogue box needs line breaks that fit its width without requiring a second copy of the text.
Choose a Winning Request in BBC Micro BASIC
Select the highest-priority request while keeping the first equal-priority winner and explicit batch ownership.
Choose a Winning Request in C64 BASIC
Select the highest-priority request while keeping the first equal-priority winner and explicit batch ownership.
Choose a Winning Request in Spectrum BASIC
Select the highest-priority request while keeping the first equal-priority winner and explicit batch ownership.
Choose an Eight-way Direction on Amiga
A character can face a target in eight directions without angles, trigonometry or a lookup table.
Choose an Eight-way Direction on C64
A character can face a target in eight directions without angles, trigonometry or a lookup table.
Choose an Eight-way Direction on NES
A character can face a target in eight directions without angles, trigonometry or a lookup table.
Choose an Eight-way Direction on Spectrum
A character can face a target in eight directions without angles, trigonometry or a lookup table.
Choose from Weighted Outcomes on Amiga
A timid enemy might retreat often and attack rarely.
Choose from Weighted Outcomes on C64
A timid enemy might retreat often and attack rarely.
Choose from Weighted Outcomes on NES
A timid enemy might retreat often and attack rarely.
Choose from Weighted Outcomes on Spectrum
A timid enemy might retreat often and attack rarely.
Choose how your game advances
Choose what advances play, what keeps time and when the machine can show the result.
Choose Outcomes with Different Weights in BBC Micro BASIC
Map a caller-supplied bounded draw to one of eight weighted outcomes, skipping zero-weight entries.
Choose Outcomes with Different Weights in C64 BASIC
Map a caller-supplied bounded draw to one of eight weighted outcomes, skipping zero-weight entries.
Choose Outcomes with Different Weights in Spectrum BASIC
Map a caller-supplied bounded draw to one of eight weighted outcomes, skipping zero-weight entries.
Choose the Highest-priority Request on Amiga
A pickup chime, a warning and an explosion may all request attention in one update.
Choose the Highest-priority Request on C64
A pickup chime, a warning and an explosion may all request attention in one update.
Choose the Highest-priority Request on NES
A pickup chime, a warning and an explosion may all request attention in one update.
Choose the Highest-priority Request on Spectrum
A pickup chime, a warning and an explosion may all request attention in one update.
Claim and Reuse Object Slots in Amstrad CPC Assembly
Reserve fixed slots, report a full pool safely, release by index and optionally expire objects without moving their payloads.
Claim and Reuse Object Slots in Atari 800XL Assembly
Reserve fixed slots, report a full pool safely, release by index and optionally expire objects without moving their payloads.
Claim and Reuse Object Slots in BBC Micro Assembly
Reserve fixed slots, report a full pool safely, release by index and optionally expire objects without moving their payloads.
Claim and Reuse Object Slots in Dragon 32 Assembly
Reserve fixed slots, report a full pool safely, release by index and optionally expire objects without moving their payloads.
Clip a Rectangle to a View in BBC Micro BASIC
Find the visible intersection of two half-open rectangles, separating an empty result from invalid reversed edges.
Clip a Rectangle to a View in C64 BASIC
Find the visible intersection of two half-open rectangles, separating an empty result from invalid reversed edges.
Clip a Rectangle to a View in Spectrum BASIC
Find the visible intersection of two half-open rectangles, separating an empty result from invalid reversed edges.
Clip a Rectangle to a Viewport on Amiga
A partly off-screen object should expose only the part that lies inside the viewport.
Clip a Rectangle to a Viewport on C64
A partly off-screen object should expose only the part that lies inside the viewport.
Clip a Rectangle to a Viewport on NES
A partly off-screen object should expose only the part that lies inside the viewport.
Clip a Rectangle to a Viewport on Spectrum
A partly off-screen object should expose only the part that lies inside the viewport.
Clip Masked Sprites in BBC MODE4
Draw the visible part of a byte-aligned sprite in the normal MODE4 screen, preserving source stride and the BBC’s interleaved character-row layout.
Clip Masked Sprites on the Spectrum
A byte-aligned 16×16 sprite can cross any screen edge safely. Reusable signed clipping and masked drawing, with source cropping and a complete 48K tape example.
Clip Objects at the Screen Edge
Let an object enter or leave the picture without wrapping into another row. Keep signed positions, select the visible source pixels and preserve the original image stride.
Clip Word-Aligned Amiga Bobs
Crop a 32×16 blitter object against a 320×256 viewport, with separate source and screen strides and no blit for fully invisible objects.
Commit a Crafting Recipe Atomically on Amiga
Do not take the player’s ingredients and only then discover there is nowhere to put the result.
Commit a Crafting Recipe Atomically on C64
Do not take the player’s ingredients and only then discover there is nowhere to put the result.
Commit a Crafting Recipe Atomically on NES
Do not take the player’s ingredients and only then discover there is nowhere to put the result.
Commit a Crafting Recipe Atomically on Spectrum
Do not take the player’s ingredients and only then discover there is nowhere to put the result.
Compact a Live Object Prefix on Amiga
A particle update can walk a dense live prefix instead of checking holes forever.
Compact a Live Object Prefix on C64
A particle update can walk a dense live prefix instead of checking holes forever.
Compact a Live Object Prefix on NES
A particle update can walk a dense live prefix instead of checking holes forever.
Compact a Live Object Prefix on Spectrum
A particle update can walk a dense live prefix instead of checking holes forever.
Compare Signed Byte Values on Amiga
A velocity of −1 must sort below zero even though its stored byte is 255.
Compare Signed Byte Values on C64
A velocity of −1 must sort below zero even though its stored byte is 255.
Compare Signed Byte Values on NES
A velocity of −1 must sort below zero even though its stored byte is 255.
Compare Signed Byte Values on Spectrum
A velocity of −1 must sort below zero even though its stored byte is 255.
Controller Reading
Sample eight controller buttons once, distinguish holds, presses and releases, and keep the DMC and strobe contracts explicit.
Convert an Axis Sample to Intent in BBC Micro BASIC
Keep an inclusive quiet zone around a calibrated centre, then report direction and distance beyond it.
Convert an Axis Sample to Intent in C64 BASIC
Keep an inclusive quiet zone around a calibrated centre, then report direction and distance beyond it.
Convert an Axis Sample to Intent in Spectrum BASIC
Keep an inclusive quiet zone around a calibrated centre, then report direction and distance beyond it.
Cookie-Cut Blit
Draw a shaped, transparent object over the background using all four blitter channels — a mask decides pixel by pixel whether to keep the image or the scenery behind it. The heart of every Amiga bob.
Copper Colour Bars
Change the background colour at chosen scanlines from the copper list — no CPU, no interrupt, no jitter — to paint horizontal bars or a smooth vertical gradient the beam draws for you.
Copper List Basics
Build a copper list to set colours and sprite pointers. The foundation of all Amiga graphics programming.
Copper Split Screen
Have the copper reprogram the bitplane pointers part-way down the frame so the top and bottom of the screen show different bitmaps — a scrolling playfield above a rock-steady status panel, beam-locked and free.
Count Active Play Ticks in BBC Micro BASIC
Keep a two-byte active counter, freeze it during pause and give reset explicit priority.
Count Active Play Ticks in C64 BASIC
Keep a two-byte active counter, freeze it during pause and give reset explicit priority.
Count Active Play Ticks in Spectrum BASIC
Keep a two-byte active counter, freeze it during pause and give reset explicit priority.
Count Active Play Time on Amiga
A pause screen should not quietly spend the player’s time allowance.
Count Active Play Time on C64
A pause screen should not quietly spend the player’s time allowance.
Count Active Play Time on NES
A pause screen should not quietly spend the player’s time allowance.
Count Active Play Time on Spectrum
A pause screen should not quietly spend the player’s time allowance.
Craft Without Losing Ingredients in BBC Micro BASIC
Check two ingredient stocks and result capacity before applying an all-or-nothing crafting transaction.
Craft Without Losing Ingredients in C64 BASIC
Check two ingredient stocks and result capacity before applying an all-or-nothing crafting transaction.
Craft Without Losing Ingredients in Spectrum BASIC
Check two ingredient stocks and result capacity before applying an all-or-nothing crafting transaction.
Damage and Recovery on Amiga
Apply damage without byte underflow, give an entity time to recover and emit one fatal-hit event.
Damage and Recovery on C64
Apply damage without byte underflow, give an entity time to recover and emit one fatal-hit event.
Damage and Recovery on NES
Apply damage without byte underflow, give an entity time to recover and emit one fatal-hit event.
Damage and Recovery on Spectrum
Apply damage without byte underflow, give an entity time to recover and emit one fatal-hit event.
Debounce a Sampled Input Byte on Amiga
A noisy or bouncing input should settle before it changes the game’s logical state.
Debounce a Sampled Input Byte on C64
A noisy or bouncing input should settle before it changes the game’s logical state.
Debounce a Sampled Input Byte on NES
A noisy or bouncing input should settle before it changes the game’s logical state.
Debounce a Sampled Input Byte on Spectrum
A noisy or bouncing input should settle before it changes the game’s logical state.
Decode a Small Run-length Block in BBC Micro BASIC
Expand count/value pairs into an eight-cell output with explicit input bounds, actual written length and useful partial-error results.
Decode a Small Run-length Block in C64 BASIC
Expand count/value pairs into an eight-cell output with explicit input bounds, actual written length and useful partial-error results.
Decode a Small Run-length Block in Spectrum BASIC
Expand count/value pairs into an eight-cell output with explicit input bounds, actual written length and useful partial-error results.
Decode Bounded Byte Deltas on Amiga
A path or table whose values change slowly can be stored as a starting value followed by small signed differences.
Decode Bounded Byte Deltas on C64
A path or table whose values change slowly can be stored as a starting value followed by small signed differences.
Decode Bounded Byte Deltas on NES
A path or table whose values change slowly can be stored as a starting value followed by small signed differences.
Decode Bounded Byte Deltas on Spectrum
A path or table whose values change slowly can be stored as a starting value followed by small signed differences.
Decode Bounded RLE Data on Amiga
Repeated tiles or pixels can be stored as a count followed by a value.
Decode Bounded RLE Data on C64
Repeated tiles or pixels can be stored as a count followed by a value.
Decode Bounded RLE Data on NES
Repeated tiles or pixels can be stored as a count followed by a value.
Decode Bounded RLE Data on Spectrum
Repeated tiles or pixels can be stored as a count followed by a value.
Defer Object Changes Until After Traversal on Amiga
Spawning or deleting objects during a traversal can accidentally update a new object twice or skip a neighbour.
Defer Object Changes Until After Traversal on C64
Spawning or deleting objects during a traversal can accidentally update a new object twice or skip a neighbour.
Defer Object Changes Until After Traversal on NES
Spawning or deleting objects during a traversal can accidentally update a new object twice or skip a neighbour.
Defer Object Changes Until After Traversal on Spectrum
Spawning or deleting objects during a traversal can accidentally update a new object twice or skip a neighbour.
Detect a Button Chord Once on Amiga
Holding two buttons together should trigger one action, not one action every frame.
Detect a Button Chord Once on C64
Holding two buttons together should trigger one action, not one action every frame.
Detect a Button Chord Once on NES
Holding two buttons together should trigger one action, not one action every frame.
Detect a Button Chord Once on Spectrum
Holding two buttons together should trigger one action, not one action every frame.
Detect a Whole Button Chord Once in BBC Micro BASIC
Require a set of held buttons, exclude forbidden buttons and report a rising edge for the complete chord.
Detect a Whole Button Chord Once in C64 BASIC
Require a set of held buttons, exclude forbidden buttons and report a rising edge for the complete chord.
Detect a Whole Button Chord Once in Spectrum BASIC
Require a set of held buttons, exclude forbidden buttons and report a rising edge for the complete chord.
Divide a Word by a Byte on Amiga
A quotient without its remainder throws useful information away.
Divide a Word by a Byte on C64
A quotient without its remainder throws useful information away.
Divide a Word by a Byte on NES
A quotient without its remainder throws useful information away.
Divide a Word by a Byte on Spectrum
A quotient without its remainder throws useful information away.
Divide Ticks Without Losing the Remainder on Amiga
Thirty updates from fifty display ticks should be spaced out, not rounded down to zero.
Divide Ticks Without Losing the Remainder on C64
Thirty updates from fifty display ticks should be spaced out, not rounded down to zero.
Divide Ticks Without Losing the Remainder on NES
Thirty updates from fifty display ticks should be spaced out, not rounded down to zero.
Divide Ticks Without Losing the Remainder on Spectrum
Thirty updates from fifty display ticks should be spaced out, not rounded down to zero.
Draw a Bitmap Region on Acorn Atom
Redraw a room, changed patch or single tile with reusable 6502 code for Acorn Atom's 256×192 monochrome bitmap.
Draw a Bitmap Region on Amstrad CPC
Redraw a room, changed patch or single tile with reusable z80 code for Amstrad CPC's MODE 1 bitmap.
Draw a Bitmap Region on BBC Micro
Redraw a room, changed patch or single tile with reusable 6502 code for BBC Micro's MODE 4 bitmap.
Draw a Bitmap Region on Dragon 32
Redraw a room, changed patch or single tile with reusable 6809 code for Dragon 32's PMODE 4 bitmap.
Draw a Native Region on Acorn Electron
Reusable Acorn Electron code for a room, changed tile or strip of scenery, with its display layout and ownership explicit.
Draw a Native Region on Amiga
Reusable Amiga code for drawing a room, changed tile or strip of scenery, with explicit display ownership.
Draw a Native Region on Atari 800XL
Reusable Atari 800XL code for drawing a room, changed tile or strip of scenery, with explicit display ownership.
Draw a Native Region on Commodore PET
Reusable Commodore PET code for a room, changed tile or strip of scenery, with its display layout and ownership explicit.
Draw a Native Region on Game Boy
Reusable Game Boy code for drawing a room, changed tile or strip of scenery, with explicit display ownership.
Draw a Native Region on Mattel Aquarius
Reusable Mattel Aquarius code for a room, changed tile or strip of scenery, with its display layout and ownership explicit.
Draw a Native Region on Oric Atmos
Reusable Oric Atmos code for drawing a room, changed tile or strip of scenery, with explicit display ownership.
Draw a Native Region on VIC-20
Reusable VIC-20 code for a room, changed tile or strip of scenery, with its display layout and ownership explicit.
Draw a Tile Region on ColecoVision
Copy a checked rectangle of map cells into ColecoVision's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on Einstein TC01
Copy a checked rectangle of map cells into Einstein TC01's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on Game Gear
Copy a checked rectangle of map cells into Game Gear's Mode 4 name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on Master System
Copy a checked rectangle of map cells into Master System's Mode 4 name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on MSX1
Copy a checked rectangle of map cells into MSX1's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on MTX
Copy a checked rectangle of map cells into MTX's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on SG-1000
Copy a checked rectangle of map cells into SG-1000's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on Sord M5
Copy a checked rectangle of map cells into Sord M5's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw a Tile Region on SVI-328
Copy a checked rectangle of map cells into SVI-328's Graphics I name table, with reusable Z80 code, explicit video ownership and verified native output.
Draw Bitmap Text at Pixel Positions on Amiga
Reusable 68000 glyph and counted-string routines over a single Chip RAM plane, with 32-bit source pointers, clipping and explicit advance.
Draw Bitmap Text on BBC Micro MODE 4
Reusable fixed-width characters and counted strings at any pixel position, with explicit clipping, font ownership and drawing costs.
Draw Bitmap Text on CPC 464 MODE 1
Reusable fixed-width characters and counted strings at any pixel position, with explicit clipping, font ownership and drawing costs.
Draw Bitmap Text on Dragon 32 PMODE 4
Reusable fixed-width characters and counted strings at any pixel position, with explicit clipping, font ownership and drawing costs.
Draw Bitmap Text on Spectrum 48K
Reusable fixed-width characters and counted strings at any pixel position, with explicit clipping, font ownership and drawing costs.
Draw Every Item Before Repeating the Bag in BBC Micro BASIC
Select and remove an item from a bounded bag, with explicit reset and caller-owned random indices.
Draw Every Item Before Repeating the Bag in C64 BASIC
Select and remove an item from a bounded bag, with explicit reset and caller-owned random indices.
Draw Every Item Before Repeating the Bag in Spectrum BASIC
Select and remove an item from a bounded bag, with explicit reset and caller-owned random indices.
Draw Lines, Circles and Ellipses
Choose a reusable integer rasteriser or an existing hardware line path. Keep clipping, endpoint ownership, fills and display costs explicit.
Draw Lines, Circles and Ellipses on BBC Micro MODE 4
Reusable clipped integer geometry, span-filled curves and explicit endpoint ownership for BBC Micro MODE 4.
Draw Lines, Circles and Ellipses on CPC 464 MODE 1
Reusable clipped integer geometry, span-filled curves and explicit endpoint ownership for CPC 464 MODE 1.
Draw Lines, Circles and Ellipses on Dragon 32 PMODE 4
Reusable clipped integer geometry, span-filled curves and explicit endpoint ownership for Dragon 32 PMODE 4.
Draw Lines, Circles and Ellipses on Spectrum 48K
Reusable clipped integer geometry, span-filled curves and explicit endpoint ownership for Spectrum 48K.
Draw Objects in Stable Depth Order in BBC Micro BASIC
Sort object indices by depth without moving the objects, keeping equal-depth objects in their original order.
Draw Objects in Stable Depth Order in C64 BASIC
Sort object indices by depth without moving the objects, keeping equal-depth objects in their original order.
Draw Objects in Stable Depth Order in Spectrum BASIC
Sort object indices by depth without moving the objects, keeping equal-depth objects in their original order.
Draw Pixels and Boxes in Acorn Electron BASIC
Reusable set/clear pixels, filled boxes and outlines, with machine-specific coordinate conversion.
Draw Pixels and Boxes in Amstrad CPC BASIC
Reusable set/clear pixels, filled boxes and outlines, with machine-specific coordinate conversion.
Draw Pixels and Boxes in BBC Micro BASIC
Reusable set/clear pixels, filled boxes and outlines, with machine-specific coordinate conversion.
Draw Pixels and Boxes in ZX Spectrum BASIC
Reusable set/clear pixels, filled boxes and outlines, with machine-specific coordinate conversion.
Draw Pixels, Spans and Boxes
Start with one bit and build reusable spans and rectangles. Compare eleven qualified bitmap backends without hiding their costs.
Draw Pixels, Spans and Boxes in CPC MODE 1
Reusable four-pen plotting, readback, spans and rectangles, with CPC packing, partial-byte masks and explicit video ownership.
Draw Pixels, Spans and Boxes on Amiga
Reusable 68000 CPU drawing for an A500 PAL single plane, with byte-edge masks and explicit Chip RAM ownership.
Draw Pixels, Spans and Boxes on Atari 5200
Reusable 6502 bitmap primitives with explicit ANTIC display-list and 4 KiB screen addressing.
Draw Pixels, Spans and Boxes on Atari 800XL
Reusable 6502 bitmap primitives with explicit ANTIC display-list and 4 KiB screen addressing.
Draw Pixels, Spans and Boxes on Atom
Reusable 6502 drawing for the full-RAM Atom’s 256×192 bitmap, with strict bounds and clear byte ownership.
Draw Pixels, Spans and Boxes on BBC Micro
Callable set, clear, XOR, read, span and rectangle routines for BBC Micro, with explicit bounds and byte ownership.
Draw Pixels, Spans and Boxes on C64
Reusable 6502 drawing for the standard HIRES bitmap, with strict bounds, protected colour cells and byte masks.
Draw Pixels, Spans and Boxes on Dragon 32
Callable set, clear, XOR, read, span and rectangle routines for Dragon 32, with explicit bounds and byte ownership.
Draw Pixels, Spans and Boxes on Electron
Reusable 6502 drawing for Electron MODE 4, with strict bounds, interleaved rows and explicit display ownership.
Draw Pixels, Spans and Boxes on Oric Atmos HIRES
Reusable 6502 bitmap primitives with explicit serial-attribute and inverse-bit protection.
Draw Pixels, Spans and Boxes on Spectrum 48K
Callable set, clear, XOR, read, span and rectangle routines for Spectrum 48K, with explicit bounds and byte ownership.
Draw Text Beyond the Character Grid
Reusable 8×8 bitmap characters and counted strings on Spectrum, BBC Micro, Dragon, CPC and Amiga, with clipping and honest storage/work trade-offs.
Draw the Part of the Map You Need
Turn logical map cells into a native picture. Start with checked rectangles across twenty-one machines, while keeping patterns, colours and video ownership explicit.
Draw Without Repeating from a Bag on Amiga
Random pieces can arrive in long droughts.
Draw Without Repeating from a Bag on C64
Random pieces can arrive in long droughts.
Draw Without Repeating from a Bag on NES
Random pieces can arrive in long droughts.
Draw Without Repeating from a Bag on Spectrum
Random pieces can arrive in long droughts.
Edit a Counted Text Buffer in BBC Micro BASIC
Append a checked character, erase safely and clear a fixed eight-slot buffer while keeping live length separate from capacity.
Edit a Counted Text Buffer in C64 BASIC
Append a checked character, erase safely and clear a fixed eight-slot buffer while keeping live length separate from capacity.
Edit a Counted Text Buffer in Spectrum BASIC
Append a checked character, erase safely and clear a fixed eight-slot buffer while keeping live length separate from capacity.
Encode a Small Run-length Block in BBC Micro BASIC
Group up to eight byte values into count/value pairs, checking complete output capacity before changing any encoded byte.
Encode a Small Run-length Block in C64 BASIC
Group up to eight byte values into count/value pairs, checking complete output capacity before changing any encoded byte.
Encode a Small Run-length Block in Spectrum BASIC
Group up to eight byte values into count/value pairs, checking complete output capacity before changing any encoded byte.
Encode a Small Run-length Block on Amiga
Repeated map values can take less room as a count and a value—but only if the output buffer is big enough.
Encode a Small Run-length Block on C64
Repeated map values can take less room as a count and a value—but only if the output buffer is big enough.
Encode a Small Run-length Block on NES
Repeated map values can take less room as a count and a value—but only if the output buffer is big enough.
Encode a Small Run-length Block on Spectrum
Repeated map values can take less room as a count and a value—but only if the output buffer is big enough.
Enter and Leave a Ladder on Amiga
Climbing should suspend gravity, but jumping away must hand movement back to the ordinary player controller.
Enter and Leave a Ladder on C64
Climbing should suspend gravity, but jumping away must hand movement back to the ordinary player controller.
Enter and Leave a Ladder on NES
Climbing should suspend gravity, but jumping away must hand movement back to the ordinary player controller.
Enter and Leave a Ladder on Spectrum
Climbing should suspend gravity, but jumping away must hand movement back to the ordinary player controller.
Escalation as Data
Difficulty lives in a table; a level-up pokes the next row into live tuning variables the systems read fresh every frame. The systems never learn that levels exist.
Face a Target in Eight Directions in BBC Micro BASIC
Choose a discrete facing from two positions using signed displacement and a deliberate 2:1 sector rule.
Face a Target in Eight Directions in C64 BASIC
Choose a discrete facing from two positions using signed displacement and a deliberate 2:1 sector rule.
Face a Target in Eight Directions in Spectrum BASIC
Choose a discrete facing from two positions using signed displacement and a deliberate 2:1 sector rule.
Feeding New Columns
As the NES scrolls sideways, write a fresh column of tiles into the offscreen nametable each time the view crosses a tile boundary — so a level far wider than two screens rolls past seamlessly.
Fill a Connected Grid Region on Amiga
A paint fill can also discover a connected room or reveal matching puzzle cells.
Fill a Connected Grid Region on C64
A paint fill can also discover a connected room or reveal matching puzzle cells.
Fill a Connected Grid Region on NES
A paint fill can also discover a connected room or reveal matching puzzle cells.
Fill a Connected Grid Region on Spectrum
A paint fill can also discover a connected room or reveal matching puzzle cells.
Filter Collision Pairs by Layer on Amiga
A projectile can cross its owner without hitting them, while still hitting an opponent in the same patch of screen.
Filter Collision Pairs by Layer on C64
A projectile can cross its owner without hitting them, while still hitting an opponent in the same patch of screen.
Filter Collision Pairs by Layer on NES
A projectile can cross its owner without hitting them, while still hitting an opponent in the same patch of screen.
Filter Collision Pairs by Layer on Spectrum
A projectile can cross its owner without hitting them, while still hitting an opponent in the same patch of screen.
Filter Collision Pairs by Policy in BBC Micro BASIC
Require mutual group acceptance, then classify an accepted pair as a sensor or solid before geometry testing.
Filter Collision Pairs by Policy in C64 BASIC
Require mutual group acceptance, then classify an accepted pair as a sensor or solid before geometry testing.
Filter Collision Pairs by Policy in Spectrum BASIC
Require mutual group acceptance, then classify an accepted pair as a sensor or solid before geometry testing.
Find a Grid Path and Reachable Cells in BBC Micro BASIC
Return shortest four-neighbour distances, parents and a first step from a bounded tile map.
Find a Grid Path and Reachable Cells in C64 BASIC
Return shortest four-neighbour distances, parents and a first step from a bounded tile map.
Find a Grid Path and Reachable Cells in Spectrum BASIC
Return shortest four-neighbour distances, parents and a first step from a bounded tile map.
Find a Value in a Small Dictionary in BBC Micro BASIC
Search eight byte-key/value pairs, preserving the dictionary and returning the first match with separate found and validity flags.
Find a Value in a Small Dictionary in C64 BASIC
Search eight byte-key/value pairs, preserving the dictionary and returning the first match with separate found and validity flags.
Find a Value in a Small Dictionary in Spectrum BASIC
Search eight byte-key/value pairs, preserving the dictionary and returning the first match with separate found and validity flags.
Find an Integer Square Root on Amiga
Sometimes the useful answer is the whole-number distance, with no floating point in sight.
Find an Integer Square Root on C64
Sometimes the useful answer is the whole-number distance, with no floating point in sight.
Find an Integer Square Root on NES
Sometimes the useful answer is the whole-number distance, with no floating point in sight.
Find an Integer Square Root on Spectrum
Sometimes the useful answer is the whole-number distance, with no floating point in sight.
Find the First Step Along a Shortest Grid Path on Amiga
An enemy can walk around a wall without pretending that moving towards the player is already pathfinding.
Find the First Step Along a Shortest Grid Path on C64
An enemy can walk around a wall without pretending that moving towards the player is already pathfinding.
Find the First Step Along a Shortest Grid Path on NES
An enemy can walk around a wall without pretending that moving towards the player is already pathfinding.
Find the First Step Along a Shortest Grid Path on Spectrum
An enemy can walk around a wall without pretending that moving towards the player is already pathfinding.
Fixed-Point Math
Fractional values without floating point. Essential for smooth movement and physics on 8/16-bit CPUs.
Follow an Ordered Waypoint Route in BBC Micro BASIC
Move through four ordered positions, retaining the route cursor and choosing a loop or a finished one-shot.
Follow an Ordered Waypoint Route in C64 BASIC
Move through four ordered positions, retaining the route cursor and choosing a loop or a finished one-shot.
Follow an Ordered Waypoint Route in Spectrum BASIC
Move through four ordered positions, retaining the route cursor and choosing a loop or a finished one-shot.
Format a 16-bit Decimal Number on Amiga
A binary score is good for adding points.
Format a 16-bit Decimal Number on C64
A binary score is good for adding points.
Format a 16-bit Decimal Number on NES
A binary score is good for adding points.
Format a 16-bit Decimal Number on Spectrum
A binary score is good for adding points.
Format a Byte as Hexadecimal on Amiga
Two hexadecimal digits are a compact way to show a byte in a debugger, password or diagnostic panel.
Format a Byte as Hexadecimal on C64
Two hexadecimal digits are a compact way to show a byte in a debugger, password or diagnostic panel.
Format a Byte as Hexadecimal on NES
Two hexadecimal digits are a compact way to show a byte in a debugger, password or diagnostic panel.
Format a Byte as Hexadecimal on Spectrum
Two hexadecimal digits are a compact way to show a byte in a debugger, password or diagnostic panel.
Four Ways to Make a Sound
Compare CPU-driven beeper sound, NES channels, SID synthesis and Amiga samples, with their timing and ownership costs.
Four-Channel Music
A complete eight-row sequencer for four Paula voices, with explicit startup, channel ownership and hold semantics. A small step toward music playback.
Fractional Position Updates on Amiga
A quarter-pixel step should eventually move the sprite a whole pixel.
Fractional Position Updates on C64
A quarter-pixel step should eventually move the sprite a whole pixel.
Fractional Position Updates on NES
A quarter-pixel step should eventually move the sprite a whole pixel.
Fractional Position Updates on Spectrum
A quarter-pixel step should eventually move the sprite a whole pixel.
Game State Machine
Organise game flow with distinct states (title, playing, game over). Clean separation of game phases.
Game States and Restart on Amiga
Separate title, play, pause and game over, preserve a paused session and reset a new one exactly once.
Game States and Restart on C64
Separate title, play, pause and game over, preserve a paused session and reset a new one exactly once.
Game States and Restart on NES
Separate title, play, pause and game over, preserve a paused session and reset a new one exactly once.
Game States and Restart on Spectrum
Separate title, play, pause and game over, preserve a paused session and reset a new one exactly once.
Gate a Dialogue Choice with Flags on Amiga
A dialogue option can depend on what the player knows and change what happens next.
Gate a Dialogue Choice with Flags on C64
A dialogue option can depend on what the player knows and change what happens next.
Gate a Dialogue Choice with Flags on NES
A dialogue option can depend on what the player knows and change what happens next.
Gate a Dialogue Choice with Flags on Spectrum
A dialogue option can depend on what the player knows and change what happens next.
Give a 6809 turn a deadline on Dragon 32
Use an explicit countdown context and the stock ROM timer, keeping input and game policy separate.
Give a BASIC turn a deadline on BBC Micro
Use a reusable elapsed-clock helper, keep untimed play valid, and let a deadline expire without blocking on input.
Give a BASIC turn a deadline on C64
Use a reusable elapsed-clock helper, keep untimed play valid, and let a deadline expire without blocking on input.
Give a BASIC turn a deadline on CPC
Keep untimed turns valid, or add time pressure using the firmware clock and nonblocking character input.
Give a BASIC turn a deadline on Dragon 32
Keep untimed play valid, or use TIMER and a reusable countdown to advance without waiting for a command.
Give a BASIC turn a deadline on Electron
Use a reusable elapsed-clock helper, keep untimed play valid, and let a deadline expire without blocking on input.
Give a BASIC turn a deadline on PET
Use a reusable elapsed-clock helper, keep untimed play valid, and let a deadline expire without blocking on input.
Give a BASIC turn a deadline on VIC-20
Use a reusable elapsed-clock helper, keep untimed play valid, and let a deadline expire without blocking on input.
Give a BBC Micro turn an optional MOS deadline
Let the player think, or add a deadline using a serviced clock and physical key edges.
Give a Blitz BASIC turn an optional deadline
Keep a turn waiting for a decision, or let a separate clock put pressure on the player without blocking on Return.
Give a FORTH turn a deadline on Jupiter Ace
Keep untimed turns waiting, then add a reusable unsigned deadline and nonblocking key sampling on the unexpanded Ace.
Give a PET turn a firmware deadline
Keep untimed turns useful, then add a serviced jiffy-clock deadline with an explicit input policy.
Give a Spectrum BASIC turn a deadline
Keep untimed play valid, then add a reusable FRAMES countdown with an explicit input and expiry policy.
Give a Spectrum Z80 turn a deadline
Keep untimed play valid, then add a reusable FRAMES countdown with an explicit input and expiry policy.
Give a turn a deadline on the Acorn Atom
Keep untimed turns untimed, then add a reusable clock-driven deadline that can expire without input.
Give a turn a deadline on the Amstrad CPC
Keep untimed turns untimed, then add a reusable clock-driven deadline that can expire without input.
Give a turn a KERNAL deadline
Keep untimed turns useful, then add a serviced jiffy-clock deadline with an explicit input policy.
Give a turn a KERNAL deadline
Keep untimed turns useful, then add a serviced jiffy-clock deadline with an explicit input policy.
Give an Ace turn a deadline in Z80
Use the stock FORTH clock with a reusable countdown, a release-gated keyboard reader and a loader that waits for compilation.
Give an AMOS turn an optional deadline
Let the player think, enable a ticking deadline when the rules need it, and keep time moving while input waits.
Give an Atari BASIC turn a deadline
Use a reusable countdown without blocking input or replacing the normal Atari VBI clock.
Give an Atari XL turn a VBI-clock deadline
Reuse a 6502 countdown while preserving Atari BASIC, normal VBI services and explicit high-RAM ownership.
Give an Electron turn an optional MOS deadline
Let the player think, or add a deadline using a serviced clock and physical key edges.
Give an MSX BASIC turn a deadline
Use TIME and nonblocking input with a reusable countdown, retaining a valid untimed game policy.
Give an MSX turn a BIOS-clock deadline
Keep optional turn timing, buffered input and BIOS text output separate, using the maintained Z80 countdown.
Give MARIA a bounded object list
Build reusable direct 160A headers while keeping zones, graphics placement and DMA ownership explicit.
Give Ready Jobs a Fair Turn in BBC Micro BASIC
Select one of eight ready slots from a retained rotating start position, wrapping fairly and leaving work execution to the caller.
Give Ready Jobs a Fair Turn in C64 BASIC
Select one of eight ready slots from a retained rotating start position, wrapping fairly and leaving work execution to the caller.
Give Ready Jobs a Fair Turn in Spectrum BASIC
Select one of eight ready slots from a retained rotating start position, wrapping fairly and leaving work execution to the caller.
Grid Movement with Bounds
Move an entity on a grid with boundary checking. Prevents moving outside the play area.
Group Nearby Objects into Fixed Buckets in BBC Micro BASIC
Store up to four object IDs in each of four spatial buckets, with explicit capacity overflow and read-only queries.
Group Nearby Objects into Fixed Buckets in C64 BASIC
Store up to four object IDs in each of four spatial buckets, with explicit capacity overflow and read-only queries.
Group Nearby Objects into Fixed Buckets in Spectrum BASIC
Store up to four object IDs in each of four spatial buckets, with explicit capacity overflow and read-only queries.
Hardware Sprites
Show a complete 24×21 sprite, set its ninth X bit, and preserve the other sprites’ shared registers. Verified on PAL and NTSC emulators.
Input Edge Detection
Detect newly-pressed buttons, ignoring held inputs. Essential for menus and single-action triggers.
Insert a Score and Keep Ties Stable in BBC Micro BASIC
Maintain four descending byte scores with associated tags, retaining existing equal scores first and rejecting an invalid table without changing it.
Insert a Score and Keep Ties Stable in C64 BASIC
Maintain four descending byte scores with associated tags, retaining existing equal scores first and rejecting an invalid table without changing it.
Insert a Score and Keep Ties Stable in Spectrum BASIC
Maintain four descending byte scores with associated tags, retaining existing equal scores first and rejecting an invalid table without changing it.
Insert into a High-score Table on Amiga
A score table needs a clear answer for ties, a full table and the player who just misses the cut.
Insert into a High-score Table on C64
A score table needs a clear answer for ties, a full table and the player who just misses the cut.
Insert into a High-score Table on NES
A score table needs a clear answer for ties, a full table and the player who just misses the cut.
Insert into a High-score Table on Spectrum
A score table needs a clear answer for ties, a full table and the player who just misses the cut.
Install and Replace Characters on Game Boy
Reusable glyph uploads and cell selection on Game Boy; keep pictures, character numbers and placement separate.
Install and Replace Characters on MSX1
Reusable glyph uploads and cell selection on MSX1; keep pictures, character numbers and placement separate.
Install and Replace Characters on VIC-20
Reusable glyph uploads and cell selection on VIC-20; keep pictures, character numbers and placement separate.
Install Pictures Once, Use Them Many Times
Reusable glyph upload, replacement and cell selection on sixteen qualified targets, including native C64, NES CHR-RAM and Sega Mode 4. Separate the picture from its code, placement and colours.
Interpolate Between Byte Endpoints on Amiga
A menu panel or camera can move towards an endpoint without a different hand-written position for every frame.
Interpolate Between Byte Endpoints on C64
A menu panel or camera can move towards an endpoint without a different hand-written position for every frame.
Interpolate Between Byte Endpoints on NES
A menu panel or camera can move towards an endpoint without a different hand-written position for every frame.
Interpolate Between Byte Endpoints on Spectrum
A menu panel or camera can move towards an endpoint without a different hand-written position for every frame.
Joystick Edge Detection
Detect newly-pressed joystick directions, ignoring held inputs. Essential for grid-based movement and menu navigation.
Joystick Reading
Read both C64 joystick ports, distinguish holds, presses and releases, and map one event to one action.
Joystick Reading
Read Amiga joystick using the JOY1DAT register with XOR decoding for up/down directions.
Jump Buffering and Coyote Time on Amiga
Press Jump just before landing and it is frustrating when the press disappears.
Jump Buffering and Coyote Time on C64
Press Jump just before landing and it is frustrating when the press disappears.
Jump Buffering and Coyote Time on NES
Press Jump just before landing and it is frustrating when the press disappears.
Jump Buffering and Coyote Time on Spectrum
Press Jump just before landing and it is frustrating when the press disappears.
Keep a Bounded Cell-edit Undo Log on Amiga
Undo should restore the previous cell value, including when the same cell was edited twice.
Keep a Bounded Cell-edit Undo Log on C64
Undo should restore the previous cell value, including when the same cell was edited twice.
Keep a Bounded Cell-edit Undo Log on NES
Undo should restore the previous cell value, including when the same cell was edited twice.
Keep a Bounded Cell-edit Undo Log on Spectrum
Undo should restore the previous cell value, including when the same cell was edited twice.
Keep a Menu Selection Visible on Amiga
A list can hold more choices than the screen has rows while its cursor still stays in view.
Keep a Menu Selection Visible on C64
A list can hold more choices than the screen has rows while its cursor still stays in view.
Keep a Menu Selection Visible on NES
A list can hold more choices than the screen has rows while its cursor still stays in view.
Keep a Menu Selection Visible on Spectrum
A list can hold more choices than the screen has rows while its cursor still stays in view.
Keep a Small Position History on Amiga
A trailing companion needs where the leader was, not another guess at where it might be going.
Keep a Small Position History on C64
A trailing companion needs where the leader was, not another guess at where it might be going.
Keep a Small Position History on NES
A trailing companion needs where the leader was, not another guess at where it might be going.
Keep a Small Position History on Spectrum
A trailing companion needs where the leader was, not another guess at where it might be going.
Keep a Stable Interaction Focus on Amiga
A prompt should not flicker between two nearby objects whenever their distances differ by one pixel.
Keep a Stable Interaction Focus on C64
A prompt should not flicker between two nearby objects whenever their distances differ by one pixel.
Keep a Stable Interaction Focus on NES
A prompt should not flicker between two nearby objects whenever their distances differ by one pixel.
Keep a Stable Interaction Focus on Spectrum
A prompt should not flicker between two nearby objects whenever their distances differ by one pixel.
Keep a Stable Priority Event Queue on Amiga
An urgent event may need service before an older routine event, while equal priorities should remain fair.
Keep a Stable Priority Event Queue on C64
An urgent event may need service before an older routine event, while equal priorities should remain fair.
Keep a Stable Priority Event Queue on NES
An urgent event may need service before an older routine event, while equal priorities should remain fair.
Keep a Stable Priority Event Queue on Spectrum
An urgent event may need service before an older routine event, while equal priorities should remain fair.
Keep a Turn Until the Route Opens in BBC Micro BASIC
Retain a requested turn, try it before the current direction and move at most one checked grid cell per service.
Keep a Turn Until the Route Opens in C64 BASIC
Retain a requested turn, try it before the current direction and move at most one checked grid cell per service.
Keep a Turn Until the Route Opens in Spectrum BASIC
Retain a requested turn, try it before the current direction and move at most one checked grid cell per service.
Keep an Effect on a Timer in BBC Micro BASIC
Track a finite duration and pulse interval, including a possible pulse on the final active tick.
Keep an Effect on a Timer in C64 BASIC
Track a finite duration and pulse interval, including a possible pulse on the final active tick.
Keep an Effect on a Timer in Spectrum BASIC
Track a finite duration and pulse interval, including a possible pulse on the final active tick.
Keep Camera Shake Alive Across Updates in BBC Micro BASIC
Produce bounded signed camera offsets for a retained lifetime, without modifying the world position.
Keep Camera Shake Alive Across Updates in C64 BASIC
Produce bounded signed camera offsets for a retained lifetime, without modifying the world position.
Keep Camera Shake Alive Across Updates in Spectrum BASIC
Produce bounded signed camera offsets for a retained lifetime, without modifying the world position.
Keep Camera Shake out of World State on Amiga
An impact can shake the view without moving the player, the level or the collision geometry.
Keep Camera Shake out of World State on C64
An impact can shake the view without moving the player, the level or the collision geometry.
Keep Camera Shake out of World State on NES
An impact can shake the view without moving the player, the level or the collision geometry.
Keep Camera Shake out of World State on Spectrum
An impact can shake the view without moving the player, the level or the collision geometry.
Keep Fractional Tick Credit in BBC Micro BASIC
Emit a chosen numerator of events per denominator calls without discarding the remainder.
Keep Fractional Tick Credit in C64 BASIC
Emit a chosen numerator of events per denominator calls without discarding the remainder.
Keep Fractional Tick Credit in Spectrum BASIC
Emit a chosen numerator of events per denominator calls without discarding the remainder.
Keep Fractions Between Position Updates in BBC Micro BASIC
Add a signed eight-point-eight displacement to a retained position, preserving sub-unit motion and making wrapping explicit.
Keep Fractions Between Position Updates in C64 BASIC
Add a signed eight-point-eight displacement to a retained position, preserving sub-unit motion and making wrapping explicit.
Keep Fractions Between Position Updates in Spectrum BASIC
Add a signed eight-point-eight displacement to a retained position, preserving sub-unit motion and making wrapping explicit.
Keep Interaction Focus Stable in BBC Micro BASIC
Choose an eligible nearby target while retaining the current one within an explicit distance margin.
Keep Interaction Focus Stable in C64 BASIC
Choose an eligible nearby target while retaining the current one within an explicit distance margin.
Keep Interaction Focus Stable in Spectrum BASIC
Choose an eligible nearby target while retaining the current one within an explicit distance margin.
Keep Object References with Their Lifetimes in BBC Micro BASIC
Allocate, query and release four stable slots while rejecting references to an earlier generation of a slot.
Keep Object References with Their Lifetimes in C64 BASIC
Allocate, query and release four stable slots while rejecting references to an earlier generation of a slot.
Keep Object References with Their Lifetimes in Spectrum BASIC
Allocate, query and release four stable slots while rejecting references to an earlier generation of a slot.
Keep Starts and Resumes Separate in BBC Micro BASIC
Separate fresh sessions, held-button edges and pause/resume transitions with explicit caller-owned progress.
Keep Starts and Resumes Separate in C64 BASIC
Separate fresh sessions, held-button edges and pause/resume transitions with explicit caller-owned progress.
Keep Starts and Resumes Separate in Spectrum BASIC
Separate fresh sessions, held-button edges and pause/resume transitions with explicit caller-owned progress.
Keep the Camera Quiet Until Needed in BBC Micro BASIC
Retain a world-space camera, move only beyond a screen-relative quiet zone and clamp the result to valid scrolling bounds.
Keep the Camera Quiet Until Needed in C64 BASIC
Retain a world-space camera, move only beyond a screen-relative quiet zone and clamp the result to valid scrolling bounds.
Keep the Camera Quiet Until Needed in Spectrum BASIC
Retain a world-space camera, move only beyond a screen-relative quiet zone and clamp the result to valid scrolling bounds.
Keep Track of Cells That Need Redrawing in BBC Micro BASIC
Mark, inspect and consume pending cell updates without losing repeated marks or crossing the two-byte boundary.
Keep Track of Cells That Need Redrawing in C64 BASIC
Mark, inspect and consume pending cell updates without losing repeated marks or crossing the two-byte boundary.
Keep Track of Cells That Need Redrawing in Spectrum BASIC
Mark, inspect and consume pending cell updates without losing repeated marks or crossing the two-byte boundary.
Keep Travel Remaining After a Bounce in BBC Micro BASIC
Move within inclusive axis bounds while consuming the whole requested distance, retaining direction and counting repeated reflections.
Keep Travel Remaining After a Bounce in C64 BASIC
Move within inclusive axis bounds while consuming the whole requested distance, retaining direction and counting repeated reflections.
Keep Travel Remaining After a Bounce in Spectrum BASIC
Move within inclusive axis bounds while consuming the whole requested distance, retaining direction and counting repeated reflections.
Keep Urgent Events in a Stable Queue in BBC Micro BASIC
Queue four event/priority pairs, service the highest priority first and preserve insertion order for equal priorities.
Keep Urgent Events in a Stable Queue in C64 BASIC
Queue four event/priority pairs, service the highest priority first and preserve insertion order for equal priorities.
Keep Urgent Events in a Stable Queue in Spectrum BASIC
Queue four event/priority pairs, service the highest priority first and preserve insertion order for equal priorities.
Keyboard Reading
Read the ZX Spectrum keyboard matrix by polling I/O ports. Simple, efficient, and no ROM routines required.
Land on a One-way Platform on Amiga
A fast-falling character can cross a thin platform between two updates without ever having its feet exactly on the top.
Land on a One-way Platform on C64
A fast-falling character can cross a thin platform between two updates without ever having its feet exactly on the top.
Land on a One-way Platform on NES
A fast-falling character can cross a thin platform between two updates without ever having its feet exactly on the top.
Land on a One-way Platform on Spectrum
A fast-falling character can cross a thin platform between two updates without ever having its feet exactly on the top.
Land While Crossing a One-way Platform in BBC Micro BASIC
Compare old and proposed feet against a platform top, using widened horizontal spans and a deliberate drop-through flag.
Land While Crossing a One-way Platform in C64 BASIC
Compare old and proposed feet against a platform top, using widened horizontal spans and a deliberate drop-through flag.
Land While Crossing a One-way Platform in Spectrum BASIC
Compare old and proposed feet against a platform top, using widened horizontal spans and a deliberate drop-through flag.
LFSR Random Numbers
Linear Feedback Shift Register for fast, deterministic pseudo-random numbers.
Limit Hits to an Attack Window in BBC Micro BASIC
Accept each target once during a chosen attack interval, retaining a hit set across updates.
Limit Hits to an Attack Window in C64 BASIC
Accept each target once during a chosen attack interval, retaining a hit set across updates.
Limit Hits to an Attack Window in Spectrum BASIC
Accept each target once during a chosen attack interval, retaining a hit set across updates.
Limit Hits to an Attack Window on Amiga
A sword can overlap the same enemy for several frames without dealing damage on every frame.
Limit Hits to an Attack Window on C64
A sword can overlap the same enemy for several frames without dealing damage on every frame.
Limit Hits to an Attack Window on NES
A sword can overlap the same enemy for several frames without dealing damage on every frame.
Limit Hits to an Attack Window on Spectrum
A sword can overlap the same enemy for several frames without dealing damage on every frame.
Look Up a Bounded Byte Dictionary on Amiga
An item code, tile identifier or command token often needs a small associated value.
Look Up a Bounded Byte Dictionary on C64
An item code, tile identifier or command token often needs a small associated value.
Look Up a Bounded Byte Dictionary on NES
An item code, tile identifier or command token often needs a small associated value.
Look Up a Bounded Byte Dictionary on Spectrum
An item code, tile identifier or command token often needs a small associated value.
Look Up a Small Slope Surface in BBC Micro BASIC
Query an eight-column height profile, mirror it without copying data and reject a surface that would exceed the byte coordinate range.
Look Up a Small Slope Surface in C64 BASIC
Query an eight-column height profile, mirror it without copying data and reject a surface that would exceed the byte coordinate range.
Look Up a Small Slope Surface in Spectrum BASIC
Query an eight-column height profile, mirror it without copying data and reject a surface that would exceed the byte coordinate range.
Look Up Tile Properties on Amiga
The picture number in a map does not automatically tell you whether a tile is solid, harmful or climbable.
Look Up Tile Properties on C64
The picture number in a map does not automatically tell you whether a tile is solid, harmful or climbable.
Look Up Tile Properties on NES
The picture number in a map does not automatically tell you whether a tile is solid, harmful or climbable.
Look Up Tile Properties on Spectrum
The picture number in a map does not automatically tell you whether a tile is solid, harmful or climbable.
Make the pieces play together
Five small programs connect controls, movement, collision, drawing and sound, with reusable routines you can bring into your own game.
Manhattan Distance on Amiga
On a four-way grid, distance is the horizontal gap plus the vertical gap.
Manhattan Distance on C64
On a four-way grid, distance is the horizontal gap plus the vertical gap.
Manhattan Distance on NES
On a four-way grid, distance is the horizontal gap plus the vertical gap.
Manhattan Distance on Spectrum
On a four-way grid, distance is the horizontal gap plus the vertical gap.
Masked Sprites
The Spectrum has no hardware sprites, so a moving object is drawn by hand — AND a mask to punch a hole in the background, OR the image into it — with pre-shifted copies for pixel-accurate, fast movement.
Masked Sprites with Background Restoration
Draw an 8×8 software object over BBC Micro MODE4 scenery, restore what it covered, then move it. A small reusable primitive with a complete caller.
Measure, Align and Wrap Text on BBC Micro MODE 4
Measure and align labels, choose character or word wrapping, and give narrow letters less room with proportional text.
Measure, Align and Wrap Text on CPC 464 MODE 1
Measure and align labels, choose character or word wrapping, and give narrow letters less room with proportional text.
Measure, Align and Wrap Text on Dragon 32 PMODE 4
Measure and align labels, choose character or word wrapping, and give narrow letters less room with proportional text.
Measure, Align and Wrap Text on Spectrum 48K
Measure and align labels, choose character or word wrapping, and give narrow letters less room with proportional text.
Menu Key Repeat on Amiga
A menu should move once when you press Down, pause briefly, then scroll while you hold it.
Menu Key Repeat on C64
A menu should move once when you press Down, pause briefly, then scroll while you hold it.
Menu Key Repeat on NES
A menu should move once when you press Down, pause briefly, then scroll while you hold it.
Menu Key Repeat on Spectrum
A menu should move once when you press Down, pause briefly, then scroll while you hold it.
Mirror an Eight-bit Bitmap Row on Amiga
A stored row of pixels can face the other way without keeping a second copy of the artwork.
Mirror an Eight-bit Bitmap Row on C64
A stored row of pixels can face the other way without keeping a second copy of the artwork.
Mirror an Eight-bit Bitmap Row on NES
A stored row of pixels can face the other way without keeping a second copy of the artwork.
Mirror an Eight-bit Bitmap Row on Spectrum
A stored row of pixels can face the other way without keeping a second copy of the artwork.
Move, collect and respond on the Amiga
Combine input, bounded movement, box collision, drawing and sound in a small program you can take apart.
Move, collect and respond on the BBC Micro
Combine input, bounded movement, box collision, drawing and sound in a small program you can take apart.
Move, collect and respond on the Commodore 64
Combine input, bounded movement, box collision, drawing and sound in a small program you can take apart.
Move, collect and respond on the NES
Combine input, bounded movement, box collision, drawing and sound in a small program you can take apart.
Move, collect and respond on the ZX Spectrum
Combine input, bounded movement, box collision, drawing and sound in a small program you can take apart.
Multiply Two Bytes into a Word on Amiga
A small machine still needs products larger than one byte: an area, a score multiplier or a scaled distance.
Multiply Two Bytes into a Word on C64
A small machine still needs products larger than one byte: an area, a score multiplier or a scaled distance.
Multiply Two Bytes into a Word on NES
A small machine still needs products larger than one byte: an area, a score multiplier or a scaled distance.
Multiply Two Bytes into a Word on Spectrum
A small machine still needs products larger than one byte: an area, a score multiplier or a scaled distance.
Nametables and Scrolling
Move through a two-screen NES background with reusable scroll routines and a complete cartridge. Publish a finished display update before NMI uses it.
Numeric Display
Convert a number (0-99) to two ASCII digits and print them. Essential for scores and counters.
Offer Dialogue Choices with Quest Flags in BBC Micro BASIC
Test quest conditions before accepting a choice, then apply its changes once.
Offer Dialogue Choices with Quest Flags in C64 BASIC
Test quest conditions before accepting a choice, then apply its changes once.
Offer Dialogue Choices with Quest Flags in Spectrum BASIC
Test quest conditions before accepting a choice, then apply its changes once.
One-Shot Samples
Queue a silent reload after a sample starts, so it finishes once. Understand DMA ownership, interrupt latency and safe reuse.
Optional Timed Turns
Keep an optional turn deadline moving with a private A500 VBlank clock, even while foreground work slows down.
Optional Timed Turns
Let commands advance a game, add an optional NMI-clock deadline, and keep time moving during slow work.
Pack Live Objects and Keep Their Order in BBC Micro BASIC
Compact paired flag/payload arrays in place, clearing vacated entries while preserving unused capacity.
Pack Live Objects and Keep Their Order in C64 BASIC
Compact paired flag/payload arrays in place, clearing vacated entries while preserving unused capacity.
Pack Live Objects and Keep Their Order in Spectrum BASIC
Compact paired flag/payload arrays in place, clearing vacated entries while preserving unused capacity.
Palette Loading
Load colour palettes into PPU memory at $3F00. Required setup for any NES graphics.
Parse a Bounded Decimal Number on Amiga
A score name box and a numeric prompt need different input rules.
Parse a Bounded Decimal Number on C64
A score name box and a numeric prompt need different input rules.
Parse a Bounded Decimal Number on NES
A score name box and a numeric prompt need different input rules.
Parse a Bounded Decimal Number on Spectrum
A score name box and a numeric prompt need different input rules.
Parse Two Hexadecimal Digits on Amiga
A short hexadecimal input still needs validation before it becomes an address, colour or seed.
Parse Two Hexadecimal Digits on C64
A short hexadecimal input still needs validation before it becomes an address, colour or seed.
Parse Two Hexadecimal Digits on NES
A short hexadecimal input still needs validation before it becomes an address, colour or seed.
Parse Two Hexadecimal Digits on Spectrum
A short hexadecimal input still needs validation before it becomes an address, colour or seed.
Parse Two-Word Commands on C64
Reusable BASIC V2 code turns words into game concepts, with exact matching, synonyms, clear errors and measured costs.
Patrol Between Two Endpoints on Amiga
A guard walks to the end of a corridor, turns and comes back.
Patrol Between Two Endpoints on C64
A guard walks to the end of a corridor, turns and comes back.
Patrol Between Two Endpoints on NES
A guard walks to the end of a corridor, turns and comes back.
Patrol Between Two Endpoints on Spectrum
A guard walks to the end of a corridor, turns and comes back.
Pick the Nearest Active Target in BBC Micro BASIC
Choose among four active candidates using Manhattan distance, preserving the first slot on ties and retaining the ninth distance bit.
Pick the Nearest Active Target in C64 BASIC
Choose among four active candidates using Manhattan distance, preserving the first slot on ties and retaining the ninth distance bit.
Pick the Nearest Active Target in Spectrum BASIC
Choose among four active candidates using Manhattan distance, preserving the first slot on ties and retaining the ninth distance bit.
Place Amiga Bobs with Prepared Pixel Phases
Trade chip RAM for sixteen prepared mask/image phases, reusing the checked word-aligned clipped blitter renderer at individual pixel positions.
Place BBC MODE4 Sprites at Pixel Positions
Use eight prepared mask phases with signed pixel coordinates, normal forty-column MODE4 mapping and a bounded three-byte drawing routine.
Place characters in a ZX80 display file
Draw counted labels and character pictures with the machine's ROM, with explicit bounds and display ownership.
Place characters in a ZX81 display file
Draw counted labels and character pictures with the machine's ROM, with explicit bounds and display ownership.
Place ROM characters on Aquarius
Draw counted labels and character pictures with the machine's ROM, with explicit bounds and display ownership.
Place ROM characters on the PET
Draw counted labels and character pictures with the machine's ROM, with explicit bounds and display ownership.
Place Spectrum Sprites at Pixel Positions
Select one of eight prepared masks, keep signed pixel positions correct at the left edge, and draw the visible three-byte footprint.
Place Sprites Between Byte Boundaries
Prepare shifted mask/image phases once, then choose the right one for a pixel position. Working Spectrum, BBC and Amiga code makes the memory and integration costs explicit.
Playing a Sample
Point Paula's audio channel 0 at a waveform in chip RAM, choose a period and volume, and let DMA repeat it — then predict the pitch you will hear.
Prepare a playfield, then race the beam
Reuse coarse cells and glyph stamps without losing sight of the TIA's scanline schedule.
Print a Bounded Text Region in Acorn Atom BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Acorn Electron BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Amstrad CPC BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Atari 800XL BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in BBC Micro BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Commodore 64 BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Commodore PET BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Dragon 32 BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Mattel Aquarius BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Memotech MTX BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in MSX BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Oric Atmos BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in Spectravideo SVI-328 BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in VIC-20 BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Print a Bounded Text Region in ZX Spectrum BASIC
Print a map slice with a complete bounds and tile-ID preflight before any output.
Profile a Routine
Find where a Spectrum routine spends its time, change one thing, and measure the saving against the extra code.
Progress Bar (BASIC)
Horizontal progress bar coloured like a gauge — red when low, yellow in the middle, green when high. Useful for fuel, health or time left.
Project a World Point into the View in BBC Micro BASIC
Convert byte-pair world coordinates to visible screen positions without dropping high bytes or wrapping negative differences.
Project a World Point into the View in C64 BASIC
Convert byte-pair world coordinates to visible screen positions without dropping high bytes or wrapping negative differences.
Project a World Point into the View in Spectrum BASIC
Convert byte-pair world coordinates to visible screen positions without dropping high bytes or wrapping negative differences.
Project World Points into a Viewport on Amiga
A world can be larger than the screen even when the drawing routine expects byte-sized screen coordinates.
Project World Points into a Viewport on C64
A world can be larger than the screen even when the drawing routine expects byte-sized screen coordinates.
Project World Points into a Viewport on NES
A world can be larger than the screen even when the drawing routine expects byte-sized screen coordinates.
Project World Points into a Viewport on Spectrum
A world can be larger than the screen even when the drawing routine expects byte-sized screen coordinates.
Propose a Push from a Moving Solid in BBC Micro BASIC
Detect a one-dimensional moving solid crossing an actor and propose a safe displacement or an explicit blocked result.
Propose a Push from a Moving Solid in C64 BASIC
Detect a one-dimensional moving solid crossing an actor and propose a safe displacement or an explicit blocked result.
Propose a Push from a Moving Solid in Spectrum BASIC
Detect a one-dimensional moving solid crossing an actor and propose a safe displacement or an explicit blocked result.
Push a Block Atomically on Amiga
A crate should move with the player only when the space beyond it is free.
Push a Block Atomically on C64
A crate should move with the player only when the space beyond it is free.
Push a Block Atomically on NES
A crate should move with the player only when the space beyond it is free.
Push a Block Atomically on Spectrum
A crate should move with the player only when the space beyond it is free.
Push a Crate After Checking the Whole Move in BBC Micro BASIC
Check the adjacent cell and the space beyond a crate before changing the player or map.
Push a Crate After Checking the Whole Move in C64 BASIC
Check the adjacent cell and the space beyond a crate before changing the player or map.
Push a Crate After Checking the Whole Move in Spectrum BASIC
Check the adjacent cell and the space beyond a crate before changing the player or map.
Push an Actor with a Moving Solid on Amiga
A moving wall should carry an actor ahead of its leading face, or report that the actor cannot fit.
Push an Actor with a Moving Solid on C64
A moving wall should carry an actor ahead of its leading face, or report that the actor cannot fit.
Push an Actor with a Moving Solid on NES
A moving wall should carry an actor ahead of its leading face, or report that the actor cannot fit.
Push an Actor with a Moving Solid on Spectrum
A moving wall should carry an actor ahead of its leading face, or report that the actor cannot fit.
Put Text Inside a Panel
Measure counted labels and choose character or word wrapping with four reusable machine-specific implementations.
Query a Byte Map in Jupiter Ace FORTH
Read and change a room, classify tiles and convert world positions with reusable FORTH words that fit the unexpanded Ace.
Query a Byte Map on Acorn Atom
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Acorn Electron
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Amiga
Read and change map cells, look up tile properties and convert world positions with reusable 68000 code and an explicit memory contract.
Query a Byte Map on Amstrad CPC
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Atari 2600
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Atari 5200
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Atari 7800
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Atari 800XL
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on BBC Micro
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on ColecoVision
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Commodore 64
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Commodore PET
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Commodore VIC-20
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Dragon 32
Read and change map cells, look up tile properties and convert world positions with reusable 6809 code and an explicit memory contract.
Query a Byte Map on Game Boy
Read and change map cells, look up tile properties and convert world positions with reusable SM83 code and an explicit memory contract.
Query a Byte Map on Game Gear
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Jupiter Ace
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Master System
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Mattel Aquarius
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Memotech MTX
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on MSX1
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on NES
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on Oric Atmos
Read and change map cells, look up tile properties and convert world positions with reusable 6502 code and an explicit memory contract.
Query a Byte Map on SG-1000
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Sord M5
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on SVI-328
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on Tatung Einstein
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on ZX Spectrum
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on ZX80
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Byte Map on ZX81
Read and change map cells, look up tile properties and convert world positions with reusable Z80 code and an explicit memory contract.
Query a Room in ZX80 BASIC
Read and change tiles, look up their properties and convert world positions with reusable routines for expanded and stock 1 KiB ZX80 configurations.
Query a Room in ZX81 BASIC
Read and change tiles, look up their properties and convert world positions with reusable routines for expanded and stock 1 KiB ZX81 configurations.
Query a Small Slope Height Profile on Amiga
A sloping tile needs a surface at each horizontal position, not one flat collision edge.
Query a Small Slope Height Profile on C64
A sloping tile needs a surface at each horizontal position, not one flat collision edge.
Query a Small Slope Height Profile on NES
A sloping tile needs a surface at each horizontal position, not one flat collision edge.
Query a Small Slope Height Profile on Spectrum
A sloping tile needs a surface at each horizontal position, not one flat collision edge.
Query a Thin Grid Sight Line in BBC Micro BASIC
Visit the cells along an integer line and stop at the first blocking cell.
Query a Thin Grid Sight Line in C64 BASIC
Visit the cells along an integer line and stop at the first blocking cell.
Query a Thin Grid Sight Line in Spectrum BASIC
Visit the cells along an integer line and stop at the first blocking cell.
Query and Change a Tile Map in Acorn Electron BASIC
Keep room data separate from its picture, with checked reads, edits, properties and world-to-cell conversion.
Query and Change a Tile Map in BBC Micro BASIC
Keep room data separate from its picture, with checked reads, edits, properties and world-to-cell conversion.
Query and Change a Tile Map in Commodore 64 BASIC
Keep room data separate from its picture, with checked reads, edits, properties and world-to-cell conversion.
Query and Change a Tile Map in Memotech MTX BASIC
Keep room data separate from its picture, with checked reads, edits, properties and world-to-cell conversion.
Query and Change a Tile Map in ZX Spectrum BASIC
Keep room data separate from its picture, with checked reads, edits, properties and world-to-cell conversion.
Query and Change a Tile Map on Acorn Atom
Keep level data separate from the screen. Reusable integer BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Amstrad CPC
Keep level data separate from the screen. Reusable Locomotive BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Atari 800XL
Keep level data separate from the screen. Reusable Atari BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Commodore PET
Keep level data separate from the screen. Reusable Commodore BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Commodore VIC-20
Keep level data separate from the screen. Reusable Commodore BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Dragon 32
Keep level data separate from the screen. Reusable Dragon BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Mattel Aquarius
Keep level data separate from the screen. Reusable Aquarius BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on MSX1
Keep level data separate from the screen. Reusable MSX BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Oric Atmos
Keep level data separate from the screen. Reusable Oric BASIC routines read and change tiles, look up properties and draw a small text region.
Query and Change a Tile Map on Spectravideo SVI-328
Keep level data separate from the screen. Reusable SVI BASIC routines read and change tiles, look up properties and draw a small text region.
Quest and Inventory Flags on Amiga
A key collected, a door unlocked, a conversation finished: eight yes/no facts fit in one byte.
Quest and Inventory Flags on C64
A key collected, a door unlocked, a conversation finished: eight yes/no facts fit in one byte.
Quest and Inventory Flags on NES
A key collected, a door unlocked, a conversation finished: eight yes/no facts fit in one byte.
Quest and Inventory Flags on Spectrum
A key collected, a door unlocked, a conversation finished: eight yes/no facts fit in one byte.
Queue Game Events in BBC Micro BASIC
Store byte-valued game requests in a bounded FIFO, with explicit full/empty results and validated wrap-around.
Queue Game Events in C64 BASIC
Store byte-valued game requests in a bounded FIFO, with explicit full/empty results and validated wrap-around.
Queue Game Events in Spectrum BASIC
Store byte-valued game requests in a bounded FIFO, with explicit full/empty results and validated wrap-around.
Raster Splits
Fire an interrupt when the beam reaches a chosen scanline and change a VIC-II register mid-screen — the basis of colour bars, split panels, and beating the chip's limits.
Read a button on Atari 2600
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Atari 5200
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Atari 7800
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on ColecoVision
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Game Boy
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Game Gear
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Master System
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Memotech MTX
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on SG-1000
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Sord M5
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a button on Tatung Einstein
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Amstrad CPC
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Atari 800XL
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Atom
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Commodore PET
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Commodore VIC-20
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Dragon 32
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Mattel Aquarius
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on MSX1
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Oric Atmos
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a command on Spectravideo SVI-328
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a new key on Jupiter Ace
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a number on Sinclair ZX80
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read a number on Sinclair ZX81
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read and Edit Packed Four-bit Cells in BBC Micro BASIC
Store two logical cells per numeric byte value and update either half without damaging its neighbour.
Read and Edit Packed Four-bit Cells in C64 BASIC
Store two logical cells per numeric byte value and update either half without damaging its neighbour.
Read and Edit Packed Four-bit Cells in Spectrum BASIC
Store two logical cells per numeric byte value and update either half without damaging its neighbour.
Read and Update Packed Four-bit Cells on Amiga
Sixteen tile values do not need sixteen whole bytes when each value fits in four bits.
Read and Update Packed Four-bit Cells on C64
Sixteen tile values do not need sixteen whole bytes when each value fits in four bits.
Read and Update Packed Four-bit Cells on NES
Sixteen tile values do not need sixteen whole bytes when each value fits in four bits.
Read and Update Packed Four-bit Cells on Spectrum
Sixteen tile values do not need sixteen whole bytes when each value fits in four bits.
Read and Write Hexadecimal Bytes in BBC Micro BASIC
Format one byte as two ASCII digits and parse two checked digits back into a byte.
Read and Write Hexadecimal Bytes in C64 BASIC
Format one byte as two ASCII digits and parse two checked digits back into a byte.
Read and Write Hexadecimal Bytes in Spectrum BASIC
Format one byte as two ASCII digits and parse two checked digits back into a byte.
Read Bits from a Bounded Data Block on Amiga
Packed flags and small fields can share a byte, provided the reader knows exactly how many bits remain.
Read Bits from a Bounded Data Block on C64
Packed flags and small fields can share a byte, provided the reader knows exactly how many bits remain.
Read Bits from a Bounded Data Block on NES
Packed flags and small fields can share a byte, provided the reader knows exactly how many bits remain.
Read Bits from a Bounded Data Block on Spectrum
Packed flags and small fields can share a byte, provided the reader knows exactly how many bits remain.
Read Bits from a Small Data Block in BBC Micro BASIC
Extract up to eight bits at a time from a four-byte block, keeping a cursor and rejecting a field that would cross the end.
Read Bits from a Small Data Block in C64 BASIC
Extract up to eight bits at a time from a four-byte block, keeping a cursor and rejecting a field that would cross the end.
Read Bits from a Small Data Block in Spectrum BASIC
Extract up to eight bits at a time from a four-byte block, keeping a cursor and rejecting a field that would cross the end.
Read Decimal Digits with Bounds in BBC Micro BASIC
Accept one ASCII digit at a time while retaining the valid prefix, rejecting other characters and refusing values above 255.
Read Decimal Digits with Bounds in C64 BASIC
Accept one ASCII digit at a time while retaining the valid prefix, rejecting other characters and refusing values above 255.
Read Decimal Digits with Bounds in Spectrum BASIC
Accept one ASCII digit at a time while retaining the valid prefix, rejecting other characters and refusing values above 255.
Read keyboard controls on Acorn Electron
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Read keyboard controls on BBC Micro
Reuse the actual machine-specific reader, with its caller, state, ownership and a diagnosed input mistake.
Rebuild Byte Values from Deltas in BBC Micro BASIC
Expand up to eight signed byte differences from an explicit base, wrapping modulo 256 and preserving output when input is invalid.
Rebuild Byte Values from Deltas in C64 BASIC
Expand up to eight signed byte differences from an explicit base, wrapping modulo 256 and preserving output when input is invalid.
Rebuild Byte Values from Deltas in Spectrum BASIC
Expand up to eight signed byte differences from an explicit base, wrapping modulo 256 and preserving output when input is invalid.
Recognise a Short Input Sequence on Amiga
A sequence is about order.
Recognise a Short Input Sequence on C64
A sequence is about order.
Recognise a Short Input Sequence on NES
A sequence is about order.
Recognise a Short Input Sequence on Spectrum
A sequence is about order.
Recognise an Overlapping Input Sequence in BBC Micro BASIC
Remember a short ordered prefix, pulse on a match and retain the useful suffix for overlapping matches.
Recognise an Overlapping Input Sequence in C64 BASIC
Remember a short ordered prefix, pulse on a match and retain the useful suffix for overlapping matches.
Recognise an Overlapping Input Sequence in Spectrum BASIC
Remember a short ordered prefix, pulse on a match and retain the useful suffix for overlapping matches.
Rectangle Overlap
Check two boxes without wrapped coordinates, distinguish touching from overlap, and reuse the existing C64 helper.
Rectangle Overlap
Reuse the Amiga’s unsigned word-edge box test, with touching-edge errors, wider-coordinate limits and native proof.
Rectangle Overlap
Reuse a checked half-open rectangle test, understand touching edges and diagnose the equality mistake.
Rectangle Overlap
Reuse a checked half-open rectangle test, understand touching edges and diagnose the equality mistake.
Reflect a Surface-normal Speed with Restitution on Amiga
A bounce can lose speed along a wall’s normal while keeping its sideways motion.
Reflect a Surface-normal Speed with Restitution on C64
A bounce can lose speed along a wall’s normal while keeping its sideways motion.
Reflect a Surface-normal Speed with Restitution on NES
A bounce can lose speed along a wall’s normal while keeping its sideways motion.
Reflect a Surface-normal Speed with Restitution on Spectrum
A bounce can lose speed along a wall’s normal while keeping its sideways motion.
Reflect Movement at Axis Bounds on Amiga
A fast ball should use the distance left after a bounce rather than sticking to the wall.
Reflect Movement at Axis Bounds on C64
A fast ball should use the distance left after a bounce rather than sticking to the wall.
Reflect Movement at Axis Bounds on NES
A fast ball should use the distance left after a bounce rather than sticking to the wall.
Reflect Movement at Axis Bounds on Spectrum
A fast ball should use the distance left after a bounce rather than sticking to the wall.
Reflect Speed with a Material Coefficient in BBC Micro BASIC
Scale a normal-speed magnitude by quarter-step restitution, reverse its direction and preserve its tangential component.
Reflect Speed with a Material Coefficient in C64 BASIC
Scale a normal-speed magnitude by quarter-step restitution, reverse its direction and preserve its tangential component.
Reflect Speed with a Material Coefficient in Spectrum BASIC
Scale a normal-speed magnitude by quarter-step restitution, reverse its direction and preserve its tangential component.
Reject Stale Object Handles on Amiga
A reused pool slot should not let an old reference suddenly name a different enemy.
Reject Stale Object Handles on C64
A reused pool slot should not let an old reference suddenly name a different enemy.
Reject Stale Object Handles on NES
A reused pool slot should not let an old reference suddenly name a different enemy.
Reject Stale Object Handles on Spectrum
A reused pool slot should not let an old reference suddenly name a different enemy.
Remember an Unordered Contact Pair in BBC Micro BASIC
Remember which pairs have already been considered during one traversal, without treating reversed IDs as a new pair.
Remember an Unordered Contact Pair in C64 BASIC
Remember which pairs have already been considered during one traversal, without treating reversed IDs as a new pair.
Remember an Unordered Contact Pair in Spectrum BASIC
Remember which pairs have already been considered during one traversal, without treating reversed IDs as a new pair.
Remember Contact Pairs for a Step on Amiga
The same contact can appear in both objects’ candidate lists.
Remember Contact Pairs for a Step on C64
The same contact can appear in both objects’ candidate lists.
Remember Contact Pairs for a Step on NES
The same contact can appear in both objects’ candidate lists.
Remember Contact Pairs for a Step on Spectrum
The same contact can appear in both objects’ candidate lists.
Remember Jump Presses for a Short Window in BBC Micro BASIC
Retain separate jump-buffer and coyote timers, grant a jump only when they overlap and consume permission after the pulse.
Remember Jump Presses for a Short Window in C64 BASIC
Retain separate jump-buffer and coyote timers, grant a jump only when they overlap and consume permission after the pulse.
Remember Jump Presses for a Short Window in Spectrum BASIC
Retain separate jump-buffer and coyote timers, grant a jump only when they overlap and consume permission after the pulse.
Remember Previous Positions in a Ring in BBC Micro BASIC
Append positions without shifting the buffer, then query a sample by its age, including after wraparound.
Remember Previous Positions in a Ring in C64 BASIC
Append positions without shifting the buffer, then query a sample by its age, including after wraparound.
Remember Previous Positions in a Ring in Spectrum BASIC
Append positions without shifting the buffer, then query a sample by its age, including after wraparound.
Remember Which Cells Need Redrawing on Amiga
Changing one cell should not force a whole board to be redrawn.
Remember Which Cells Need Redrawing on C64
Changing one cell should not force a whole board to be redrawn.
Remember Which Cells Need Redrawing on NES
Changing one cell should not force a whole board to be redrawn.
Remember Which Cells Need Redrawing on Spectrum
Changing one cell should not force a whole board to be redrawn.
Repeat a Held Menu Control in BBC Micro BASIC
Pulse on a new hold, wait a configurable delay, then repeat at a separate cadence until release.
Repeat a Held Menu Control in C64 BASIC
Pulse on a new hold, wait a configurable delay, then repeat at a separate cadence until release.
Repeat a Held Menu Control in Spectrum BASIC
Pulse on a new hold, wait a configurable delay, then repeat at a separate cadence until release.
Repeat a Small Random Sequence in BBC Micro BASIC
Seed and restore a portable eight-bit LFSR, expose corrupted zero state and keep random-call order explicit.
Repeat a Small Random Sequence in C64 BASIC
Seed and restore a portable eight-bit LFSR, expose corrupted zero state and keep random-call order explicit.
Repeat a Small Random Sequence in Spectrum BASIC
Seed and restore a portable eight-bit LFSR, expose corrupted zero state and keep random-call order explicit.
Report Trigger Enter, Stay and Exit Events on Amiga
Standing in a doorway should not count as entering it on every update.
Report Trigger Enter, Stay and Exit Events on C64
Standing in a doorway should not count as entering it on every update.
Report Trigger Enter, Stay and Exit Events on NES
Standing in a doorway should not count as entering it on every update.
Report Trigger Enter, Stay and Exit Events on Spectrum
Standing in a doorway should not count as entering it on every update.
Report Trigger Entry, Stay and Exit in BBC Micro BASIC
Turn an eight-bit overlap snapshot into separate entered, stayed and exited masks while retaining the previous snapshot.
Report Trigger Entry, Stay and Exit in C64 BASIC
Turn an eight-bit overlap snapshot into separate entered, stayed and exited masks while retaining the previous snapshot.
Report Trigger Entry, Stay and Exit in Spectrum BASIC
Turn an eight-bit overlap snapshot into separate entered, stayed and exited masks while retaining the previous snapshot.
Reset Sequence
Standard NES initialisation: disable interrupts, wait for PPU, clear RAM. Required boilerplate for every NES program.
Resolve Held Input to Four Directions in BBC Micro BASIC
Cancel opposed directions, then use retained axis preference to choose a single direction from a diagonal.
Resolve Held Input to Four Directions in C64 BASIC
Cancel opposed directions, then use retained axis preference to choose a single direction from a diagonal.
Resolve Held Input to Four Directions in Spectrum BASIC
Cancel opposed directions, then use retained axis preference to choose a single direction from a diagonal.
Resolve Input to Four Directions on Amiga
A maze character needs one direction even when the player holds a diagonal.
Resolve Input to Four Directions on C64
A maze character needs one direction even when the player holds a diagonal.
Resolve Input to Four Directions on NES
A maze character needs one direction even when the player holds a diagonal.
Resolve Input to Four Directions on Spectrum
A maze character needs one direction even when the player holds a diagonal.
Resource Counters on Amiga
An empty magazine should refuse a shot, not turn into 255 rounds.
Resource Counters on C64
An empty magazine should refuse a shot, not turn into 255 rounds.
Resource Counters on NES
An empty magazine should refuse a shot, not turn into 255 rounds.
Resource Counters on Spectrum
An empty magazine should refuse a shot, not turn into 255 rounds.
Retain Climbing State on a Ladder in BBC Micro BASIC
Enter, retain and leave a bounded ladder mode with explicit gravity and jump-release outputs.
Retain Climbing State on a Ladder in C64 BASIC
Enter, retain and leave a bounded ladder mode with explicit gravity and jump-release outputs.
Retain Climbing State on a Ladder in Spectrum BASIC
Enter, retain and leave a bounded ladder mode with explicit gravity and jump-release outputs.
Reusable Object Slots on Amiga
Claim and release fixed game-object slots, handle exhaustion, and expire objects without moving their neighbours.
Reusable Object Slots on C64
Give bullets, enemies and effects fixed slots, handle a full pool, and remove objects without skipping their neighbours.
Reusable Object Slots on NES
Give bullets, enemies and effects fixed slots, handle a full pool, and remove objects without skipping their neighbours.
Reusable Object Slots on Spectrum
Claim and release fixed game-object slots, handle exhaustion, and expire objects without moving their neighbours.
Reuse Object Slots in BBC Micro BASIC
Allocate, release and age reusable object slots, with explicit full-pool results and caller-owned payloads.
Reuse Object Slots in C64 BASIC
Allocate, release and age reusable object slots, with explicit full-pool results and caller-owned payloads.
Reuse Object Slots in Spectrum BASIC
Allocate, release and age reusable object slots, with explicit full-pool results and caller-owned payloads.
Reveal Counted Text Over Time on Amiga
A line of dialogue can appear a character at a time, with a button to show the rest immediately.
Reveal Counted Text Over Time on C64
A line of dialogue can appear a character at a time, with a button to show the rest immediately.
Reveal Counted Text Over Time on NES
A line of dialogue can appear a character at a time, with a button to show the rest immediately.
Reveal Counted Text Over Time on Spectrum
A line of dialogue can appear a character at a time, with a button to show the rest immediately.
Run a Timed Wave of Events in BBC Micro BASIC
Emit up to four event IDs with explicit quiet-call delays, retaining the cursor and emitting at most one event per call.
Run a Timed Wave of Events in C64 BASIC
Emit up to four event IDs with explicit quiet-call delays, retaining the cursor and emitting at most one event per call.
Run a Timed Wave of Events in Spectrum BASIC
Emit up to four event IDs with explicit quiet-call delays, retaining the cursor and emitting at most one event per call.
Sample keys without repeating turns on Acorn Electron
A reusable BASIC press-edge update with a MOS-paced caller, separate display work and verified held-key and missing-wait mistakes.
Sample keys without repeating turns on BBC Micro
A reusable BASIC press-edge update with a MOS-paced caller, separate display work and verified held-key and missing-wait mistakes.
Save and Restore a Small Game State in BBC Micro BASIC
Capture three byte-valued fields in RAM and validate the complete stored record before restoring any live field.
Save and Restore a Small Game State in C64 BASIC
Capture three byte-valued fields in RAM and validate the complete stored record before restoring any live field.
Save and Restore a Small Game State in Spectrum BASIC
Capture three byte-valued fields in RAM and validate the complete stored record before restoring any live field.
Save and Restore Software Sprite Backgrounds
Keep a separate packed background for each Spectrum object, then restore overlaps in reverse order. Reusable rectangle helpers and a complete masked-sprite tape caller.
Save, Draw and Restore Amiga Bobs
Move word-aligned blitter objects over a persistent background. Reusable chip-RAM save, masked drawing and restore routines with a complete two-object ADF caller.
Save, Draw and Restore Moving Objects
Move software objects over scenery without trails. Give each object its own saved background, handle overlaps in the right order, and choose when saved pixels stop being useful.
Screen Frame (BASIC)
Draw a 1-cell border around the play area with title and footer bars. The standard game screen layout.
Scrolling a World
Move the camera, expose new scenery and keep objects attached to the world. Choose software shifts, hardware offsets and streaming for the machine you are using.
Seeded Random Numbers on Amiga
Reusable seed and next routines, repeatable draws, state replay and a visible zero-state trap.
Seeded Random Numbers on C64
Reusable seed and next routines, repeatable draws, state replay and a visible zero-state trap.
Seeded Random Numbers on NES
Reusable seed and next routines, repeatable draws, state replay and a visible zero-state trap.
Seeded Random Numbers on ZX Spectrum
Reusable seed and next routines, repeatable draws, state replay and a visible zero-state trap.
Select Ready Work with Round-robin Fairness on Amiga
Background jobs should each get a turn when the game can afford only one piece of work this tick.
Select Ready Work with Round-robin Fairness on C64
Background jobs should each get a turn when the game can afford only one piece of work this tick.
Select Ready Work with Round-robin Fairness on NES
Background jobs should each get a turn when the game can afford only one piece of work this tick.
Select Ready Work with Round-robin Fairness on Spectrum
Background jobs should each get a turn when the game can afford only one piece of work this tick.
Select the Nearest Active Target on Amiga
An enemy or homing projectile needs a target-selection rule that stays predictable when candidates tie.
Select the Nearest Active Target on C64
An enemy or homing projectile needs a target-selection rule that stays predictable when candidates tie.
Select the Nearest Active Target on NES
An enemy or homing projectile needs a target-selection rule that stays predictable when candidates tie.
Select the Nearest Active Target on Spectrum
An enemy or homing projectile needs a target-selection rule that stays predictable when candidates tie.
Separate Background Buffers for Overlapping Objects
Extend BBC MODE4 masked drawing beyond one save slot. Each object gets its own background buffer and old cell address, with a running two-object caller.
Sequence Counted Notes and Rests on Amiga
A short tune needs a clock and a sequence of notes, not a fresh sound effect every frame.
Sequence Counted Notes and Rests on C64
A short tune needs a clock and a sequence of notes, not a fresh sound effect every frame.
Sequence Counted Notes and Rests on NES
A short tune needs a clock and a sequence of notes, not a fresh sound effect every frame.
Sequence Counted Notes and Rests on Spectrum
A short tune needs a clock and a sequence of notes, not a fresh sound effect every frame.
Service a Logical Attack–Decay–Sustain–Release Envelope on Amiga
A sound can swell, settle and fade instead of switching between full volume and silence.
Service a Logical Attack–Decay–Sustain–Release Envelope on C64
A sound can swell, settle and fade instead of switching between full volume and silence.
Service a Logical Attack–Decay–Sustain–Release Envelope on NES
A sound can swell, settle and fade instead of switching between full volume and silence.
Service a Logical Attack–Decay–Sustain–Release Envelope on Spectrum
A sound can swell, settle and fade instead of switching between full volume and silence.
Service a Small Spawn Timeline on Amiga
A wave can have deliberate pauses without burying every spawn in the main loop.
Service a Small Spawn Timeline on C64
A wave can have deliberate pauses without burying every spawn in the main loop.
Service a Small Spawn Timeline on NES
A wave can have deliberate pauses without burying every spawn in the main loop.
Service a Small Spawn Timeline on Spectrum
A wave can have deliberate pauses without burying every spawn in the main loop.
Service a Timed Status Effect on Amiga
A poison effect needs a duration and a pulse interval, not a fresh timer every time the actor is updated.
Service a Timed Status Effect on C64
A poison effect needs a duration and a pulse interval, not a fresh timer every time the actor is updated.
Service a Timed Status Effect on NES
A poison effect needs a duration and a pulse interval, not a fresh timer every time the actor is updated.
Service a Timed Status Effect on Spectrum
A poison effect needs a duration and a pulse interval, not a fresh timer every time the actor is updated.
Service an Action Cooldown in BBC Micro BASIC
Keep time moving between requests, then grant an action only when the cooldown and caller-supplied availability allow it.
Service an Action Cooldown in C64 BASIC
Keep time moving between requests, then grant an action only when the cooldown and caller-supplied availability allow it.
Service an Action Cooldown in Spectrum BASIC
Keep time moving between requests, then grant an action only when the cooldown and caller-supplied availability allow it.
Seven-Segment Digits (BASIC)
Draw large seven-segment display digits using PLOT/DRAW. Cell-aligned with 1px outline. 10 DATA strings define all digits 0-9.
Shape a Logical Sound Envelope in BBC Micro BASIC
Service attack, decay, sustain and release as bounded logical control levels with retained gate-edge history.
Shape a Logical Sound Envelope in C64 BASIC
Service attack, decay, sustain and release as bounded logical control levels with retained gate-edge history.
Shape a Logical Sound Envelope in Spectrum BASIC
Service attack, decay, sustain and release as bounded logical control levels with retained gate-edge history.
SID Multi-Voice
Step a note pattern once per raster interrupt, handing each of the SID's three voices its note from a frequency table — the skeleton of every C64 music player.
SID Note Trigger
Start a note on one SID voice by setting its gate, and end it by clearing the gate, with the envelope rates the chip actually uses.
SID Voice Setup
Configure a SID voice with frequency, waveform, and ADSR envelope. Foundation for all SID audio programming.
Smooth Scrolling
Combine VIC-II fine offsets with a complete character and colour shift. Prepare the next column and budget the costly coarse step.
Software Scrolling a Bitmap Band
Move a Spectrum playfield one pixel at a time, supplying the newly exposed edge yourself. Reusable Z80 code and a running tiled-band caller.
Sort a Small Draw Order Stably on Amiga
When two sprites have the same depth, their order should not flicker from frame to frame.
Sort a Small Draw Order Stably on C64
When two sprites have the same depth, their order should not flicker from frame to frame.
Sort a Small Draw Order Stably on NES
When two sprites have the same depth, their order should not flicker from frame to frame.
Sort a Small Draw Order Stably on Spectrum
When two sprites have the same depth, their order should not flicker from frame to frame.
Sound Beep
Make a fixed beep, a rising or falling effect, and a short click with separate pitch and length controls.
Sound Effects
Let the APU bend pitch and fade volume in hardware — a swept pulse for a laser, a decaying noise burst for an explosion — each fired with a single trigger write.
Spend and Refill a Resource in BBC Micro BASIC
Reject unaffordable spending atomically, but accept a refill and cap it deliberately at 255.
Spend and Refill a Resource in C64 BASIC
Reject unaffordable spending atomically, but accept a refill and cap it deliberately at 255.
Spend and Refill a Resource in Spectrum BASIC
Reject unaffordable spending atomically, but accept a refill and cap it deliberately at 255.
Sprite 0 Split
Use sprite 0 overlap to mark a horizontal scroll split, with a missed-hit deadline and explicit PPU state ownership.
Sprite Animation
Cycle through animation frames with configurable timing. Walk cycles, explosions, idle animations.
Sprite Control Words
Calculate and update Amiga sprite control words from X/Y coordinates. Position sprites anywhere on screen.
Sprite Movement with Bounds
Move a C64 sprite with joystick port 2, clamp it to the screen edges, and handle its ninth X bit without disturbing other sprites.
Sprite Movement with Bounds
Move sprites with joystick input and play area boundary checks. Foundation for player control.
Sprite Movement with Bounds
Move sprites with D-pad input and screen boundary clamping. Essential for player-controlled objects.
Sprite Multiplexing
Draw sixteen sprites in two fixed bands, with a complete raster IRQ example verified on PAL and NTSC emulators.
Sprites and Moving Objects
Draw animated objects with hardware sprites, software masking, blitter objects and combinations of them. Go beyond fixed hardware counts while making the compromises visible.
State Machine Loop
Organise game flow with distinct states (title, playing, game over). Clean separation of game phases.
Step Each Packed Colour Channel in BBC Micro BASIC
Unpack logical RGB332, move each channel by one towards its target and repack without cross-channel carry.
Step Each Packed Colour Channel in C64 BASIC
Unpack logical RGB332, move each channel by one towards its target and repack without cross-channel carry.
Step Each Packed Colour Channel in Spectrum BASIC
Unpack logical RGB332, move each channel by one towards its target and repack without cross-channel carry.
Step Towards a Packed Colour on Amiga
A fade can approach its target one channel step at a time instead of treating a packed colour as a single number.
Step Towards a Packed Colour on C64
A fade can approach its target one channel step at a time instead of treating a packed colour as a single number.
Step Towards a Packed Colour on NES
A fade can approach its target one channel step at a time instead of treating a packed colour as a single number.
Step Towards a Packed Colour on Spectrum
A fade can approach its target one channel step at a time instead of treating a packed colour as a single number.
Stop Fast Motion at a Wall Face in BBC Micro BASIC
Sweep one interval towards a requested endpoint, returning first contact instead of letting a fast step pass through a wall.
Stop Fast Motion at a Wall Face in C64 BASIC
Sweep one interval towards a requested endpoint, returning first contact instead of letting a fast step pass through a wall.
Stop Fast Motion at a Wall Face in Spectrum BASIC
Sweep one interval towards a requested endpoint, returning first contact instead of letting a fast step pass through a wall.
Sweep an Interval Along One Axis on Amiga
A fast object can cross a wall between frames even when neither endpoint overlaps it.
Sweep an Interval Along One Axis on C64
A fast object can cross a wall between frames even when neither endpoint overlaps it.
Sweep an Interval Along One Axis on NES
A fast object can cross a wall between frames even when neither endpoint overlaps it.
Sweep an Interval Along One Axis on Spectrum
A fast object can cross a wall between frames even when neither endpoint overlaps it.
System Takeover
Understand the resources an exclusive Amiga caller owns, using the executed boot example and an explicit reset-to-leave lifetime.
Test a Point Against a Circle in BBC Micro BASIC
Check an inclusive circular boundary without a square root, preserving full coordinate differences and enough arithmetic range for squared distances.
Test a Point Against a Circle in C64 BASIC
Check an inclusive circular boundary without a square root, preserving full coordinate differences and enough arithmetic range for squared distances.
Test a Point Against a Circle in Spectrum BASIC
Check an inclusive circular boundary without a square root, preserving full coordinate differences and enough arithmetic range for squared distances.
Test a Point Against a Circle on Amiga
A round pickup should not become a square just because a box test was convenient.
Test a Point Against a Circle on C64
A round pickup should not become a square just because a box test was convenient.
Test a Point Against a Circle on NES
A round pickup should not become a square just because a box test was convenient.
Test a Point Against a Circle on Spectrum
A round pickup should not become a square just because a box test was convenient.
Test Opaque Pixels in Two Small Masks in BBC Micro BASIC
Align two eight-by-eight opaque masks, then return the first overlapping row rather than treating overlapping boxes as a pixel hit.
Test Opaque Pixels in Two Small Masks in C64 BASIC
Align two eight-by-eight opaque masks, then return the first overlapping row rather than treating overlapping boxes as a pixel hit.
Test Opaque Pixels in Two Small Masks in Spectrum BASIC
Align two eight-by-eight opaque masks, then return the first overlapping row rather than treating overlapping boxes as a pixel hit.
Test Sight Along a Grid Row or Column on Amiga
A sentry looking down a corridor must stop at the first wall.
Test Sight Along a Grid Row or Column on C64
A sentry looking down a corridor must stop at the first wall.
Test Sight Along a Grid Row or Column on NES
A sentry looking down a corridor must stop at the first wall.
Test Sight Along a Grid Row or Column on Spectrum
A sentry looking down a corridor must stop at the first wall.
Test Two Small Opaque Pixel Masks on Amiga
Two sprite boxes can overlap while their visible shapes still miss each other.
Test Two Small Opaque Pixel Masks on C64
Two sprite boxes can overlap while their visible shapes still miss each other.
Test Two Small Opaque Pixel Masks on NES
Two sprite boxes can overlap while their visible shapes still miss each other.
Test Two Small Opaque Pixel Masks on Spectrum
Two sprite boxes can overlap while their visible shapes still miss each other.
Text Utilities (BASIC)
Centre text on any row and clear rows — two tiny subroutines used in every BASIC game.
The Ending Dwell
Win or lose, the screen holds for a beat before any button is believed. The pause is the punctuation that lets the player read their own ending — and it stops a held button blowing through three screens in three frames.
The Grace Window
A second of invulnerability after every respawn, covering every damage source, made visible by blinking the player. Without it, dying once where a hazard sits can spend every life in as many frames.
Three Caps: Counter, Index, Digit
A level counter, a table index, and a HUD digit are three different numbers with three different caps. The counter never stops, the index clamps for safety, the digit caps for display — conflate them and the game lies about one of them.
Trace a Thin Grid Line of Sight on Amiga
A guard looking across a room needs more than a same-row check.
Trace a Thin Grid Line of Sight on C64
A guard looking across a room needs more than a same-row check.
Trace a Thin Grid Line of Sight on NES
A guard looking across a room needs more than a same-row check.
Trace a Thin Grid Line of Sight on Spectrum
A guard looking across a room needs more than a same-row check.
Transfer Inventory Stacks Atomically on Amiga
Moving arrows from a chest to a pack should never remove more than the pack can hold.
Transfer Inventory Stacks Atomically on C64
Moving arrows from a chest to a pack should never remove more than the pack can hold.
Transfer Inventory Stacks Atomically on NES
Moving arrows from a chest to a pack should never remove more than the pack can hold.
Transfer Inventory Stacks Atomically on Spectrum
Moving arrows from a chest to a pack should never remove more than the pack can hold.
Transpose an Eight-by-eight Bitmap on Amiga
Turning rows into columns is the building block behind rotating small glyphs and adapting bitmap layouts.
Transpose an Eight-by-eight Bitmap on C64
Turning rows into columns is the building block behind rotating small glyphs and adapting bitmap layouts.
Transpose an Eight-by-eight Bitmap on NES
Turning rows into columns is the building block behind rotating small glyphs and adapting bitmap layouts.
Transpose an Eight-by-eight Bitmap on Spectrum
Turning rows into columns is the building block behind rotating small glyphs and adapting bitmap layouts.
Trigger a sound on Acorn Electron
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Amstrad CPC
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Atari 2600
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Atari 5200
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Atari 7800
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Atari 800XL
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Atom
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on BBC Micro
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on ColecoVision
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Commodore PET
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Commodore VIC-20
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Dragon 32
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Game Boy
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Game Gear
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Jupiter Ace
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Master System
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Mattel Aquarius
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Memotech MTX
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on MSX1
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Oric Atmos
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on SG-1000
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Sord M5
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Spectravideo SVI-328
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Trigger a sound on Tatung Einstein
Reuse a small real effect, understand who stops it, and compare its native output with an omitted-trigger control.
Tune Sequencer with Two Terminators
Store a phrase as timed events, distinguish looping from stopping, and trace the player separately from the hardware that makes the sound.
Turn a Score into Five Digits in BBC Micro BASIC
Convert an unsigned 16-bit value into exactly five ASCII character codes, preserving its two input bytes and making leading-zero policy explicit.
Turn a Score into Five Digits in C64 BASIC
Convert an unsigned 16-bit value into exactly five ASCII character codes, preserving its two input bytes and making leading-zero policy explicit.
Turn a Score into Five Digits in Spectrum BASIC
Convert an unsigned 16-bit value into exactly five ASCII character codes, preserving its two input bytes and making leading-zero policy explicit.
Turn an Analogue Axis into Intent on Amiga
A joystick that rests a little off-centre should not make the player creep across the screen.
Turn an Analogue Axis into Intent on C64
A joystick that rests a little off-centre should not make the player creep across the screen.
Turn an Analogue Axis into Intent on NES
A joystick that rests a little off-centre should not make the player creep across the screen.
Turn an Analogue Axis into Intent on Spectrum
A joystick that rests a little off-centre should not make the player creep across the screen.
Undo Edits to a Small Board in BBC Micro BASIC
Record each cell’s previous value before editing it, then restore edits in reverse order with a four-entry log.
Undo Edits to a Small Board in C64 BASIC
Record each cell’s previous value before editing it, then restore edits in reverse order with a four-entry log.
Undo Edits to a Small Board in Spectrum BASIC
Record each cell’s previous value before editing it, then restore edits in reverse order with a four-entry log.
Untimed and timed turns on the Game Gear
Commit one turn per press, then add a deadline without confusing the turn with the clock.
Untimed and timed turns on the Master System
Commit one turn per press, then add a deadline without confusing the turn with the clock.
Untimed and timed turns on the SG-1000
Commit one turn per press, then add a deadline without confusing the turn with the clock.
Validate a Save Before Replacing Live State on Amiga
A damaged save should leave the current game alone rather than half-replacing it with invalid state.
Validate a Save Before Replacing Live State on C64
A damaged save should leave the current game alone rather than half-replacing it with invalid state.
Validate a Save Before Replacing Live State on NES
A damaged save should leave the current game alone rather than half-replacing it with invalid state.
Validate a Save Before Replacing Live State on Spectrum
A damaged save should leave the current game alone rather than half-replacing it with invalid state.
Wait for a command in Acorn Atom assembly
A reusable character-driven turn update, with a stock-firmware caller, owned state and verified mistakes and repairs.
Wait for a command in Amstrad CPC assembly
A reusable character-driven turn update, with a stock-firmware caller, owned state and verified mistakes and repairs.
Wait for a command on Acorn Atom
Read a command, update the world once and wait again, with a callable BASIC routine you can put in your own game.
Wait for a command on Amstrad CPC
Read a command, update the world once and wait again, with a callable BASIC routine you can put in your own game.
Wait for a command on Atari XL
Reusable Atari BASIC turn updates, with a complete caller, bounded byte wrap, custom steps and an independently verified reset mistake.
Wait for a command on C64 in BASIC
Keep an untimed game waiting for the player, with a reusable command update, a working variation and a diagnosed state-reset mistake.
Wait for a command on PET in assembly
Keep an untimed game waiting for the player, with a reusable command update, a working variation and a diagnosed state-reset mistake.
Wait for a command on PET in BASIC
Keep an untimed game waiting for the player, with a reusable command update, a working variation and a diagnosed state-reset mistake.
Wait for a command on VIC-20 in assembly
Keep an untimed game waiting for the player, with a reusable command update, a working variation and a diagnosed state-reset mistake.
Wait for a command on VIC-20 in BASIC
Keep an untimed game waiting for the player, with a reusable command update, a working variation and a diagnosed state-reset mistake.
Wait for a new fire press on Atari XL
Reusable assembly turn state, independent field servicing and verified faulty/fixed callers, with Atari XL hardware ownership kept explicit.
Wait for a new fire press on ColecoVision
Reusable assembly turn state, independent field servicing and verified faulty/fixed callers, with ColecoVision hardware ownership kept explicit.
Wait for a new press on Atari 2600
Keep the display serviced while the game waits for one action, with separate reusable turn and field counters.
Wait for a new press on Atari 5200
Keep the display serviced while the game waits for one action, with separate reusable turn and field counters.
Wait for a new press on Atari 7800
Keep the display serviced while the game waits for one action, with separate reusable turn and field counters.
Wait for a player action on Aquarius in BASIC
Reuse an untimed update with a small native caller, clear state ownership, a custom step and a reset mistake you can recognise.
Wait for a player action on Aquarius in Z80 assembly
Reuse an untimed update with a small native caller, clear state ownership, a custom step and a reset mistake you can recognise.
Wait for a player action on Dragon 32 in 6809 assembly
Keep an untimed world waiting for the player, with machine-specific code, a working variation and a state-reset mistake you can recognise.
Wait for a player action on Dragon 32 in BASIC
Keep an untimed world waiting for the player, with machine-specific code, a working variation and a state-reset mistake you can recognise.
Wait for a player action on Game Boy DMG in assembly
Reuse a bounded turn update with a native caller, clear ownership, a custom step and an observed reset mistake.
Wait for a player action on Jupiter Ace in FORTH
Keep an untimed world waiting for the player, with machine-specific code, a working variation and a state-reset mistake you can recognise.
Wait for a player action on Jupiter Ace in Z80 assembly
Keep an untimed world waiting for the player, with machine-specific code, a working variation and a state-reset mistake you can recognise.
Wait for a player action on MSX1 in BASIC
Reuse a bounded turn update with a native caller, clear ownership, a custom step and an observed reset mistake.
Wait for a player action on MSX1 in Z80 assembly
Reuse a bounded turn update with a native caller, clear ownership, a custom step and an observed reset mistake.
Wait for a player action on MTX500 in BASIC
Reuse an untimed update with a small native caller, clear state ownership, a custom step and a reset mistake you can recognise.
Wait for a player action on MTX500 in Z80 assembly
Reuse an untimed update with a small native caller, clear state ownership, a custom step and a reset mistake you can recognise.
Wait for a turn on Oric Atmos
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Wait for a turn on Sinclair ZX80
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Wait for a turn on Sinclair ZX81
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Wait for a turn on Sord M5
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Wait for a turn on Spectravideo SVI-328
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Wait for a turn on Tatung Einstein
Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.
Walk an Ordered Waypoint Route on Amiga
A guard should reach a waypoint before choosing the next, even when one movement step would overshoot it.
Walk an Ordered Waypoint Route on C64
A guard should reach a waypoint before choosing the next, even when one movement step would overshoot it.
Walk an Ordered Waypoint Route on NES
A guard should reach a waypoint before choosing the next, even when one movement step would overshoot it.
Walk an Ordered Waypoint Route on Spectrum
A guard should reach a waypoint before choosing the next, even when one movement step would overshoot it.
Wrap and Skip Menu Options in BBC Micro BASIC
Move a bounded selection in either direction, wrap at the ends and skip options that are currently disabled.
Wrap and Skip Menu Options in C64 BASIC
Move a bounded selection in either direction, wrap at the ends and skip options that are currently disabled.
Wrap and Skip Menu Options in Spectrum BASIC
Move a bounded selection in either direction, wrap at the ends and skip options that are currently disabled.
Wrap and Skip Menu Options on Amiga
A menu should wrap cleanly at either end and skip options the player cannot choose.
Wrap and Skip Menu Options on C64
A menu should wrap cleanly at either end and skip options the player cannot choose.
Wrap and Skip Menu Options on NES
A menu should wrap cleanly at either end and skip options the player cannot choose.
Wrap and Skip Menu Options on Spectrum
A menu should wrap cleanly at either end and skip options the player cannot choose.
Write Bits into a Small Data Block in BBC Micro BASIC
Pack the low bits of a value into a four-byte block while preserving neighbouring bits and rejecting incomplete writes.
Write Bits into a Small Data Block in C64 BASIC
Pack the low bits of a value into a four-byte block while preserving neighbouring bits and rejecting incomplete writes.
Write Bits into a Small Data Block in Spectrum BASIC
Pack the low bits of a value into a four-byte block while preserving neighbouring bits and rejecting incomplete writes.
Write Packed Bits with Bounds on Amiga
Flags and short fields can share a compact record without overwriting their neighbours.
Write Packed Bits with Bounds on C64
Flags and short fields can share a compact record without overwriting their neighbours.
Write Packed Bits with Bounds on NES
Flags and short fields can share a compact record without overwriting their neighbours.
Write Packed Bits with Bounds on Spectrum
Flags and short fields can share a compact record without overwriting their neighbours.