Elara S. Novikova
Iskra-226

STAR TREK

Звездный путь

Mike Mayfield, 1971

Mike Mayfield wrote this on a Sigma 7 in 1971, and by the middle of the decade it had been carried onto nearly every machine that had a BASIC and a terminal. On a lot of them it was the reason anyone wanted terminal time at all. Sixty-four quadrants, thirty stardates, and a Klingon count you have to bring to zero.

sectors
20-27
source lines
131
quadrants
64
stardates
30
A warp jump out of the empty quadrant 28 into 24, where three klingons are. Phasers at 500 take one, a torpedo takes the second, and both times the klingons fire back.
A warp jump out of the empty quadrant 28 into 24, where three klingons are. Phasers at 500 take one, a torpedo takes the second, and both times the klingons fire back.

Run this disk · The image, 256,256 bytes

Why this one matters

Mayfield wrote it in 1971 on a Sigma 7, and it went on to be the most ported game of the decade. It traveled the way software traveled then: by listing, by tape, by somebody typing it in again on a different machine and repairing whatever refused to run. On plenty of those machines it was the first reason anyone wanted an account at all. A generation worked out from games like this one that a computer does something other than arithmetic, and Star Trek was the loudest of them by a distance.

It reached this machine too, and I did not know that when I started. People who used an Iskra-226 remember a game on it called «Клинг атакует!», the Klingon attacks, and they remember a line it printed when you took a hit: «Радар поврежден, продолжайте на рулях». Radar damaged, carry on by hand. No copy of it exists, nobody kept a listing, and mine is not a version of it, because there is nothing left to work from. What that record settles is only this much: somebody sat at one of these machines and wrote Klingons for it, and wrote them well enough that a phrase outlived the software by forty years.

What this version is, and what it is not

Sixty-four quadrants on a flat index from 1 to 64, warp as a jump to any of them for a hundred units of energy, phasers, photon torpedoes, a long range scan of the four neighbors, and starbases that refuel and rearm. What is missing: there is no sector grid inside a quadrant, so there is no navigating around stars and no aiming a torpedo along a course. Phasers work on a threshold, three hundred units or more destroys, instead of falling off with distance. That is a smaller game than Mayfield's, and I would rather write it here than have someone discover it.

What it cost the interpreter

The ship starts with 3000 units of energy and I could not write 3000. Short numeric literals in this format cover 0 to 99, and the two-byte form is read by the interpreter as a line reference instead, so large constants have to be assembled out of small ones rather than stated. The energy is therefore set in two steps, and set again at every starbase that refuels you. The code shows the gap instead of hiding it. Limits like this one only appear when you write for the machine rather than reading what other people wrote for it.

What this disk is not

Nobody recovered this disk. I built it in 2026, and the only old thing on it is the shape of the game. Mayfield's mechanic is common property, this Russian implementation is not his and not anyone else's from that period, and no Soviet Star Trek disk has ever surfaced. If one does, it will look nothing like mine. The warning is on every page of this collection on purpose, because a fabricated artifact that gets quoted as evidence would poison the parts of this work that are real.

What I checked

STARTRK, warp into the enemy quadrant, Klingon attack with damage, phaser fire, counter 3 to 2 to 1, plausible energy drain.

What this does not show

This is a compact version: 64 quadrants without sector detail, and phasers with a threshold rather than falloff with distance. The seed is fixed at 37, because no clock or timer atom is attested, so the same galaxy comes up every time you boot the disk. What is tested is the emulator, not the hardware; whether a surviving Iskra-226 would accept these bytes is unanswered.

Where to read more

The source

STARTREK.bas, 131 lines, assembled onto the image with iskra_asm.py

