プログラミング
BBCテトリスコンパニオン
The BBC Tetris Companion (leadedsolder.com)
要約
この記事は、ブリッジゲームを教えるために設計されたレトロなゲーム機「BBC Bridge Companion」について論じています。著者は、このコンソールにテトリス風ゲーム(Bridgetris)を移植するというホームブループロジェクトに着手し、BIOSのリバースエンジニアリング、Z80アセンブリ言語でのゲーム開発、そしてレトロハードウェアでのプログラミングの挑戦について詳述しています。
全文翻訳
友人のために、頼まれてくだらないことをしたことはありますか?
私は、昔のコンピューターに執着する仲間たちと集まっていたとき、BBC Bridge Companionという話題になりました。
彼らは、それは所有するには無用なものだと言いましたが、集まったグループの多くは、過去に一度は所有したことがあったのです。
ブリッジの遊び方を知らないなら、なぜわざわざ気にする必要があるのでしょうか?
さて、私はテトリスの遊び方を知っていますし、Z80アセンブリ言語の書き方も知っています。少なくとも、そう思っていました。
今後数週間にわたり、Bridgetrisプロジェクトの詳細について、より深く掘り下げた記事を公開していく予定です。
この記事は、プロジェクト全体の概要を短くまとめたもので、全体的なタスクと進捗の概略を把握できるようにすることを目的としています。
過去への架け橋
まず、少し歴史を振り返りましょう。
BBC Bridge Companionとは何だったのか、そしてなぜこのものが、私の注意と自由時間を、率直に言って不合理で正当化できないほど多くの時間を費やすことになったのでしょうか?
簡単に言えば、BBC Bridge Companionは、英国放送協会(BBC)がテレビでブリッジゲームの遊び方を教えるために発売したゲーム機でした。
BBCブランドであるのは、当時、トッププレイヤーたちが新参者にゲームを紹介する新しい方法を探していた、人気のブリッジ指導テレビ番組「BBC Bridge Club」があったからです。
しかし、Wikipediaによると、1985年当時で200ポンドもしたのですから、あまり売れなかっただろうと推測します。
1982年には48k ZX Spectrumを175ポンドで購入でき(1985年までにはおそらくもっと安かったでしょう)、それでもブリッジゲームを買うのに十分なお金が余ったはずです。
後になって、大幅に値引きされたか、少なくともその価格で実際に販売されることはなかったと推測せざるを得ません。
ソフトウェアはROMカートリッジで配布され、私が調べた限りでは、9つのリリースしかありませんでした。
Advanced Bidding
Advanced Defence
Bridge Builder
Club Play 1
Club Play 2
Club Play 3
Conventions 1
Duplicate 1
Master Play 1
カートリッジの価格に関する記録は見つかりませんでしたが、安くはなかったはずです。
それぞれ、厚いコイルバウンドのハンドブック(レッスン教材のほとんどが含まれている)が付いた、巨大な成形プラスチックのショックボックスに入っていたようです。
Bridge Builderはシステムに同梱されていました。
スペックを教えてください
私が興味を持ったのはハードウェアでした。
このマシンは、Z80と、おなじみのTI TMS VDPで構成されています。
具体的には、TMS9129です。これはTMS9128のPALバリアントで、TMS9128自体は、私が以前Casio PV-7 MSXから取り出したTMS9118のRGBバリアントです。
「フル」の16kB VRAMまで搭載しています!
1985年という遅い時期でも、これは8ビット機としてはかなりの処理能力であり、実質的にColecoVision並みです。
まだすべてのカートリッジを試したわけではありませんが、Bridge Companionのゲームが、この強力なVDPとCPUを十分に活用しているわけではありません。
Robert Maxwellは不要
コンソールをもう少し楽しくしないのはもったいないと思いました。
それに、私は最後にColecoに類する、本当にくだらないホームブループロジェクトをやって以来、何もしていませんでした。
最悪の場合、いつでも私のゲームをそのColecoVisionに移植できるので、地球上で少なくとももう一人くらいは試すことができるでしょう。
私がこれを試みた最初の人ではないと思います。AtariAgeのcdotyがすでにBBCBCをいじり始めていたようです。
Bridge Companionのために、どのようなゲームが良い候補になるでしょうか?
理想的には、誰もが愛する、時代を超えたルールを持ち、適度な挑戦ができるものでなければなりません。
また、コンソールの上部にある非常に扱いにくいATMのようなボタンでプレイできる必要があります。
唯一の答えはテトリスです。
あるいは、もっと具体的に言えば、テトリス風のゲームです。
これは本物のテトリスでしょうか?
テトリス社は「いいえ」と言うでしょう。ルールセット全体に従っていませんし、ライセンス料も払っていません。
だから、私のゲームは実際にはBridgetrisと呼ばれています。これは、私が法的な問題に巻き込まれる文字の並びとは全く異なるシーケンスであると、誰もが同意してくれると思います。
さて、告白しなければなりません。
私はゲームプログラミングの経験は豊富ですが、ソフトウェア全般のプログラミング経験はさらに豊富ですが、テトリス風のゲームを作ったのはごく最近のことでした。
他の多くのプロジェクトと同様に、永遠に先延ばしにしてきたものですが、結局は、実際に問題に取り組んでみると大したことではないことがわかる一つの精神的なブロックに行き着きます。
何らかの理由で、私は何十年もの間、ピースの回転コードは実際には非常に複雑で、多くの微調整が必要だと頭にこびりついていました。
パンデミックの退屈しのぎのエクササイズの一環としてRustでテトリス風のゲームをプログラミングしているうちに、実際には、ほとんどのテトリスゲームにおける「ピースの回転」は単にハードコードされていることを発見しました。
単一のピボットポイントを定義し、それを回転させるだけです。
合わない? 回転しない。
これが、スクリーンショットでドロップブロックパズルゲームのように見えることを証明している、Rust製のテトリス風ゲームです。
さて、これは簡単になるはずでした。
今、私がしなければならないことはすべて次のとおりです。
見たこともなく、実際に物理的に持っていないゲーム機で自分のコードを実行させる方法を見つける。
高校時代のTI-83 Plusプログラミング以来、10行以上のプログラムを書いたことがないのに、Z80アセンブリ言語でテトリスゲーム全体を書く。
それについてのブログ記事を書く。
今、それをやっています。
こんにちは!簡単です!
仲間を騙す
一部のシステムでは、ゲームROMを受け入れさせるのは、CPUが起動時にジャンプする場所にROMを置くだけの問題です。
Sega SG-1000の場合はそうであり、プログラミングは簡単です。
ゲームが$0000に表示されている限り、Z80 CPUがリセットから復帰すると自動的に実行されます。
しかし、ColecoVisionのように、BBC Bridge Companionには、内部ROMにやや複雑なBIOSが搭載されています。
Bridge Companionが起動すると、そのBIOSが$0000にマウントされます。
BIOSがカートリッジが接続されていることを認識しない場合、「システムをオフにしてカートリッジを挿入してください」と表示されます。
では、BIOSに、私たちが正規のカートリッジであると納得させるにはどうすればよいでしょうか?
BIOSをリバースエンジニアリングすることによってです。
MAMEデバッガでBIOSを開き、命令ごとにステップ実行して、BBC Bridge CompanionがカートリッジのROMに何を求めているのかを突き止めました。
正規のカートリッジと私の未熟なホームブルーカートリッジを数晩比較した後、最終的に、Companionに私が書いたコードを実行させるヘッダーを構築することに成功しました。
そしてそこから…BBCは私を止めることは何もできませんでした。
ゲームを書く
以前のゲームはRustで書きましたが、Rustのような高水準言語と、非常に低水準のアセンブリ言語で書くことの間には大きな隔たりがあります。
アセンブリは非常に厳密です。コンピューターが実行する必要のあるすべての小さなステップを、正確な詳細で記述します。
これは素晴らしいことです。なぜなら、あなたが望まないステップをコンピューターが実行しないことを意味しますが、頭の中の単純な考え(「ブロックをアニメーションさせたいかもしれない」)が、すぐに500行以上のコードに変わる可能性があることを意味します。
それに、私はZ80アセンブリ言語をあまり知りませんでした。
ゲームを作りながら、そのすべての楽しい癖を学ばなければなりませんでした。
誰もあなたにこのように生きることをお勧めしませんが、驚くほどうまくいきました。
私のコードは見ないでください。それはスパゲッティの山であり、可能な限り最適化されていません。
コードを書き進めるうちに、バグが発生しました。
たくさんの、たくさんの、たくさんのバグです。
あまりにも多くのバグです。
アセンブリ言語は実際にはかなりシンプルで楽しいことがわかりました!
物事を考えるのに少しオーバーヘッドがあります。
高水準言語で作業する際に期待する「厳密さ」の一部を捨て、やりたいことをやり始めたところ、コードが流れ始めました。
それが、子供たちへの本当のゲーム開発の教訓です。
ボーナス:ブリッジコンパニオンの修理
どこかに、ブリッジコンパニオンが木になっている国があるはずです。
ソニック・ザ・ヘッジホッグの音楽が遅すぎて、PALのためすべて白黒です。
昔は、この恩恵を受けるために、ガタピシ飛行機に乗って世界中を旅しなければなりませんでした。
代わりに、eBayに飛び乗って、(箱付き!)のものを法外な値段で買ってしまいました。