Sabotage

Products: Sabotage
Developer(s): Don Priestley
Date: 1982
Type: Cassette
Platform(s): TS 1000
Tags: Game

Sets a saboteur against a guard in a compound full of ammunition boxes, with the computer playing whichever side the player does not choose. As the saboteur, the player has ten charges per game and moves through the boxes to plant each one, then retreats before it blows; an exploding box sets off any box touching it, so one charge can destroy a chain of them. Each box scores 10, catching the guard in the blast adds 800, and being caught in it costs 500, while lining up with the guard on an open row or column gets the saboteur shot. As the guard, the player tries to corner the saboteur before he reaches his prime target, losing 20 points for each box destroyed and gaining 500 if the saboteur fails. The high score is kept separately and resets when the player switches sides.

The title screen reads “DEVISED AND WRITTEN BY DON PRIESTLEY” and “A PROGRAM BY MACRONICS”, and the REM header carries “COPYRIGHT 1982”. The tape, labeled “SABOTAGE” by hand, holds two slightly different saves, A and B; both differ from the version that circulates online. A one-page instruction sheet, product number T608 and copyright 1982 HES, is included as a PDF; it gives the keys as W, D, H and J with E to plant a charge for the saboteur, and W, S, H and J for the guard, and requires the 16K RAM pack.

Program Analysis

Program Structure

Line 1 is a long REM holding the machine code, which draws the compound and the title, runs both players’ movement, the computer opponent and the chain-reaction explosions. BASIC handles menus and scoring:

  • 1000–1118: DIM G$(840), attract screen with a flashing “PRESS ANY KEY” message, and the title routine at 1560, which calls four machine-code entry points.
  • 1420–1546: credits and the choice of role.
  • 2000–2330: game 1 (saboteur). POKEs configure the machine code for this role, including 200 boxes at 17915, then each run is scored from flags the machine code leaves in memory: boxes destroyed (17913), player caught (17922), guard caught (17921), shot (17925) and charges used up (17923).
  • 3000–3500: game 2 (guard), configured with 85 boxes and its own scoring.
  • 2500–2535: a key-wait that flashes “PRESS ANY KEY” in normal and inverse video.

Notable Techniques

  • The same machine code serves both games; BASIC switches roles by POKEing different byte values into it (for example 17697–17701 and 16609).
  • Scoring is done entirely in BASIC by PEEKing result flags that the machine code sets to 255.
  • POKE 16418,0 (DF_SZ) lets the program print on the bottom two screen lines, which hold the charges/moves and score bar.
  • The plural on the box count is built with a separate PRINT "ES"; when the count is not 1.

Versions on the Tape

The two saves differ in a few bytes of the machine code and in one BASIC line. In version A, the guard game’s test for the saboteur reaching his target is numbered 3372, so the jump from line 3358 to 3400 lands on line 3410 and awards the “FAILED TO REACH HIS PRIME TARGET” bonus without checking. Version B numbers that test 3400, so it is checked on both paths.

Potential Issues

  • The instruction sheet’s tips do not match this code: it says to change the speed by POKEing 16895 and to reduce the 200 boxes in line 3240, but line 3240 here sets 85 boxes and no POKE to 16895 appears in the BASIC.

Related Products

Maze adventure requiring advanced planning and fast reflexes. 16K.

Image Gallery

