Generala

Date: 1984
Type: Program
Platform(s): TS 2068
Tags: Dice

Plays Generala, the Latin American dice game related to Yahtzee, for one to three players, with the computer able to take a seat. The options are one player against the computer, two players, two players and the computer, or three players, and each player types a name. A turn allows up to three throws of five dice, drawn from 2×2 blocks of UDGs. Between throws each die can be saved (X) or rolled (R), or you can roll all (ENTER) or reset (0). To score, you choose Digits (the 1–6 boxes) or Figures, and the program picks the box. The figures are Straight (20), Full (30), Poker (40), Generala (50) and Double Generala (100), with more for a figure made on the first throw (25, 40, 60 and 80). A Double Generala on the first throw ends the game at once. If a throw fits nothing, a box is crossed out. After eleven rounds the program announces the winner or a draw and shows how many games each player has won.

The title screen shows “Rel#: 30” and “© 1984” but names no author. Some REMs are in Spanish, such as REM rutina de escalera buscada (“sought-straight routine”). A Generala program was reviewed in the Reviewer Corner: Generala column.

Program Analysis

Structure

  • Lines 7999–8968: sets RAMTOP to 65000, clears the statistics area and POKEs 136 bytes of UDG data (17 characters) to 65368.
  • Lines 9005–9446: option menu, player names, the scorecard screen and the variables.
  • Lines 1000–1060: the round loop. t$ holds the turn order for each option ("1400", "1200", "1240", "1230"), where 4 means the computer.
  • Lines 1200–1537: dice throw, dice display, save markers and the running total.
  • Lines 3000–3710: a human turn and the scoring of digits, figures and crossed-out boxes.
  • Lines 3800–3955: digit sum and an insertion sort of the dice into q$.
  • Lines 4000–7812: the computer player.
  • Lines 6500–6710: winner or draw, the games-won statistics and the replay options.

Scorecard

Each player’s card is a 33-character row of U$(3,33), three characters per box in the order 1–6, ST, FL, PK, GL and DG. "XXX" marks a crossed-out box, and line 1515 totals the row with VAL. The card’s labels come from slicing S$=" 1 2 3 4 5 6STFLPKGLDG".

Computer Player

The computer sorts its dice, looks for generala, poker, three of a kind, two pairs or a straight, and then marks dice to keep in f$ according to which boxes are still open. For straights it compares its dice with three patterns in m$: 1-2-3-4-5, 2-3-4-5-6 and 1-3-4-5-6. It has separate strategies for the last two rounds (lines 7200 and 7700).

Persistent Statistics

Lines 8000–8001 POKE the RAMTOP system variable (23730/23731) to 65000 directly. Games won, the player names and their lengths, and the chosen option are then stored at 65001–65037, so they survive the CLEAR used when a new game starts with the same players.

Notable Techniques

  • Line numbers are kept in named variables (player=3000, Throw=1200, score=3200, cpu=5000, Rubout=3600, Finale=6500…) and called with GO SUB Throw or GO TO score. Most targets are one less than the first real line of the routine.
  • GO TO 3415+VAL (q$(i))*15 jumps straight to the scoring code for the repeated digit.
  • TS2068 SOUND statements drive the AY chip for the dice-roll noise and a fanfare, alongside BEEP tunes.
  • Each die face is a 2×2 block built from the 17 UDGs.
  • POKE 23658,0 turns caps lock off so the lower-case key codes in the INKEY$ tests match.

Potential Issues

  • Line 4005 tests h$="13456" twice. The second test was probably meant to be "23456".
  • The human straight check (line 3366) accepts only 1-2-3-4-5 and 2-3-4-5-6, but the computer also treats 1-3-4-5-6 as a straight (lines 5910 and 7402). When the computer sends that hand to be scored, the straight is refused and, if it was chasing a straight, its straight box appears to be crossed out.
  • Line 7602 compares the three-character slice U$(q,25 TO 27) with two spaces, and line 7610 compares the single character U$(3,24) with two spaces. Neither can ever be equal, so those last-round shortcuts never fire.
  • Line 7642 reads CONTINUE 7648. That is not a valid jump in Sinclair BASIC and appears to be a corrupted GO TO 7648.
  • Line 7776 is garbled (VAL q$3)=VAL q$(0)) but cannot be reached.
  • When the same players start a new game, line 6653 POKEs 1, 2 and 3 into 65003, 65013 and 65023. Those addresses hold player 3’s win count and the tenth character of names 1 and 2, so that win count is overwritten.
  • Turns are entered with GO SUB player or GO SUB cpu but leave with GO TO 1050, so each turn leaves an entry on the GO SUB stack.
  • The LET after GO TO 3670 in line 3662 can never run.

This copy comes from Bob Swoger’s Larken games disk. For tape, the RANDOMIZE USR 100 calls and the LOGICALL load were removed from the save and load lines at 9997–9998, and the program now autostarts at line 1. It was tested in ZEsarUX.

Related Articles

Software version of game similar to Yatzee.

Image Gallery

