Blackjack

# Blackjack for the HP-41

Overview

1°)  Standard Rules
2°)  Modified Rules

a)  Program#1
b)  Program#2

Latest Update:
paragraph 2b)

1°)  Standard Rules

-This program allows you to play Blackjack against your HP-41
-The calculator is always the bank.

-Place your bet in X-register and XEQ "BLJ"
-The HP-41 deals 2 cards for you and 1 for itself.
-If you have 21 points with these 2 cards, you win 1.5 times your bet ( unless the HP-41 has also 21 points in 2 cards ), otherwise:

-Press the SIGMA+ key to double your bet ( line 74 ): in this case, you receive one card only.
-Press ENTER^  to hit ( line 65 ): you can receive as many cards as you want ( provided your points do not exceed 21 - otherwise, you lose )
-Press any other key to stand.

-If you have no Blackjack and if your total does not exceed 21,
the HP-41 deals cards for itself until its total exceeds 16

-Then, the 2 hands are compared and your new cash is displayed.

-Place another bet and R/S to continue the game
or simply press R/S without any digit entry to place the same bet.

-Ace = 1 or 11 points
-2 = 2 , 3 = 3 , ....... , 9 = 9 points
-T = J = Q = K = 10 points

-So the possible Blackjacks are  AT  AJ  AQ  AK

Notes:

-"Split" and "Insurance" are not covered by this program.
-A deck of an infinite number of one-suit cards is used.
( In other words, the probability of each card = 1/13 )

Data Registers:                       ( Registers R00 & R01 are to be initialized before executing "BLJ" )

•  R00 = random numbers
•  R01 = your cash                        R02 thru R09: temp

Flags:  F22  F29
Subroutines: /

-Line 118 = one space
-Line 157 = two spaces

 01  LBL "BLJ"   02  FS?C 22   03  STO 09      04  21   05  STO 02   06  STO 03   07  CLA   08  ASTO 04   09  ASTO 05   10  2   11  STO 06   12  CLX   13  STO 07   14  STO 08   15  FIX 0   16  CF 29   17  XEQ 05   18  XEQ 06   19  XEQ 05   20  RCL 07   21  *   22  X#Y?   23  GTO 02   24  CHS   25  STO 02   26  1.5   27  STO 06   28  GTO 04   29  LBL 01   30  RCL 00   31  R-D   32  FRC   33  STO 00 34  9   35  +   36  10^X   37  13   38  MOD   39  X=0?   40  LASTX    41  CLA   42  ARCL X   43  LASTX   44  X=Y?   45  "K"   46  DSE X   47  X=Y?   48  "Q"   49  DSE X   50  X=Y?   51  "J"   52  DSE X   53  X=Y?   54  "T"   55  XY   57  SIGN   58  X=Y?   59  "A"   60  X<>Y   61  ASTO Z   62  CLA   63  RTN   64  LBL 02      65  41   66  GETKEY 67  X#Y?   68  GTO 03   69  XEQ 05   70  CLX   71  XY?   84  CLX   85  -   86  X<0?   87  21   88  STO 02   89  LBL 04   90  XEQ 06   91  RCL 08      92  *   93  X#Y?   94  GTO 09   95  CHS   96  STO 03   97  GTO 10   98  LBL 05   99  XEQ 01 100  ST- 02 101  X=Y? 102  STO 07 103  ARCL 04 104  ARCL Z 105  ASTO 04 106  RCL 02 107  GTO 07 108  LBL 06 109  XEQ 01 110  ST- 03 111  X=Y? 112  STO 08  113  ARCL 05 114  ARCL Z 115  ASTO 05 116  RCL 03    117  LBL 07 118  " " 119  ARCL 04 120  >"/" 121  ARCL 05 122  AVIEW 123  10 124  RTN 125  LBL 08 126  XEQ 06 127  LBL 09 128  RCL 08 129  * 130  X>Y? 131  CLX 132  - 133  21 134  RCL 02 135  X#Y? 136  X<0? 137  GTO 10 138  4 139  R^ 140  X>Y? 141  GTO 08 142  X<0? 143  R^ 144  STO 03  145  LBL 10 146  RCL 03 147  RCL 02    148  - 149  X#0? 150  SIGN 151  RCL 06 152  * 153  RCL 09 154  * 155  ST+ 01 156  RCL 01 157  "  " 158  X>0? 159  >"+" 160  ARCL 01 161  >" \$" 162  FIX 4 163  SF 29 164  AVIEW 165  END

( 251 bytes / SIZE 010 )

 STACK INPUT OUTPUT X / Cash

