[comp.sys.handhelds] HP-28 version of tetris.

IUGC500@INDYVAX.IUPUI.EDU (David Holland IUGC500@INDYVAX) (04/19/91)

Hallo ppl

	I remembered someone mentioning a hp-28 version of tetris
well, I found a copy of it out on a ftp site tonight. I've not 
typed it in yet, so I can't say how well it plays, but its probably 
not as fast as the more recent versions of tetris for the 48 I would guess.

but I was wondering if there's enough interest in it for me to post the 
thing to the networks.  well?

Oh, yah, I'm not on the hp-28 mailing list, so someone will have to let
me know, but otherwise, I'll leave it laying about my account for a while
and see what turns up. 

(oh, yah, NO I didn't write this version, I just found a copy of it
on a ftp site I can't remember the name of off hand. The real author
is a David Still ie. DESTILL@MTUS5.CTS.MTU.EDU)

bye all

David Holland
IUGC500@INDYVAX.IUPUI.EDU

IUGC500@INDYVAX.IUPUI.EDU (David Holland IUGC500@INDYVAX) (04/22/91)

Hello ppl!

	Well, I decided it would be easier if I just posted the program
to both groups.  Below is an exact copy of the program as I found it.
I finally figured out what the FTP site was.  Its GMUVAX2.GMU.EDU 
(129.174.1.8) for those people who wish to go get it themselves.
There's also quite a bit of other 28 stuff there (Its one of the standard
program archives.. I think.) Its (curiously) in the directory: new
intead of the right hp28 directory, and its also called: blokdrop.hp28

	Oh well, here it is.. 

David Holland
IUGC500@INDYVAX (BITNET)
IUGC500@INDYVAX.IUPUI.EDU (INTERNET)



[ORIGINAL MESSAGE FOLLOWS]
-------------------------------------------------------------------------------
     One of the great liabilities of the HP-28 is its inability to play
TETRIS.  Okay, so that's not really much of a liability, but I got
tired of watching all of my friends with HP-48 calculators playing
video games and me stuck with guessing the calculators next random
number out to 6 digits.  So I wrote BLOCKDROP, the HP-28 version of
TETRIS.
     To play BLOCKDROP, enter all of the programs below (yes, all of
them!) and execute programs MBAG, MPIG, and TGEN.  MBAG creates POKE
with checksum :7F3E: and MPIG creates PEEK with checksum :05AD:. TGEN
creates files SCREEN, GO, and FILL with checksums :5E81:, :AEF7:, and
:3CEF:, respectively.  Once you are sure that POKE, PEEK, SCREEN, GO,
and FILL are entered correctly you can delete programs MBAG, MPIG,
TGEN, SCGEN, GOGEN, and FIGEN.  You may now play BLOCKDROP by running
BLOCKDROP (pretty ingenious, huh).  The following commands are used
when playing:
 
                     "1" -- Rotate object
                     "2" -- Move left
                     "5" -- Move right
                     "3" -- Drop object to bottom
                     "0" -- Pause game
 
The calculator should be held sideways when you play the game, and
unless you like a lot of extra variables in your game, don't press
ON while BLOCKDROP is running.  If you need to use another of the
calculator's functions, press pause.  When you wish to return to the
game, go back to the directory where the program is and press CONT
(shift-1).  If you want to end the game, just let the blocks fall
untill the screen is filled and you see the "GAME OVER" message.
From there, hit any key and you will be back to the main screen with
the message "GAME OVER" and your score on the stack.  Although the
game seems to move slower than a snail frozen in a glacier, it does run
at twice the normal clock speed so don't play if your battery is low.
     I used four programs in this game that I did not write.  My thanks
to Alonzo Gariepy and the two anonymous programmers for their contri-
butions.  Although three of the programs say "Modified" after them, the
modifications were small and did not in any way change the function of
the program.
     For those of you without HP-28 calculators but still want to play
BLOCKDROP, fear not!  There are IBM, APPLE II, and COMMODORE-64
versions on the way.  Have fun, and enjoy!
 
