Skip to content

Wait for a turn on Oric Atmos

Reuse an untimed command or press loop while retaining the machine’s actual display responsibilities.

Enter the complete demo.bas in Oric Atmos BASIC and RUN. Submit 1, then Return. One accepted command advances the displayed turn; another gives two.

Oric Atmos native caller after accepted input.
Captured from the running caller in the configuration below.

Keep the world waiting

Initialise N once, show the state, read a submitted value, apply it, then return to the display/input path. Firmware activity does not mean the game world has taken a turn. No artificial frame timer is needed for this caller.

INPUT A waits for a numeric line. Only 1 advances the example; 0 is ignored. INPUT itself is not a one-key scanner.

The actual loop and its machine setup

demo.bas
10 N=0
20 CLS:PRINT "TURN";N
21 GOSUB 1000
30 GOSUB 3000
40 IF A=1 THEN N=N+1:GOSUB 2000
50 GOTO 20
1000 PRINT "XXX"
1010 PRINT "X X"
1020 PRINT "XXX"
1030 RETURN
2000 PING
2010 RETURN
3000 INPUT A
3010 RETURN

Fit and adapt it

Copy read-command.bas into free line numbers, then call it with GOSUB 3000. It replaces A; the caller checks that value before updating N. Keep N’s initialisation outside the repeated path. Renumber the GOSUB and routine together.

BASIC owns the keyboard buffer, line editor, return stack and variable storage. The global variable and line-number names belong to your program: reserve or rename them consistently. INPUT waits; no animation or deadline code in your main path can run during that wait.

Replace the numeric test or dispatch several commands after the read. Use a character reader for a menu that should respond before Return.

This deliberately broken caller reuses an accepted command instead of reading another one. The world advances without you. Restore the GOSUB before the validation/update path; the working caller waits at zero until input arrives.

A repeated-path mistake to recognise

stale-command.bas
10 N=0
20 CLS:PRINT "TURN";N
21 GOSUB 1000
30 A=1
40 IF A=1 THEN N=N+1:GOSUB 2000
50 GOTO 20
1000 PRINT "XXX"
1010 PRINT "X X"
1020 PRINT "XXX"
1030 RETURN
2000 PING
2010 RETURN
3000 INPUT A
3010 RETURN
Oric Atmos faulty repeated path.
The fault fails the same rule-state guard as the working caller.

A timed turn is another policy: keep a deadline separately, decide how expiry competes with an arriving action, and service that clock while waiting. A blocking reader cannot provide that service from the same main path. A faster renderer or sound routine does not settle the rule.

See loop choices and the machine’s input entry for the reader’s complete contract.

Verification and sources

Target: Oric Atmos, stock BASIC text mode. These callers were executed with released Emu198x 0.44.1; assembly uses Asm198x 0.0.71. The sample folder contains reproduction instructions and retained observations. The independent checker binds source, native captures and actual output; its rejection tests exercise wrong state, missing files and false audio claims.

This qualifies the named emulator/firmware path. Pitch accuracy, original hardware and other peripherals require their own observations.

Oric, Atmos Manual: BASIC INPUT, GOSUB/RETURN and PING; predefined sound effects.