Poker for the HP-41
Overview
1°) Playing against your HP-41
2°) Playing with your HP-41 ( 2 Programs
)
3°) Texas Hold'em Poker
4°) Synthesis of the 3 programs ( HP-41CX
)
a) 3 M-Code Routines:
TRI MV CARD
b) "POKER+"
c) 1 M-Code Routine: $
d) "POKER"
-To simplify the programs, we use a deck of an infinite number of one-suit
cards.
-In other words, the probability of each card is 1/13,
and therefore, the order of the combinations is modified like this:
combinations | probability | ranking |
high card | 41% | 0 |
1 pair | 46% | 1 |
2 pairs | 7% | 2 |
3 of a kind | 4.6% | 3 |
full house | 0.4% | 4 |
straight* | 0.3% | 5 |
4 of a kind | 0.2% | 6 |
5 of a kind | 0.004% | 7 |
*Here, a straight is always a straight-flush!
The lowest one is 2345A and the highest one is TJQKA
1°) Playing against your HP-41
-The HP-41 is always the dealer.
0- A bet of 1000$ is placed automatically ( line 38 )
1- The calculator deals 5 cards one by one to the player and to itself,
the player's cards are gradually shown and
the HP-41's cards are displayed as starbursts,
then the cards are sorted out in increasing
order, displayed again, and the program stops.
2- At this step, key in a stake ( of about 1000$ or 2000$ for instance
) and press R/S
( if the player simply presses R/S the HP-41 wins )
3- Then, the HP-41 can:
a)
fold ( the player wins and the new bank of the player is displayed )
b)
match the player's bet.
c)
make a higher bid ( which is displayed as " + .... $" )
In this case, the player can, in his turn:
a) fold ( press 0 R/S
)
b) match the HP-41's bet ( press ENTER R/S
)
c) make a higher bid ( key in a number greater than the HP-41's bid
and R/S ) ... etc ...
4- At the end of the stakes, the player's cards are displayed again and the program stops.
-To exchange the
cards number 1, 2, 5 ( if your hand is 45QQA for example ) press
125 R/S
-If you have a complete
hand, simply press R/S
5-The HP-41 displays the remaining cards of the player and as many
starbursts as its own remaining cards.
6-About 12 seconds later, the new hand of the player is displayed
( followed by / and 5 starbursts ) and the program stops.
7-The second round of betting takes place here just like in steps
2 and 3
( To fold immediately, simply press R/S ).
8-If the final bet or raise is not called, the new bank of the player
is displayed, but the calculator's cards remain unknown.
Otherwise, the HP-41 displayed its own cards one by one
and then it displays the new bank of the player.
9-Press R/S to continue the game.
Remarks:
1-If the player exchanges 3; 2; 1; 0 cards, the HP-41 will fold
unless it has ( at least )
one pair; three of a kind; two pairs; a full house
( respectively ). ( lines 183 to 191 )
2-This strategy is very simple, so don't play too aggressively against
your HP-41 ...
( but remember that the HP-41 can bluff in
the second round of betting ( lines 177 to 182 ) ).
3-Don't disturb rashly the stack during the raises.
4-Digit entry lines are very slow. Therefore, execution time can
be saved by storing these numbers in data registers:
for instance replace line 211 by RCL
41 and key in 1.015008 STO 41 just after line 27 ... etc ...
Data Registers:
R00 thru R40 are used. R00 and R12 must be initialized before executing "POKER"
R00 = random numbers
R12 = the bank of the player ( the cash )
R01 thru R05 are the HP-41's cards R06 thru R11 are used
for temporary data storage
R15 thru R19 are the player's cards R20 thru R22 ------------------------------------
R10 is also used for the HP-41's raises.
R08 and R22 are also used to store the values of both hands.
R21 is also used to store the player's hand.
R23 = /¤¤¤¤¤
R24 = /¤¤¤¤
R25 = /¤¤¤
( ¤ symbolizes the starburst, the hidden cards of the HP-41 )
R26 = /¤¤
R27 = /¤
R28 = the "2s"
R29 = the "3s"
....................
R39 = the "Ks"
R40 = the "As"
Flags: F06
Subroutines: none.
Analysis of the program:
-Lines 02 to 27 initialize the registers containing the cards ( 2 , 3 ,
... , 9 , T , J , Q , K , A )
and the hidden cards of the calculator (
displayed as starbursts )
They are executed only once.
-Lines 28 to 59 place the initial bet ( 1000$ line 38 ) and deal the
cards one by one
-Line 60 ( XEQ 09 ) sorts the cards, calculates the value of the HP-41's
hand and stores in R10
the maximum amount of money that the HP-41
will accept.
-Lines 61 to 68 modify this sum when the calculator has 4 cards in sequence
( like 6789K ) which can lead to a straight.
In such a case, the HP-41 will raise the
bets just as if it had two pairs.
-Lines 70 to 94 concern the bettings:
if the player keys in 0 R/S ( or simply
R/S at the first time ) the HP-41 wins the pot.
if the player keys in ENTER^
R/S the raises are called.
if the player keys in a bet and
R/S there are 3 possibilities:
If the total amount of the raises is higher than the number in R10 the player
wins the pot.
If the total amount of the raises is smaller than R10 but greater than 0.4*R10,
the HP-41 is in.
If the total amount of the raises is smaller than 0.4*R10, the HP-41 makes
a higher raise ... etc ...
( This raise is choosen randomly but the total amount of the previous bets
is also taken into account )
-Lines 104 to 112 are the showdown: the calculator displays its cards one
by one.
-Lines 113 to 137 display the player's bank.
-Line 138 returns to line 28
-Lines 139 to 175 display the remaining cards of the player ( and as many
starbursts as the remaining cards of the HP-41 ) after discarding.
-Line 176 executes the LBL 09 ( see below )
-Lines 177 to 182 are the calculator's bluff ( only in the second round
of betting ):
The number in R10 is divided by a random
real number r ( 0 < r < 1 ).
-Lines 183 to 191 are the HP-41's strategy ( as explained in the 1st remark
above )
-Lines 192 to 193 return to line 70 ( the betting )
-Lines 194 to 209 calculate and store in R10 the maximum amount of money
that the HP-41 will accept.
This number suits to bets of a few
thousand ( or ten thousand ) dollars.
-Lines 210 to 222 replace the discarded cards by new ones.
-Lines 223 to 263 sort out the cards in increasing order ( in R01 to R05
)
-Lines 269 to 288 calculate the value of the hand in R08
The result is also used to obtain the number
in R10 which is proportional to the square of R08.
The number 37 ( line 271 ) can be changed
but must not be too small ( not smaller than 16 ).
Otherwise, the order of the different hands
could become wrong.
-Lines 289 to 300 deal the cards. The random number generator used by this
LBL 08
is quite simple: R-D FRC
It's perhaps not a perfect one but it's good
enough for a game.
-Lines 301 to 454 concern the evaluation of the hand, the cards to be exchaned
...etc...
The details are somewhat complex, but it
works well!
For instance, if the HP-41's hand is 3377K we have: R01 =
R02 = 29 (the "3s") ; R03 = R04 = 33 (the"7s") ; R05 = 39 (the "K").
R06 = 5 because the HP-41 will exchange its 5th
card ( the King ) after the first round of betting.
R07 = 2 = the ranking of the hand: two pairs.
R08 = 33 ; R09 = 29 ; R10 = 39 ; R11 = 29
Then, the value of the hand is obtained by 375*R07+374*R08+373*R09+372*R10+37*R11+R01
= 202058657 and stored in R08 ( line 287 ).
( In this example, R11 and R01 could be replaced by zero in
the above formula, but it's not necessary ).
This number characterizes the hand and allows to compare the HP-41's
hand with the player's hand.
(R08/E6)2 = 40827.7 $ is then stored in register
R10 ( line 210 ).
Program Listing:
- In this listing, the "append" character is replaced by "~"
- The functions XTOA ATOX REGSWAP of the X-Functions module
are used.
- CLRGX is also used, but if you don't have an HP-41 CX, replace lines 154
to 157 by
X<=0?
GTO 07
0
STO IND Y
RDN
GTO 03
LBL 07
-Lines 138-193 are three-byte GTOs
01 LBL "POKER" 02 27 03 "A" 04 ASTO 40 05 35 06 "K" 07 ASTO 39 08 1 09 "Q" 10 ASTO 38 11 9 12 "J" 13 ASTO 37 14 "T" 15 ASTO 36 16 "/" 17 LBL 01 18 STO IND Z 19 R^ 20 XTOA 21 ASTO IND X 22 RDN 23 DSE T 24 DSE Z 25 DSE X 26 X>Y? 27 GTO 01 28 LBL 12 29 CLX 30 STO 20 31 CF 29 32 FIX 0 33 SF 06 34 5 35 STO 06 36 19 37 STO 07 38 E3 39 STO 14 40 27 41 CHS 42 STO 13 43 CLA 44 ASTO 21 45 LBL 02 46 CLA 47 ARCL 21 48 RCL 07 49 XEQ 08 50 ARCL IND X 51 ASTO 21 52 RCL 06 53 XEQ 08 54 ARCL IND 13 55 AVIEW 56 ISG 13 57 DSE 07 58 DSE 06 59 GTO 02 60 XEQ 09 61 RCL 07 62 X#0? 63 9 64 RCL 06 65 + 66 7 67 X>Y? 68 ST* 10 69 CLST 70 LBL 14 71 PROMPT 72 X=0? 73 GTO 07 74 ST+ 14 75 X=Y? 76 GTO 10 |
77 RCL 14 78 RCL 10 79 X<Y? 80 GTO 06 81 .4 82 * 83 X<=Y? 84 GTO 10 85 * 86 SQRT 87 RCL 00 88 R-D 89 FRC 90 STO 00 91 * 92 " +" 93 ARCL X 94 GTO 14 95 LBL 10 96 CLA 97 ARCL 21 98 RCL 13 99 X<0? 100 GTO 10 101 5 102 >"/" 103 1 104 LBL 04 105 RCL IND X 106 ARCL IND X 107 COS 108 AVIEW 109 SIGN 110 + 111 X<=Y? 112 GTO 04 113 RCL 22 114 LBL 07 115 RCL 08 116 - 117 GTO 07 118 LBL 06 119 RDN 120 - 121 - 122 STO 14 123 LBL 07 124 X#0? 125 SIGN 126 RCL 14 127 * 128 ST+ 12 129 RCL 12 130 " C=" 131 X>0? 132 >"+" 133 ARCL 12 134 >" $" 135 FIX 4 136 SF 29 137 PROMPT 138 GTO 12 139 LBL 10 140 ARCL 23 141 CLX 142 PROMPT 143 STO 20 144 CLA 145 X#0? 146 ARCL X 147 ALENG 148 ST+ X 149 STO 13 150 LBL 03 151 ATOX 152 34 |
153 - 154 X>0? 155 CLRGX 156 X>0? 157 GTO 03 158 3 159 E^X-1 160 15 161 LBL 13 162 RCL IND X 163 X#0? 164 ARCL IND X 165 SIGN 166 + 167 X<=Y? 168 GTO 13 169 RCL 06 170 DSE X 171 LOG 172 24 173 + 174 ARCL IND X 175 AVIEW 176 XEQ 09 177 SIGN 178 RCL 00 179 X^2 180 - 181 SQRT 182 ST/ 10 183 PI 184 PI 185 RCL 13 186 - 187 X<0? 188 + 189 RCL 07 190 X<=Y? 191 STO 10 192 CLST 193 GTO 14 194 LBL 09 195 XEQ 10 196 XEQ 10 197 CLA 198 ARCL IND 15 199 ARCL IND 16 200 ARCL IND 17 201 ARCL IND 18 202 ARCL IND 19 203 ASTO 21 204 ARCL 23 205 E6 206 / 207 X^2 208 STO 10 209 RTN 210 LBL 10 211 1.015008 212 REGSWAP 213 LBL 05 214 RCL 06 215 INT 216 10 217 ST/ 06 218 MOD 219 X#0? 220 XEQ 08 221 X#0? 222 GTO 05 223 STO 06 224 RCL 05 225 RCL 04 226 X>Y? 227 X<>Y 228 RCL 03 |
229 X>Y? 230 X<>Y 231 RCL 02 232 X<Y? 233 X<>Y 234 X<> 01 235 X>Y? 236 X<>Y 237 X<> 01 238 X>Y? 239 X<>Y 240 R^ 241 X>Y? 242 X<>Y 243 RDN 244 X>Y? 245 X<>Y 246 RDN 247 X<Y? 248 X<>Y 249 STO 05 250 STO 08 251 RDN 252 X>Y? 253 X<>Y 254 STO 02 255 STO 11 256 RDN 257 X>Y? 258 X<>Y 259 STO 03 260 STO 10 261 X<>Y 262 STO 04 263 STO 09 264 FS?C 06 265 RTN 266 4 267 STO 07 268 XEQ 10 269 RCL 08 270 RCL 07 271 37 272 STO T 273 * 274 + 275 * 276 RCL 09 277 + 278 * 279 RCL 10 280 + 281 * 282 RCL 11 283 + 284 * 285 RCL 01 286 + 287 STO 08 288 RTN 289 LBL 08 290 RCL 00 291 R-D 292 FRC 293 STO 00 294 13 295 * 296 28 297 + 298 INT 299 STO IND Y 300 RTN 301 LBL 10 302 RCL 01 303 RCL 02 304 X=Y? |
305 GTO 08 306 RCL 03 307 X=Y? 308 GTO 06 309 RCL 04 310 X=Y? 311 GTO 07 312 RCL 05 313 X=Y? 314 GTO 11 315 RCL 01 316 - 317 5 318 STO 07 319 X>Y? 320 RTN 321 RCL 04 322 LAST X 323 - 324 PI 325 X<Y? 326 GTO 09 327 R^ 328 7 329 - 330 RCL 07 331 X#Y? 332 GTO 10 333 RCL 01 334 STO 08 335 RTN 336 LBL 09 337 RCL 05 338 RCL 02 339 - 340 X>Y? 341 1234 342 X<Y? 343 SIGN 344 LBL 10 345 STO 06 346 CLX 347 STO 07 348 RTN 349 LBL 11 350 123 351 GTO 09 352 LBL 06 353 RCL 04 354 X=Y? 355 GTO 10 356 RCL 05 357 X=Y? 358 SIGN 359 X<Y? 360 GTO 11 361 STO 09 362 RDN 363 STO 10 364 145 365 GTO 09 366 LBL 07 367 RCL 05 368 X=Y? 369 12 370 X<Y? 371 GTO 07 372 STO 09 373 125 374 GTO 09 375 LBL 08 376 RCL 03 377 X=Y? 378 GTO 06 379 RCL 04 380 X=Y? |
381 GTO 08 382 RCL 05 383 X=Y? 384 3 385 X<Y? 386 GTO 11 387 STO 09 388 RDN 389 STO 10 390 RDN 391 STO 11 392 345 393 LBL 09 394 STO 06 395 X<> Z 396 STO 08 397 SIGN 398 STO 07 399 RTN 400 LBL 10 401 STO 08 402 RCL 05 403 X=Y? 404 SIGN 405 X<Y? 406 GTO 09 407 STO 09 408 15 409 GTO 07 410 LBL 06 411 STO 08 412 RCL 04 413 X=Y? 414 GTO 10 415 RCL 05 416 STO 09 417 X=Y? 418 RTN 419 X<>Y 420 STO 10 421 45 422 LBL 07 423 STO 06 424 3 425 STO 07 426 RTN 427 LBL 08 428 STO 08 429 RCL 05 430 X=Y? 431 RTN 432 STO 10 433 5 434 LBL 11 435 STO 06 436 RCL 02 437 STO 09 438 2 439 STO 07 440 RTN 441 LBL 10 442 7 443 STO 07 444 CLX 445 RCL 05 446 X=Y? 447 RTN 448 STO 09 449 5 450 LBL 09 451 STO 06 452 6 453 STO 07 454 END |
( 629 bytes / SIZE 041 )
STACK | INPUTS | OUTPUTS |
X | / | / |
Example:
N.B: The first execution of the program is very slow because the XEQs and GTOs are not yet compiled.
0-Registers R00 and R12 are to be initialized, for instance:
9 STO
00 ( avoid a seed like PI which would be converted into an integer
by the R-D function )
40000 STO 12
THE DISPLAY COMMENTS
1- XEQ "POKER"
T/¤
( ¤ symbolizes the starburst )
T6/¤¤
T64/¤¤¤
T64T/¤¤¤¤
T64T4/¤¤¤¤¤
the player has two pairs
446TT/¤¤¤¤¤
the cards are sorted.
2-The 1st round of betting:
2000 R/S
+1460
the HP-41 makes a higher bid
a new raise
4000 R/S
+2557
idem
we are in
ENTER^ R/S
446TT/¤¤¤¤¤
3-We exchange the "6" ( the 3rd card ) 3 R/S
44TT/¤¤¤¤
the HP-41 has 2 pairs or a sequence of 4 cards.
and ( 10 seconds later )
44TTK/¤¤¤¤¤
4-The second round of betting:
3000 R/S
+22441
a raise
to match the HP-41's raise: ENTER^
R/S
44TTK/2
44TTK/22
44TTK/22K
44TTK/22KA
44TTK/22KAA The HP-41 wins!
and the cash is displayed: C = +5002 $
----------------------------------------------------------------------------------------------------------------------------------
1'-Let's continue, R/S
J/¤
J3/¤¤
J33/¤¤¤
J339/¤¤¤¤
J3395/¤¤¤¤¤
the player
has one pair
3359J/¤¤¤¤¤
2'-1st round of betting 2000 R/S 3359J/¤¤¤¤¤ the HP-41 is in
3'-We exchange the last 3 cards: 345 R/S
33/¤
the HP-41 has only a high card.
and, (13 seconds later ), three of
a kind:
3335K/¤¤¤¤¤
4'-2nd round of betting
3000 R/S
+4783
a raise
6000 R/S
3335K/5
the HP-41 matches the bet
3335K/57
3335K/579
3335K/579K
3335K/579KK the player wins
the pot.
and the cash is C = +17002 $
----------------------------------------------------------------------------------------------------------------------------------
1"-One more time:
R/S
K/¤
K6/¤¤
K65/¤¤¤
K656/¤¤¤¤
K6567/¤¤¤¤¤
one pair:
5667K/¤¤¤¤¤
2"-1st round of betting 2000 R/S 5667K/¤¤¤¤¤ the HP-41 is in
3"-We exchange the 1st, 4th and 5th cards:
145 R/S
66/¤
theHP-41 has a high card
( 13 seconds later )
668TA/¤¤¤¤¤
4"-2nd round of betting 2000 R/S +12131 the HP-41 makes a higher bid!
a) if we fold:
0 R/S the cash:
C = +12003 $
b) if we want to see ENTER^ R/S
668TA/3
668TA/3J
668TA/3JJ
668TA/3JJJ
668TA/3JJJA
three of a kind ( it was not a bluff! )
and the cash:
C = -128 $
the player is in debt ...
2°) Playing with your HP-41
-The program may be simplified if your HP-41 becomes a one-arm bandit:
-Your calculator deals 5 cards,
then you discard from 0 to 5 cards
the HP-41 replaces these cards and
-If you have 5 of a kind , you win 21 times your bet ( line
256 )
-If you have 4 of a kind , you win 13 times your bet ( line
263 )
-If you have a straight , you win 8
times your bet ( line 175 )
-If you have a full-house , you win 5 times your bet
( line 158 )
-If you have 3 of a kind , you win 3 times your bet
( line 244 )
-If you have two pairs , you win 2 times
your bet ( line 252 )
-If you have 1 pair of Jacks ( or higher ) you win 1 time
your bet ( lines 198 &
228
-If you have 1 pair of 7s to 1 pair of 10s your cash is unchanged
and
-If you have 1 pair of 2s to 1 pair of 6s you lose 1
time your bet lines 68 thru
79 )
-If you have a high card you lose 5 times your bet ( line 192 )
-All these values are quite arbitrary and may be modified as you like.
Data Registers: • R00 = random numbers ( Registers R00 & R06 are to be initialized before executing "POKER1" )
• R06 = your cash
R01 to R05 = your 5 cards ; R07 thru R21: temp
Flags: /
Subroutines: /
-2 CX-functions are used ( GETKEYX and CLRGX ) but if you don't have an HP-41CX, replace lines 36 thru 45 by
STOP
10
-
/
LBL 03
MOD
0
GTO 03
Press 123 R/S if, for instance, you want to discard the
cards n°1-2-3 ( from the left )
ENTER^ ST-
Y
STO IND Y LBL 10
Simply press R/S if you have already a complete hand
X=0?
6
X<> Z
CF 22
GTO 10
X<>Y
10
-Line 101 is a three-byte GTO 12
01 LBL "POKER1" 02 "A" 03 ASTO 21 04 "K" 05 ASTO 20 06 "Q" 07 ASTO 19 08 "J" 09 ASTO 18 10 16 11 "T" 12 ASTO 17 13 9 14 LBL 01 15 STO IND Y 16 DSE Y 17 DSE X 18 GTO 01 19 LBL 12 20 FIX 0 21 CF 29 22 " " 23 ASTO 08 24 5 25 LBL 02 26 CLA 27 ARCL 08 28 ENTER^ 29 XEQ 14 30 ARCL IND X 31 ASTO 08 32 X<>Y 33 AVIEW 34 DSE X 35 GTO 02 36 LBL 03 37 54 38 GETKEYX 39 X=0? 40 GTO 10 41 LASTX 42 - 43 CLRGX 44 GTO 03 45 LBL 10 |
46 " " 47 5 48 LBL 13 49 RCL IND X 50 X#0? 51 ARCL IND X 52 X<>Y 53 DSE X 54 GTO 13 55 AVIEW 56 5 57 XEQ 05 58 " " 59 5 60 LBL 04 61 RCL IND X 62 ARCL IND X 63 COS 64 AVIEW 65 X<>Y 66 DSE X 67 GTO 04 68 RCL 07 69 X#0? 70 GTO 09 71 17 72 RCL 08 73 X>Y? 74 ISG 07 75 INT 76 14 77 X>Y? 78 DSE 07 79 LBL 09 80 RCL 00 81 FRC 82 4 83 / 84 8 85 + 86 E^X 87 RCL 07 88 * 89 ST+ 06 90 RCL 06 |
91 " " 92 X>0? 93 >"+" 94 ARCL 06 95 >" $" 96 FIX 4 97 SF 29 98 AVIEW 99 CLA 100 STOP 101 GTO 12 102 LBL 14 103 CLX 104 RCL 00 105 R-D 106 13 107 MOD 108 STO 00 109 9 110 + 111 INT 112 STO IND Y 113 RTN 114 LBL 05 115 RCL IND X 116 X=0? 117 XEQ 14 118 X<>Y 119 DSE X 120 GTO 05 121 RCL 01 122 RCL 02 123 X>Y? 124 X<>Y 125 RCL 03 126 X>Y? 127 X<>Y 128 RCL 04 129 X<Y? 130 X<>Y 131 X<> 05 132 X>Y? 133 X<>Y 134 X<> 05 135 X>Y? |
136 X<>Y 137 R^ 138 X>Y? 139 X<>Y 140 RDN 141 X>Y? 142 X<>Y 143 RDN 144 X<Y? 145 X<>Y 146 STO 01 147 STO 08 148 RDN 149 X>Y? 150 X<>Y 151 STO 04 152 RDN 153 X>Y? 154 X<>Y 155 STO 03 156 X<>Y 157 STO 02 158 5 159 STO 07 160 RCL 05 161 RCL 04 162 X=Y? 163 GTO 08 164 RCL 03 165 X=Y? 166 GTO 06 167 RCL 02 168 X=Y? 169 GTO 07 170 RCL 01 171 X=Y? 172 GTO 11 173 RCL 05 174 - 175 8 176 STO 07 177 CLX 178 5 179 X>Y? 180 RTN |
181 RCL 02 182 LASTX 183 - 184 PI 185 X<Y? 186 GTO 10 187 R^ 188 12 189 X=Y? 190 RTN 191 LBL 10 192 5 193 CHS 194 STO 07 195 RTN 196 LBL 11 197 STO 08 198 CLX 199 STO 07 200 RTN 201 LBL 06 202 RCL 02 203 X=Y? 204 GTO 10 205 RCL 01 206 X=Y? 207 GTO 11 208 GTO 09 209 LBL 07 210 RCL 01 211 X=Y? 212 GTO 07 213 GTO 09 214 LBL 08 215 RCL 03 216 X=Y? 217 GTO 06 218 RCL 02 219 X=Y? 220 GTO 08 221 RCL 01 222 X=Y? 223 GTO 11 224 RDN 225 LBL 09 |
226 X<> Z 227 STO 08 228 CLX 229 STO 07 230 RTN 231 LBL 10 232 RCL 01 233 X=Y? 234 GTO 09 235 GTO 07 236 LBL 06 237 RCL 02 238 X=Y? 239 GTO 10 240 RCL 01 241 X=Y? 242 RTN 243 LBL 07 244 3 245 STO 07 246 RTN 247 LBL 08 248 RCL 01 249 X=Y? 250 RTN 251 LBL 11 252 2 253 STO 07 254 RTN 255 LBL 10 256 21 257 STO 07 258 CLX 259 RCL 01 260 X=Y? 261 RTN 262 LBL 09 263 13 264 STO 07 265 END |
( 366 bytes / SIZE 022 )
STACK | INPUTS | OUTPUTS |
X | / | / |
Example: 3 STO 00
CLX STO 06
XEQ "POKER1" the HP-41 displays successively:
" 4"
" 4J"
" 4J9"
" 4J9J"
" 4J9J4"
you have 2 pairs
-If you want to discard the "9"
( the 3rd card ) press 3 ENTER^
" 4JJ4"
the remaining cards
-The HP-41 replaces this card, sorts the 5 cards and displays
" 4"
" 44"
" 445"
" 445J"
" 445JJ"
still 2 pairs
followed by
" +6509 $" you have
6509$
----------------------------------------------------------------------------------------------
-
R/S
" Q"
" Q4"
" Q4T"
" Q4TA"
" Q4TA5" only
a high card
-You press 1 2 3 5 ENTER^
in order to keep the ace
" A"
-A few seconds later:
" 2"
" 23"
" 23K"
" 23KA"
" 23KAA" one
pair
followed by
" +10108 $"
-----------------------------------------------------------------------------------------------
-
R/S
" Q"
" QQ"
" QQ4"
" QQ4K"
" QQ4K7" one
pair
-Press 3 4 5 ENTER^
to discard the last 3 cards
" QQ"
-Then
" 2"
" 26"
" 268"
" 268Q"
" 268QQ"
the same pair
followed by
" +13859 $"
-----------------------------------------------------------------------------------------------
-
R/S
" T"
" T2"
" T26"
" T26Q"
" T26Q3" only
a high card
-If you want to keep the Queen
press 1 2 3 5 ENTER^
" Q"
-And
" 6"
" 66"
" 667"
" 667Q"
" 667QA" one
small pair ( not enough to win )
followed by
" +10747 $" and so forth ...
Notes:
-Simply press ENTER^ if you do not want to discard any card ( if you have
a complete hand! )
-You can press other keys ( instead of ENTER^ )
provided it's neither a numeric key nor CHS nor the decimal point.
-In this program, the bets are randomly computed ( approximately between
3000$ and 3800$ - lines 80 to 86 )
but if you want to place your own bets:
-Replace lines 80 to 86 by RCL 22
-Replace line 19 ( LBL 12 ) by X<> Z
LBL 12 FS?C 22 STO 22
-Place your bet in X-register before XEQ "POKER1"
or R/S
-If you want to use the same bet, simply press R/S without
any digit entry
-The cards are sorted out only after discarding,
-Otherwise, it would needlessly increase execution time.
-The following program uses less registers: SIZE 015 instead of SIZE 022
Data Registers: • R00 = random numbers ( Registers R00 & R06 are to be initialized before executing "POK" )
• R06 = your cash R09 unused
R01 to R05 = your 5 cards ; R07 thru R14: temp
Flags: /
Subroutines: /
-Line 92 is a three-byte GTO 01
-We can add COS after line 56
01 LBL "POK" 02 "A" 03 ASTO 14 04 "K" 05 ASTO 13 06 "Q" 07 ASTO 12 08 "J" 09 ASTO 11 10 "T" 11 ASTO 10 12 LBL 01 13 FIX 0 14 CF 29 15 " " 16 ASTO 08 17 5 18 LBL 02 19 CLA 20 ARCL 08 21 ENTER 22 XEQ 14 23 XEQ 13 24 ASTO 08 25 X<>Y 26 AVIEW 27 DSE X 28 GTO 02 29 LBL 03 30 54 31 GETKEYX 32 X=0? 33 GTO 10 34 LASTX 35 - 36 CLRGX 37 GTO 03 38 LBL 10 |
39 " " 40 5 41 LBL 12 42 RCL IND X 43 X#0? 44 XEQ 13 45 X<>Y 46 DSE X 47 GTO 12 48 AVIEW 49 5 50 XEQ 05 51 " " 52 5 53 LBL 04 54 RCL IND X 55 XEQ 13 56 AVIEW 57 X<>Y 58 DSE X 59 GTO 04 60 RCL 07 61 X#0? 62 GTO 09 63 10 64 RCL 08 65 X>Y? 66 ISG 07 67 INT 68 7 69 X>Y? 70 DSE 07 71 LBL 09 72 RCL 00 73 FRC 74 4 75 / 76 8 |
77 + 78 E^X 79 RCL 07 80 * 81 ST+ 06 82 RCL 06 83 " " 84 X>0? 85 >"+" 86 ARCL 06 87 >" $" 88 FIX 4 89 SF 29 90 AVIEW 91 STOP 92 GTO 01 93 LBL 13 94 10 95 X<=Y? 96 ARCL IND Y 97 X>Y? 98 ARCL Y 99 RDN 100 RTN 101 LBL 14 102 CLX 103 RCL 00 104 R-D 105 13 106 MOD 107 STO 00 108 INT 109 2 110 + 111 STO IND Y 112 RTN 113 LBL 05 114 RCL IND X |
115 X=0? 116 XEQ 14 117 X<>Y 118 DSE X 119 GTO 05 120 RCL 01 121 RCL 02 122 X>Y? 123 X<>Y 124 RCL 03 125 X>Y? 126 X<>Y 127 RCL 04 128 X<Y? 129 X<>Y 130 X<> 05 131 X>Y? 132 X<>Y 133 X<> 05 134 X>Y? 135 X<>Y 136 R^ 137 X>Y? 138 X<>Y 139 RDN 140 X>Y? 141 X<>Y 142 RDN 143 X<Y? 144 X<>Y 145 STO 01 146 STO 08 147 RDN 148 X>Y? 149 X<>Y 150 STO 04 151 RDN 152 X>Y? |
153 X<>Y 154 STO 03 155 X<>Y 156 STO 02 157 5 158 STO 07 159 RCL 05 160 RCL 04 161 X=Y? 162 GTO 08 163 RCL 03 164 X=Y? 165 GTO 06 166 RCL 02 167 X=Y? 168 GTO 07 169 RCL 01 170 X=Y? 171 GTO 11 172 RCL 05 173 - 174 8 175 STO 07 176 CLX 177 5 178 X>Y? 179 RTN 180 RCL 02 181 LASTX 182 - 183 PI 184 X<Y? 185 GTO 10 186 R^ 187 12 188 X=Y? 189 RTN 190 LBL 10 |
191 5 192 CHS 193 STO 07 194 RTN 195 LBL 11 196 STO 08 197 CLX 198 STO 07 199 RTN 200 LBL 06 201 RCL 02 202 X=Y? 203 GTO 10 204 RCL 01 205 X=Y? 206 GTO 11 207 GTO 09 208 LBL 07 209 RCL 01 210 X=Y? 211 GTO 07 212 GTO 09 213 LBL 08 214 RCL 03 215 X=Y? 216 GTO 06 217 RCL 02 218 X=Y? 219 GTO 08 220 RCL 01 221 X=Y? 222 GTO 11 223 RDN 224 LBL 09 225 X<> Z 226 STO 08 227 CLX |
228 STO 07 229 RTN 230 LBL 10 231 RCL 01 232 X=Y? 233 GTO 09 234 GTO 07 235 LBL 06 236 RCL 02 237 X=Y? 238 GTO 10 239 RCL 01 240 X=Y? 241 RTN 242 LBL 07 243 3 244 STO 07 245 RTN 246 LBL 08 247 RCL 01 248 X=Y? 249 RTN 250 LBL 11 251 2 252 STO 07 253 RTN 254 LBL 10 255 21 256 STO 07 257 CLX 258 RCL 01 259 X=Y? 260 RTN 261 LBL 09 262 13 263 STO 07 264 END |
( 362 bytes / SIZE 015 )
STACK | INPUTS | OUTPUTS |
X | / | / |
Example: Same example, same results.
3°) Texas Hold'em Poker
-In order to simplify the program, there is no blind and no round of bettings
before the "flop" ( the first 3 community cards ) is displayed.
-And you are always the first player to bet.
-Your bet is computed as follows ( with GETKEY ):
SIGMA+ corresponds to a bet of about 1668
$ .................. LN corresponds
to a bet of about 3103 $
X<>Y corresponds
to a bet of about 6081 $ ..................
TAN corresponds to a bet of about 8619 $
SHIFT corresponds to a bet of
about 13253 $ .................. SST
corresponds to a bet of about 16894 $
.....................................................................................................................................................................
. / . corresponds to a bet of about 90480 $ ................. R/S corresponds to a bet of about 97307 $
>>> More exactly, the formula is Bet = [ ( keycode ) Ln(41) ]2
-There are 2 exceptions: press ENTER^ to accept the HP41's
raise
and press the backarrow key if you want to fold.
Data Registers: • R00 = random seed ( Registers R00 & R41 are to be initialized before executing "TXEM" )
• R41 = your Cash R01 thru R40 &
R42 thru R50: temp
Flag: F10
Subroutines: /
-Lines 120-135-189-246-273 are three-byte GTOs
01 LBL "TXEM" 02 CF 29 03 13 04 STO 49 05 28 06 STO 50 07 37 08 STO 43 09 27 10 "A" 11 ASTO 40 12 35 13 "K" 14 ASTO 39 15 17.001005 16 STO 06 17 SIGN 18 "Q" 19 ASTO 38 20 9 21 "J" 22 ASTO 37 23 "T" 24 ASTO 36 25 "/" 26 LBL 00 27 STO IND Z 28 R^ 29 XTOA 30 ASTO IND X 31 RDN 32 DSE T 33 DSE Z 34 DSE X 35 X>Y? 36 GTO 00 37 LBL 16 38 FIX 0 39 2 40 STO 13 41 16 42 STO 07 43 27 44 STO 08 45 E3 46 STO 48 47 SIGN 48 STO 42 49 " " 50 ASTO 44 51 LBL 01 52 CLA 53 ARCL 44 54 XEQ 04 55 STO IND 07 56 ARCL IND X 57 ASTO 44 58 XEQ 04 59 STO IND 13 60 ARCL IND 08 61 AVIEW 62 DSE 07 63 DSE 08 64 DSE 13 65 GTO 01 66 SF 10 67 3 68 STO 24 69 RCL 01 70 STO 13 71 RCL 02 72 STO 14 73 17.021 74 STO 12 |
75 LBL 02 76 XEQ 04 77 STO IND 12 78 ISG 12 79 GTO 02 80 "/" 81 ARCL IND 17 82 ARCL IND 18 83 ARCL IND 19 84 ASTO 45 85 " FLOP. . ." 86 AVIEW 87 RCL 06 88 REGMOVE 89 XEQ 14 90 STO 47 91 XEQ 05 92 X<> 47 93 XEQ 05 94 STO 46 95 STO 08 96 CLA 97 ARCL 44 98 ARCL 45 99 ARCL 26 100 E6 101 / 102 X^2 103 STO 10 104 RCL 00 105 R-D 106 FRC 107 STO 00 108 8 109 1/X 110 X>Y? 111 ST/ 42 112 CLST 113 LBL 03 114 AVIEW 115 GETKEY 116 44 117 X=Y? 118 CHS 119 X<0? 120 GTO 06 121 X<> Z 122 ST+ 48 123 X<>Y 124 41 125 X=Y? 126 GTO 10 127 LN 128 * 129 X^2 130 RCL 48 131 + 132 RCL 10 133 X<>Y 134 X>Y? 135 GTO 06 136 STO 48 137 X<>Y 138 3 139 / 140 X<Y? 141 GTO 10 142 * 143 SQRT 144 RCL 00 145 R-D 146 FRC 147 STO 00 148 * |
149 " +" 150 ARCL X 151 GTO 03 152 LBL 10 153 DSE 24 154 X=0? 155 GTO 08 156 " RIVER. . ." 157 FS? 10 158 " TURN. . ." 159 AVIEW 160 RCL 47 161 FS? 10 162 XEQ 12 163 STO 47 164 RCL 46 165 FS? 10 166 XEQ 12 167 FC? 10 168 XEQ 13 169 STO 46 170 STO 08 171 E6 172 / 173 X^2 174 RCL 42 175 * 176 STO 10 177 CLA 178 ARCL 45 179 FS? 10 180 ARCL IND 20 181 FC?C 10 182 ARCL IND 21 183 ASTO 45 184 CLA 185 ARCL 44 186 ARCL 45 187 ARCL 26 188 CLST 189 GTO 03 190 LBL 08 191 "/" 192 ARCL IND 13 193 ARCL IND 14 194 ASTO 24 195 CLA 196 ARCL 44 197 ARCL 45 198 ARCL 24 199 ATOX 200 AVIEW 201 RCL 15 202 STO 13 203 RCL 16 204 STO 14 205 RCL 47 206 XEQ 13 207 STO 47 208 RCL 46 209 - 210 LBL 06 211 X#0? 212 SIGN 213 RCL 48 214 * 215 ST+ 41 216 RCL 41 217 " C=" 218 X>0? 219 >"+" 220 ARCL 41 221 >" $" 222 FIX 4 |
223 AVIEW 224 STOP 225 GTO 16 226 LBL 04 227 RCL 00 228 R-D 229 RCL 49 230 MOD 231 STO 00 232 INT 233 RCL 50 234 + 235 RTN 236 LBL 05 237 STO 12 238 RCL 13 239 X<> 15 240 STO 13 241 STO 04 242 RCL 14 243 X<> 16 244 STO 14 245 STO 05 246 GTO 14 247 LBL 12 248 STO 12 249 RCL 13 250 X<> 15 251 STO 13 252 STO 01 253 RCL 14 254 X<> 16 255 STO 14 256 STO 05 257 XEQ 14 258 RCL 14 259 STO 05 260 RCL 13 261 STO 02 262 XEQ 14 263 RCL 14 264 STO 05 265 RCL 13 266 STO 03 267 XEQ 14 268 RCL 14 269 STO 05 270 XEQ 14 271 RCL 13 272 STO 05 273 GTO 14 274 LBL 13 275 STO 12 276 RCL 13 277 STO 01 278 RCL 14 279 STO 02 280 XEQ 14 281 RCL 13 282 STO 01 283 RCL 14 284 STO 03 285 XEQ 14 286 RCL 13 287 STO 01 288 RCL 14 289 STO 04 290 XEQ 14 291 RCL 13 292 STO 02 293 RCL 14 294 STO 03 295 XEQ 14 296 RCL 13 |
297 STO 02 298 RCL 14 299 STO 04 300 XEQ 14 301 RCL 13 302 STO 03 303 RCL 14 304 STO 04 305 XEQ 14 306 RCL 13 307 STO 01 308 XEQ 14 309 RCL 13 310 STO 02 311 XEQ 14 312 RCL 13 313 STO 03 314 XEQ 14 315 RCL 13 316 STO 04 317 XEQ 14 318 RCL 14 319 STO 01 320 XEQ 14 321 RCL 14 322 STO 02 323 XEQ 14 324 RCL 14 325 STO 03 326 XEQ 14 327 RCL 14 328 STO 04 329 LBL 14 330 RCL 05 331 RCL 04 332 X>Y? 333 X<>Y 334 RCL 03 335 X>Y? 336 X<>Y 337 RCL 02 338 X<Y? 339 X<>Y 340 X<> 01 341 X>Y? 342 X<>Y 343 X<> 01 344 X>Y? 345 X<>Y 346 R^ 347 X>Y? 348 X<>Y 349 RDN 350 X>Y? 351 X<>Y 352 RDN 353 X<Y? 354 X<>Y 355 STO 05 356 STO 08 357 RDN 358 X>Y? 359 X<>Y 360 STO 02 361 STO 11 362 RDN 363 X>Y? 364 X<>Y 365 STO 03 366 STO 10 367 X<>Y 368 STO 04 369 STO 09 370 4 |
371 STO 07 372 XEQ 10 373 RCL 08 374 RCL 07 375 RCL 43 376 STO T 377 * 378 + 379 * 380 RCL 09 381 + 382 * 383 RCL 10 384 + 385 * 386 RCL 11 387 + 388 * 389 RCL 01 390 + 391 RCL 06 392 REGMOVE 393 CLX 394 RCL 12 395 X<Y? 396 X<>Y 397 STO 12 398 RTN 399 LBL 10 400 RCL 01 401 RCL 02 402 X=Y? 403 GTO 08 404 RCL 03 405 X=Y? 406 GTO 06 407 RCL 04 408 X=Y? 409 GTO 07 410 RCL 05 411 X=Y? 412 GTO 09 413 RCL 01 414 - 415 5 416 STO 07 417 X>Y? 418 RTN 419 RCL 04 420 LASTX 421 - 422 PI 423 X<Y? 424 GTO 10 425 R^ 426 7 427 - 428 RCL 07 429 X#Y? 430 GTO 10 431 RCL 02 432 STO 08 433 RTN 434 LBL 10 435 CLX 436 STO 07 437 RTN 438 LBL 06 439 RCL 04 440 X=Y? 441 GTO 10 442 RCL 05 443 X=Y? 444 GTO 11 445 STO 09 |
446 RDN 447 STO 10 448 GTO 09 449 LBL 07 450 RCL 05 451 X=Y? 452 GTO 07 453 STO 09 454 GTO 09 455 LBL 08 456 RCL 03 457 X=Y? 458 GTO 06 459 RCL 04 460 X=Y? 461 GTO 08 462 RCL 05 463 X=Y? 464 GTO 11 465 STO 09 466 RDN 467 STO 10 468 RDN 469 STO 11 470 LBL 09 471 X<>Y 472 STO 08 473 SIGN 474 STO 07 475 RTN 476 LBL 10 477 STO 08 478 RCL 05 479 X=Y? 480 GTO 09 481 STO 09 482 GTO 07 483 LBL 06 484 STO 08 485 RCL 04 486 X=Y? 487 GTO 10 488 RCL 05 489 STO 09 490 X=Y? 491 RTN 492 X<>Y 493 STO 10 494 LBL 07 495 DSE 07 496 RTN 497 LBL 08 498 STO 08 499 RCL 05 500 X=Y? 501 RTN 502 STO 10 503 LBL 11 504 RCL 02 505 STO 09 506 2 507 STO 07 508 RTN 509 LBL 10 510 7 511 STO 07 512 CLX 513 RCL 05 514 X=Y? 515 RTN 516 STO 09 517 LBL 09 518 6 519 STO 07 520 END |
( 795 bytes / SIZE 051 )
STACK | INPUT | OUTPUT |
X | / | C |
where C = your cash = R41
Example: Initialize the random seed, say 3 STO 00 and your cash 40000 $ STO 41
1000 $ are automatically placed in the pot ( lines 45-46 )
• XEQ "TXEM" the HP-41 successively displays:
" 4/¤"
" 49/¤¤"
" FLOP. . ."
" 49/45Q/¤¤"
and stops: the 1st round of betting may start. If you press [B]
( about 1986 $ ):
• [B] the HP-41 makes a higher bid and displays +379 If you are in, simply press ENTER
( Press the backarrow key to fold, or another key to make another higher bid )
" TURN. . ."
and 24 seconds later
" 49/45Q4/¤¤"
If you press [C] ( about 2330 $ ):
• [C] the HP-41 displays +23029 if you match the HP-41's bet, press ENTER
" RIVER. . ."
and 34 seconds later
" 49/45Q4T/¤¤"
if you press [C] again
• [C] the HP-41 makes another higher bid +4791 if you match the HP-41's bet, press ENTER
49/45Q4T/JJ the calculators computes the maximum value of your possible hands and finally displays your cash
C=+75846 $ ( after 33 seconds )
• Simply press R/S to continue the game.
Notes:
-The last possible hands of the player are not evaluated if he - or the
HP41 - has folded.
-In this case, the HP-41 cards are not displayed.
-The HP41 has bluffed in the example above.
-If you don't want that the HP41 can bluff, delete lines 172-173 ,
104 to 111 & 47-48
-This program is obviously very slow on a true HP-41, unless you use the
M-Code routine "TRI" listed hereafter.
-But with a good emulator, the delays become acceptable - even without a
turbo mode.
4°) Synthesis of the 3 Programs
a) 3 M-Code Routines:
TRI MV CARD
Warning: These routines check that the required registers exist but they do not check for alpha data.
-Among these 3 routines, "TRI" is the most important to reduce execution time when playing Texas Hold'em Poker.
-The first one sorts the 5 cards in R01 thru R05, evaluate the poker hand
- the value is returned in X -
compares this result with the number already in R48 and stores the
maximum of these 2 numbers into R48.
089 "I"
012 "R"
014 "T"
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
The lines written in red
1D0 1D0h
check that R48 exist.
306 ?A<C S&X
You might delete them
381 ?NCGO
to save a fraction of a second ... but it's risky if you XEQ "TRI" accidentally.
00A 02E0
However, the existence of R48 is already checked line 37 of "POKER+"
130 LDI S&X
005 005
146 A=A+C S&X
266 C=C-1 S&X
0E6 B<>C S&X
0A6 A<>C S&X
270 RAMSLCT
0A6 A<>C S&X
038 READDATA
0E6 B<>C S&X
270 RAMSLCT
0E6 B<>C S&X
2F0 WRITDATA
1A6 A=A-1 S&X
0E6 B<>C S&X
266 C=C-1 S&X
01F JC+03
0E6 B<>C S&X
39B JNC -13d
130 LDI S&X
005 005
070 N=C ALL
0EE B<>C ALL
00E A=0 ALL
0CE C=B ALL
266 C=C-1 S&X
057 JC+10d
270 RAMSLCT
0EE B<>C ALL
038 READDATA
31A ?A<C ALL
3CB JNC-07
0AE A<>C ALL
0CE C=B ALL
158 M=C ALL
3AB JNC-11d
0B0 C=N ALL
266 C=C-1 S&X
070 N=C ALL
270 RAMSLCT
038 READDATA
0AE A<>C ALL
2F0 WRITDATA
198 C=M ALL
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
0B0 C=N ALL
2E6 ?C#0 S&X
32F JC-27d
04E C=0 ALL
270 RAMSLCT
168 WRIT 5(M)
35C PT=12
110 LD@PT-4
1A8 WRIT 6(N)
0B8 READ 2(Y)
268 WRIT 9(Q)
0F8 READ 3(X)
228 WRIT 8(P)
138 READ 4(L)
1E8 WRIT 7(O)
046 C=0 S&X
270 RAMSLCT
038 READDATA
158 M=C ALL
10E A=C ALL
078 READ 1(Z)
070 N=C ALL
36E ?A#C ALL
18B JNC+49d
10E A=C ALL
0B8 READ 2(Y)
36E ?A#C ALL
15B JNC+43d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
143 JNC+40d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
1F3 JNC+62d
2A0 SETDEC
10E A=C ALL
198 C=M ALL
1CE A=A-C ALL
08E B=A ALL
04E C=0 ALL
35C PT= 12
150 LD@PT-5
1A8 WRIT 6(N)
3CE RSHFC
30E ?A<C ALL
187 JC+48d
0F8 READ 3(X)
10E A=C ALL
198 C=M ALL
1CE A=A-C ALL
04E C=0 ALL
19C PT= 11
0D0 LD@PT-3
158 M=C ALL
36E ?A#C ALL
087 JC+16d
06E A<>B ALL
3EE LSHFA
04E C=0 ALL
35C PT= 12
1D0 LD@PT-7
1CE A=A-C ALL
1B8 READ 6(N)
36E ?A#C ALL
0D7 JC+26d
078 READ 1(Z)
1E8 WRIT 7(O)
0D3 JNC+26d
11B JNC+35d
1D3 JNC+58d
0C3 JNC+24d
138 READ 4(L)
10E A=C ALL
078 READ 1(Z)
1CE A=A-C ALL
198 C=M ALL
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
04B JNC+09
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
0D0 LD@PT-3
110 LD@PT-4
130 LDI S&X
003 003
168 M=C ALL
04E C=0 ALL
1A8 WRIT 6(N)
163 JNC+44d
1AB JNC+53d
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
0D0 LD@PT-3
130 LDI S&X
002 002
0C3 JNC+24d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
1CB JNC+57d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
183 JNC+48d
228 WRIT 8(P)
078 READ 1(Z)
0AE A<>C ALL
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
110 LD@PT-4
150 LD@PT-5
130 LDI S&X
002 002
1A3 JNC+52d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
047 JC+08
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
226 C=C+1 S&X
193 JNC+50d
183 JNC+48d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
150 LD@PT-5
130 LDI S&X
002 002
103 JNC+32d
10E A=C ALL
0B8 READ 2(Y)
36E ?A#C ALL
1BB JNC+55d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
193 JNC+50d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
037 JC+06
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
14B JNC+41d
0C3 JNC+24d
228 WRIT 8(P)
0AE A<>C ALL
268 WRIT 9(Q)
0B8 READ 2(Y)
070 N=C ALL
078 READ 1(Z)
10E A=C ALL
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
110 LD@PT-4
150 LD@PT-5
130 LDI S&X
002 002
168 M=C ALL
0AE A<>C ALL
1E8 WRIT 7(O)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
1A8 WRIT 6(N)
153 JNC+42d
123 JNC+36d
1E8 WRIT 7(O)
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
193 JNC+50d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
150 LD@PT-5
226 C=C+1 S&X
0A3 JNC+20d
113 JNC+34d
0C3 JNC+24d
1E8 WRIT 7(O)
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
12B JNC+37d
10E A=C ALL
138 READ 4(L)
228 WRIT 8(P)
36E ?A#C ALL
183 JNC+48d
0AE A<>C ALL
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
110 LD@PT-4
150 LD@PT-5
226 C=C+1 S&X
168 WRIT 5(M)
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
1A8 WRIT 6(N)
11B JNC+35d
1E8 WRIT 7(O)
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
0F3 JNC+30d
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
150 LD@PT-5
168 WRIT 5(M)
078 READ 1(Z)
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
090 LD@PT-2
1A8 WRIT 6(N)
093 JNC+18d
063 JNC+12d
04E C=0 ALL
35C PT= 12
1D0 LD@PT-7
1A8 WRIT 6(N)
138 READ 4(L)
36E ?A#C ALL
053 JNC+10d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
150 LD@PT-5
168 WRIT 5(M)
04E C=0 ALL
35C PT= 12
190 LD@PT-6
1A8 WRIT 6(N)
260 SETHEX
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
00B 011d
206 C=A+C S&X
270 RAMSLCT
10E A=C ALL
0B0 C=N ALL
2F0 WRITDATA
130 LDI S&X
009 009
158 M=C ALL
270 RAMSLCT
038 READDATA
0AE A<>C ALL
266 C=C-1 S&X
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
198 C=M ALL
266 C=C-1 S&X
3B3 JNC-10d
04E C=0 ALL
270 RAMSLCT
35C PT=12
0D0 LD@PT-3
37 is used to evaluate the poker hands.
1D0 LD@PT-7
Replace these 2 lines if you prefer another number, but choose at least
16.
226 C=C+1 S&X
2A0 SETDEC
128 WRIT 4(L)
10E A=C ALL
1B8 READ 6(N)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
1F8 READ 7(O)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
238 READ 8(P)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
278 READ 9(Q)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
0B0 C=N ALL
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
046 C=0 S&X
C
270 RAMSLCT
=
038 READDATA
T
01D ?NCXQ
C=
060 1807
A+C
0E8 WRIT 3(X)
Here, the combination is evaluated.
070 N=C ALL
Then, its value is compared to R48 and the maximum is stored in R48
260 SETHEX
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
030 048d
206 C=A+C S&X
270 RAMSLCT
0E6 B<>C S&X
038 READDATA
10E A=C ALL
0B0 C=N ALL
306 ?A<C S&X
037 JC+06
0AE A<>C ALL
306 ?A<C S&X
360 ?C RTN
31A ?A<C M
360 ?C RTN
0E6 B<>C S&X
270 RAMSLCT
0B0 C=N ALL
2F0 WRITDATA
3E0 RTN
Poker Hand | X-OUTPUT |
23457 | 63459727 |
9JQKA | 76995333 |
22345 | 123432879 |
JQKAA | 146391351 |
22334 | 194499001 |
QKKAA | 215684693 |
22234 | 262068734 |
QKAAA | 285080672 |
22233 | 331360669 |
KKAAA | 354424630 |
2345A | 402682868 |
23456 | 408305351 |
TJQKA | 423715119 |
22223 | 470048583 |
KAAAA | 493112581 |
22222 | 539341887 |
AAAAA | 562456539 |
-The second M-Code routine "MV" is equivalent to 17.001005
REGMOVE
-Checking for alpha data would be unuseful.
096 "V"
00D "M"
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
The lines written in red
1EB 1EBh
check that R21 exist.
306 ?A<C S&X
You might delete them
381 ?NCGO
to save a fraction of a second ... but it's risky if you XEQ "MV" accidentally.
00A 02E0
However, the existence of R42 is checked line 03 of "POKER+". So R21 does
exist too !
130 LDI S&X
010 016d
206 C=A+C S&X
0E6 B<>C S&X
130 LDI S&X
004 004
070 N=C ALL
0E6 B<>C S&X
226 C=C+1 S&X
270 RAMSLCT
0E6 B<>C S&X
038 READDATA
0AE A<>C ALL
226 C=C+1 S&X
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
0B0 C=N ALL
266 C=C-1 S&X
39B JNC-13d
3E0 RTN
-And the 3rd routine "CARD" takes a random number in R00 to calculate
another random number which is stored in R00
and returns a "card", i-e an integer between 28 & 40 in
register X
084 "D"
012 "R"
001 "A"
003 "C"
0F8 READ 3(X)
0A8 WRIT 2(Y)
378 READ 13(c)
03C RCR 3
106 A=C S&X
The lines written in red
130 LDI S&X
check that R00 exist.
1EB 1EBh
306 ?A<C S&X
You might delete them
381 ?NCGO
to save a fraction of a second ... but it's risky if you XEQ "CARD" accidentally.
00A 02E0
On the other hand, the existence of R42 is checked line 03 of "POKER+".
0A6 A<>C S&X
So R00 does exist too !
270 RAMSLCT
038 READDATA
2A0 SETDEC
231 ?NCXQ
xeq
064 198C
R-D
084 CLRF 5
0ED ?NCXQ
FRC
064 193B
2F0 WRITDATA
10E A=C ALL
04E C=0 ALL
270 RAMSLCT
35C PT=12
050 LD@PT-1
0D0 LD@PT-3
226 C=C+1 S&X
135 ?NCXQ
C=
060 184D
A*C
088 SETF 5
0ED ?NCXQ
INT
064 193B
10E A=C ALL
04E C=0 ALL
35C PT=12
090 LD@PT-2
210 LD@PT-8
226 C=C+1 S&X
01D ?NCXQ
C=
060 1807
A+C
0E8 WRIT 3(X)
3E0 RTN
STACK | INPUTS | OUTPUTS |
Y | / | x |
X | x | N |
with 28 <= N <= 40 provided R00 contains
a random seed
b) "POKER+"
-This program combines "POKER" , "POKER1" and "TXEM" and uses the 3 M-Code
routines above.
Data Registers: • R00 = n ( Registers R00 & R41 are to be initialized before executing "POKER+" )
• R41 = your Cash R01 thru R40 &
R42 thru R48: temp
Flags: F07-F08-F10
CF 07 & CF 08 = Standard Draw Poker
SF 07 & CF 08 = One-arm Bandit
SF 08 = Texas Hold'em Poker
Subroutines: TRI MV CARD
-Lines 72-129-144-163-204-263-323 are three-byte GTOs
-The append character is denoted ~
01 LBL "POKER+" 02 10 03 STO 42 04 27 05 "A" 06 ASTO 40 07 35 08 "K" 09 ASTO 39 10 1.015008 11 STO 43 12 "Q" 13 ASTO 38 14 9 15 "J" 16 ASTO 37 17 "T" 18 ASTO 36 19 "/" 20 LBL 00 21 STO IND Z 22 R^ 23 XTOA 24 ASTO IND X 25 RDN 26 DSE T 27 DSE Z 28 DSE X 29 X>Y? 30 GTO 00 31 FS? 08 32 CF 07 33 LBL 01 34 FIX 0 35 CF 29 36 5 37 STO 48 38 FS? 08 39 2 40 STO 06 41 15 42 STO 07 43 27 44 STO 08 45 E3 46 STO 12 47 CHS 48 STO 13 49 " " 50 ASTO 21 51 LBL 02 52 CLA 53 ARCL 21 54 CARD 55 STO IND 07 56 ARCL IND X 57 ASTO 21 58 FS? 07 59 GTO 02 60 CARD 61 STO IND 06 62 LBL 02 63 FS? 08 64 ARCL IND 08 65 AVIEW 66 DSE 08 67 ISG 07 68 CLX 69 DSE 06 70 GTO 02 71 FS? 07 72 GTO 11 73 FC? 08 74 GTO 01 75 SF 10 76 3 77 STO 24 78 RCL 01 79 STO 13 80 RCL 02 81 STO 14 82 CLA 83 ARCL 21 84 ASTO 44 85 CARD 86 STO 17 87 CARD 88 STO 18 |
89 CARD 90 STO 19 91 "/" 92 ARCL IND 17 93 ARCL IND 18 94 ARCL IND 19 95 ASTO 45 96 " FLOP. . ." 97 AVIEW 98 XEQ 16 99 STO 47 100 XEQ 16 101 STO 46 102 STO 08 103 CLA 104 ARCL 44 105 ARCL 45 106 ARCL 26 107 E6 108 / 109 X^2 110 STO 10 111 CLX 112 GTO 03 113 LBL 01 114 XEQ 09 115 RCL 07 116 X#0? 117 9 118 RCL 06 119 + 120 7 121 X>Y? 122 ST* 10 123 CLX 124 LBL 03 125 AVIEW 126 GETKEY 127 44 128 X=Y? 129 GTO 06 130 X<> Z 131 ST+ 12 132 X<>Y 133 41 134 X=Y? 135 GTO 10 136 LN 137 * 138 X^2 139 RCL 12 140 + 141 RCL 10 142 X<>Y 143 X>Y? 144 GTO 07 145 STO 12 146 X<>Y 147 .4 148 * 149 X<Y? 150 GTO 10 151 * 152 SQRT 153 RCL 00 154 R-D 155 FRC 156 STO 00 157 * 158 " +" 159 ARCL X 160 GTO 03 161 LBL 10 162 FC? 08 163 GTO 10 164 DSE 24 165 FS? 30 166 GTO 08 167 CARD 168 FS? 10 169 STO 20 170 STO 21 171 " RIVER. . ." 172 FS? 10 173 " TURN. . ." 174 AVIEW 175 RCL 46 176 FC? 10 |
177 GTO 04 178 RCL 47 179 XEQ 17 180 STO 47 181 RCL 46 182 XEQ 17 183 LBL 04 184 FC? 10 185 XEQ 18 186 STO 46 187 STO 08 188 E6 189 / 190 X^2 191 STO 10 192 CLA 193 ARCL 45 194 FS? 10 195 ARCL IND 20 196 FC?C 10 197 ARCL IND 21 198 ASTO 45 199 CLA 200 ARCL 44 201 ARCL 45 202 ARCL 26 203 CLX 204 GTO 03 205 LBL 08 206 "/" 207 ARCL IND 13 208 ARCL IND 14 209 ASTO 24 210 CLA 211 ARCL 44 212 ARCL 45 213 ARCL 24 214 ATOX 215 AVIEW 216 RCL 13 217 X<> 15 218 STO 13 219 RCL 14 220 X<> 16 221 STO 14 222 RCL 47 223 XEQ 18 224 STO 47 225 RCL 46 226 - 227 GTO 07 228 LBL 10 229 CLA 230 ARCL 21 231 RCL 13 232 X<0? 233 GTO 10 234 6 235 "~/" 236 LBL 15 237 1 238 LBL 19 239 RCL IND X 240 ARCL IND X 241 AVIEW 242 COS 243 SIGN 244 + 245 X#Y? 246 GTO 19 247 RCL 22 248 LBL 06 249 RCL 08 250 - 251 LBL 07 252 X#0? 253 SIGN 254 RCL 12 255 * 256 ST+ 41 257 " C=" 258 ARCL 41 259 "~ $" 260 FIX 4 261 SF 29 262 PROMPT 263 GTO 01 264 LBL 10 |
265 ARCL 23 266 AVIEW 267 LBL 11 268 CLA 269 LBL 05 270 34 271 GETKEYX 272 X=0? 273 GTO 10 274 XTOA 275 LASTX 276 - 277 CLRGX 278 GTO 05 279 LBL 10 280 ANUM 281 STO 20 282 ALENG 283 ST+ X 284 STO 13 285 20 286 " " 287 15 288 LBL 12 289 RCL IND X 290 X#0? 291 ARCL IND X 292 SIGN 293 + 294 X#Y? 295 GTO 12 296 RCL 06 297 DSE X 298 LOG 299 24 300 + 301 FC? 07 302 ARCL IND X 303 AVIEW 304 XEQ 08 305 FS? 07 306 GTO 07 307 SIGN 308 RCL 00 309 X^2 310 - 311 SQRT 312 ST/ 10 313 PI 314 PI 315 RCL 13 316 - 317 X<0? 318 + 319 RCL 07 320 X<Y? 321 STO 10 322 CLX 323 GTO 03 324 LBL 08 325 FS? 07 326 GTO 06 327 RCL 43 328 REGSWAP 329 XEQ 13 330 LBL 06 331 RCL 43 332 REGSWAP 333 LBL 09 334 XEQ 13 335 FS? 07 336 RTN 337 CLA 338 ARCL IND 15 339 ARCL IND 16 340 ARCL IND 17 341 ARCL IND 18 342 ARCL IND 19 343 ASTO 21 344 ARCL 23 345 E6 346 / 347 X^2 348 STO 10 349 RTN 350 LBL 07 351 5 352 STO 22 |
353 CHS 354 STO 12 355 CLX 356 X<> 08 357 RCL 07 358 X=0? 359 GTO 07 360 .47 361 * 362 E^X 363 .75 364 * 365 RND 366 STO 12 367 1 368 X#Y? 369 GTO 07 370 37 371 R^ 372 X<Y? 373 DSE 12 374 INT 375 33 376 X>Y? 377 DSE 12 378 LBL 07 379 RCL 00 380 FRC 381 4 382 / 383 8 384 + 385 E^X 386 ST* 12 387 6 388 " " 389 GTO 15 390 LBL 16 391 CLX 392 STO 48 393 MV 394 RCL 13 395 X<> 15 396 STO 13 397 STO 04 398 RCL 14 399 X<> 16 400 STO 14 401 STO 05 402 TRI 403 RCL 48 404 RTN 405 LBL 17 406 STO 48 407 MV 408 RCL 13 409 X<> 15 410 STO 13 411 STO 01 412 RCL 14 413 X<> 16 414 STO 14 415 STO 05 416 TRI 417 MV 418 RCL 14 419 STO 05 420 RCL 13 421 STO 02 422 TRI 423 MV 424 RCL 14 425 STO 05 426 RCL 13 427 STO 03 428 TRI 429 MV 430 RCL 14 431 STO 05 432 TRI 433 MV 434 RCL 13 435 STO 05 436 TRI 437 RCL 48 438 RTN 439 LBL 18 440 STO 48 |
441 MV 442 RCL 13 443 STO 01 444 RCL 14 445 STO 02 446 TRI 447 MV 448 RCL 13 449 STO 01 450 RCL 14 451 STO 03 452 TRI 453 MV 454 RCL 13 455 STO 01 456 RCL 14 457 STO 04 458 TRI 459 MV 460 RCL 13 461 STO 02 462 RCL 14 463 STO 03 464 TRI 465 MV 466 RCL 13 467 STO 02 468 RCL 14 469 STO 04 470 TRI 471 MV 472 RCL 13 473 STO 03 474 RCL 14 475 STO 04 476 TRI 477 MV 478 RCL 13 479 STO 01 480 TRI 481 MV 482 RCL 13 483 STO 02 484 TRI 485 MV 486 RCL 13 487 STO 03 488 TRI 489 MV 490 RCL 13 491 STO 04 492 TRI 493 MV 494 RCL 14 495 STO 01 496 TRI 497 MV 498 RCL 14 499 STO 02 500 TRI 501 MV 502 RCL 14 503 STO 03 504 TRI 505 MV 506 RCL 14 507 STO 04 508 TRI 509 MV 510 TRI 511 RCL 48 512 RTN 513 LBL 13 514 RCL 06 515 INT 516 RCL 42 517 ST/ 06 518 MOD 519 X#0? 520 CARD 521 X#0? 522 STO IND Y 523 X#0? 524 GTO 13 525 TRI 526 FC? 07 527 STO 08 528 END |
( 872 bytes / SIZE 049 )
STACK | INPUTS | OUTPUTS |
X | / | / |
Instructions:
-After displaying your cards, GETKEY is used to place your bet ( draw poker or texas hold'em ):
SIGMA+ corresponds to a bet of about 1668
$ .................. LN corresponds
to a bet of about 3103 $
X<>Y corresponds
to a bet of about 6081 $ ..................
TAN corresponds to a bet of about 8619 $
SHIFT corresponds to a bet of
about 13253 $ .................. SST
corresponds to a bet of about 16894 $
.....................................................................................................................................................................
. / . corresponds to a bet of about 90480 $ ................. R/S corresponds to a bet of about 97307 $
>>> More exactly, the formula is Bet = [ ( keycode ) Ln(41) ]2
-There are, however, 2 exceptions: press ENTER^ to accept
the HP41's raise
and press the backarrow key if you want to fold.
-Likewise - with CF 08 - when you want to discard some cards, say the
cards n° 1 3 5 ( seen from the left ),
simply press 1 3 5 ENTER^ ( not too
quickly ) - the program doesn't stop.
-With CF 07 CF 08 ( one-arm bandit ), your bet is randomly evaluated.
Notes:
-The HP-41 does not bluff when playing "Texas Hold'em Poker" i-e
SF 08
-If you want this option,
add for instance RCL 49
* after line 190
add RCL 00 R-D
FRC STO 00 .12 X>Y?
ST/ 49 after line 110
and add 1 STO 49
after line 33
-With respect to execution time, " RIVER. . ." is now displayed for 7 or 8 seconds instead of 37s
-It's surely possible to save bytes if you create loops inside LBL 17
& LBL 18,
but this would increase execution time...
c) 1 M-Code Routine:
$
-This routine combines TRI & MV listed in paragraph a) above according to the content of register X:
If X = 0 "$" is equivalent to TRI
If X < 0 "$" --------------- MV
If X > 0 "$" --------------- TRI + MV
-It saves 1 entry in the FAT and runs slightly faster.
Warning: This routine checks that the
required registers exist but it does not check for alpha data.
0A4 "$"
Perhaps a more exotic name like 0A3 "#" would be better...
( @FD32 in my ROM )
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
The lines written in red
1D0 1D0h
check that R48 exist.
306 ?A<C S&X
You might delete them
381 ?NCGO
to save a fraction of a second ... but it's risky if you XEQ "$" accidentally.
00A 02E0
However, the existence of R48 is already checked line 36 of "POKER" below
0F8 C=X
2FE ?C<0
361 ?CGO
GOTO the 2nd part of the routine if X < 0
3FB FED8
@FED8 in my ROM. -> Change these 2 words according
to your own ROM.
104 CLRF 8
2EE ?C#0
017 JC+02
108 SETF 8
130 LDI S&X
005 005
146 A=A+C S&X
266 C=C-1 S&X
0E6 B<>C S&X
0A6 A<>C S&X
270 RAMSLCT
0A6 A<>C S&X
038 READDATA
0E6 B<>C S&X
270 RAMSLCT
0E6 B<>C S&X
2F0 WRITDATA
1A6 A=A-1 S&X
0E6 B<>C S&X
266 C=C-1 S&X
01F JC+03
0E6 B<>C S&X
39B JNC -13d
130 LDI S&X
005 005
070 N=C ALL
0EE B<>C ALL
00E A=0 ALL
0CE C=B ALL
266 C=C-1 S&X
057 JC+10d
270 RAMSLCT
0EE B<>C ALL
038 READDATA
31A ?A<C ALL
3CB JNC-07
0AE A<>C ALL
0CE C=B ALL
158 M=C ALL
3AB JNC-11d
0B0 C=N ALL
266 C=C-1 S&X
070 N=C ALL
270 RAMSLCT
038 READDATA
0AE A<>C ALL
2F0 WRITDATA
198 C=M ALL
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
0B0 C=N ALL
2E6 ?C#0 S&X
32F JC-27d
04E C=0 ALL
270 RAMSLCT
168 WRIT 5(M)
35C PT=12
110 LD@PT-4
1A8 WRIT 6(N)
0B8 READ 2(Y)
268 WRIT 9(Q)
0F8 READ 3(X)
228 WRIT 8(P)
138 READ 4(L)
1E8 WRIT 7(O)
046 C=0 S&X
270 RAMSLCT
038 READDATA
158 M=C ALL
10E A=C ALL
078 READ 1(Z)
070 N=C ALL
36E ?A#C ALL
18B JNC+49d
10E A=C ALL
0B8 READ 2(Y)
36E ?A#C ALL
15B JNC+43d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
143 JNC+40d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
1F3 JNC+62d
2A0 SETDEC
10E A=C ALL
198 C=M ALL
1CE A=A-C ALL
08E B=A ALL
04E C=0 ALL
35C PT= 12
150 LD@PT-5
1A8 WRIT 6(N)
3CE RSHFC
30E ?A<C ALL
187 JC+48d
0F8 READ 3(X)
10E A=C ALL
198 C=M ALL
1CE A=A-C ALL
04E C=0 ALL
19C PT= 11
0D0 LD@PT-3
158 M=C ALL
36E ?A#C ALL
087 JC+16d
06E A<>B ALL
3EE LSHFA
04E C=0 ALL
35C PT= 12
1D0 LD@PT-7
1CE A=A-C ALL
1B8 READ 6(N)
36E ?A#C ALL
0D7 JC+26d
078 READ 1(Z)
1E8 WRIT 7(O)
0D3 JNC+26d
11B JNC+35d
1D3 JNC+58d
0C3 JNC+24d
138 READ 4(L)
10E A=C ALL
078 READ 1(Z)
1CE A=A-C ALL
198 C=M ALL
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
04B JNC+09
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
0D0 LD@PT-3
110 LD@PT-4
130 LDI S&X
003 003
168 M=C ALL
04E C=0 ALL
1A8 WRIT 6(N)
163 JNC+44d
1AB JNC+53d
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
0D0 LD@PT-3
130 LDI S&X
002 002
0C3 JNC+24d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
1CB JNC+57d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
183 JNC+48d
228 WRIT 8(P)
078 READ 1(Z)
0AE A<>C ALL
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
110 LD@PT-4
150 LD@PT-5
130 LDI S&X
002 002
1A3 JNC+52d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
047 JC+08
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
226 C=C+1 S&X
193 JNC+50d
183 JNC+48d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
090 LD@PT-2
150 LD@PT-5
130 LDI S&X
002 002
103 JNC+32d
10E A=C ALL
0B8 READ 2(Y)
36E ?A#C ALL
1BB JNC+55d
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
193 JNC+50d
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
037 JC+06
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
14B JNC+41d
0C3 JNC+24d
228 WRIT 8(P)
0AE A<>C ALL
268 WRIT 9(Q)
0B8 READ 2(Y)
070 N=C ALL
078 READ 1(Z)
10E A=C ALL
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
110 LD@PT-4
150 LD@PT-5
130 LDI S&X
002 002
168 M=C ALL
0AE A<>C ALL
1E8 WRIT 7(O)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
1A8 WRIT 6(N)
153 JNC+42d
123 JNC+36d
1E8 WRIT 7(O)
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
02F JC+05
04E C=0 ALL
35C PT= 12
050 LD@PT-1
193 JNC+50d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
050 LD@PT-1
150 LD@PT-5
226 C=C+1 S&X
0A3 JNC+20d
113 JNC+34d
0C3 JNC+24d
1E8 WRIT 7(O)
10E A=C ALL
0F8 READ 3(X)
36E ?A#C ALL
12B JNC+37d
10E A=C ALL
138 READ 4(L)
228 WRIT 8(P)
36E ?A#C ALL
183 JNC+48d
0AE A<>C ALL
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
110 LD@PT-4
150 LD@PT-5
226 C=C+1 S&X
168 WRIT 5(M)
04E C=0 ALL
35C PT= 12
0D0 LD@PT-3
1A8 WRIT 6(N)
11B JNC+35d
1E8 WRIT 7(O)
10E A=C ALL
138 READ 4(L)
36E ?A#C ALL
0F3 JNC+30d
268 WRIT 9(Q)
04E C=0 ALL
35C PT= 12
150 LD@PT-5
168 WRIT 5(M)
078 READ 1(Z)
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
090 LD@PT-2
1A8 WRIT 6(N)
093 JNC+18d
063 JNC+12d
04E C=0 ALL
35C PT= 12
1D0 LD@PT-7
1A8 WRIT 6(N)
138 READ 4(L)
36E ?A#C ALL
053 JNC+10d
228 WRIT 8(P)
04E C=0 ALL
35C PT= 12
150 LD@PT-5
168 WRIT 5(M)
04E C=0 ALL
35C PT= 12
190 LD@PT-6
1A8 WRIT 6(N)
260 SETHEX
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
00B 011d
206 C=A+C S&X
270 RAMSLCT
10E A=C ALL
0B0 C=N ALL
2F0 WRITDATA
130 LDI S&X
009 009
158 M=C ALL
270 RAMSLCT
038 READDATA
0AE A<>C ALL
266 C=C-1 S&X
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
198 C=M ALL
266 C=C-1 S&X
3B3 JNC-10d
04E C=0 ALL
270 RAMSLCT
35C PT=12
0D0 LD@PT-3
37 is used to evaluate the poker hands.
1D0 LD@PT-7
Replace these 2 lines if you prefer another number, but choose at least
16.
226 C=C+1 S&X
2A0 SETDEC
128 WRIT 4(L)
10E A=C ALL
1B8 READ 6(N)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
1F8 READ 7(O)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
238 READ 8(P)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
278 READ 9(Q)
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
0B0 C=N ALL
01D ?NCXQ
C=
060 1807
A+C
10E A=C ALL
138 READ 4(L)
135 ?NCXQ
C=
060 184D
A*C
10E A=C ALL
046 C=0 S&X
C
270 RAMSLCT
=
038 READDATA
T
01D ?NCXQ
C=
060 1807
A+C
0E8 WRIT 3(X)
Here, the combination is evaluated.
070 N=C ALL
Then, its value is compared to R48 and the maximum is stored in R48
260 SETHEX
378 READ 13(c)
03C RCR 3
106 A=C S&X
130 LDI S&X
030 048d
206 C=A+C S&X
270 RAMSLCT
0E6 B<>C S&X
038 READDATA
10E A=C ALL
0B0 C=N ALL
306 ?A<C S&X
037 JC+06
0AE A<>C ALL
306 ?A<C S&X
03F JC+07
31A ?A<C M
02F JC+05
0E6 B<>C S&X
270 RAMSLCT
0B0 C=N ALL
2F0 WRITDATA
04E C=0 ALL
270 RAMSLCT
10C ?FSET 8
360 ?C RTN
378 READ 13(c)
@FED8 in my ROM
03C RCR 3
106 A=C S&X
130 LDI S&X
010 016d
206 C=A+C S&X
0E6 B<>C S&X
130 LDI S&X
004 004
070 N=C ALL
0E6 B<>C S&X
226 C=C+1 S&X
270 RAMSLCT
0E6 B<>C S&X
038 READDATA
0AE A<>C ALL
226 C=C+1 S&X
270 RAMSLCT
0AE A<>C ALL
2F0 WRITDATA
0B0 C=N ALL
266 C=C-1 S&X
39B JNC-13d
3E0 RTN
@FEEF in my ROM
( 445 words )
d) "POKER"
-Like "POKER+" this program combines "POKER" , "POKER1" and "TXEM"
-It uses the M-Code routines CARD & $ listed above.
-Unlike "POKER+", there is also a round of betting before the flop.
Data Registers: • R00 = n ( Registers R00 & R41 are to be initialized before executing "POKER" )
• R41 = your Cash R01 thru R40 & R42 thru R50: temp
Flags: F07-F08-F09-F10
CF 07 & CF 08 = Standard Draw Poker
SF 07 & CF 08 = One-arm Bandit
SF 08 = Texas Hold'em Poker
Subroutines: $ CARD
-Lines 77-158-173-192-239-299-359 are three-byte GTOs
-The append character is denoted >" ( so that the listing
can be use direcly with HP41UC )
01 LBL "POKER" 02 10 03 STO 42 04 27 05 "A" 06 ASTO 40 07 35 08 "K" 09 ASTO 39 10 1.015008 11 STO 43 12 "Q" 13 ASTO 38 14 9 15 "J" 16 ASTO 37 17 "T" 18 ASTO 36 19 "/" 20 LBL 00 21 STO IND Z 22 R^ 23 XTOA 24 ASTO IND X 25 RDN 26 DSE T 27 DSE Z 28 DSE X 29 X>Y? 30 GTO 00 31 FS? 08 32 CF 07 33 CF 09 34 LBL 01 35 CLX 36 STO 50 37 SIGN 38 STO 49 39 FIX 00 40 CF 29 41 5 42 STO 48 43 FS? 08 44 2 45 STO 06 46 15 47 STO 07 48 27 49 STO 08 50 E3 51 STO 12 52 CHS 53 STO 13 54 " " 55 ASTO 21 56 LBL 02 57 CLA 58 ARCL 21 59 CARD 60 STO IND 07 61 ARCL IND X 62 ASTO 21 63 FS? 07 64 GTO 02 65 CARD 66 STO IND 06 67 LBL 02 68 FS? 08 69 ARCL IND 08 70 AVIEW 71 DSE 08 72 ISG 07 73 CLX 74 DSE 06 75 GTO 02 76 FS? 07 77 GTO 11 78 FC? 08 79 GTO 01 |
80 SF 09 81 RCL 00 82 FRC 83 4 E3 84 STO 08 85 ST* Y 86 ST+ X 87 + 88 STO 10 89 STO 50 90 CLX 91 GTO 14 92 LBL 20 93 SF 10 94 3 95 STO 24 96 RCL 01 97 STO 13 98 RCL 02 99 STO 14 100 CLA 101 ARCL 21 102 ASTO 44 103 CARD 104 STO 17 105 CARD 106 STO 18 107 CARD 108 STO 19 109 "/" 110 ARCL IND 17 111 ARCL IND 18 112 ARCL IND 19 113 ASTO 45 114 " FLOP. . ." 115 AVIEW 116 XEQ 16 117 STO 47 118 XEQ 16 119 STO 46 120 STO 08 121 CLA 122 ARCL 44 123 ARCL 45 124 ARCL 26 125 E6 126 / 127 X^2 128 RCL 50 129 + 130 STO 10 131 SIGN 132 RCL 00 133 R-D 134 FRC 135 STO 00 136 X^2 137 - 138 ST/ 49 139 CLX 140 GTO 03 141 LBL 01 142 XEQ 09 143 RCL 07 144 X#0? 145 9 146 RCL 06 147 + 148 7 149 X>Y? 150 ST* 10 151 CLX 152 LBL 03 153 AVIEW 154 LBL 14 155 GETKEY 156 44 157 X=Y? 158 GTO 06 |
159 X<> Z 160 ST+ 12 161 X<>Y 162 41 163 X=Y? 164 GTO 10 165 LN 166 * 167 X^2 168 RCL 12 169 + 170 RCL 10 171 X<>Y 172 X>Y? 173 GTO 07 174 STO 12 175 X<>Y 176 3 177 / 178 X<Y? 179 GTO 10 180 * 181 SQRT 182 RCL 00 183 R-D 184 FRC 185 STO 00 186 * 187 " +" 188 ARCL X 189 GTO 03 190 LBL 10 191 FC? 08 192 GTO 10 193 FS?C 09 194 GTO 20 195 DSE 24 196 FS? 30 197 GTO 08 198 CARD 199 FS? 10 200 STO 20 201 STO 21 202 " RIVER. . ." 203 FS? 10 204 " TURN. . ." 205 AVIEW 206 RCL 46 207 FC? 10 208 GTO 04 209 RCL 47 210 XEQ 17 211 STO 47 212 RCL 46 213 XEQ 17 214 LBL 04 215 FC? 10 216 XEQ 18 217 STO 46 218 STO 08 219 E6 220 / 221 X^2 222 RCL 50 223 + 224 RCL 49 225 * 226 STO 10 227 CLA 228 ARCL 45 229 FS? 10 230 ARCL IND 20 231 FC?C 10 232 ARCL IND 21 233 ASTO 45 234 CLA 235 ARCL 44 236 ARCL 45 237 ARCL 26 |
238 CLX 239 GTO 03 240 LBL 08 241 "/" 242 ARCL IND 13 243 ARCL IND 14 244 ASTO 24 245 CLA 246 ARCL 44 247 ARCL 45 248 ARCL 24 249 ATOX 250 AVIEW 251 RCL 13 252 X<> 15 253 STO 13 254 RCL 14 255 X<> 16 256 STO 14 257 RCL 47 258 XEQ 18 259 STO 47 260 RCL 46 261 - 262 GTO 07 263 LBL 10 264 CLA 265 ARCL 21 266 RCL 13 267 X<0? 268 GTO 10 269 6 270 >"/" 271 LBL 15 272 1 273 LBL 19 274 RCL IND X 275 ARCL IND X 276 AVIEW 277 COS 278 SIGN 279 + 280 X#Y? 281 GTO 19 282 RCL 22 283 LBL 06 284 RCL 08 285 - 286 LBL 07 287 X#0? 288 SIGN 289 RCL 12 290 * 291 ST+ 41 292 " C=" 293 ARCL 41 294 >" $" 295 FIX 04 296 SF 29 297 AVIEW 298 STOP 299 GTO 01 300 LBL 10 301 ARCL 23 302 AVIEW 303 LBL 11 304 CLA 305 LBL 05 306 34 307 GETKEYX 308 X=0? 309 GTO 10 310 XTOA 311 LASTX 312 - 313 CLRGX 314 GTO 05 315 LBL 10 316 ANUM |
317 STO 20 318 ALENG 319 ST+ X 320 STO 13 321 20 322 " " 323 15 324 LBL 12 325 RCL IND X 326 X#0? 327 ARCL IND X 328 SIGN 329 + 330 X#Y? 331 GTO 12 332 RCL 06 333 DSE X 334 LOG 335 24 336 + 337 FC? 07 338 ARCL IND X 339 AVIEW 340 XEQ 08 341 FS? 07 342 GTO 07 343 SIGN 344 RCL 00 345 X^2 346 - 347 SQRT 348 ST/ 10 349 PI 350 PI 351 RCL 13 352 - 353 X<0? 354 + 355 RCL 07 356 X<Y? 357 STO 10 358 CLX 359 GTO 03 360 LBL 08 361 FS? 07 362 GTO 06 363 RCL 43 364 REGSWAP 365 XEQ 13 366 LBL 06 367 RCL 43 368 REGSWAP 369 LBL 09 370 XEQ 13 371 FS? 07 372 RTN 373 CLA 374 ARCL IND 15 375 ARCL IND 16 376 ARCL IND 17 377 ARCL IND 18 378 ARCL IND 19 379 ASTO 21 380 ARCL 23 381 E6 382 / 383 X^2 384 STO 10 385 RTN 386 LBL 07 387 5 388 STO 22 389 CHS 390 STO 12 391 CLX 392 X<> 08 393 RCL 07 394 X=0? 395 GTO 07 |
396 .47 397 * 398 E^X 399 .75 400 * 401 RND 402 STO 12 403 1 404 X#Y? 405 GTO 07 406 37 407 R^ 408 X<Y? 409 DSE 12 410 INT 411 33 412 X>Y? 413 DSE 12 414 LBL 07 415 RCL 00 416 FRC 417 4 418 / 419 8 420 + 421 E^X 422 ST* 12 423 6 424 " " 425 GTO 15 426 LBL 16 427 CLX 428 STO 48 429 SIGN 430 CHS 431 $ 432 RCL 13 433 X<> 15 434 STO 13 435 STO 04 436 RCL 14 437 X<> 16 438 STO 14 439 STO 05 440 CLX 441 $ 442 RCL 48 443 RTN 444 LBL 17 445 STO 48 446 CHS 447 $ 448 RCL 13 449 X<> 15 450 STO 13 451 STO 01 452 RCL 14 453 X<> 16 454 STO 14 455 STO 05 456 $ 457 RCL 14 458 STO 05 459 RCL 13 460 STO 02 461 $ 462 RCL 14 463 STO 05 464 RCL 13 465 STO 03 466 $ 467 RCL 14 468 STO 05 469 $ 470 RCL 13 471 STO 05 472 CLX 473 $ 474 RCL 48 |
475 RTN 476 LBL 18 477 STO 48 478 CHS 479 $ 480 RCL 13 481 STO 01 482 RCL 14 483 STO 02 484 $ 485 RCL 13 486 STO 01 487 RCL 14 488 STO 03 489 $ 490 RCL 13 491 STO 01 492 RCL 14 493 STO 04 494 $ 495 RCL 13 496 STO 02 497 RCL 14 498 STO 03 499 $ 500 RCL 13 501 STO 02 502 RCL 14 503 STO 04 504 $ 505 RCL 13 506 STO 03 507 RCL 14 508 STO 04 509 $ 510 RCL 13 511 STO 01 512 $ 513 RCL 13 514 STO 02 515 $ 516 RCL 13 517 STO 03 518 $ 519 RCL 13 520 STO 04 521 $ 522 RCL 14 523 STO 01 524 $ 525 RCL 14 526 STO 02 527 $ 528 RCL 14 529 STO 03 530 $ 531 RCL 14 532 STO 04 533 $ 534 CLX 535 $ 536 RCL 48 537 RTN 538 LBL 13 539 RCL 06 540 INT 541 RCL 42 542 ST/ 06 543 MOD 544 X#0? 545 CARD 546 X#0? 547 STO IND Y 548 X#0? 549 GTO 13 550 $ 551 FC? 07 552 STO 08 553 END |
( 901 bytes / SIZE 051
)
STACK | INPUTS | OUTPUTS |
X | / | / |
Instructions:
-The instructions are almost identical to "POKER+" listed in paragraph b) except that:
1-Now, the HP-41 can bluff when playing "Texas Hold'em Poker" too
( SF 08 )
2-There is a round of bettings before the "flop"
-The HP-41 bets before the flop are determined by a random number between
8000 and 12000 $ ( lines 81 to 87 )
-Change these lines according to your preference ( the HP-41 cards are in
R01 & R02 at this step )