MBAG  [62D6]                     by Alonzo Gariepy (program modified)
 <<
   << SWAP OVER # 0d AND OR SWAP # 60313793039700529d # 60312697556113217d
# 60344589032298049d # 893930875306183944d # 60239021960728625d
# 892347295072326737d # 14984791528145224318d
   >> HOME 'POKE' DUP PURGE STO # 3463884939656703126d # 851776d # 851953d SYSEV
AL
 >>
 
MPIG  [E63F]                     by Alonzo Gariepy (program modified)
 <<
   << RCWS SWAP 64 STWS # 0d OR SWAP STWS "ABCDEFGHIJKLMNOPQRSTUVWXYZ1"
   >> HOME 'PEEK' DUP PURGE STO # 3463884939532971158d # 851894d POKE
# 1599169402857788225d # 851910d POKE # 3537372007626905445d # 851926d POKE
# 3519005774320177d # 851942d POKE
 >>
 
SPEED  [3D91]                    Anonymous (program modified)
 << 'SPEED'  -> s n
   << PATH RCWS 64 STWS s  R->B # 15d AND # 281474976710656d * # 891716034201780
156d
OR { # 4047118155055345d # 3519005774319921d } + HOME n RCL SWAP n PURGE n STO
# 917431d SYSEVAL n STO STWS  -> b
     << 1 b SIZE
      FOR a b a GET EVAL
      NEXT
     >>
   >>
 >>
 
PS?  [515B]                      Anonymous
 << SWAP # 1046592d
  IF OVER 68  >=
  THEN 416 +
  END SWAP 8 * + PEEK SWAP 2 SWAP ^  R->B AND DUP /  B->R
 >>
 
BLOCKDROP  [55C8]
 << 0 'SCO' STO SCREEN DUP 'BSCR' STO  ->LCD 1 SF 64 STWS
  WHILE 1 FS?
  REPEAT 2 SF (5,1) 'OB' STO 3 CF 2 'R' STO RAND 7 * 1 + IP 'OBJECT' STO 'SCO'
10 STO+
    WHILE 2 FS?
    REPEAT 15 SPEED (0,1) 'OB' STO+ BSCR  ->LCD
      IF CHECKD
      THEN 2 CF
      END 'OB' 0 CHECKD  R->C STO-
      IF OB (5,1) ==
      THEN 1 CF
      END "" 4 SF "" 'BUFF' STO
      WHILE 4 FS?
      REPEAT KEY  -> k f
         <<
          IF f 0 ==
          THEN 4 CF
          END
          IF k "1" == k "2" == OR k "5" == OR k "3" == OR k "0" == OR
          THEN BUFF k + 'BUFF' STO
          END
         >>
      END BSCR  ->LCD
      IF BUFF "" <>
      THEN 1 BUFF SIZE
        FOR n BUFF n n SUB  -> k
           <<
            IF k "0" ==
            THEN DEPTH  ->LIST 'STAK' STO HALT STAK LIST->  DROP
            ELSE
              IF k "2" ==
              THEN OB CHECKL 0  R->C + 'OB' STO
              ELSE
IF k "5" ==
THEN OB CHECKR 0  R->C - 'OB' STO
ELSE
  IF k "3" ==
  THEN BDROP 2 CF 3 SF
  ELSE 1 'R' STO+ 'R' R 4 > 4 * STO- 'R' CHECKD STO- 'R' R 1 < 4 * STO+
  END
END
              END
            END
           >>
        NEXT
      END (0,1) 'OB' STO+
      IF CHECKD NOT
      THEN 2 SF
      END 'OB' (0,1) STO- PLT
    END PLT SCORE
  END 0 3
  FOR n BSCR 137 n * 1 + 137 n * 96 + SUB GO n 1 + GET + BSCR 137 n * 117 + 137
n 1 + * SUB +
  NEXT + + +  ->LCD "GAME OVER" SCO { BUFF STAK OB SCO BSCR S Q P BLOX TITL A
OBJECT R } PURGE
 >>
 
BDROP  [FE29]
 << 1 'A' STO
  WHILE A 1 ==
  REPEAT 'OB' (0,1) STO+ CHECKD NOT 'A' STO
  END 'OB' (0,1) STO-
 >>
 
BLOK  [F7ED]
{ { # 42949672974d # 14d } { # 343597383792d # 112d } { # 2748779070336d # 896d
} { # 21990232562688d # 7168d } { # 175921860501504d # 57344d } {
# 1407374884012032d # 458752d } { # 11258999072096256d # 3670016d } {
# 90071992576770048d # 29360128d } { # 720575940614160384d # 234881024d } {
# 5764607524913283072d # 1879048192d } }
 
SH  [4071]
{
[[ (0,-1) (0,0) (0,1) (0,2) ]
 [ (1,0) (0,0) (-1,0) (-2,0) ]
 [ (0,-1) (0,0) (0,1) (0,2) ]
 [ (1,0) (0,0) (-1,0) (-2,0) ]]
[[ (0,-1) (0,0) (1,0) (1,1) ]
 [ (-1,1) (0,1) (0,0) (1,0) ]
 [ (0,-1) (0,0) (1,0) (1,1) ]
 [ (-1,1) (0,1) (0,0) (1,0) ]]
[[ (1,-1) (1,0) (0,0) (0,1) ]
 [ (-1,-1) (0,-1) (0,0) (1,0) ]
 [ (1,-1) (1,0) (0,0) (0,1) ]
 [ (-1,-1) (0,-1) (0,0) (1,0) ]]
[[ (0,-1) (0,0) (1,0) (0,1) ]
 [ (0,-1) (-1,0) (0,0) (1,0) ]
 [ (0,-1) (-1,0) (0,0) (0,1) ]
 [ (-1,0) (0,0) (1,0) (0,1) ]]
[[ (0,-1) (1,-1) (0,0) (1,0) ]
 [ (0,-1) (1,-1) (0,0) (1,0) ]
 [ (0,-1) (1,-1) (0,0) (1,0) ]
 [ (0,-1) (1,-1) (0,0) (1,0) ]]
[[ (0,-1) (0,0) (0,1) (-1,1) ]
 [ (1,0) (0,0) (-1,0) (1,1) ]
 [ (1,-1) (0,-1) (0,0) (0,1) ]
 [ (-1,0) (0,0) (1,0) (-1,-1) ]]
[[ (0,-1) (0,0) (0,1) (1,1) ]
 [ (1,0) (0,0) (-1,0) (1,-1) ]
 [ (-1,-1) (0,-1) (0,0) (0,1) ]
 [ (-1,1) (1,0) (0,0) (-1,0) ]]
}
 
SC  [485E]
{ 0 100 300 600 1000 }
 
CHECKD  [D229]
 << 1 4
  FOR m SH OBJECT GET { R m } GET OB + DUP 'A' STO 3 * (0,74) +  C->R SWAP PS? N
OT
    IF A IM 21 ==
    THEN DROP 0
    END
  NEXT * * * NOT
 >>
 
CHECKR  [CC2E]
 << 1 4
  FOR m SH OBJECT GET { R m } GET OB + 3 * (-3,74) +  C->R SWAP PS? NOT
  NEXT * * *
 >>
 
CHECKL  [ED83]
 << 1 4
  FOR m SH OBJECT GET { R m } GET OB + 3 * (1,74) +  C->R SWAP PS? NOT
  NEXT * * *
 >>
 
SCORE  [43A8]
 <<  LCD-> DUP  ->LCD  -> s
   << s 1 76 SUB s 138 213 SUB s 275 350 SUB s 412 487 SUB 4  ->LIST 'TITL' STO
s 77
137 SUB s 214 274 SUB s 351 411 SUB s 488 548 SUB 4  ->LIST 'BLOX' STO 63 'P' ST
O
0 'Q' STO 1 'S' STO
    WHILE P 0 >
    REPEAT 'P' 3 STO- 1 4
      FOR n BLOX n GET P P SUB NUM
      NEXT + + + 'A' STO
      WHILE A 1020 ==
      REPEAT 1 'S' STO+ 1 4
        FOR n FILL n GET BLOX n GET 1 P 3 - SUB + BLOX n GET P 1 + 61 SUB + BLOX
SWAP n SWAP PUT 'BLOX' STO
        NEXT 1 4
        FOR n BLOX n GET P P SUB NUM
        NEXT + + + 'A' STO
      END
    END SC S GET 'SCO' STO+ 1 4
    FOR n TITL n GET BLOX n GET
    NEXT + + + + + + + DUP 'BSCR' STO  ->LCD
   >>
 >>
 
PLT  [76F9]
 << BSCR  ->LCD 1 4
  FOR g SH OBJECT GET { R g } GET OB +  C->R 3 * 73 + 8 *  R->B # 1047008d + SWA
P
BLOK SWAP GET  -> x p
     << 1 2
      FOR m x m 1 - 16 *  R->B + DUP PEEK p m GET OR SWAP POKE
      NEXT
     >>
  NEXT
 >>
 
TGEN  [F23C]
 << 1 4
  FOR n 1 3
    FOR m FIGEN n GET m GET CHR
    NEXT + +
  NEXT 4  ->LIST 'FILL' STO 1 4
  FOR n "" 1 20
    FOR m GOGEN n GET m GET CHR +
    NEXT
  NEXT 4  ->LIST 'GO' STO "" 1 548
  FOR n SCGEN n GET CHR +
  NEXT 'SCREEN' STO
 >>
 
SCGEN  [EB7A]
{ 0 0 0 0 0 0 0 54 182 182 60 60 54 182 182 54 0 0 224 240 176 176 240 224 128
128 128 0 0 0 5 149 197 149 149 149 0 0 0 0 0 0 0 0 0 255 255 219 255 15 11 15
143 139 143 143 139 143 143 139 143 143 139 143 143 139 143 143 139 143 15 11 15
255 219 255 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 255 0 0 0 0 0 0 0 199 239
109 108 108 108 109 239 199 0 0 57 125 109 109 109 109 109 125 57 0 0 0 24 32 25
4 36 24 0 0 0 0 0 0 0 0 0 255 255 182 255 0 0 0 255 182 255 3 2 3 227 162 227
227 162 227 3 2 3 255 182 255 0 0 0 255 182 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 255 0 0 0 0 0 0 0 193 195 195 195 195 195 195 251 249 0 0 158 223 219
219 222 219 219 219 155 0 0 0 24 20 18 18 20 24 0 0 0 0 0 0 0 0 0 255 255 109
255 0 0 0 255 109 255 192 64 192 199 69 199 199 69 199 192 64 192 255 109 255 0
0 0 255 109 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 60 62
54 54 60 54 54 62 60 0 0 7 7 6 6 6 6 6 7 7 0 0 0 128 128 229 149 149 227 1 6 0 0
0 0 0 0 0 255 255 219 255 240 208 240 241 209 241 241 209 241 241 209 241 241
209 241 241 209 241 241 209 241 240 208 240 255 219 255 128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128 128 128 128 128 128 128 255 }
 
GOGEN  [DB85]
{ { 224 224 0 192 192 0 0 224 224 0 0 192 224 96 96 192 96 96 96 96 } { 139 219
251 251 219 219 219 219 219 0 0 251 251 195 243 243 195 195 251 251 } { 8 156
156 54 182 190 182 182 54 0 0 54 182 182 182 182 182 190 156 8 } { 7 15 13 12 15
15 13 15 7 0 0 7 15 13 13 13 13 13 15 7 } }
 
FIGEN  [5D6C]
{ { 1 1 1 } { 0 0 0 } { 0 0 0 } { 128 128 128 } }
 
David Still
DESTILL@MTUS5.CTS.MTU.EDU