BASIC on the Altair

A program that asks again

Let a program return to its own question. Give someone another try after an unsuitable answer, calculate several prices in one run, and choose when to finish.

View lesson source ↗

Continue your session, or load BASIC

If the terminal below already shows your earlier BASIC session, press the browser's RUN button to continue it. You do not need to load the tape again. This tab keeps the machine, program, terminal, and pending input as you move between BASIC lessons, visit All lessons, or refresh. Returning always pauses execution first. Other tabs work independently; a newly opened or duplicated tab may begin with a copy of this tab's saved session.

Begin a lesson's commands at OK. If your previous program is still asking a question at ?, finish that conversation first; the ticket loop finishes when you answer 0. The lesson's setup explains which stored lines to keep or replace. Typing NEW at OK clears the stored program and variables without reloading BASIC.

If this is a fresh machine, follow the loading steps below.

This is the original 4K BASIC 3.2 interpreter running on our Altair. An interpreter is a program that reads your commands and carries them out. Before it can understand PRINT, the Altair must load that interpreter into memory.

  1. Get the selected paper-tape file from the machine guide (opens in a new tab). Return here and choose it in Paper tape below. The file stays on your computer.
  2. Raise only switches A11 and A10. Leave PC at 0000: do not press EXAMINE. You may then close the front panel to bring the terminal closer.
  3. Press the browser's RUN button. Click Terminal keyboard and answer each question when it appears:
When you see Enter
MEMORY SIZE? Just Enter, to let BASIC find the available memory.
TERMINAL WIDTH? Just Enter, to keep the default.
WANT SIN? Y then Enter. We will not need this math function today.

When 727 BYTES FREE and OK appear, BASIC is ready. Leave the processor running for the lesson. Switching tabs pauses it; press the browser's RUN button when you return.

If you need to start loading again, use Start fresh, raise A11 and A10 again, then RUN. This discards the current BASIC program and uses the tape you already selected. Reset CPU + serial does not reload BASIC.

The saved session stays in this browser tab's temporary storage. It is not sent to the site. Copy your numbered lines somewhere to keep them beyond the browser session. If the browser cannot save or restore a session, a message beside the machine explains that; you can still use the current page.

A computer waiting for your instructions

From paper tape to BASIC.

Resume a saved session with RUN. To load BASIC for the first time, choose the 4K BASIC 3.2 tape (guide opens in a new tab), raise the loading switches, then RUN. Loading instructions

This tab can keep your BASIC session between lessons. Checking for a saved session…

The file stays on your computer. Selecting a verified tape prepares a fresh, stopped machine.

No tape selected.

Front panel · address, data, and sense switches

To load BASIC, raise only A11 and A10 and leave PC at 0000. Do not press EXAMINE after raising the loading switches. You can then close this panel to bring the terminal closer.

Operate the front panel

ALTAIR 8800

Memory and sense switches

Address lights PC · next instruction

0 decimal · 0000 hex

Data lights The byte at that location

0 decimal · 00 hex

A lit lamp is 1; a dark lamp is 0. The digits help you read the lights.

Data / address switches Up = 1 · Down = 0

15–8 · Address + sense

7–0 · Address or data

All switches as an address
0 decimal · 0000 hex
Lower eight as a byte
0 decimal · 00 hex

Setting the switches prepares a number. It does not read or write memory. The CPU can read the upper eight switches at port FF, even while running.

Select the address in the switches and read its byte.

Move to the next address and read its byte.

Write the lower eight switches to the selected address.

Move to the next address, then write the lower eight switches.

EXAMINE would select address 0. DEPOSIT would write 0 to the selected address, 0.

Last memory operation

Enable JavaScript to operate the panel.

EXAMINE and NEXT change PC. Only 0000–0FFF contain RAM; other addresses read FF and discard deposits. Lights show instruction boundaries, not individual bus cycles.

Stopped · 0 instructions

RUN lets the processor execute; STOP pauses it. At BASIC’s prompt, type RUN to run your BASIC program. Break sends Control-C to BASIC.


  
  

0 keyboard bytes queued

Use uppercase commands. Enter sends a line; Backspace sends BASIC’s erase character (_). Paste one line at a time. Only the machine’s echoes appear above.

Inspect the running machine

    

Latest twelve instructions on this page · PC before → after (hexadecimal)


  

Reset keeps RAM and the switches but resets the CPU and serial device. Start fresh discards the program, restores the bootstrap, rewinds the selected tape, and clears the terminal; raise the switches again before RUN.

Start with the decisions

Load or resume BASIC using the instructions above, and begin at OK. If you continued directly from the previous lesson, keep its ticket program and skip the setup block below. Each ticket costs 2 pounds; N holds the number of tickets.

If you are starting here or returning from a different lesson, type NEW to clear the stored program and variables, then enter these lines.

Type one numbered line at a time, pressing Enter and waiting for the complete echo before sending the next:

Type, then Enter

NEW

BASIC replies

OK

Type one line at a time, then Enter

10 PRINT "HOW MANY TICKETS"
20 INPUT N
22 IF N<0 THEN 80
25 IF N=0 THEN 60
30 PRINT N*2
40 END
60 PRINT "NO TICKETS"
70 END
80 PRINT "PLEASE USE ZERO OR MORE"
90 END