Source Code

   1 REM ##G PLOT  FASTSTR$ VAL  GOSUB #▜RND#I CLEAR#[R] GOSUB # THEN  GOSUB # THEN #-  GOSUB #K▘76▜RND#▐▞ COPY▖ THEN█K CLS#AT SGN  LPRINT TAN 5 COPY COPY GOSUB #9RND[B] GOSUB PI#▐TAN E FOR # ▞*VAL ▞4Q█7( CLS AT ( POKE TAN ,, ▌# Y MNOT RNDE£RND▘ RAND ▝,,6STR$ RNDEPEEK RND)(BLN ,,INKEY$ ) CONT ▀LN ,,INKEY$ )# LN ,,INKEY$ )~~ LN ,,INKEY$ # FASTESTR$ RND/9[B]▞ COPY▖ GOSUB #K CLS;# FASTESTR$ RND RETURN C▌MNOT RND/: PRINT UNOT RND RETURN 4▌ LET Q█/▖ LET LEN 0#76STR$ RND LPRINT TAN C7[W]9▀▀P#R#[W]9▝ Q#5  6VINKEY$ 5#RND6XINKEY$ LN [D]INKEY$ LN [M]INKEY$ LN [X]INKEY$ EINKEY$ INKEY$  GOSUB #RINKEY$ [B] GOSUB #C▌LN COS INKEY$ / NEWEZINKEY$ 6#INKEY$ LN **INKEY$ )▖ ;6VINKEY$ LN COS INKEY$ LN [M]INKEY$ LN [D]INKEY$ LN [X]INKEY$ EXINKEY$ FQ█EINKEY$ INKEY$  GOSUB #TINKEY$ [B] GOSUB #4**LN **INKEY$ E#INKEY$  GOSUB #VINKEY$ #7#TAN EXINKEY$ 776ZINKEY$ TAN EXINKEY$ #7# GOSUB #INKEY$ INKEY$ TAN EZINKEY$ #7# GOSUB ##INKEY$ TAN EXINKEY$  GOSUB ##INKEY$ ;)▖ ;6XINKEY$ TAN EVINKEY$  GOSUB ##INKEY$ ;6VINKEY$ TAN     E FOR #▘5 ,,:+▞2Q▒7( CLS77$4 POKE TAN ▞~~VAL LN ▒PIAT ( RAND TAN ▞ COPY    ( IF TAN     FAST GOSUB #£RND<E FOR #▞-:4# RETURNJC< RETURNTC? RETURNRC"><7$4 GOSUB <( CONT  LPRINT TAN Y▒>/ LET LN ▚RNDE▜RND▘ COPY COPY)# [B]▀ GOSUB #K CLSE FOR #,,TAN U CLS##VAL LN YPI# RETURN▒4 SAVE Q[X]LN =PIAT ( LOAD TAN E FOR #▘[(]▘,,# RETURN▒C▀7/ SAVE 6 LOAD #  LN  RETURNINKEY$ LN =PITAN LN YPI6 GOSUB ## RETURN▒4 PRINT Y█F[Y]C+77[Y]C()4 [B] GOSUB #[Y]C▛;;[Y]C▝/ AND E GOSUB #  LN =PILN  RETURNINKEY$ TAN # RETURN[X]"" GOSUB # PRINT #<, RETURN COPYCOS  RETURN C:[W]C▀</ LET .,[X]COS <</ DIM #>.#>U RAND #WM RAND #TAN ▘5 [B] GOSUB PILN [S]PI7LN [S]PI7LN [S]PI▘2 ,,LN [S]PI77LN [S]PI▘2 ,,LN [S]PI7LN [S]PI7LN [S]PITAN ▘#▝[B] GOSUB PI/;LN YPI# RETURN▒4 SAVE    Y M IF #▞/VAL LN [2]#▞;VAL # RETURN[X]C# RETURN█C# RETURNJCABS  FASTLN ##/Q   Y M RAND # FASTE PRINT #▞#Q 7( CLS LPRINT LN  SLOWPIU RAND # RETURN COS  GOSUB # PRINT #,#<,#<Y [W]COS Y COPY[W]COS STR$ LN  SLOWPISGN / FOR U RAND ##U IF #[)] IF [>]# LPRINT 7AT ([A]AT ([1]E NEXT #TAN U RAND #M IF # LPRINT 6 NEXT #/ DIM  FASTE GOSUB ##LEN █#LN =PI LPRINT TAN E GOSUB # RETURN▘C# RETURN▝C# RETURN▀ASN ##▘2 ,,LN [5]# RETURN COPYCOS E GOSUB #▘4 ,,# RETURN▒C-U COPY# RETURN COS # RETURNT""Q*6 GOSUB #[B] GOSUB PIQR/~~Q*6 GOSUB #[B] GOSUB PIQTY▘M UNPLOT #TAN ▘PI [B] GOSUB PILN [5]# RETURN COPYCOS E GOSUB #▘4 [B] GOSUB PI# RETURN▒C=U COPY# RETURN COS # RETURNT""Q*6 GOSUB #,,QR/▒Q*6 GOSUB #,,QTY▘M UNPLOT #TAN ▘PI [B] GOSUB PILN [S]# RETURN COPYCOS E GOSUB #F# RETURN▒C=U COPY# RETURN COS # RETURNT""Q*6 GOSUB #7QR/▒Q*6 GOSUB #7QTY▘M UNPLOT #TAN ▘Z [B] GOSUB PILN [S]# RETURN COPYCOS E GOSUB #7# RETURN▒C=U COPY# RETURN COS # RETURNT""Q*6 GOSUB #FQR/▒Q*6 GOSUB #FQTY▘M UNPLOT #TAN YS▞▌[Y]C67( IF ▘. ,,▞▌[Y]C-7( IF TAN YS)3 ▞▌[Y]C▒7[Y]C▖;( PLOT TAN Y COPYTAN Y M UNPLOT #M COPY#U CLEAR# RETURN C#LN [F]#U UNPLOT # RETURN▘COS U RETURN# RETURN C,,LN [F]#U UNPLOT # RETURN▘COS YRNDM[F]RND▞2VAL YRNDM[F]RNDLN ▚RNDWLN [F]#U UNPLOT # RETURN▘C*AT ( DIM U COPY# RETURN▘C▛Y▘M COPY#/[O]LN ## +TAN AT TAN U RETURN# RETURN C LET /[U]Y█M[F]RNDE GOSUB #LN [H]#VAL SGN E NEXT #LN [H]##[>]#STR$ CH IF ##LN ▚RND RETURN C▛Y▖M RETURN#/TY▖M CLEAR#/,LN ▚RND RETURN C▛Y▘M RETURN#/8Y▘M CLEAR#/▌Y M CLEAR#SGN #[>]C" IF [,,]#Y▝/▞Y▀/▝Y M RETURN##LN #SGN #[>]C" IF [5]#Y▝/▞Y▀/▝Y M CLEAR##LN #STR$  GOSUB # FOR #[B] GOSUB #)4 ▞ COPY▖ GOSUB #K CLS;#SGN TAN E FOR #▘5 ,,:+▞2# RETURNRC) RETURNSC$ RETURNTC,,7( LIST 77$4 DIM TAN Q▒/ NEXT #▞#A#[X]#[7]# SLOW#[R]#▞#1#4 COPYN▘▘▝ ▝  ,,  COPYE(RND▘▞ ,,6 FOR #▘ STEP ▝,,6 PRINT #▘# ,,Q COPY7Q COPYE FOR #▘[Y]▝,,6 LET #TAN   Y M▝#5~~ 6PEEK RNDLN **RNDLN ""RNDLN  CONT INKEY$ E LET #QJLN =PI   LN #PIU # RETURN▝ASN 2#LN ▚PIQSLN #PIQ*LN ;#LN =PIE LET #Q▒   E LOAD #LN [Z]#6 LOAD #Q*LN =PI   U▘# RETURN=C,,WM▘#LN  RETURNINKEY$ / TO LN M#EPEEK RND76PEEK RNDLN **RNDEPEEK RND▘ IF  [B] GOSUB PI IF [I]#Y COPYM IF #LN  RETURNINKEY$ E GOSUB ## RETURN+4[Q]LN ##E NEXT #▞▒VAL QELN =PIQ▒LN =PIAT ( PAUSE  GOSUB # GOSUB #[B] GOSUB PI4▌Y COPYM▝#E GOSUB #LN ##TAN    U RAND #LEN ▌M CLS#E LOAD #Q*LN =PILN ▚PIQSLN #PIE LET #QJ FASTLN ;# LPRINT Q▒Y M IF #M▘#M▝####▞▀# RETURN[X]C8 RETURNXC0 RETURN▒C( RETURN C( RETURN█C/ RETURN*C/ RETURNSC.Q /£Q▒/▒Q[X]/▖QX/ 7(SQR TAN Y COPYM▘#/ FASTY COPYM▝#/ THENQ▒▞▝VAL  FAST▘5 [B] GOSUB PILN ;#▘1 ,,LN ;#▘1 ,,LN ;#LN =PI LPRINT AT ( STEP TAN Y M UNPLOT #LN ##E GOSUB #LN ## GOSUB # PRINT #,#<,#< RETURN COS  RETURN COPYCOS STR$ LN ##SGN / GOSUB  5>=#▞ STEP # RETURNSC▒ RETURN*C▒7( POKE TAN Q*/ SAVE QS/ POKE  FASTLN [N]RND LPRINT Q▒)4  RETURN£C# RETURN▒C$ RETURN▞C* RETURN#C6 RETURN#CFTAN  GOSUB ## RETURN[X]C▌ RETURN█C▘TAN ;TAN ;# RETURN[X]C▌ RETURN█C▘TAN [B] GOSUB #TAN F# RETURN[X]C▌ RETURN█C▘TAN 7TAN 7# RETURN[X]C▌ RETURN█C▘TAN FTAN # UNPLOT #        E NEXT #6 RUN #Y▀M▌#TAN E GOSUB #LN [H]#)5 E£RND7;( CLEAR,,▞ IF 6 LOAD #[B] GOSUB ## RETURN[X]C~~ RETURN█C▞ RETURNSCT/ INPUT E LOAD #;# RETURN[X]C~~ RETURN█C▞ RETURNSCU/ LIST E LOAD #F# RETURN[X]C~~ RETURN█C▞ RETURNSCT/ LIST E LOAD #7# RETURN[X]COS  RETURN█COS  RETURNSCU/ PAUSE E LOAD #[B] GOSUB ## RETURNSC▌LN >=#/ NEXT ( INPUT /OE LOAD #;# RETURNSC▌LN >=#/ PRINT ( LIST /6E LOAD #F# RETURNSC▌LN  GOTO #/ PRINT ( LIST /(E LOAD #7# RETURNSC▌LN  GOTO #/ PRINT ( LIST LN =PIY COPYM▌#TAN  RETURN▒C▖LEN █#TAN Q▀VAL LN ▒PIAT TAN  RETURN▒C▖LEN █#TAN Q▌VAL LN ▒PIAT TAN U▌# RETURN▀COS Y▀M▌#U▀#XM▀#A #6PEEK RNDLN **RNDE NEXT #6 RUN #TAN E LET #Q▒LN ▚PI6 NEXT #QSLN #PIE LOAD #6 GOSUB #Q*LN =PIY~~M▀#Y M▘#M▝#M▖#M▌#LN  RETURNINKEY$ E NEXT #LN [Z]#6 NEXT #QSLN =PI    U▌# RETURN▀CMU▘# RETURNCC,,WM▘#LN  RETURNINKEY$ /USR E GOSUB #LN M#E GOSUB #Q*E NEXT #QSLN =PILN G#U▌# RETURN COPY4[R]E NEXT #/EU▖#W RETURN=C3M▖#E RUN ## RETURNEC£ RETURN[E]C▒QE/▛QE/▀LEN █#LN =PI/[R]E RUN # FASTLN ## LPRINT LN [~~]## DIM #U RAND #M CLS#E GOSUB #Q*E NEXT #QSLN =PILN #PI#Y# E RUN # GOSUB # NEXT #[B] GOSUB PIC▘TAN Y COPYM▝#TAN ....▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒    ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒   ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒   ▒▒▒ ▒ ▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒ ▒ ▒ ▒ ▒ ▒▒▒▒▒   ▒▒▒▒▒▒▒▒    ▒ ▒ ▒ ▒ ▒ ▒  ▒▒▒▒ ▒ ▒   ▒▒▒▒▒▒▒ ▒ ▒ ▒ ▒   ▒ ▒▒▒ ▒ ▒ ▒ ▒ ▒▒▒▒▒▒▒ ▒     ▒▒▒▒▒ ▒   ▒ ▒ ▒ ▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒   ▒▒▒   ▒ ▒       ▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒    ▒▒▒▒▒ ▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒   ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒ ▒▒▒▒▒    ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   ▒▒▒▒▒▒▒▒▒▒  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒.[X]▘TAB  Y█LN  AND #LN  COPY#▘TAB  Y▒LN  AND #LN  CLS#TAN E FOR #,,MTAB #)5#:£▞4, RETURN C▒7<( RUN $4 PAUSE TAN UTAB ##/ PAUSE Y[X]/▝YX▘ LPRINT  LN  AND #LN =PILN  RETURNINKEY$ TAN E FOR #▘#▘,,▞;VAL # RETURN[X]ATN 7#7AT ( PRINT TAN  FASTLN ## LPRINT  FASTLN [~~]# LPRINT TAN         .....................................
   9 REM 
  10 REM 
  11 REM 
  12 REM    "SABOTAGE"
  14 REM     ▀▀▀▀▀▀▀▀
  16 REM 
  18 REM 
  20 REM   COPYRIGHT 1982
  22 REM 
  24 REM   DON PRIESTLEY
  26 REM 
  70 REM 
