Cyberzone

Products: Cyberzone
Date: 1983
Type: Program
Platform(s): TS 2068
Tags: Arcade

With your lasers you must chip away the spinning Cyber spacecraft and wipe out the notorious Cyberzone leader by hitting his only vulnerable spot: the left foot. In the manual’s words, you break through the base of the Mothership and hit the spinning green man, while fighter ships drop bombs and the Mothership fires its own laser. Both take account of which way your laser base is moving before they fire. Now and then a scanner ship joins the battle; it can’t be shot, but you can steer the fighters or the alien ship into it. Points: 1 for each hit on the Mothership’s base, 50 for a fighter, 150 for the scanner ship and 500, with an extra base, for exploding the Mothership.

The base moves with 5 and 8 and fires with 0 (the title screen also lists 1). There are five skill levels, chosen with keys 1–5, which set the number of fighters, their gun speed and how often the Mothership fires; the game moves up a level after each Mothership. A second player can fly a fighter with the right joystick, and if nothing is pressed a demonstration runs. The lasers can also be fired by voice: with the computer’s EAR socket connected to a tape recorder set to record, saying “fire” into its microphone fires the laser.

Cyberzone was published for the TS2068 by Softsync (“Written & © 1983 Raymond Fowkes”). The download includes the manual and pictures of the box and cassette.

Program Analysis

Structure

The tape holds the BASIC program cyber (auto-run at line 300), a loading screen, and 6,364 bytes of machine code at 51392.

  • Lines 300–390: loader. It does CLEAR 49151, moves the UDGs to 54037, loads the screen and the code, then shows the credit until a key is pressed. Line 390 saves a copy.
  • Lines 10–90: title and controls screen, skill selection and the demonstration timer.
  • Lines 100–200: draws the Mothership with DRAW arcs and UDG rows, then runs the game with LET A=USR 54205.
  • Lines 210–290: reads back the result, the number of bases and the score digits from memory, and updates the skill level and high score.

Notable Techniques

  • BASIC and machine code share values through the printer buffer: bases at 23296, score digits at 23297–23301, demo flag at 23330 and skill at 23331.
  • The texture of the Mothership’s base is redrawn each round by POKEing random bytes into UDG n.
  • Fire is read from the joystick with the TS2068’s STICK function (|(2,1)), and the AY sound chip is set up with SOUND before the game starts.
  • The machine code is saved under the name CHR$ 22+CHR$ 3+CHR$ 0+"Bytes:", an AT control code inside the file name, which moves the print position when the ROM shows the name during loading.
  • Line 120 uses POKE USR "\n"+a,-(a>5): POKE accepts −1 and stores 255, filling the bottom two rows of the UDG.

Related Products

With your lasers you must chip away the spinning Cyber spacecraft and wipe out the notorious Cyberzone leader by hitting his only vulnerable spot: the left foot.

Image Gallery

Source Code

   10 LET H$="00000"
   20 LET SKILL=2
   30 CLS : PRINT TAB 6;"C Y B E R   Z O N E"'''TAB 3;"\i       CONTROLS:        \g"
   40 PRINT 'TAB 10;"<< 5 - 8 >>"'TAB 8;"0-1-voice = FIRE"'TAB 9;"M key = PAUSE"'TAB 7;"S-SHIFT = RESTART"''"\a EXTRA BASE EVERY MOTHER SHIP \a"
   50 PRINT ''" KEYS 1 TO 5 SELECT SKILL LEVEL"''TAB 8;" PRESS ANY KEY "'TAB 3;"\e",TAB 27;"\k"''"   Or watch the demonstration!"
   60 PRINT AT 21,0;"WRITTEN & \* 1983  RAYMOND FOWKES": BEEP .2,24: FOR A=1 TO 240: LET DEMO=CODE INKEY$ OR STICK (2,1): IF NOT DEMO THEN NEXT A
   70 LET A=DEMO: LET DEMO=NOT A: POKE 23330,DEMO: LET SKILL=2-(SKILL<2): IF A>48 AND A<54 THEN LET SKILL=A-48
   80 LET SHIPS=8-(SKILL<2): IF DEMO THEN LET SHIPS=8: LET SKILL=3
   90 LET S$="00000": FOR A=23297 TO 23301: POKE A,0: NEXT A
  100 CLS 
  110 PRINT "SCORE ";S$;"  #";SHIPS;"  PRESS ANY KEY " AND DEMO;" HIGH SCORE "+H$ AND NOT DEMO;AT 10,12;"LEVEL ";SKILL
  120 FOR a=0 TO 7: POKE USR "\n"+a,-(a>5): NEXT a
  130 PRINT AT 6,14; BRIGHT 0; INK 4;"  "'TAB 9;"_          _"'TAB 6;"\n\n\n\n\n\n\n\n  \n\n\n\n\n\n\n\n"
  140 INK 8: PLOT 80,113: DRAW 80,0,-2.9
  150 PLOT 73,113: DRAW 93,0,-2.8
  160 PRINT AT 8,9; OVER 1; BRIGHT 8;" ";TAB 20;" "
  170 RANDOMIZE : FOR A=USR "\n" TO USR "\n"+7: POKE A,RND*255: NEXT A
  180 PRINT TAB 6;"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"'TAB 6;"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  190 POKE 23331,SKILL: POKE 23296,SHIPS
  200 SOUND 1,0;3,0;8,15;9,15;10,15;14,255: LET A=USR 54205: INK 7: SOUND 7,63
  210 IF A>2 THEN GO TO 20
  220 LET SKILL=SKILL+A-1: LET SKILL=SKILL+(SKILL<1)-(SKILL>5)
  230 LET SHIPS=PEEK 23296+1-(PEEK 23296>8 OR NOT A)
  240 FOR A=1 TO 5: LET S$(A)=CHR$ (PEEK (A+23296)+48): NEXT A
  250 IF CODE INKEY$ OR STICK (2,1) THEN GO TO 250
  260 IF SHIPS THEN GO TO 100
  270 IF DEMO THEN GO TO 20
  280 IF H$<S$ THEN LET H$=S$
  290 FOR A=1 TO 200: NEXT A: GO TO 30
  300 INK 0: PAPER 0: BRIGHT 8: INVERSE 0: FLASH 0: BORDER 0: CLEAR 49151: POKE 23675,21: POKE 23676,211: LOAD ""SCREEN$ : INK 8: OVER 1: LOAD ""CODE : OVER 0
  310 POKE 23658,8: POKE 23296,0
  320 IF INKEY$="S" THEN GO TO 380
  330 BEEP .2,36: INK 6: BRIGHT 0: CIRCLE 190,80,9: RANDOMIZE USR 54205
  340 FOR A=0 TO 6 STEP PI/5: LET X=7*COS A: LET Y=7*SIN A: PLOT 190+2*X,80+2*Y: DRAW X,Y: NEXT A: LET A=0
  350 INK 7: POKE 23659,1: PRINT AT 22,0; BRIGHT A;"WRITTEN & \* 1983  RAYMOND FOWKES": POKE 23659,2
  360 LET A=NOT A: PAUSE 10: IF INKEY$="" THEN GO TO 350
  370 RUN 
  380 IF CODE INKEY$ THEN GO TO 380
  390 SAVE "cyber" LINE 300: SAVE "zone"SCREEN$ : SAVE CHR$ 22+CHR$ 3+CHR$ 0+"Bytes:"CODE 51392,6364: GO TO 320

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.