その昔、ベーマガ(BASIC Magazine)に載っていたコードを友達のPB-100に打ち込んで遊んだことがあり、その時やったバスケットボールゲームに衝撃を受けました。
こんなことができるのかと感動したものです。

こんな感じ。
 30

"p"とか"q"がバスケットのゴールで、オームが自分でスペードが敵を表しています。
今思うと、あまりにもショボいキャラクタです。。。

当時の記憶を頼りに再現してみました。
PB-SIMを使っているので、PBの特殊キャラクタは"\OM"などで表しています。
実際にPB-100に打ち込む時は変更が必要です。当然REM文やコメント行は入れません。

30年ぶりにBASIC言語でプログラムを書いてみたけど、難しすぎ、、、
あと、PB-100は544ステップしか容量がないので、今回作成したコードサイズがほぼ限界です(このコードは540ステップ)。一度作成したコードをリファクタリングしてサイズを小さくしました。
大体、IF文にELSEがなかったり、条件でANDやORが使えなかったりと、気が狂いそうです。
2行のコードを1行に収めると、微妙にサイズを節約できたり、関数の閉じカッコを省略したり、、
あと、本当はキャラクタ移動を滑らかにするために、移動前のキャラクタを部分消去したいけど、容量の問題で全画面再描画で済ませたりとか。
こんなに難しかったっけなー。

今回パソコン上でテキストエディタ使ってプログラムを書いたけど、当時よくポケコンに直打ちしてたよなぁ。
カシオのポケコンはプログラム入力のUIがクソすぎ(もしかしてクソなのは最初の方のシリーズ機だけ?)て、さっきの行に戻って修正みたいなことをやろうとすると、いちいち LIST 10[EXE] みたいに打たないと戻れなく、発狂ものです。
シャープのは上下の矢印キーがあって、プログラムの前後に動けたのでまともだったけど。
あと、IF文のELSEもそうだけど、SWITCH(SELECTか?)文もないし、論理演算もできないので、本当に難しい。

<一応ゲームの説明>
スタートすると、まず攻撃モード。自分のキャラがドリブルしています(そのように脳内変換してください^^;)。[4][6]で自分の移動と[8]でシュートが打てます。
シュートの判定は乱数で常時1/3です。本当は敵陣に近いほどシュートが入りやすいロジックにしたかったのですが、容量の関係で断念。
敵が自分のドリブルしているボールに重なるか、シュートが外れるとディフェンスモードに変わります。
ディフェンス時は敵キャラに自分のキャラを重ねて、[5]で両手(^^;)が出ます。1/2判定でボールを奪えます。
ボールを奪えたら、また攻撃モードになります。
敵が自陣のゴール前まで来てしまったら相手のゴールとなります。
1ゴールで2点入り、どちらかが10点でゲームオーバーとなります。
ゲームオーバーの表示も容量の関係で削除。悲しいかな。

実際にPB-100で動かしてみたら、当時と同じく快適に動いてちょっと感動!!
古き良き時代だったなぁ。

実機用のwavファイルもアップしておきます。
basket-pb100.wav

--- 以下、ソースコード
[P0]
1  REM --- BasketBall Game ---
2  REM 540 steps
10 VAC: A$="\OM/\DG": B$="o_.": GOTO #1

[P1]
10 PRINT CSR 2; M; " -"; N;: FOR I=0 TO 99: NEXT I
20 X=1: Y=10: IF M<10; IF N<10; GOTO #2
'30 PRINT CSR0; "Game Over !!"

[P2]
1   REM --- Atack ---
10 IF C>1; C=0
20 PRINT CSR 0; "p          q"; CSR X; A$(C); CSR Y; "\SP";: C=C+1
30 IF Y=X+2; Y=Y-1: GOTO #3
40 L=L+1: IF L>3; L=0: Y=Y-SGN(Y-X-2
50 GOSUB #5
60 IF K$="8"; GOTO #4
70 GOTO 10

[P3]
1  REM --- Defense ---
10 PRINT CSR 0; "p          q"; CSR Y; "\DG\SP"; CSR X; "\OM";
20 IF R=1; PRINT CSR X+1; "\RA"; CSR X-1; "\LA";
30 Z=INT(RAN#*3
40 L=L+1: IF L>2; L=0: IF Y>0; Y=Y-1
50 IF R=1; IF X-1<Y; IF Y<X+2; IF Z=1; Y=10: R=0: GOTO #2
60 R=0: GOSUB #5
70 IF K$="5"; R=1
80 IF Y=0; N=N+2: PRINT: GOTO #1
90 GOTO 10

[P4]
1   REM --- Shoot ---
10 IF X+2=10 THEN 30
20 FOR I=X+2 TO 9: PRINT CSR I; " \DG";: FOR J=0 TO 10: NEXT J: NEXT I
30 PRINT
35 REM --- Judge ---
40 Z=INT(RAN#*3
50 IF Z=1; M=M+2: GOTO #1
60 Y=9: L=0: GOTO #3

[P5]
1  REM --- inkey ---
10 K$=KEY
20 IF K$="4"; IF X>1; X=X-1
30 IF K$="6"; IF X<8; X=X+1
40 RETURN