131 lines of BASIC
10 REM STAR TREK
20 PRINT "*** ЗВЕЗДНЫЙ ПУТЬ ***"
30 PRINT "УНИЧТОЖЬТЕ КЛИНГОНОВ ЗА 30 ЗВ.ДНЕЙ."
40 V50 = 37
50 V05 = 0
60 FOR V30 = 1 TO 64
70 A40(V30) = 0
80 A41(V30) = 0
90 NEXT V30
100 FOR V30 = 1 TO 64
110 GOSUB 900
120 IF V50 > 82 GOTO 130
125 GOTO 150
130 V61 = V50 / 34
131 GOSUB 950
132 A40(V30) = V60 + 1
133 V05 = V05 + V60
134 V05 = V05 + 1
150 GOSUB 900
160 IF V50 > 90 GOTO 170
165 GOTO 180
170 A41(V30) = 1
180 NEXT V30
190 IF V05 < 3 GOTO 40
200 V01 = 28
210 V02 = 30
211 V02 = V02 * 100
220 V03 = 10
230 V04 = 0
240 PRINT "КЛИНГОНОВ ВСЕГО:";V05
300 V04 = V04 + 1
310 IF V04 > 30 GOTO 800
320 IF V05 < 1 GOTO 850
330 IF V02 < 1 GOTO 820
340 V06 = A40(V01)
350 PRINT "--- ЗВ.ДЕНЬ";V04;" КВАДРАНТ";V01
360 PRINT "ЭНЕРГИЯ";V02;" ТОРПЕД";V03;" КЛИНГОНОВ ЗДЕСЬ";V06
370 IF A41(V01) = 1 GOTO 375
371 GOTO 380
375 PRINT "ЗДЕСЬ БАЗА - ДОЗАПРАВКА"
376 V02 = 30
377 V02 = V02 * 100
378 V03 = 10
380 PRINT "1-ВАРП 2-ФАЗЕРЫ 3-ТОРПЕДА 4-СКАН"
390 INPUT V07
400 IF V07 = 1 GOTO 500
410 IF V07 = 2 GOTO 550
420 IF V07 = 3 GOTO 600
430 IF V07 = 4 GOTO 650
440 GOTO 380
500 PRINT "КВАДРАНТ (1-64)"
510 INPUT V08
520 IF V08 < 1 GOTO 500
521 IF V08 > 64 GOTO 500
530 V01 = V08
535 V02 = V02 - 100
540 GOTO 700
550 IF V06 < 1 GOTO 555
551 GOTO 560
555 PRINT "НЕТ ЦЕЛЕЙ."
556 GOTO 380
560 PRINT "МОЩНОСТЬ ФАЗЕРОВ"
570 INPUT V09
580 IF V09 > V02 GOTO 560
585 V02 = V02 - V09
590 IF V09 < 300 GOTO 595
591 V06 = V06 - 1
592 V05 = V05 - 1
593 A40(V01) = V06
594 PRINT "*** КЛИНГОН УНИЧТОЖЕН ***"
595 GOTO 700
600 IF V03 < 1 GOTO 605
601 GOTO 610
605 PRINT "ТОРПЕД НЕТ."
606 GOTO 380
610 V03 = V03 - 1
615 IF V06 < 1 GOTO 620
616 GOTO 625
620 PRINT "ТОРПЕДА УШЛА В ПУСТОТУ."
621 GOTO 700
625 GOSUB 900
630 IF V50 > 30 GOTO 635
631 PRINT "ПРОМАХ!"
632 GOTO 700
635 V06 = V06 - 1
636 V05 = V05 - 1
637 A40(V01) = V06
638 PRINT "*** ПОПАДАНИЕ! КЛИНГОН УНИЧТОЖЕН ***"
639 GOTO 700
650 PRINT "ДАЛЬНИЙ СКАН - СОСЕДНИЕ КВАДРАНТЫ:"
655 V20 = V01 - 1
656 IF V20 < 1 GOTO 660
657 PRINT "КВ";V20;" КЛИНГОНОВ";A40(V20)
660 V21 = V01 + 1
661 IF V21 > 64 GOTO 665
662 PRINT "КВ";V21;" КЛИНГОНОВ";A40(V21)
665 V22 = V01 - 8
666 IF V22 < 1 GOTO 670
667 PRINT "КВ";V22;" КЛИНГОНОВ";A40(V22)
670 V23 = V01 + 8
671 IF V23 > 64 GOTO 675
672 PRINT "КВ";V23;" КЛИНГОНОВ";A40(V23)
675 GOTO 380
700 V06 = A40(V01)
710 IF V06 < 1 GOTO 300
720 GOSUB 900
730 V61 = V50 / 2
731 GOSUB 950
732 V24 = V60 * V06
733 V02 = V02 - V24
740 PRINT "КЛИНГОНЫ АТАКУЮТ! УРОН";V24
750 GOTO 300
800 PRINT "*** ВРЕМЯ ВЫШЛО ***"
810 GOTO 860
820 PRINT "*** ЭНЕРГИЯ ИСЧЕРПАНА - КОРАБЛЬ ПОГИБ ***"
830 GOTO 860
850 PRINT "*** ВСЕ КЛИНГОНЫ УНИЧТОЖЕНЫ! ПОБЕДА! ***"
855 PRINT "ЗВ.ДНЕЙ ПОТРАЧЕНО:";V04
860 END
900 V50 = V50 * 21
910 V50 = V50 + 13
920 IF V50 < 100 GOTO 940
930 V50 = V50 - 100
935 GOTO 920
940 RETURN
950 V60 = 0
960 IF V61 < 1 GOTO 990
970 V60 = V60 + 1
980 V61 = V61 - 1
985 GOTO 960
990 RETURN

Back to Iskra-226