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-keysreplaces the first (aVERtyped 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
00before cycle 1,000,000, then11.
--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.