Example:      7  STO 00     CLX  STO 01

-Place you bet, for instance  12000\$ , in X-register

12000    XEQ "BLJ"    the HP-41 displays:

" 6/"
" 6/5"
" 62/5"

-Press  ENTER^ to hit, you get:      " 62A/5"

-You have 19 points, so you stand: press any key except ENTER^  and  SIGMA+

" 62A/5K"              the HP-41 continues until its points exceed 16
" 62A/5KK"          Busted !  HP-41 exceeds 21: you win
"  +12000 \$"

-----------------------------------------------------------------------------------------------------

-Simply press R/S to continue with the same bet:

" 5/"
" 5/3"
" 56/3"

-Press the SIGMA+ key to double your bet:

" 56A/3"
" 56A/3J"
" 56A/3JA"
" 56A/3JA9"           Busted again: you win 24000 \$ and your cash is:
"  +36000 \$"

Remarks:

-Do not store PI in register R00, the "random" numbers wouldn't be randomized at all...

-The display is very minimalist!
-You could for example:

add    " TIE-PUSH"  X=Y?   AVIEW   after line  147
add    " BLACKJACK"  AVIEW  after line 96  and after line 27

-One register only is used to store each hand so the HP-41 will not display all the cards if you ( or the HP-41 ) have more than 6 cards.
-To overcome this limitation:

add  ARCL 11 after line 121
add  ARCL 10 after line 119
replace lines  113 to 115 by  ARCL 05  ARCL 11  ARCL Z  ASTO 05  ASHF  ASTO 11
replace lines  103 to 105 by  ARCL 04  ARCL 10  ARCL Z  ASTO 04  ASHF  ASTO 10
add  ASTO 10  ASTO 11  after line 09

2°)  Modified Rules

a) Program#1

-If flag F07 is clear, the rules are identical to those used in "BLJ"
-If flag F07 is set, there is no BUST.
-The winner is the one who is the closest to 21 ( for example, you win with  "K2Q"  against  "T8" ).

Data Registers:           •  R00 = random numbers              ( Registers R00 & R01 are to be initialized before executing "BLJ" )

R02 thru R09: temp

Flags:  F29  F07  F08  F09

CF 07 = Standard rules
SF 07 = No Bust

Subroutines:  /

 01  LBL "BLJ"   02  CF 08   03  CF 09   04  21   05  STO 02      06  STO 03   07  CLA   08  ASTO 04   09  ASTO 05   10  2   11  STO 06   12  CLX   13  STO 07   14  STO 08   15  FIX 0   16  CF 29   17  XEQ 05   18  XEQ 06   19  XEQ 05   20  RCL 07   21  *   22  X#Y?   23  GTO 02   24  CHS   25  STO 02   26  1.5   27  STO 06   28  SF 08   29  GTO 04   30  LBL 01   31  RCL 00   32  R-D   33  FRC 34  STO 00      35  13   36  *   37  INT   38  1   39  +   40  CLA   41  ARCL X   42  13   43  X=Y?   44  "K"   45  DSE X   46  X=Y?   47  "Q"   48  DSE X   49  X=Y?   50  "J"   51  DSE X   52  X=Y?   53  "T"   54  XY   56  SIGN   57  X=Y?   58  "A"   59  X<>Y   60  ASTO Z   61  CLA   62  RTN   63  LBL 02   64  41   65  GETKEY   66  X#Y? 67  GTO 03   68  XEQ 05   69  CLX   70  XY?   83  0   84  RCL 07   85  *   86  ST- 02   87  RCL 02   88  X<0?   89  FS? 07   90  FS? 30   91  21   92  STO 02   93  LBL 04   94  XEQ 06   95  RCL 08   96  *   97  X#Y?   98  GTO 09   99  CHS 100  STO 03 101  1.5 102  FS? 07 103  STO 06 104  SF 09 105  GTO 10 106  LBL 05 107  XEQ 01 108  ST- 02 109  X=Y? 110  STO 07    111  ARCL 04 112  ARCL Z 113  ASTO 04 114  RCL 02 115  GTO 07 116  LBL 06 117  XEQ 01 118  ST- 03 119  X=Y? 120  STO 08 121  ARCL 05 122  ARCL Z 123  ASTO 05 124  RCL 03 125  LBL 07 126  " " 127  ARCL 04 128  >"/" 129  ARCL 05 130  AVIEW 131  10 132  RTN 133  LBL 08 134  XEQ 06 135  LBL 09 136  3 137  RCL 03 138  STO 09 139  FS? 07 140  + 141  10 142  X>Y? 143  0 144  RCL 08    145  * 146  ST- 09 147  21 148  RCL 02 149  X#Y? 150  FS? 08 151  GTO 10 152  4 153  FS? 07 154  DSE X 155  RCL 09 156  X>Y? 157  GTO 08 158  X<0? 159  FS? 07 160  FS? 30 161  R^ 162  STO 03 163  LBL 10 164  RCL 03 165  FS? 07 166  ABS 167  FS? 09 168  LASTX 169  RCL 02 170  FS? 07 171  FS? 08 172  FS? 30 173  ABS 174  - 175  X#0? 176  SIGN 177  RCL 06    178  * 179  RCL 00 180  7 181  / 182  4 183  + 184  10^X 185  * 186  ST+ 01 187  RCL 01 188  "  " 189  X>0? 190  >"+" 191  ARCL 01 192  >" \$" 193  FIX 4 194  SF 29 195  AVIEW 196  END

