ZX Destroyer

Developer(s): Raymond Fowkes
Date: 1982
Type: Program
Platform(s): TS 1000
Tags: Game

Defends a domed base standing on a strip of ground, with a “LASER 5” counter at the top of the screen. BASIC draws the dome, the figure inside it and the ground from block graphics, then hands control to a machine-code routine that runs the game in FAST mode, reading the keyboard directly and using laser sights to aim. When the routine returns, the program waits about five seconds and restarts itself with RUN. The whole program fits in about 1K.

This is the hybrid BASIC and machine-code shooter by Raymond Fowkes published in Sync, July/August 1982, where it was described as having laser sights and a flicker-free display. The cassette is labeled by hand “ZX DEFENDERS”, but the program’s own REM title is “ZX DESTROYER”.

Program Analysis

Program Structure

  • Line 1: a REM holding about 400 bytes of Z80 code, starting at 16514. The bytes include IN A,(254) keyboard reads.
  • Lines 100–170: the playfield, printed once: the dome outline, a figure built from block graphics, and a two-row stippled ground strip.
  • Lines 180–200: POKEs to 16516, 16519 and 16524 reset values inside the REM code before each game.
  • Lines 210–250: FAST, RAND USR 16526 to run the game, PAUSE 300, then SLOW and RUN for a new game.

Notable Techniques

  • BASIC only draws the static scene; all movement, firing and the laser count are handled by the machine code, with the BASIC POKEs acting as a reset of its variables.
  • Ending with RUN instead of GOTO makes each game start from a clean state.

Related Articles

ZX Destroyer is a fast moving action game which is written in a hybrid Basic machine language program to create...

Image Gallery

Source Code

   1 REM ▘▀ # COPY TO #### ▖<>5▙RNDPEEK  COPYE£RNDACS  UNPLOT ▘3▘Y CLSLN [P]▝F▘▝;Y SCROLLLN [P]▝F▘3▘Y SCROLLLN [P]▝Y#<= RETURN3SQR Y SCROLL<= RETURN▒<>#▝[B]4#▞7/Z<>P 4#<>#▘W<># <>#▀<>#▖▞▘E£RND,,Q ACS F#ACS <;#▄<>#▀Q▌;ACS 7ACS 7;Y#W[Y]▞▖4~~<>#▖ GOSUB #<>#▖▞▘▒#▒<>#▀ACS #4▝LEN £ACS #4▝CHR$ £LEN [=]<>[Y]▌4[C]<>Q▝▘A▘<>#▀)5 ; GOSUB #£RND,,6[▒]RNDQ▌▞1/#)5 E[▒]RND;<>O▝<>ACS ▝#4XY$▞$[Y]Q▌4+ FAST<>Q▌ TO 5▛  GOSUB #£RND,,PY0[Y] LPRINT COS ▞▀( RETURNY:<>[Y]▝▞=4?<>Q▝█E[▒]RND)# RETURN;▞3Q 6[▒]RND/)Q Y[$]▞7<>[Y]▝4 LIST ▞7<>Q▝ ( RETURN[J]<>[Y]~~C#E[~~]RNDQ ) TO  COPY;Y▌▞0[Y]CD6[~~]RND<>O~~Y▞▞-[Y]C6S/Y(▞=<>[Y]~~C)Y$▞<<>[Y]~~STQ▘▞)/NQ <>Q~~ /F▞#2 CLEARQ ;( CLSTAN ▒ACS #▞64;<>Q~~▘<>#▌A COPY) TO  COPY; GOSUB #(RND,,6[~~]RNDQ▘▞/▒( RETURN<>P"▞#48<>Q"▞E£RND)$▘;###7▘*  GOSUB [K]>)4 ;###F:* GOSUB [S]>▞~~( RETURN<>#▌- COPYE(RND;Q )  ▒ACS #4▘.ACS #4▘<;[J][Q]▞<C▞ GOSUB #▞)2 Q$( RETURN<>#▌▄<>#▌#[>]RND
  10 REM "ZX DESTROYER"
  90 CLS
 100 PRINT "LASER 5";TAB 15;"▄▄"
 110 PRINT TAB 12;"▄▀▀  ▀▀▄"
 120 PRINT TAB 10;"▗▀";TAB 20;"▀▖"
 130 PRINT TAB 9;"▗▘";TAB 21;"▝▖"
 140 PRINT TAB 9;"▞     █▌     ▚"
 150 PRINT TAB 8;"▐      ▜▘      ▌"
 160 PRINT TAB 8;"▌     ▗▜▚      ▐"
 170 PRINT TAB 8;"▌      ▞▖      ▐";TAB 4;"▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒";TAB 4;"▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒"
 180 POKE 16516,0
 190 POKE 16519,223
 200 POKE 16524,0
 210 FAST
 220 RAND USR 16526
 230 PAUSE 300
 240 SLOW
 250 RUN

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