1000 SLOW
1010 CLEAR
1020 DIM G$(840)
1024 LET B$="████████████████████████████████"
1028 LET P$=""
1044 LET HSC=-3000
1100 GOSUB 1560
1106 RAND USR 19395
1110 LET G$(129 TO 159)="███████[P][R][E][S][S]██[A][N][Y]█[K][E][Y]█[F][O][R]██████"
1112 IF INKEY$ ="" THEN GOTO 1106
1118 RAND USR 19470
1420 POKE 17921,0
1422 LET SC=0
1428 GOSUB 1560
1440 PRINT AT 2,4;" DEVISED AND WRITTEN BY "
1442 PRINT AT 4,8;" DON PRIESTLEY "
1448 PRINT AT 7,1;"    A PROGRAM BY MACRONICS    "
1452 PRINT AT 9,0;B$
1530 PRINT AT 11,5;" DO YOU WISH TO BE ... "
1534 PRINT AT 14,5;" 1. THE SABOTEUR ? "
1536 PRINT AT 16,5;" 2. THE GUARD ? "
1538 PRINT AT 19,5;" PRESS ""1"" OR ""2"" "
1540 LET K$=INKEY$ 
1542 IF K$="1" THEN GOTO 2000
1543 LET P$=K$
1544 IF K$="2" THEN GOTO 3000
1546 GOTO 1540
1562 POKE 16418,0
1564 RAND USR 17926
1566 RAND USR 16576
1568 RAND USR 16872
1570 RAND USR 16916
1572 PRINT AT 22,0;B$;B$
1574 RETURN
2000 REM [G][A][M][E]█[1]
2030 IF P$<>K$ THEN LET HSC=-3000
2032 LET P$=K$
2046 POKE 17697,205
2047 POKE 17698,195
2048 POKE 17700,0
2052 POKE 17920,2
2054 POKE 16609,249
2056 POKE 17971,10
2058 IF PEEK 17372=56 THEN RAND USR 18340
2060 POKE 17920,2
2062 POKE 17915,200
2064 POKE 16418,0
2068 PRINT AT 22,0;B$
2070 PRINT AT 23,0;"███████[C][H][A][R][G][E][S]████[S][C][O][R][E]█0███████"
2080 RAND USR 17926
2082 RAND USR 17965
2100 LET F=0
2102 LET S=0
2106 PRINT AT 1,0;
2108 IF PEEK 17925=255 THEN LET S=1
2110 IF NOT PEEK 17923 THEN LET F=1
2114 IF S+F=0 THEN GOTO 2140
2118 GOSUB 1560
2122 PRINT AT 1,0;
2128 IF S THEN PRINT "██████████[S][H][O][T]█[O][N]█[S][I][G][H][T]█████████"
2130 IF F THEN PRINT TAB 1;"           FINISHED           "
2140 LET X=PEEK 17913*10
2142 PRINT 
2144 PRINT TAB 2;PEEK 17913;" BOX";
2146 IF X<>10 THEN PRINT "ES";
2148 PRINT " DESTROYED  GAIN ";X
2150 LET SC=SC+X
2152 PRINT 
2154 PRINT 
2160 IF PEEK 17922<>255 THEN GOTO 2180
2162 PRINT TAB 2;"YOU WERE CAUGHT IN THE BLAST"
2164 PRINT 
2166 PRINT TAB 22;"LOSE 500"
2168 PRINT 
2170 LET SC=SC-500
2180 IF PEEK 17921<>255 THEN GOTO 2200
2182 PRINT TAB 2;"  GUARD  CAUGHT IN THE BLAST"
2184 PRINT 
2186 PRINT TAB 22;"GAIN 800"
2188 PRINT 
2190 PRINT 
2192 LET SC=SC+800
2200 IF F OR S THEN GOTO 2300
2220 PRINT AT 23,24;SC;"██"
2228 GOSUB 2500
2230 POKE 17913,PEEK 17913+1
2232 RAND USR 17859
2234 RAND USR 18894
2240 GOTO 2100
2300 PRINT TAB 2;" FINAL  SCORE = ";SC
2310 PRINT 
2314 IF SC>HSC THEN LET HSC=SC
2320 PRINT TAB 2;"HIGHEST SCORE = ";HSC
2324 GOSUB 2500
2330 GOTO 1420
2500 FOR A=1 TO 4
2504 IF INKEY$ <>"" THEN RETURN
2506 NEXT A
2510 PRINT AT 20,9;"█[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█"
2515 FOR A=1 TO 4
2520 IF INKEY$ <>"" THEN RETURN
2525 NEXT A
2530 PRINT AT 20,9;" PRESS ANY KEY "
2535 GOTO 2500
3000 REM [G][A][M][E]█[2]
3020 IF P$<>K$ THEN LET HSC=-3000
3024 LET P$=K$
3056 POKE 17925,0
3058 POKE 16609,253
3060 POKE 17697,42
3061 POKE 17698,237
3062 POKE 17700,54
3063 POKE 17701,21
3066 POKE 17920,1
3068 POKE 17971,0
3070 IF PEEK 17372=23 THEN RAND USR 18340
3240 POKE 17915,85
3300 POKE 16418,0
3310 PRINT AT 22,0;"██████[M][O][V][E][S]██████████[S][C][O][R][E]██████"
3320 PRINT AT 23,0;"████████████████████████0███████"
3328 RAND USR 17926
3330 RAND USR 17965
3332 IF PEEK 17914<255 THEN GOTO 3342
3336 GOSUB 1560
3342 LET X=PEEK 17913*20
3344 PRINT AT 2,2;PEEK 17913;" BOX";
3345 IF PEEK 17913<>1 THEN PRINT "ES";
3346 PRINT " BLOWN UP"
3347 REM 
3348 LET SC=SC-X
3352 PRINT AT 4,2;"SCORE DOWN BY ";X;" TO ";SC
3353 PRINT 
3354 PRINT 
3358 IF PEEK 17921<>255 THEN GOTO 3400
3362 PRINT TAB 2;"YOU WERE CAUGHT IN THE BLAST"
3363 PRINT 
3364 LET SC=SC-500
3368 PRINT TAB 2;"SCORE DOWN BY 500    TO ";SC
3369 PRINT 
3370 PRINT 
3400 IF PEEK 17922=255 THEN GOTO 3426
3410 LET SC=SC+500
3416 PRINT TAB 2;"THE SABOTEUR FAILED TO REACH"
3418 PRINT 
3420 PRINT TAB 2;"HIS PRIME TARGET  - GAIN 500"
3422 PRINT 
3424 PRINT 
3426 IF PEEK 17914<>255 THEN GOTO 3450
3430 PRINT TAB 1;"█[F][I][N][I][S][H][E][D]  FINAL SCORE = ";SC
3432 IF SC>HSC THEN LET HSC=SC
3434 PRINT TAB 10;"HIGHEST SCORE = ";HSC
3450 PRINT AT 23,22;SC;"███"
3460 GOSUB 2500
3476 IF PEEK 17914=255 THEN GOTO 1420
3480 RAND USR 18151
3500 GOTO 3332
9000 CLEAR
9010 SAVE "[S]"
9020 RUN

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