( 307 bytes / SIZE 010 )

 STACK INPUT OUTPUT X / Cash

Notes:

-Here, the bets are randomly choosen by the HP-41 ( lines 179 to 184 ) between  10000 \$ and ~ 13900 \$
-If you want to place your own bets, replace these lines by  RCL 10  and add   FS?C 22   STO 10   after line 01.

-When F07 is set, the HP-41 deals cards for itself until its total exceeds 17 ( lines 153-154 ).
-And if the calculator has blackjack, you lose 1.5 time your bet, unless you have blacjack too ( lines 101 to 103 ).

b) Program#2

-This version only employs the modified rules: no bust.
-"AA" may give 22 points.
-The HP41 deals cards for itself until its total exceeds the player's total ( lines 139-140-141 )

Data Registers:           •  R00 = random numbers              ( Registers R00 & R01 are to be initialized before executing "BLJ" )

R02 thru R10: temp

Flags:  F29  F09  F10
Subroutines:  /

-Line 87 = TEXT0 , it may be replaced by any NOP instruction:  STO X  for example.
-Line 08 = STO d  is also a synthetic function: it may be replaced by  CF 09  CF 10  CF 29

 01 LBL "BLJ"  02 21  03 STO 02  04 STO 03          05 CLX  06 STO 08          07 STO 09  08 STO d  09 SIGN  10 STO 10  11 CLA  12 ASTO 04  13 ASTO 05  14 FIX 0  15 XEQ 04  16 XEQ 05  17 XEQ 04  18 RCL 09  19 *  20 X#Y?  21 GTO 02  22 CHS  23 STO 07  24 SF 09  25 GTO 06  26 LBL 00  27 ABS  28 ISG Y  29 LBL 10 30 DSE Y  31 X<0?  32 RTN  33 LASTX  34 10  35 -  36 ABS  37 XY  39 RDN  40 GTO 10  41 LBL 01  42 RCL 00          43 R-D  44 FRC  45 STO 00  46 13  47 *  48 INT  49 1  50 +  51 CLA  52 ARCL X  53 13  54 X=Y?  55 "K"  56 DSE X  57 X=Y?  58 "Q" 59 DSE X  60 X=Y?  61 "J"  62 DSE X  63 X=Y?  64 "T"  65 XY  67 SIGN  68 X=Y?  69 "A"  70 X<>Y  71 ASTO Z  72 CLA  73 RTN  74 LBL 02        75 41  76 GETKEY  77 X#Y?  78 GTO 03  79 XEQ 04  80 CLX  81 X"/" 127 ARCL 04 128 AVIEW 129 10 130 RTN 131 LBL 07 132 RCL 02         133 X<0? 134 GTO 09 135 XEQ 05 136 LBL 08 137 RCL 08 138 RCL 02 139 XEQ 00 140 STO 06 141 RCL 07 142 X0? 169 >"+" 170 ARCL 01 171 >" \$" 172 FIX 4 173 AVIEW 174 END

( 272 bytes / SIZE 011 )

 STACK INPUT OUTPUT X / Cash

Notes:

-Here, the bets are randomly choosen by the HP-41 ( lines 157 to 162 ) between  10000 \$ and ~ 13900 \$
-If you want to place your own bets, replace these lines by  RCL 11  and add   FS?C 22   STO 11   after line 01.

-A deck of an infinite number of one-suit cards is also used.
( In other words, the probability of each card = 1/13 )

-Press the SIGMA+ key to double the bet: in this case, you receive one card only.
-Press ENTER^  to hit: you can receive as many cards as you want ( until your points reach or exceed 21 )
-Press any other key to stand.