Source Code

    1 RESTORE : POKE 23658,0: GO TO 7999
  900 LET h$="00000"
  902 FOR i=1 TO 5
  904 LET h$(i)=q$(i)
  906 NEXT i
  908 RETURN 
 1010 FOR x=1 TO 4
 1015 LET count=0
 1020 IF VAL t$(n,x)=0 THEN GO TO 1052
 1030 IF VAL t$(n,x)=4 THEN GO SUB cpu
 1035 LET q=VAL t$(n,x)
 1040 GO SUB player
 1050 GO SUB Total
 1052 NEXT x
 1054 LET End=End+1
 1056 IF End=11 THEN GO TO Finale
 1060 GO TO 1000
 1190 FOR i=18 TO 20
 1192 INK 1: PRINT AT i,1;"::::::::::::::::::::::::::::"
 1194 NEXT i
 1196 RETURN 
 1201 SOUND 6,31;7,7;8,3;9,3;10,16;11,30;12,3;13,8
 1202 IF count>1 THEN GO SUB 1400
 1205 FOR i=1 TO 5
 1207 IF f$(i)="x" THEN GO TO 1215
 1210 LET d(i)=INT (RND*6)+1
 1213 GO SUB 1220+i*10
 1215 NEXT i
 1220 RETURN 
 1231 PAPER 7
 1232 GO SUB 2000+(d(i)*100)
 1234 PRINT AT 5,2;a$(1)
 1236 PRINT AT 6,2;a$(2)
 1237 BEEP .05,22: PAPER 6
 1238 RETURN 
 1241 PAPER 7
 1242 GO SUB 2000+(d(i)*100)
 1244 PRINT AT 8,5;a$(1)
 1246 PRINT AT 9,5;a$(2)
 1247 BEEP .05,22: PAPER 6
 1248 RETURN 
 1251 PAPER 7
 1252 GO SUB 2000+(d(i)*100)
 1254 PRINT AT 12,7;a$(1)
 1256 PRINT AT 13,7;a$(2)
 1257 BEEP .05,22: PAPER 6
 1258 RETURN 
 1261 PAPER 7
 1262 GO SUB 2000+(d(i)*100)
 1264 PRINT AT 8,9;a$(1)
 1266 PRINT AT 9,9;a$(2)
 1267 BEEP .05,22: PAPER 6
 1268 RETURN 
 1271 PAPER 7
 1272 GO SUB 2000+(d(i)*100)
 1274 PRINT AT 5,12;a$(1)
 1276 PRINT AT 6,12;a$(2)
 1277 BEEP .05,22: PAPER 6
 1278 RETURN 
 1305 LET e=4*i-3
 1310 FLASH 1: INK 0: PRINT AT VAL o$(e TO e+1),VAL o$(e+2 TO e+3);i
 1315 RETURN 
 1355 FLASH 0: INK 4: PRINT AT VAL o$(e TO e+1),VAL o$(e+2 TO e+3);"::"
 1360 RETURN 
 1402 FOR i=1 TO 5
 1404 IF f$(i)="x" THEN GO TO 1418
 1406 FOR j=1 TO 5
 1408 LET p=i*4-3
 1410 PRINT AT VAL k$(p TO p+1),VAL k$(p+2 TO p+3);"::::"
 1412 PRINT AT VAL k$(p TO p+1)+1,VAL k$(p+2 TO p+3);"::::"
 1414 INK 4
 1416 NEXT j
 1418 NEXT i
 1419 INK 0
 1420 RETURN 
 1502 LET Z(q)=0
 1505 FOR i=1 TO 31 STEP 3
 1510 IF U$(q,i TO i+2)="XXX" OR U$(q,i TO i+2)="   " THEN GO TO 1520
 1515 LET Z(q)=Z(q)+VAL U$(q,i TO i+2)
 1520 NEXT i
 1522 IF Z(q)>=100 THEN GO TO 1536
 1526 IF Z(q)>=10 THEN GO TO 1534
 1532 PRINT AT 20,q+(3*(q+6));Z(q)
 1533 RETURN 
 1534 PRINT AT 20,q+(3*(q+6))-1;Z(q)
 1535 RETURN 
 1536 PRINT AT 20,q+(3*(q+6))-2;Z(q)
 1537 RETURN 
 2110 LET a$(1)="bc"
 2120 LET a$(2)="de"
 2130 RETURN 
 2210 LET a$(1)="af"
 2220 LET a$(2)="ga"
 2230 RETURN 
 2310 LET a$(1)="bh"
 2320 LET a$(2)="ie"
 2330 RETURN 
 2410 LET a$(1)="jf"
 2420 LET a$(2)="gk"
 2430 RETURN 
 2510 LET a$(1)="lh"
 2520 LET a$(2)="im"
 2530 RETURN 
 2610 LET a$(1)="np"
 2620 LET a$(2)="oq"
 2630 RETURN 
 3001 PRINT #1;AT 1,0;"TURN: ";N$(q)
 3002 LET count=count+1
 3003 IF count>1 THEN GO TO 3006
 3004 FOR i=3 TO 16: INK 4: PRINT AT i,1;"              ": NEXT i
 3005 INK 0
 3006 GO SUB Throw
 3007 SOUND 8,0;9,0;10,0
 3010 IF count=3 THEN GO TO 3200
 3012 PRINT AT 18,1;"____SELECT____"
 3013 PRINT AT 19,1;"S to Score    "
 3014 PRINT AT 20,1;"ENTER to Roll"
 3015 IF INKEY$=CHR$ 115 THEN GO TO 3200
 3016 IF INKEY$=CHR$ 13 THEN GO TO 3018
 3017 GO TO 3015
 3018 GO SUB 1190
 3025 FOR i=1 TO 5
 3026 INK 0: PRINT AT 18,1;"X=Save R=Roll"
 3027 PRINT AT 19,1;"ENTER=Roll All"
 3028 PRINT AT 20,1;"0=Reset all"
 3029 IF f$(i)="x" THEN GO TO 3038
 3030 GO SUB Fix
 3031 IF INKEY$="" THEN GO TO 3031
 3032 IF INKEY$=CHR$ 48 THEN GO TO 3040
 3033 IF INKEY$=CHR$ 114 OR INKEY$=CHR$ 120 THEN GO TO 3036
 3034 IF INKEY$=CHR$ 13 THEN GO TO 3042
 3035 GO TO 3031
 3036 LET f$(i)=INKEY$
 3037 GO SUB Blank
 3038 NEXT i
 3039 GO TO 3043
 3040 LET f$="00000": GO SUB Blank
 3041 FLASH 0: GO TO 3025
 3042 LET f$="00000": GO SUB Blank: FLASH 0
 3043 GO SUB 1190
 3044 GO TO 3000
 3201 LET f$="00000"
 3202 FLASH 0
 3205 GO SUB Seq
 3210 IF fl=1 THEN GO TO 3228
 3212 GO SUB 1190
 3214 IF End=10 THEN GO TO 3230
 3216 PRINT AT 18,1;"____SELECT____"
 3218 PRINT AT 19,1;"1 - Digits    "
 3220 PRINT AT 20,1;"F - Figures   "
 3222 IF INKEY$=CHR$ 49 THEN GO TO 3400
 3224 IF INKEY$=CHR$ 102 THEN GO TO 3230
 3226 GO TO 3222
 3228 LET fl=0
 3231 GO SUB 1190
 3234 IF q$(1)<>q$(5) THEN GO TO 3280
 3236 IF U$(q,29)="X" THEN GO TO 3280
 3238 IF U$(q,29)<>" " THEN GO TO 3250
 3240 IF count=1 THEN GO TO 3246
 3242 LET U$(q,28 TO 30)=" 50"
 3243 PRINT AT 17,16+q*4;" 50": GO SUB Music
 3244 GO TO 1050
 3246 LET U$(q,28 TO 30)=" 80"
 3247 PRINT AT 17,16+q*4;" 80": GO SUB Music
 3248 GO TO 1050
 3250 IF U$(q,31)<>" " THEN GO TO 3280
 3254 LET U$(q,31 TO 33)="100"
 3256 PRINT AT 18,16+q*4;"100"
 3257 GO SUB Total: IF count=1 THEN GO TO Finale
 3258 GO SUB Music
 3260 PRINT #1;AT 1,0;"DO YOU CONCEDE DEFEAT?(Y/N)"
 3262 IF INKEY$="" THEN GO TO 3262
 3263 IF INKEY$=CHR$ 121 THEN GO TO 6700
 3264 PRINT #1;AT 1,0;"                           "
 3270 GO TO 1052
 3282 IF q$(1)<>q$(4) AND q$(2)<>q$(5) THEN GO TO 3320
 3284 IF U$(q,26)<>" " THEN GO TO 3320
 3285 IF VAL q$(3)=6 AND U$(q,16 TO 18)="   " THEN GO TO 3505
 3286 IF count=1 THEN GO TO 3300
 3290 LET U$(q,25 TO 27)=" 40"
 3292 PRINT AT 16,16+q*4;" 40"
 3294 GO TO 1050
 3300 LET U$(q,25 TO 27)=" 60"
 3302 PRINT AT 16,16+q*4;" 60"
 3303 GO SUB Mus2
 3304 GO TO 1050
 3322 IF q$(1)=q$(3) AND q$(4)=q$(5) OR q$(1)=q$(2) AND q$(3)=q$(5) THEN GO TO 3326
 3324 GO TO 3360
 3326 IF U$(q,23)<>" " THEN GO TO 3360
 3328 IF count=1 THEN GO TO 3340
 3330 LET U$(q,22 TO 24)=" 30"
 3332 PRINT AT 15,16+q*4;" 30"
 3334 GO TO 1050
 3340 LET U$(q,22 TO 24)=" 40"
 3342 PRINT AT 15,16+q*4;" 40"
 3343 GO SUB Mus2
 3344 GO TO 1050
 3361 IF U$(q,20)<>" " THEN GO TO 3400
 3362 LET h$="00000"
 3363 FOR i=1 TO 5
 3364 LET h$(i)=q$(i)
 3365 NEXT i
 3366 IF h$="12345" OR h$="23456" THEN GO TO 3370
 3367 IF fstr=1 THEN GO TO 3664
 3368 GO TO 3400
 3370 IF count=1 THEN GO TO 3380
 3372 LET U$(q,19 TO 21)=" 20"
 3374 PRINT AT 14,16+q*4;" 20"
 3376 GO TO 1050
 3380 LET U$(q,19 TO 21)=" 25"
 3382 PRINT AT 14,16+q*4;" 25"
 3383 GO SUB Mus2
 3384 GO TO 1050
 3401 GO SUB 1190
 3405 FOR i=1 TO 3
 3410 IF q$(i)=q$(i+2) THEN GO TO 3415+VAL (q$(i))*15
 3415 NEXT i
 3420 FOR i=1 TO 4
 3422 IF q$(i)=q$(i+1) THEN GO TO 3415+VAL (q$(i))*15
 3424 NEXT i
 3425 GO TO Rubout
 3432 IF U$(q,3)<>" " THEN GO TO Rubout
 3433 LET v=1
 3434 GO SUB Sum
 3436 LET U$(q,3)=STR$ Add
 3438 PRINT AT 8,18+q*4;STR$ Add
 3440 GO TO 1050
 3447 IF U$(q,5 TO 6)<>"  " THEN GO TO Rubout
 3448 LET v=2
 3449 GO SUB Sum
 3451 IF Add=10 THEN GO TO 3456
 3452 LET U$(q,6)=STR$ Add
 3453 PRINT AT 9,18+q*4;STR$ Add
 3454 GO TO 1050
 3456 LET U$(q,5 TO 6)=STR$ Add
 3457 PRINT AT 9,17+q*4;STR$ Add
 3458 GO TO 1050
 3462 IF U$(q,8 TO 9)<>"  " THEN GO TO Rubout
 3463 LET v=3
 3464 GO SUB Sum
 3466 IF Add>=12 THEN GO TO 3471
 3468 LET U$(q,9)=STR$ Add
 3469 PRINT AT 10,18+q*4;STR$ Add
 3470 GO TO 1050
 3471 LET U$(q,8 TO 9)=STR$ Add
 3472 PRINT AT 10,17+q*4;STR$ Add
 3474 GO TO 1050
 3476 IF U$(q,11 TO 12)<>"  " THEN GO TO Rubout
 3478 LET v=4
 3479 GO SUB Sum
 3480 IF Add>=12 THEN GO TO 3485
 3482 LET U$(q,12)=STR$ Add
 3483 PRINT AT 11,18+q*4;STR$ Add
 3484 GO TO 1050
 3485 LET U$(q,11 TO 12)=STR$ Add
 3486 PRINT AT 11,17+q*4;STR$ Add
 3487 GO TO 1050
 3491 IF U$(q,14 TO 15)<>"  " THEN GO TO Rubout
 3492 LET v=5
 3494 GO SUB Sum
 3496 IF Add>=10 THEN GO TO 3501
 3497 LET U$(q,15)="5"
 3498 PRINT AT 12,18+q*4;"5"
 3499 GO TO 1050
 3501 LET U$(q,14 TO 15)=STR$ Add
 3502 PRINT AT 12,17+q*4;STR$ Add
 3503 GO TO 1050
 3506 IF U$(q,17 TO 18)<>"  " THEN GO TO Rubout
 3507 LET v=6
 3509 GO SUB Sum
 3511 IF Add>=12 THEN GO TO 3516
 3512 LET U$(q,18)="6"
 3513 PRINT AT 13,18+q*4;"6"
 3514 GO TO 1050
 3516 LET U$(q,17 TO 18)=STR$ Add
 3517 PRINT AT 13,17+q*4;STR$ Add
 3518 GO TO 1050
 3605 IF U$(q,31)<>" " THEN GO TO 3610
 3606 LET U$(q,31 TO )="XXX"
 3607 PRINT AT 18,16+q*4;"XXX"
 3608 GO TO 1050
 3611 LET b=0
 3612 FOR i=1 TO 4
 3615 FOR j=1 TO 5
 3620 IF q$(j)=STR$ i THEN LET b=b+1
 3625 IF j=5 AND b<>0 THEN GO TO 3650
 3630 NEXT j
 3635 NEXT i
 3636 FOR i=1 TO 4
 3637 IF U$(q,3*i-2 TO 3*i)="   " THEN GO TO 3640
 3638 NEXT i
 3639 GO TO 3660
 3640 LET U$(q,3*i-2 TO 3*i)="XXX"
 3642 PRINT AT i+7,16+q*4;"XXX"
 3644 GO TO 1050
 3650 IF U$(q,3*i-1 TO 3*i)<>"  " THEN GO TO 3656
 3652 LET U$(q,i+2*i)=STR$ (b*i)
 3653 PRINT AT i+7,18+q*4;STR$ (b*i)
 3654 GO TO 1050
 3656 LET b=0
 3658 GO TO 3635
 3662 IF U$(q,19 TO 21)<>"   " THEN GO TO 3670: LET U$(q,19 TO 21)="XXX"
 3664 LET U$(q,19 TO 21)="XXX"
 3666 PRINT AT 14,16+q*4;"XXX"
 3668 GO TO 1050
 3672 FOR i=5 TO 6
 3674 FOR j=1 TO 5
 3676 IF q$(j)=STR$ i THEN LET b=b+1
 3678 IF j=5 AND b<>0 THEN GO TO 3690
 3680 NEXT j
 3681 NEXT i
 3682 FOR i=5 TO 6
 3683 IF U$(q,3*i-2 TO 3*i)="   " THEN GO TO 3640
 3684 NEXT i
 3685 GO TO 3700
 3690 IF U$(q,3*i-1 TO 3*i)="  " THEN GO TO 3696
 3692 LET b=0: GO TO 3681
 3696 LET U$(q,3*i-1 TO 3*i)=STR$ (b*i)
 3698 PRINT AT i+7,19-LEN STR$ (b*i)+q*4;STR$ (b*i)
 3699 GO TO 1050
 3702 FOR g=23 TO 29 STEP 3
 3704 IF U$(q,g)=" " THEN GO TO 3708
 3706 NEXT g
 3708 LET U$(q,g-1 TO g+1)="XXX"
 3709 PRINT AT ((g-20)/3)+14,16+q*4;"XXX"
 3710 GO TO 1050
 3805 LET b=0
 3810 FOR i=1 TO 5
 3815 IF q$(i)=STR$ v THEN LET b=b+1
 3820 NEXT i
 3825 LET Add=b*v
 3830 LET b=0
 3835 RETURN 
 3905 FOR i=1 TO 5
 3910 LET q$(i)=STR$ d(i)
 3915 NEXT i
 3920 FOR j=2 TO 5
 3925 LET w$=q$(j)
 3930 FOR i=j-1 TO 1 STEP -1
 3935 IF q$(i)<w$ THEN GO TO 3945
 3940 LET q$(i+1)=q$(i)
 3942 NEXT i
 3945 LET q$(i+1)=w$
 3950 NEXT j
 3955 RETURN 
 4000 REM rutina de escalera buscada
 4001 IF U$(q,19 TO 21)<>"   " THEN GO TO 5000
 4002 LET flagstr=0
 4003 IF count=1 THEN GO TO 4010
 4004 GO SUB 900
 4005 IF h$="12345" OR h$="13456" OR h$="13456" THEN GO TO score
 4010 LET zero=0
 4012 FOR i=2 TO 5
 4014 IF q$(i)=q$(i-1) THEN GO SUB 4025
 4016 NEXT i
 4018 IF zero>1 THEN GO TO 5000
 4020 GO TO 4030
 4025 LET q$(i-1)="0"
 4026 LET zero=zero+1
 4027 RETURN 
 4030 FOR j=2 TO 5
 4032 LET b$=q$(j)
 4034 FOR i=j-1 TO 1 STEP -1
 4036 IF q$(i)<b$ THEN GO TO 4042
 4038 LET q$(i+1)=q$(i)
 4040 NEXT i
 4042 LET q$(i+1)=b$
 4044 NEXT j
 4046 FOR i=1 TO 5
 4048 LET h$(i)=q$(i)
 4050 NEXT i
 4052 IF h$(2 TO )="3456" OR h$(2 TO )="1345" OR h$(2 TO )="2345" THEN GO TO 4056
 4054 GO TO 5000
 4056 FOR j=1 TO 5
 4058 FOR i=1 TO 5
 4060 IF d(j)=VAL q$(i) THEN GO SUB 4080
 4062 NEXT i
 4064 NEXT j
 4066 LET flagstr=1
 4070 GO TO 5000
 4080 LET f$(j)="x"
 4082 LET q$(i)="0"
 4084 RETURN 
 5001 LET fl=1
 5002 LET count=count+1
 5003 PRINT #1;AT 1,0;"TURN: CPU       "
 5004 LET q=3
 5005 IF count>1 THEN GO TO 5010
 5007 FOR i=3 TO 16: INK 4: PRINT AT i,1;"              ": NEXT i
 5008 INK 0
 5010 GO SUB Throw
 5011 SOUND 8,0;9,0;10,0
 5012 LET f$="00000"
 5015 IF count=3 THEN GO TO score
 5020 GO SUB Seq
 5021 IF End=9 THEN GO TO 7700
 5022 IF End=10 THEN GO TO 7200
 5024 IF flagstr=1 THEN GO TO 4000
 5025 IF q$(1)=q$(5) THEN GO TO 5100
 5030 IF q$(1)=q$(4) OR q$(2)=q$(5) THEN GO TO 5300
 5035 FOR i=1 TO 3
 5036 IF q$(i)=q$(i+2) THEN GO TO 5500
 5037 NEXT i
 5040 IF q$(1)=q$(2) AND q$(3)=q$(4) THEN GO TO 5700
 5045 IF q$(2)=q$(3) AND q$(4)=q$(5) THEN GO TO 5700
 5050 IF q$(1)=q$(2) AND q$(4)=q$(5) THEN GO TO 5700
 5055 GO TO 5900
 5105 IF U$(q,28 TO 30)="   " THEN GO TO score
 5110 IF U$(q,29)="X" THEN GO TO 5300
 5115 IF U$(q,31 TO 33)="   " THEN GO TO score
 5120 GO TO score
 5302 IF count<>1 THEN GO TO 5308
 5304 LET rand=INT (RND*2)+1
 5306 IF U$(q,25 TO 27)="   " AND rand=2 THEN GO TO score
 5308 IF U$(q,29)<>"X" THEN GO TO 5330
 5310 IF U$(q,25 TO 27)="   " THEN GO TO score
 5315 LET dig=VAL q$(3)
 5320 IF U$(q,(3*dig)-2 TO 3*dig)="   " THEN GO TO 5330
 5322 IF U$(q,30)<>"X" AND U$(q,31 TO 33)="   " THEN GO TO 5330
 5328 GO TO 5000
 5330 FOR j=1 TO 5 STEP 4
 5332 IF q$(j)<>q$(3) THEN GO TO 5335
 5333 NEXT j
 5335 FOR i=1 TO 5
 5336 IF d(i)<>VAL q$(j) THEN LET f$(i)="x"
 5337 NEXT i
 5340 GO TO 5000
 5505 FOR j=2 TO 4
 5510 IF q$(j)=q$(j-1) AND q$(j)=q$(j+1) THEN GO TO 5525
 5515 NEXT j
 5525 IF j<>3 THEN GO TO 5570
 5530 LET dig=VAL q$(j)
 5532 IF count=1 AND U$(q,29)<>" " THEN GO TO 5540
 5535 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " AND U$(q,26)<>" " THEN GO TO 5000
 5540 FOR i=1 TO 5
 5542 IF d(i)=VAL q$(3) THEN LET f$(i)="x"
 5544 NEXT i
 5546 GO TO 5000
 5570 IF j=2 AND q$(4)=q$(5) THEN GO TO 5573
 5571 IF j=4 AND q$(1)=q$(2) THEN GO TO 5573
 5572 GO TO 5574
 5573 IF U$(q,22 TO 24)="   " THEN GO TO score
 5574 LET dig=VAL q$(3)
 5575 IF U$(q,(3*dig)-2 TO 3*dig)="   " OR U$(q,23)=" " OR U$(q,26)=" " OR U$(q,29)=" " THEN GO TO 5600
 5576 IF U$(q,29)<>"X" AND U$(q,31)=" " THEN GO TO 5600
 5578 GO TO 5000
 5600 FOR i=1 TO 5
 5605 IF d(i)=VAL q$(3) THEN LET f$(i)="x"
 5610 NEXT i
 5620 GO TO 5000
 5702 FOR j=1 TO 5 STEP 2
 5704 IF q$(j)<>q$(2) AND q$(j)<>q$(4) THEN GO TO 5710
 5706 NEXT j
 5710 IF U$(q,23)=" " THEN GO TO 5750
 5711 IF j=3 THEN GO TO 5725
 5712 IF j=5 THEN GO TO 5735
 5714 LET dig=VAL q$(2)
 5715 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5720
 5716 FOR i=1 TO 5
 5717 IF d(i)=VAL q$(2) THEN LET f$(i)="x"
 5718 NEXT i
 5719 GO TO 5000
 5720 LET dig=VAL q$(4)
 5721 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5000
 5722 FOR i=1 TO 5: IF d(i)=VAL q$(4) THEN LET f$(i)="x"
 5723 NEXT i
 5724 GO TO 5000
 5725 LET dig=VAL q$(1)
 5726 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5730
 5727 FOR i=1 TO 5
 5728 IF d(i)=VAL q$(1) THEN LET f$(i)="x"
 5729 NEXT i: GO TO 5000
 5730 LET dig=VAL q$(4)
 5732 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5000
 5733 FOR i=1 TO 5: IF d(i)=VAL q$(4) THEN LET f$(i)="x"
 5734 NEXT i: GO TO 5000
 5735 LET dig=VAL q$(1)
 5736 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5740
 5737 GO TO 5727
 5740 LET dig=VAL q$(3)
 5742 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 5000
 5744 GO TO 5733
 5750 FOR i=1 TO 5
 5752 IF d(i)<>VAL q$(j) THEN LET f$(i)="x"
 5758 NEXT i
 5760 GO TO 5000
 5902 LET h$="00000"
 5904 FOR i=1 TO 5
 5906 LET h$(i)=q$(i)
 5908 NEXT i
 5910 IF h$="12345" OR h$="23456" OR h$="13456" THEN GO TO 5955
 5915 FOR i=1 TO 4
 5920 IF q$(i)=q$(i+1) THEN GO TO 5930
 5922 NEXT i
 5924 GO TO 4000
 5930 LET dig=VAL q$(i)
 5935 IF U$(q,(3*dig)-2 TO 3*dig)<>"   " THEN GO TO 4000
 5940 FOR j=1 TO 5
 5943 IF d(j)=VAL q$(i) THEN LET f$(j)="x"
 5946 NEXT j
 5950 GO TO 5000
 5955 IF U$(q,20 TO 21)<>"  " THEN GO TO 5000
 5960 GO TO score
 6505 BORDER 0: PAPER 5: INK 0: CLS 
 6510 FOR i=2 TO 3
 6515 IF Z(i)>=Z(1) THEN GO TO 6530
 6520 NEXT i
 6525 LET q=1: GO TO 6700
 6530 FOR i=1 TO 3 STEP 2
 6535 IF Z(i)>=Z(2) THEN GO TO 6550
 6540 NEXT i
 6545 LET q=2: GO TO 6700
 6550 FOR i=1 TO 2
 6555 IF Z(i)>=Z(3) THEN GO TO 6570
 6560 NEXT i
 6565 LET q=3: GO TO 6700
 6570 FOR i=0 TO 7
 6575 BORDER i: FLASH 1: PRINT AT 10,10;"DRAW GAME!!!": BEEP .01,5: BEEP .01,10: BEEP .01,15: BEEP .01,20: BEEP .01,25: BEEP .01,30
 6580 NEXT i
 6585 FLASH 0
 6590 GO TO 6605
 6600 LET v(q)=PEEK (65000+q)+1
 6602 POKE 65000+q,v(q)
 6605 BORDER 4: PAPER 4: INK 0: CLS 
 6610 PRINT AT 5,5;"   CURRENT STATISTICS   "
 6615 FOR i=1 TO 3
 6620 PRINT AT 8+(2*i),5;"* ";N$(i);" won ";PEEK (65000+i);" games"
 6625 NEXT i
 6630 PRINT AT 18,5;"Another Game?"; FLASH 1;" y/n "
 6635 IF INKEY$="" THEN GO TO 6635
 6636 IF INKEY$=CHR$ 121 THEN GO TO 6639
 6637 IF INKEY$="n" THEN STOP 
 6638 GO TO 6635
 6639 PRINT AT 18,5;"                   ": PAUSE 60
 6640 PRINT AT 18,5;"Same Players?"; FLASH 1;"::y/n "
 6641 IF INKEY$=CHR$ 121 THEN GO TO 6650
 6642 IF INKEY$<>CHR$ 110 THEN GO TO 6640
 6643 FOR i=1 TO 3
 6644 POKE 65000+i,0
 6645 NEXT i
 6646 CLEAR 
 6648 GO TO 9005
 6650 CLEAR 
 6651 DIM N$(3,10)
 6652 LET i=1
 6653 FOR j=65003 TO 65023 STEP 10: POKE j,i
 6654 FOR x=1 TO PEEK (65033+i)
 6655 LET N$(i,x TO x)=CHR$ (PEEK (j+x))
 6656 NEXT x
 6657 LET i=i+1
 6658 NEXT j
 6660 GO TO 9100
 6702 FOR i=0 TO 6
 6704 BORDER i: PAPER 4: INK 0: PRINT AT 10,5;"  WINNER : "; FLASH 1;N$(q)
 6706 FOR x=5 TO 35 STEP 5: BEEP .01,x: NEXT x
 6708 NEXT i
 6710 GO TO 6600
 7002 SOUND 7,56;0,68;1,3;8,15
 7003 SOUND 2,151;3,2;9,12
 7004 SOUND 4,46;5,2;10,12
 7005 BEEP .1,-5: BEEP .1,0: BEEP .1,4: BEEP .1,7: PAUSE 15: BEEP .1,7: BEEP .1,7: BEEP .1,7
 7006 BEEP .1,4: PAUSE 15: BEEP .1,4: BEEP .1,4: BEEP .1,4: BEEP .3,0: BEEP .3,4: BEEP .3,0: BEEP 1,-5
 7012 SOUND 8,0;9,0;10,0
 7099 RETURN 
 7100 REM Mus2
 7102 BEEP .2,14: PAUSE 10: BEEP .1,9: BEEP .1,8: BEEP .1,9: BEEP .3,10: PAUSE 5: BEEP .3,9: PAUSE 15: BEEP .2,13: PAUSE 10: BEEP .3,14
 7105 RETURN 
 7202 IF count>=2 THEN GO TO Pointer
 7204 FOR i=1 TO 31 STEP 3
 7206 IF U$(q,i TO i+2)="   " THEN GO TO 7210
 7208 NEXT i
 7210 IF i<=16 THEN GO TO 7230
 7212 IF i=19 THEN LET Pointer=7400
 7214 IF i=22 THEN LET Pointer=7500
 7216 IF i>=25 THEN LET Pointer=7600
 7218 GO TO Pointer
 7230 LET ONE=i+2
 7232 LET Pointer=7300
 7300 FOR j=1 TO 5
 7301 IF VAL q$(j)=ONE/3 THEN LET tone=tone+1
 7302 NEXT j
 7303 IF TWO/3>6 THEN GO TO 7312
 7304 FOR j=1 TO 5
 7305 IF VAL q$(j)=TWO/3 THEN LET ttwo=ttwo+1
 7306 NEXT j
 7307 IF ttwo<tone THEN GO TO 7312
 7308 LET die=TWO/3
 7309 LET Pointer=7320
 7310 GO TO Pointer
 7312 LET die=ONE/3
 7313 LET Pointer=7320
 7320 FOR i=1 TO 5
 7322 IF d(i)=die THEN LET f$(i)="x"
 7324 NEXT i
 7326 LET tone=0
 7328 LET ttwo=0
 7330 GO TO 5000
 7401 FLASH 1: PRINT AT 18,1;"CPU thinks... ": GO SUB 900
 7402 IF h$="12345" OR h$="23456" OR h$="13456" THEN GO TO score
 7404 IF count>=2 THEN GO TO 7490
 7405 DIM E(3)
 7406 FOR i=2 TO 5
 7407 IF VAL q$(i)=VAL q$(i-1) THEN LET q$(i-1)="0"
 7408 NEXT i
 7409 LET fstr=1
 7410 FOR j=1 TO 3
 7412 FOR x=1 TO 5
 7414 FOR i=1 TO 5
 7416 IF VAL m$(j,x)=VAL q$(i) THEN LET E(j)=E(j)+1
 7418 NEXT i
 7420 NEXT x
 7422 NEXT j
 7430 IF E(1)>=E(2) THEN GO TO 7436
 7432 IF E(2)>=E(3) THEN GO TO 7446
 7434 GO TO 7438
 7436 IF E(1)>=E(3) THEN GO TO 7442
 7438 LET ix=3
 7440 GO TO 7450
 7442 LET ix=1
 7444 GO TO 7450
 7446 LET ix=2
 7450 GO SUB 900
 7458 LET find=0
 7460 FOR i=1 TO 5
 7462 FOR x=1 TO 5
 7464 IF q$(i)=m$(ix,x) THEN LET find=1
 7466 NEXT x
 7468 IF find=0 THEN LET q$(i)="0"
 7470 LET find=0
 7472 NEXT i
 7474 FOR i=1 TO 5
 7476 FOR x=1 TO 5
 7478 IF d(i)=VAL q$(x) THEN GO TO 7486
 7480 NEXT x
 7482 NEXT i
 7483 FLASH 0: GO SUB 1190
 7484 GO TO 5000
 7486 LET f$(i)="x"
 7487 LET q$(x)="0"
 7488 GO TO 7480
 7490 FOR i=2 TO 5
 7492 IF VAL q$(i)=VAL q$(i-1) THEN LET q$(i-1)="0"
 7494 NEXT i
 7496 GO TO 7450
 7502 IF VAL q$(1)=VAL q$(2) AND VAL q$(3)=VAL q$(5) OR VAL q$(1)=VAL q$(3) AND VAL q$(4)=VAL q$(5) THEN GO TO score
 7504 IF VAL q$(1)=VAL q$(3) OR VAL q$(2)=VAL q$(4) OR VAL q$(3)=VAL q$(5) THEN GO TO 7530
 7506 IF VAL q$(1)=VAL q$(2) AND VAL q$(3)=VAL q$(4) OR VAL q$(1)=VAL q$(2) AND VAL q$(4)=VAL q$(5) OR VAL q$(2)=VAL q$(3) AND VAL q$(4)=VAL q$(5) THEN GO TO 7540
 7510 FOR i=2 TO 5
 7512 IF VAL q$(i)=VAL q$(i-1) THEN GO TO 7518
 7514 NEXT i
 7516 GO TO 5000
 7518 FOR j=1 TO 5
 7520 IF d(j)=VAL q$(i) THEN LET f$(j)="x"
 7522 NEXT j
 7524 GO TO 5000
 7532 FOR i=1 TO 5
 7534 IF d(i)=VAL q$(3) THEN LET f$(i)="x"
 7536 NEXT i
 7538 GO TO 5000
 7542 FOR i=1 TO 5
 7544 IF d(i)=VAL q$(2) OR d(i)=VAL q$(4) THEN LET f$(i)="x"
 7546 NEXT i
 7548 GO TO 5000
 7602 IF VAL q$(1)=VAL q$(4) AND U$(q,25 TO 27)="  " THEN GO TO score
 7604 IF VAL q$(1)=VAL q$(5) THEN GO TO score
 7606 IF VAL q$(1)=VAL q$(3) OR VAL q$(2)=VAL q$(4) OR VAL q$(3)=VAL q$(5) THEN GO TO 7630
 7608 IF VAL q$(1)=VAL q$(3) AND VAL q$(4)=VAL q$(5) OR VAL q$(1)=VAL q$(2) AND VAL q$(3)=VAL q$(5) THEN LET full=1
 7610 IF full=1 AND U$(3,24)="  " THEN GO TO score
 7612 FOR i=2 TO 5
 7613 IF VAL q$(i)=VAL q$(i-1) THEN GO TO 7618
 7614 NEXT i
 7616 GO TO 5000
 7618 FOR j=1 TO 5
 7620 IF d(j)=VAL q$(i) THEN LET f$(j)="x"
 7622 NEXT j
 7624 GO TO 5000
 7632 FOR i=1 TO 5
 7634 IF d(i)=VAL q$(3) THEN LET f$(i)="x"
 7636 NEXT i
 7638 GO TO 5000
 7640 FOR i=1 TO 5 STEP 2
 7642 IF VAL q$(i)<>VAL q$(2) AND VAL q$(i)<>VAL q$(4) THEN CONTINUE 7648
 7644 NEXT i
 7648 FOR j=1 TO 5
 7650 IF d(j)<>VAL q$(i) THEN LET f$(j)="x"
 7652 NEXT j
 7654 GO TO 5000
 7660 REM Full
 7666 IF VAL q$(1)=VAL q$(2) AND VAL q$(3)=VAL q$(4) OR VAL q$(1)=VAL q$(2) AND VAL q$(4)=VAL q$(5) OR VAL q$(2)=VAL q$(3) AND VAL q$(4)=VAL q$(5) THEN GO TO 7640
 7668 LET PTR=7600
 7670 GO TO PTR
 7702 IF count>=2 THEN GO TO PTR
 7710 FOR i=3 TO 33 STEP 3
 7712 IF U$(3,i)=" " THEN GO TO 7716
 7714 NEXT i
 7716 LET ONE=i
 7718 FOR i=i+3 TO 33 STEP 3
 7720 IF U$(3,i)=" " THEN GO TO 7724
 7722 NEXT i
 7724 LET TWO=i
 7730 IF ONE<=18 AND TWO<=18 THEN GO TO 7810
 7732 IF ONE<=18 AND TWO>=21 THEN GO TO 7750
 7734 IF ONE=21 AND TWO=24 THEN GO TO 7770
 7736 IF ONE=21 AND TWO>=27 THEN GO TO 7790
 7738 IF ONE=24 THEN GO TO 7660
 7740 LET PTR=7600
 7742 GO TO PTR
 7750 LET ADDER=0
 7751 FOR i=1 TO 5
 7752 IF VAL q$(i)=ONE/3 THEN LET ADDER=ADDER+1
 7753 NEXT i
 7754 IF ADDER>=2 THEN GO TO 7810
 7756 IF TWO=21 THEN GO TO 7782
 7760 FOR i=2 TO 4
 7762 IF VAL q$(i)=VAL q$(i-1) AND VAL q$(i)=VAL q$(i+1) THEN GO TO 7768
 7764 NEXT i
 7766 GO TO 7810
 7768 IF TWO=21 THEN LET PTR=7400
 7770 IF TWO=24 THEN LET PTR=7500
 7772 IF TWO>=27 THEN LET PTR=7600
 7774 GO TO PTR
 7776 IF VAL q$(1)=VAL q$(2) AND VAL q$3)=VAL q$(0) OR VAL q$(1)=VAL q$(2) AND VAL q$(4)=VAL q$(5) OR VAL q$(2)=VAL q$(3) AND VAL q$(4)=VAL q$(5) THEN LET PTR=7500
 7778 IF PTR<>7500 THEN LET PTR=7400
 7780 GO TO PTR
 7782 LET PTR=7400
 7784 GO TO PTR
 7790 FOR i=2 TO 4
 7792 IF VAL q$(i)=VAL q$(i-1) AND VAL q$(i)=VAL q$(i+1) THEN GO TO 7800
 7794 NEXT i
 7796 LET PTR=7400
 7798 GO TO PTR
 7800 LET PTR=7600
 7802 GO TO PTR
 7810 LET PTR=7300
 7812 GO TO PTR
 7999 POKE 23658,0
 8000 POKE 23730,232
 8001 POKE 23731,253
 8002 FOR i=65001 TO 65003
 8003 POKE i,0
 8004 NEXT i
 8005 FOR i=65004 TO 65033
 8006 POKE i,32
 8007 NEXT i
 8900 BORDER 4: PAPER 6: INK 0: CLS 
 8902 PRINT AT 10,8; FLASH 1;" INITIALIZATION "
 8904 PRINT AT 18,3;"(Please wait a few seconds)"
 8908 PRINT AT 5,2;"Rel#: 30";AT 5,25;"*1984"
 8950 FOR i=65368 TO 65503
 8952 READ u
 8954 POKE i,u
 8956 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,128
 8958 DATA 1,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,12,12,0,0,0,0
 8960 DATA 0,0,0,0,48,48,0,0,0,0,12,12,0,0,0,128,1,0,0,0,48,48,0,0
 8962 DATA 0,0,48,48,0,0,0,0,0,0,0,0,12,12,0,0,0,0,48,48,0,0,0,1
 8964 DATA 128,0,0,0,12,12,0,0,0,0,48,48,0,0,0,48,48,0,0,0,48,48,0,0
 8966 DATA 0,0,12,12,0,0,0,12,12,0,0,0,12,12,0,0
 8968 NEXT i
 9005 BORDER 4: PAPER 4: INK 0
 9020 CLS : INVERSE 1: PRINT AT 2,0;"Select desired option2": INVERSE 0
 9025 PRINT AT 5,4;"*One Player vs Computer": INVERSE 1: PRINT AT 5,30;"1"     
 9030 INVERSE 0: PRINT AT 7,4;"*Two Players only": INVERSE 1: PRINT AT 7,30;"2"
 9035 INVERSE 0: PRINT AT 9,4;"*Two Players and"
 9040 PRINT AT 10,5;"the Computer": INVERSE 1: PRINT AT 10,30;"3"
 9045 INVERSE 0: PRINT AT 12,4;"*Three Players only": INVERSE 1: PRINT AT 12,30;"4"
 9050 PRINT AT 15,0;"Hit Number Indicated  ": INVERSE 0
 9052 IF INKEY$="" THEN GO TO 9052
 9053 IF INKEY$<CHR$ 49 OR INKEY$>CHR$ 52 THEN GO TO 9052
 9055 LET n=VAL INKEY$
 9056 POKE 65037,n
 9060 PAPER 5: CLS : DIM N$(3,10): PRINT AT 2,0;"Player 1...your name?": INPUT N$(1): PRINT N$(1)
 9061 FOR i=1 TO LEN N$(1)
 9062 POKE 65003+i,CODE N$(1,i)
 9063 NEXT i
 9064 POKE 65034,LEN N$(1)
 9065 IF n=1 THEN GO TO 9090
 9070 PRINT AT 5,0;"Player 2...your name?": INPUT N$(2): PRINT N$(2)
 9071 FOR i=1 TO LEN N$(2)
 9072 POKE 65013+i,CODE N$(2,i)
 9073 NEXT i
 9074 POKE 65035,LEN N$(2)
 9075 IF n=2 THEN GO TO 9100
 9076 IF n=3 THEN GO TO 9090
 9080 PRINT AT 8,0;"Player 3...your name?": INPUT N$(3): PRINT N$(3)
 9081 FOR i=1 TO LEN N$(3)
 9082 POKE 65023+i,CODE N$(3,i)
 9083 NEXT i
 9084 POKE 65036,LEN N$(3)
 9085 PAUSE 120: CLS : GO TO 9100
 9090 LET N$(3)="CPU"
 9091 POKE 65024,67
 9092 POKE 65025,80
 9093 POKE 65026,85
 9094 POKE 65036,3
 9101 DIM t$(4,4): RESTORE 9103
 9102 FOR x=1 TO 4
 9103 READ w$
 9104 LET t$(x)=w$
 9105 DATA "1400","1200","1240","1230"
 9106 NEXT x
 9107 DIM v(3)
 9108 LET n=PEEK 65037
 9109 FOR i=0 TO 21: INK 1: PRINT AT i,0;"::::::::::::::::::::::::::::::::": NEXT i
 9110 FOR i=0 TO 21: INK 0: PRINT AT i,16;"::::::::::::::::::::::::::::::::": NEXT i
 9115 PAPER 6: PRINT AT 1,17;"PL1:";N$(1)
 9116 IF n=1 THEN GO TO 9120
 9117 PRINT AT 2,17;"PL2:";N$(2)
 9118 IF n=4 THEN PRINT AT 3,17;"PL3:";N$(3)
 9120 PRINT AT 6,20;"PL1";AT 20,20;"   ": IF n<>1 THEN PRINT AT 6,24;"PL2";AT 20,24;"   "
 9125 IF n=1 OR n=3 THEN PRINT AT 6,28;"CPU";AT 20,28;"   "
 9130 IF n=4 THEN PRINT AT 6,28;"PL3";AT 20,28;"   "
 9135 LET S$=" 1 2 3 4 5 6STFLPKGLDG"
 9140 FOR i=8 TO 18: PRINT AT i,17;S$(i*2-15 TO i*2-14): NEXT i: PRINT AT 20,17;"TL"
 9145 FOR i=8 TO 18
 9146 PRINT AT i,20;"   "
 9147 IF n=1 THEN PRINT AT i,28;"   "
 9148 IF n=2 THEN PRINT AT i,24;"   "
 9149 IF n>=3 THEN PRINT AT i,24;"   ";AT i,28;"   "
 9150 NEXT i
 9155 FOR i=3 TO 16: INK 4: PRINT AT i,1;"::::::::::::::::::::::::::::": NEXT i
 9285 DIM U$(3,33)
 9290 DIM a$(2,2)
 9295 DIM d(5)
 9300 LET f$="00000"
 9305 INK 0
 9310 LET player=3000
 9315 LET Throw=1200
 9320 LET count=0
 9325 LET score=3200
 9330 LET k$=" 5 2 8 512 7 8 9 512"
 9335 DIM q$(5,1)
 9340 LET Rubout=3600
 9345 LET Sum=3800
 9350 RANDOMIZE 0
 9355 LET cpu=5000
 9360 LET Seq=3900
 9365 LET fl=0
 9370 LET End=0
 9375 LET Finale=6500
 9380 LET Fix=1300
 9385 LET Blank=1350
 9390 LET o$="07021005140710090712"
 9395 DIM Z(3)
 9397 DIM Z$(3,3)
 9399 LET Total=1500
 9405 FLASH 0: GO SUB 1190
 9410 DIM m$(3,5)
 9415 LET m$(1)="12345"
 9420 LET m$(2)="23456"
 9425 LET m$(3)="13456"
 9430 LET Acc=0
 9435 LET Music=7000
 9436 LET Mus2=7100
 9438 LET full=0
 9440 LET fstr=0
 9442 LET tone=0
 9444 LET ttwo=0
 9446 LET flagstr=0
 9995 GO TO 1000
 9996 STOP 
 9997 CLEAR : RANDOMIZE USR 100: SAVE "Genrla.B1" LINE 1
 9998 CLEAR : RANDOMIZE USR 100: LOAD "L.B1"

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