10 FILL 32:VPRINT 5*80+18,"VIDEO BLACKJACK (FACEUP) FROM HAWKEYE GRAFIX"
20 VPRINT 7*80+28,"COPYRIGHT (C) 1981"
40 VA=PEEK(&106)*256+PEEK(&105)
50 POKE VA+&7FF,12
60 CLEAR 2000
70 DIM C(22,2),CS(22),CA(11)
80 GOSUB 64000:REM SETUP CARD DATA 
90 VPRINT 5*LL,"THERE ARE TWO OPTIONAL RULES IN THIS VERSION OF BLACKJACK:    "
100 VPRINT 7*LL,"SOME CASINOS ALLOW YOU TO DOUBLE DOWN ANYTIME YOU WANT."
110 VPRINT 8*LL,"OTHERS ALLOW IT ONLY WHEN YOU HAVE 10 OR 11. WOULD YOU"
120 VPRINT 9*LL,SPC(LL)
130 VINPUT 9*LL,"LIKE (A) ANYTIME, OR (B) ON 10 AND 11 ONLY";AA$
140 IF AA$="A" THEN DS=1 ELSE IF AA$="B" THEN DS=0 ELSE 120
150 VPRINT 12*LL,"SOME CASINOS ALLOW ONLY ONE CARD TO BE DEALT ON SPLIT ACES,"
160 VPRINT 13*LL,"WHILE OTHERS ALLOW YOU TO HIT THEM AS OFTEN AS YOU PLEASE."
170 VPRINT 14*LL,"WOULD YOU LIKE (A) ONLY ONE CARD ON SPLIT ACES OR (B) AS MANY"
180 VINPUT 15*LL,"AS YOU WISH";AA$
190 IF AA$="A" THEN HA=1 ELSE IF AA$="B" THEN HA=0 ELSE 180
200 FILL 32
210 BR=500:REM LOAD BANKROLL 
220 SCROLL 2*LL+40,8,38
230 FOR J=0 TO 8 STEP 2
240 CA(J)=13*LL+2+(J/2)*15
250 CA(J+1)=LL+2+(J/2)*15
260 NEXT 
270 CA(10)=CA(8)+3:REM SIXTH CARD OVERLAYS
280 CA(11)=CA(9)+3
290 FOR J=0 TO 22 STEP 2
300 CS(J)=13*LL+J/2*3+2
310 IF J>10 THEN CS(J)=CS(J)+25
320 NEXT 
330 VPRINT 40+12*LL,"BANKROLL -";BR
340 IF BR<1 THEN 60000
350 FOR I=0 TO 51
360 DK(I)=0
370 NEXT 
380 FOR I=0 TO 22
390 C(I,2)=0
400 NEXT 
410 IS=0
420 W1=0
430 VINPUT 60+12*LL,"WAGER (0-100)";W
440 W=ABS(INT(W))
450 IF W=0 THEN 60000
460 IF W>100 OR W>BR THEN 430
470 BR=BR-W
480 FILL 32
490 RANDOMIZE 
500 CP=2:REM SET CARD POINTER FOR HITS 
502 DRAW 78,66,159,66,1
504 DRAW 159,65,159,41,1
506 DRAW 158,41,78,41,1
508 DRAW 78,42,78,65,1
510 FOR J=0 TO 3
520 A=CA(J)
530 GOSUB 65000:REM DRAW BACK 
532 GOSUB 65300:REM DEAL CARD 
534 D=C(J,1)
536 S=C(J,0)
538 C(J,2)=1
539 IS=0
540 IF J<>3 OR C(1,1)<>0 THEN 580:REM NO INSURANCE
542 VPRINT -1,
544 VPRINT -1,"YOU HAVE";BR;"DOLLARS."
546 VPRINT -1,"WOULD YOU LIKE INSURANCE (Y/N)?"
548 AA$=CHR$(CINP(3))
550 IS=0
552 IF AA$="N" THEN 580
554 IF AA$<>"Y" THEN 546
556 BR=BR-W/2
558 IS=W/2
580 GOSUB 65100:REM ERASE BACK
590 GOSUB 65200:REM DRAW PICTURE OF CARD
600 NEXT 
760 J=1
770 GOSUB 63000:REM SCORE DEALER'S HAND 
780 IF BJ=0 THEN 900
790 BR=BR+IS*3:REM PAY INSURANCE
860 J=0
870 GOSUB 63000:REM SCORE PLAYER'S HAND
880 IF BJ=1 THEN VPRINT 12*LL,"PUSH":BR=BR+W:GOTO 330
890 VPRINT 12*LL,"YOU LOST";W:GOTO 330
900 J=0
910 GOSUB 63000:REM SCORE PLAYER'S HAND 
920 VPRINT 13*LL,SC$
930 IF BJ=0 THEN 970
940 VPRINT 12*LL,"BLACKJACK WINS";W
950 BR=BR+W*2
960 GOTO 330
970 IF SC<22 THEN 1110
980 FOR I=.5 TO 11.5
990 VPRINT I*LL-9,SPC(LL/2+9)
1000 NEXT 
1010 VPRINT 12*LL,"YOU LOST";W
1050 FOR I=.5 TO 11.5
1060 VPRINT I*LL-9,SPC(LL/2+9)
1070 NEXT 
1100 GOTO 330
1110 FOR I=0 TO 6
1120 VPRINT -1,
1130 NEXT 
1140 VPRINT -1,"YOU HAVE";BR;"DOLLARS."
1150 VPRINT -1,"YOUR HAND IS";
1160 IF SF=1 THEN VPRINT -1," A SOFT";
1170 VPRINT -1,SC;
1180 VPRINT -1,"YOUR BET IS";W
1190 VPRINT -1,"PLEASE INDICATE YOUR SELECTION:"
1200 VPRINT -1,"P - PAT HAND"
1210 VPRINT -1,"H - HIT"
1220 IF DD=1 THEN VPRINT -1,"D - DOUBLE DOWN"
1230 IF BB=1 THEN VPRINT -1,"S - SPLIT PAIR"
1240 AA$=CHR$(CINP(3))
1250 IF AA$="P" THEN 50000
1260 IF AA$="H" THEN 10000
1270 IF AA$="D" AND DD=1 THEN 20000
1280 IF AA$="S" AND BB=1 THEN 30000
1290 GOTO 1240
10000 CP=CP+2:REM MOVE TO NEXT CARD 
10010 A=CA(CP)
10020 GOSUB 65000:REM DRAW BACK 
10030 J=CP
10040 GOSUB 65300:REM DEAL CARD 
10050 D=C(CP,1)
10060 S=C(CP,0)
10070 C(CP,2)=1
10080 GOSUB 65100:REM ERASE BACK 
10090 GOSUB 65200:REM DRAW PICTURE 
10100 IF CP<>10 THEN 900:REM IF NOT SIX CARDS, PLAY ANOTHER
10110 J=0
10120 GOSUB 63000:REM SCORE PLAYER'S HAND 
10130 IF SC>21 THEN 900:REM BUSTED 
10140 FOR I=.5 TO 11.5
10150 VPRINT I*LL-9,SPC(LL/2+9)
10160 NEXT 
10170 VPRINT 12*LL,"YOU WON";W
10180 BR=BR+2*W
10190 GOTO 330
20000 CP=CP+2:REM MOVE TO NEXT CARD 
20010 A=CA(CP)
20020 GOSUB 65000:REM DRAW BACK 
20030 J=CP
20040 GOSUB 65300:REM DRAW CARD
20050 D=C(CP,1)
20060 S=C(CP,0)
20070 C(CP,2)=1
20080 GOSUB 65100:REM ERASE BACK 
20090 GOSUB 65200:REM DRAW PICTURE 
20100 BR=BR-W
20110 W=W+W
20120 J=0
20130 GOSUB 63000:REM SCORE NEW HAND 
20140 VPRINT 13*LL,SC$
20150 GOTO 50000
30000 FOR I=13 TO 23
30010 VPRINT LL*I+16,SPC(LL-16)
30020 NEXT 
30030 VPRINT 13*LL,"  ":REM ERASE OLD SCORE
30040 BR=BR-W
30050 W1=W
30060 C(12,0)=C(2,0)
30070 C(12,1)=C(2,1)
30080 C(12,2)=1
30090 A=CS(12)
30100 GOSUB 65100:REM DRAW BLANK
30110 D=C(12,1)
30120 S=C(12,0)
30130 GOSUB 65200:REM RE-DRAW SPLIT CARD 
30140 A=CS(14)
30150 GOSUB 65000:REM DRAW BACK OF FOURTH CARD 
30160 CP=0
30170 CP=CP+2
30180 A=CS(CP)
30190 GOSUB 65000:REM DRAW BACK 
30200 J=CP
30210 GOSUB 65300:REM DEAL CARD 
30220 D=C(CP,1)
30230 S=C(CP,0)
30240 C(CP,2)=1
30250 GOSUB 65100:REM ERASE BACK 
30260 GOSUB 65200:REM DRAW PICTURE 
30270 IF CP<11 THEN J=0 ELSE J=12
30280 GOSUB 63000:REM SCORE HAND 
30290 IF J=0 THEN VPRINT 13*LL,SC$ ELSE VPRINT 13*LL+LL/2+3,SC$
30300 IF SC<22 THEN 30330:REM NOT BUSTED
30310 IF J=0 THEN VPRINT 12*LL,"YOU LOST";W ELSE VPRINT 12*LL+20,"YOU LOST";W1
30320 GOTO 40000:REM BUSTED
30330 IF CP=10 THEN BR=BR+W*2 ELSE IF CP=22 THEN BR=BR+W1*2:REM FORCED WIN 
30340 IF CP=10 THEN VPRINT 12*LL,"YOU WON";W
30350 IF CP=22 THEN VPRINT 12*LL+20,"YOU WON";W1
30360 IF CP=10 OR CP=22 THEN 40000
30370 IF HA=1 AND C(0,1)=0 THEN 40000:REM IF SPLIT ACES, NO HITS 
30380 IF AA$="D" THEN 40000:REM HE DOUBLED DOWN 
30390 FOR I=0 TO 6
30400 VPRINT -1,
30410 NEXT 
30420 VPRINT -1,"YOU HAVE";BR;"DOLLARS."
30430 VPRINT -1,"YOUR HAND IS";
30440 IF SF=1 THEN VPRINT -1," A SOFT";
30450 VPRINT -1,SC;
30460 VPRINT -1,"YOUR BET IS";W
30470 VPRINT -1,"PLEASE SELECT FOR THIS HAND:"
30480 VPRINT -1,"P - PAT HAND"
30490 VPRINT -1,"H - HIT"
30500 IF DD=1 THEN VPRINT -1,"D - DOUBLE DOWN"
30510 AA$=CHR$(CINP(3))
30520 IF AA$="P" THEN 40000:REM STANDING, DO OTHER HAND 
30530 IF AA$="D" AND CP<12 THEN BR=BR-W:W=W+W
30535 IF AA$="D" AND CP>12 THEN BR=BR-W1:W1=W1+W1
30550 IF AA$="D" THEN 30170
30560 IF AA$<>"H" THEN 30510 ELSE GOTO 30170
40000 IF CP>12 THEN 50000
40010 CP=12
40020 AA$=" "
40030 GOTO 30170
50000 CP=3
50010 J=0
50020 GOSUB 63000:REM SCORE HAND 1 
50030 IF SC<22 THEN 50090
50040 J=12
50050 GOSUB 63000:REM SCORE HAND 2
50060 IF SC>21 THEN 900
50090 FOR I=.5 TO 11.5
50100 VPRINT I*LL-9,SPC(LL/2+9)
50110 NEXT 
50120 GOTO 50250
50130 CP=CP+2
50150 IF CP=13 THEN 50310:REM ONLY SIX CARDS ALLOWED
50160 A=CA(CP)
50170 GOSUB 65000:REM DRAW BACK 
50180 J=CP
50190 GOSUB 65300:REM DEAL CARD 
50200 D=C(CP,1)
50210 S=C(CP,0)
50220 C(CP,2)=1
50230 GOSUB 65100:REM ERASE BACK 
50240 GOSUB 65200:REM DRAW PICTURE 
50250 J=1
50260 GOSUB 63000:REM SCORE DEALER'S HAND 
50270 VPRINT LL,SC$
50280 IF SC>17 THEN 50310:REM STAND 
50290 IF SC<17 THEN 50130
50300 IF SF=1 THEN 50130
50310 IF SC<22 THEN DH=SC ELSE DH=0
50320 J=0
50330 GOSUB 63000:REM SCORE PLAYER'S MAIN HAND 
50340 PH=SC
50350 IF W1=0 THEN 50450
50360 IF C(22,2)=1 THEN 50450:REM SPLIT HAND 6 CARDS, ALREADY PAID 
50370 J=10
50380 GOSUB 63000:REM SCORE SPLIT HAND 
50390 IF SC>21 THEN 50450:REM HAND 2 BUSTED 
50400 IF SC<=DH THEN VPRINT 12*LL+20,"YOU LOST";W1:GOTO 50450:REM LOST TO DEALER
50420 IF DH<SC THEN BR=BR+W1*2:VPRINT 12*LL+20,"YOU WON";W1:REM WON HAND
50440 W1=0
50450 IF PH>21 THEN 330:REM BUSTED, NEXT HAND 
50460 IF PH<=DH THEN VPRINT 12*LL,"YOU LOST";W:GOTO 330:REM LOST TO DEALER
50480 IF DH<PH THEN BR=BR+W*2:VPRINT 12*LL,"YOU WON";W:REM WON HAND
50490 GOTO 330
60000 FOR I=.5 TO 11.5
60010 VPRINT I*LL-9,SPC(LL/2+9)
60020 NEXT 
60030 VPRINT -1,
60040 VPRINT -1,"YOU ENDED UP WITH";BR;"DOLLARS."
60050 VPRINT -1,"SINCE YOU STARTED WITH $500, YOU"
60060 IF BR=500 THEN VPRINT -1,"BROKE EVEN. BETTER LUCK NEXT TIME."
60070 IF BR>500 THEN VPRINT -1,"WON";BR-500;"DOLLARS. NICE WORK."
60080 IF BR>500 THEN VPRINT -1,"HOWEVER, IT'S USUALLY PRETTY TOUGH"
60090 IF BR>500 THEN VPRINT -1,"TO COLLECT AROUND HERE."
60100 IF BR<500 THEN VPRINT -1,"LOST";ABS(500-BR);"DOLLARS. SUCH A PITY."
60110 END 
63000 REM EVALUATE HAND J WHERE 0=PLAYER, 1=DEALER, 12=PLAYER'S SPLIT HAND 
63010 SF=0:REM SET OFF SOFT HAND FLAG 
63020 SC=0:REM START AT ZERO 
63030 DD=0:REM SET OFF DOUBLE DOWN
63040 BB=0:REM SET OFF BREAK PAIRS
63050 BJ=0:REM SET OFF BLACKJACK
63060 FOR K=0 TO 10 STEP 2
63070 IF C(J+K,2)=0 THEN 63110
63080 IF C(J+K,1)=0 THEN SF=1:SC=SC+1:GOTO 63110
63090 IF C(J+K,1)<9 THEN SC=SC+C(J+K,1)+1:GOTO 63110
63100 SC=SC+10
63110 NEXT 
63120 IF SC<12 AND SF=1 THEN SC=SC+10 ELSE SF=0
63130 IF SC=10 OR SC=11 THEN DD=1
63140 IF DS=1 THEN DD=1:REM SWITCH TO ALWAYS ALLOW DOUBLE DOWN 
63150 IF C(J+4,2)=1 THEN DD=0
63160 IF C(J,1)=C(J+2,1) AND C(J+4,2)=0 THEN BB=1 ELSE BB=0
63170 IF C(J+4,2)=0 AND SC=21 THEN BJ=1
63180 SC$=STR$(SC)
63190 SC$=MID$(SC$,2,2)
63200 RETURN 
64000 REM BUILD ARRAYS TO DISPLAY CARDS 
64005 RESTORE 64280:GOTO 64060
64010 REM LL IS VIDEO LINE LENGTH 
64015 REM P$ IS PICTURE OF SUIT 
64020 REM V$ IS ASCII VALUE 
64025 REM DK IS CARD USED ARRAY 
64030 REM PS IS PIP POSITION ARRAY 
64035 REM SP IS SPOT REQUIRED ARRAY
64040 REM PC$ IS PICTURE CARD DATA 
64045 REM TL$ IS TOP LINE OF CARD OUTLINE 
64050 REM M1$, M2$ AND M3$ ARE MIDDLE LINE OF CARD OUTLINE 
64055 REM BL$ IS BOTTOM LINE OF CARD OUTLINE 
64060 DIM P$(3),V$(12),DK(51),PS(15),SP(12,9),PC$(2,6)
64065 LL=PEEK(&107):REM GET LINE LENGTH 
64070 FOR I=0 TO 3
64075 READ P
64080 P$(I)=CHR$(P)
64085 READ P
64090 P$(I)=P$(I)+CHR$(P)
64095 NEXT 
64100 TL$=CHR$(&F3)
64105 M1$=CHR$(&F5)
64110 M2$=CHR$(&F5)
64115 M3$=CHR$(&F5)
64120 BL$=CHR$(&F6)
64125 FOR I=1 TO 12
64130 TL$=TL$+CHR$(&FA)
64135 M1$=M1$+CHR$(&95)
64140 M2$=M2$+CHR$(&AA)
64145 M3$=M3$+CHR$(&20)
64150 BL$=BL$+CHR$(&FA)
64155 NEXT 
64160 TL$=TL$+CHR$(&F9)
64165 M1$=M1$+CHR$(&F5)
64170 M2$=M2$+CHR$(&F5)
64175 M3$=M3$+CHR$(&F5)
64180 BL$=BL$+CHR$(&FC)
64185 FOR I=0 TO 12
64190 READ V$(I)
64195 NEXT 
64200 FOR I=1 TO 15
64205 READ L,S
64210 PS(I)=LL*L+S
64215 NEXT 
64220 FOR I=0 TO 9
64225 FOR J=0 TO I
64230 READ SP(I,J)
64235 NEXT J,I
64240 FOR I=0 TO 2
64245 FOR J=0 TO 6
64250 FOR K=0 TO 7
64255 READ D
64260 PC$(I,J)=PC$(I,J)+CHR$(D)
64265 NEXT K,J,I
64270 RETURN 
64275 REM LEFT AND RIGHT HALVES OF PIPS
64280 DATA &E4,&E5,&E6,&E7,&E8,&E9,&EA,&EB
64285 REM ASCII CARD INDEXES
64290 DATA "A ","2 ","3 ","4 ","5 ","6 ","7 ","8 ","9 ","10","J ","Q ","K "
64295 REM ADDRESSES OF PIPS, LINE AND CHARACTER POSITION
64300 DATA 0,2
64305 DATA 0,5
64310 DATA 0,8
64315 DATA 1,5
64320 DATA 2,2
64325 DATA 2,8
64330 DATA 3,2
64335 DATA 3,5
64340 DATA 3,8
64345 DATA 4,2
64350 DATA 4,8
64355 DATA 5,5
64360 DATA 6,2
64365 DATA 6,5
64370 DATA 6,8
64375 REM INDEX OF PIPS TO PRINT FOR EACH CARD
64380 DATA 8
64385 DATA 4,12
64390 DATA 2,8,14
64395 DATA 1,3,13,15
64400 DATA 1,3,8,13,15
64405 DATA 1,3,7,9,13,15
64410 DATA 1,3,4,7,9,13,15
64415 DATA 1,3,4,7,9,12,13,15
64420 DATA 1,3,5,6,8,10,11,13,15
64425 DATA 1,3,4,5,6,10,11,12,13,15
64430 REM PICTURE CARD DATA FIELDS
64435 DATA 181,164,167,164,164,188,164,174
64440 DATA 128,188,164,164,164,183,191,136
64445 DATA 128,184,166,145,150,160,167,191
64450 DATA 128,177,129,132,129,128,143,191
64455 DATA 128,132,153,172,161,139,168,166
64460 DATA 172,154,137,132,160,137,147,165
64465 DATA 132,177,137,189,175,137,142,160
64470 DATA 128,128,139,191,191,191,191,153
64475 DATA 128,128,188,161,136,129,172,191
64480 DATA 128,128,135,128,130,128,128,167
64485 DATA 128,128,128,177,164,161,148,128
64490 DATA 128,133,145,137,173,169,137,149
64495 DATA 128,130,170,170,170,170,170,170
64500 DATA 128,132,149,157,157,157,157,148
64505 DATA 162,159,153,159,187,139,187,148
64510 DATA 128,156,137,136,129,137,163,128
64515 DATA 134,187,128,130,144,128,159,176
64520 DATA 128,191,157,173,173,171,191,128
64525 DATA 153,183,191,191,191,191,190,139
64530 DATA 174,187,174,183,190,181,159,181
64535 DATA 157,149,183,153,139,190,170,171
65000 VPRINT A,TL$:REM DRAW CARD (BACK SIDE)
65005 FOR I=1 TO 8 STEP 2
65010 VPRINT A+LL*I,M1$
65015 VPRINT A+LL*I+LL,M2$
65020 NEXT 
65025 VPRINT A+9*LL,M1$
65030 VPRINT A+10*LL,BL$
65035 RETURN 
65100 VPRINT A,TL$:REM DRAW BLANK CARD 
65105 FOR I=1 TO 9
65110 VPRINT A+LL*I,M3$
65115 NEXT 
65120 VPRINT A+10*LL,BL$
65125 RETURN 
65200 VPRINT A+LL+1,V$(D):REM DRAW PICTURE OF CARD
65205 VPRINT A+9*LL+11,V$(D)
65210 IF D>9 THEN 65240
65215 FOR II=0 TO D
65220 IF SP(D,II)=0 THEN RETURN 
65225 VPRINT A+2*LL+1+PS(SP(D,II)),P$(S)
65230 NEXT 
65235 RETURN 
65240 VPRINT A+2*LL+1,P$(S)
65245 VPRINT A+8*LL+11,P$(S)
65250 FOR II=0 TO 6
65255 VPRINT A+(II+2)*LL+3,PC$(D-10,II)
65260 NEXT 
65265 RETURN 
65300 C(J,0)=INT(RND(1)*4):REM DEAL A CARD
65305 C(J,1)=INT(RND(1)*13)
65310 KY=C(J,0)*13+C(J,1)
65315 IF DK(KY)<>0 THEN 65300 ELSE DK(KY)=1
65320 RETURN 
65325 REM LEAVE POINTERS TO SIMPLIFY RENUMBERING 
65330 GOTO 10000,20000,30000,40000,50000,60000,63000,64000,65000,65100,65200,65300