Skip to content
Phosphoneowiki
Contents

Keyboard, gamepad, mouse and memory

These options do what a player would, at an exact cycle: the run is therefore repeatable. Up to 4,096 scheduled actions per run for --gamepad-at, --poke-at and --poke-when, 256 for the mouse.

--type-keys

Syntax : --type-keys CYCLES:TEXTE

Types the TEXT on the keyboard from the given cycle, key by key (press, release), on a US layout. Special sequences: \n Enter, \e Escape, \1 to \9 F1 to F9, \0 F10, \\ a backslash, \u \d \l \r the arrows, \h Home, \k End, \x Delete, \b Backspace, \z Ctrl+Alt+Delete. No pauses: waiting for the program to be ready means choosing the right start cycle.

Example

$ phosphoneo --cycles 45000000 --type-keys '15000000:VER\nDIR\n' --screenshot-text out.txt
A:\>VER
NeoDOS version 0.34.0
Neo6502 firmware 0.16.94
A:\>DIR
 Volume in drive A is HOST0
 Directory of A:\
File not found
A:\>

Good to know. Only one typing job is active at a time: a second --type-keys replaces the first (a VER typed at one cycle would be lost). To chain commands, put them in a single text, separated by \n.

--gamepad-at

Syntax : --gamepad-at CYCLES:BITS

Sets the gamepad state after N cycles: BITS is a hexadecimal number, one bit per button. 01 left, 02 right, 04 up, 08 down, 10 A, 20 B, 40 X, 80 Y. To release, set 0. Bits add up: 11 = left + A.

Example

$ phosphoneo pad.neo6502@800 cold --cycles 4000000 --gamepad-at 1000000:11 --screenshot-text pad.txt
00
11

Good to know. One gamepad, no analogue axis. The program sees 00 before cycle 1,000,000, then 11.

--mouse-at

Syntax : --mouse-at CYCLES:X,Y,BOUTONS

Sets the mouse position (in pixels) and button state (bit 0 left, bit 1 right, bit 2 middle) after N cycles. Repeatable up to 256 times.

Example

$ phosphoneo mouse.neo6502@800 cold --cycles 4000000 --mouse-at 1000000:100,50,1 --screenshot-text m.txt
SOURIS : cliquez
0064 0032 01

Good to know. The test program prints X, Y and buttons in hexadecimal: 100 = 0064, 50 = 0032.

--mouse-when

Syntax : --mouse-when ADRESSE:VALEUR:X,Y,BOUTONS

Like --mouse-at, but triggered when the 16-bit word in memory at ADDRESS (hexadecimal) equals VALUE (decimal): click “at frame 120” without working out a cycle.

--poke-at

Syntax : --poke-at CYCLES:ADRESSE=VALEUR

Writes a byte to memory (ADDRESS and VALUE in hexadecimal) after N cycles. Used to teleport a player, set a variable, force a hard-to-reach state. Up to 4,096 writes; their number does not slow emulation.

Example

$ phosphoneo prog.neo --cycles 3000000 --poke-at 1000:0900=EA

Good to know. The limit was raised from 16 to 4,096 on 2026-10-29, to validate a game key by key.

--poke-when

Syntax : --poke-when ADRESSE:VALEUR:ADR=VAL

Like --poke-at, but triggered when the 16-bit word at ADDRESS equals VALUE (decimal). This option forces a check at every instruction: keep it for cases that need it.

Sources in the repository : src/main.c, README.md.