Skip to content
Phosphoneowiki
Contents

Duration and pace

Phosphoneo counts in 65C02 cycles: 6,250,000 cycles make one second of machine time, and a frame is 109,226 cycles (60 Hz). Since time is counted in emulated cycles, a run gives the same result every time, whatever computer runs it.

--cycles

Syntax : --cycles N

Stops after N cycles and prints the tally: elapsed cycles and number of API calls. Without it, Phosphoneo runs until stopped (window closed, breakpoint, --stop-on-self-jmp). It is the basis of every windowless trial.

Example

$ phosphoneo graphics.neo6502@800 cold --cycles 3000000
phosphoneo : 3000001 cycles, 7 appels API

Good to know. Rule of thumb: 6,250,000 cycles = 1 s; 109,226 cycles = one frame; 62,500 cycles = one tick of the 100 Hz timer.

--headless

Syntax : --headless

No display. This is the default; the option exists to say so in a script (the reference cases always pass it). It does not prevent --screenshot or --record.

--realtime

Syntax : --realtime

Real-time pace without a window: one emulated frame lasts 1/60 s of wall-clock time. Useful for a network program (the software modem needs real time) or for the WebAssembly build run under Node. Without it, Phosphoneo goes as fast as it can.

--stop-on-self-jmp

Syntax : --stop-on-self-jmp

Stops when the program executes a JMP to its own address (the “JMP *” that ends a test program) and says where and when. Saves guessing a large enough --cycles.

Example

$ phosphoneo graphics.neo6502@800 cold --stop-on-self-jmp --cycles 30000000
phosphoneo : JMP * en $0940 après 391 cycles
phosphoneo : 391 cycles, 7 appels API

--version

Syntax : --version

Prints the version and what is built in.

Example

$ phosphoneo --version
Phosphoneo 0.5.0 (firmware/common lié, co-sim RP2040, SDL, wasm, modem logiciel)

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