Every path currently reaches END. After a negative answer, we would rather explain the problem and ask again, without making someone type RUN.

Go back to the question

Replace line 90:

Type, then Enter

90 GOTO 10

GOTO 10 means “continue at line 10.” Unlike IF…THEN, GOTO has no condition: whenever BASIC reaches line 90, it goes to line 10. The 10 is the destination line number, not a number of repetitions.

This sends execution backward through the stored program. Line 10 prints the question again, then line 20 receives a new answer. We call a path that returns to repeat instructions a loop.

RUN once. Answer -1, then -2, then 3, waiting for each question mark:

Type, then Enter

RUN

BASIC replies

HOW MANY TICKETS
?

Type, then Enter

-1

BASIC replies

PLEASE USE ZERO OR MORE
HOW MANY TICKETS
?

Type, then Enter

-2

BASIC replies

PLEASE USE ZERO OR MORE
HOW MANY TICKETS
?

Type, then Enter

3

BASIC replies

 6

OK

There is only one RUN in that conversation. Each negative answer takes the path 22 → 80 → 90 → 10 → 20. Each time we reach INPUT, the new answer replaces the old value of N. We are continuing the same run, not starting it afresh.

The positive answer still reaches line 30 and prints 6 pounds. Line 40 is still END, so this path finishes. Only the negative-answer path repeats so far.

Try the repeated question ↑

Ask after a price, too

Now let someone calculate several prices without typing RUN between them. Replace line 40 with another backward GOTO. We will use zero to finish, and change the printed messages to make that choice clear:

Type one line at a time, then Enter

10 PRINT "HOW MANY TICKETS (0 TO FINISH)"
40 GOTO 10
60 PRINT "FINISHED"

The zero test on line 25 still goes to line 60. Line 70 is still END, so this path remains our way out. Zero is an ordinary number; it ends this program because of the instructions we wrote, not because INPUT treats it specially.

Use LIST to check the complete program before running it:

Type, then Enter

LIST

BASIC replies

10 PRINT "HOW MANY TICKETS (0 TO FINISH)"
20 INPUT N
22 IF N<0 THEN 80
25 IF N=0 THEN 60
30 PRINT N*2
40 GOTO 10
60 PRINT "FINISHED"
70 END
80 PRINT "PLEASE USE ZERO OR MORE"
90 GOTO 10
OK

Predict the conversation. If we answer 3, -1, 1, then 0, which answers produce a price? Which make BASIC ask again?

Type, then Enter

RUN

BASIC replies

HOW MANY TICKETS (0 TO FINISH)
?

Type, then Enter

3

BASIC replies

 6
HOW MANY TICKETS (0 TO FINISH)
?

Type, then Enter

-1

BASIC replies

PLEASE USE ZERO OR MORE
HOW MANY TICKETS (0 TO FINISH)
?

Type, then Enter

1

BASIC replies

 2
HOW MANY TICKETS (0 TO FINISH)
?

Type, then Enter

0

BASIC replies

FINISHED

OK

The two positive answers produce 6 pounds and 2 pounds. These are separate prices: nothing in the program adds them to a running total. The negative answer produces our explanation. All three lead back to the question. Zero produces FINISHED and returns to OK, with no further question.

Try one run with several answers ↑

Follow the three paths

The stored lines remain in number order, but execution does not have to follow that order all the way to the end:

Answer Lines followed after INPUT What happens next?
Negative 22 → 80 → 90 → 10 → 20 Explain, ask again, and wait for another answer.
Positive 22 → 25 → 30 → 40 → 10 → 20 Print a price, ask again, and wait for another answer.
Zero 22 → 25 → 60 → 70 Print FINISHED and end the run.

Both GOTOs return to line 10 so the question is printed each time. If they went to line 20 instead, INPUT would still ask for a number with ?, but the words HOW MANY TICKETS would not be printed again.

Does the program have to calculate a price before it can finish? Try zero as the very first answer in a new run:

Type, then Enter

RUN

BASIC replies

HOW MANY TICKETS (0 TO FINISH)
?

Type, then Enter

0

BASIC replies

FINISHED

OK

The exit can be taken on the first answer or after many trips around the loop. END finishes that run; it does not erase the program. Another RUN can use the same stored lines again.

Waiting is part of the loop

Each trip back reaches INPUT and waits for you. While ? is showing, give the program a number, not a BASIC command. To finish normally, answer 0. At OK, BASIC is ready for commands such as LIST or RUN again.

Leave the browser's processor RUN control running during this conversation. That lets BASIC receive your answers, execute the stored program, and wait for commands afterward. The program's END and the browser's STOP control work at different levels.

We still expect whole numbers of tickets. Repeating the question has not added a check for fractions; a positive fraction would still produce a price.

Experiment with the loop ↑

The original Altair BASIC manual introduces repetition with GOTO on printed page 8 and describes GOTO and IF…THEN on printed page 33.

You can keep experimenting in the terminal. This tab carries the BASIC machine and program between these lessons, including a visit to All lessons, and restores them paused after a refresh. Press the browser's RUN button to continue. Start fresh discards the program and reloads the retained tape. Copy your numbered lines somewhere for a lasting copy; browser session storage is temporary.

The machine guide (opens in a new tab) explains the hardware, loading process, and recovery controls. These lessons use that same machine and original interpreter.