hp41programs

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  X<Y?
  56  X<>Y
  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  X<Y?
  72  GTO 02
  73  LBL 03
  74  11
  75  X#Y?
  76  DSE 06
  77  X=Y?
  78  XEQ 05
  79  RCL 02
  80  10
  81  RCL 07 
  82  *
  83  X>Y?
  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" )
                                      •  R01 = your cash

                                          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  X<Y?
  55  X<>Y
  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  X<Y?
  71  GTO 02
  72  LBL 03
  73  11
  74  X#Y?
  75  DSE 06
  76  X=Y?
  77  XEQ 05
  78  RCL 02   
  79  FS? 07
  80  ST+ X
  81  10
  82  X>Y?
  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" )
                                      •  R01 = your cash

                                         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 X<Y?
 38 X<>Y
 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 X<Y?
 66 X<>Y
 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<Y?
 82 GTO 02
 83 LBL 03        
 84 11
 85 X=Y?
 86 ISG 10
 87 ""
 88 X=Y?
 89 XEQ 04
 90 RCL 09
 91 RCL 03
 92 XEQ 00
 93 STO 07
 94 LBL 06
 95 XEQ 05
 96 RCL 08
 97 *
 98 X#Y?
 99 GTO 08
100 CHS
101 STO 06        
102 SF 10
103 GTO 09
104 LBL 04
105 XEQ 01
106 ST- 03
107 X=Y?
108 ST+ 09
109 ARCL 05
110 ARCL Z
111 ASTO 05
112 RCL 03
113 GTO 06
114 LBL 05
115 XEQ 01
116 ST- 02
117 X=Y?
118 ST+ 08
119 ARCL 04
120 ARCL Z
121 ASTO 04
122 RCL 02
123 LBL 06
124 " "
125 ARCL 05
126 >"/"
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 X<Y?
143 FS? 09
144 FS? 30
145 GTO 07
146 LBL 09
147 1.5
148 RCL 06
149 RCL 07
150 -
151 X#0?
152 SIGN
153 FC? 09
154 FS? 10
155 *
156 RCL 10
157 *
158 RCL 00        
159 7
160 /
161 4
162 +
163 10^X
164 *
165 ST+ 01
166 RCL 01
167 "  "
168 X>0?
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.