プログラミング
ZX Spectrum 用デモシーンイントロの作成
Writing a Demoscene Intro for the ZX Spectrum (markround.com)
要約
著者は、80年代のAmigaのクラックイントロに触発され、数十年を経てついにZX Spectrum用のデモシーンイントロを完成させました。この記事では、レトロなハードウェアで当時の雰囲気を再現するために使用した技術、Z80アセンブリ言語の習得、そして開発中に直面した苦労と喜びについて技術的な視点から解説しています。
全文翻訳
ダウンロードはこちら pouet.netで表示 イントロ
80年代後半、私はZX Spectrumにかじりつき、友人宅で見たAmigaのクラックイントロを再現しようと、雑誌からコピーしたSinclair BASICプログラムや初歩的なアセンブリルーチンを打ち込んでいました。もちろん、それらは全く近づくことすらできませんでしたが、今、何十年も経って、ついにそれを成し遂げました!私は今、オリジナルの128KB Spectrumで動作する、手作りのレトロデモシーンイントロの誇り高き作者です。80年代後半のあらゆる定型句を備えています:滑らかなスクロールテキスト(「leet custom fonts!」付き)、3チャンネルのAYサウンドトラック、バウンドするVUメーター、そして不可欠なパララックススターフィールドです。現在のコード量は10287バイト、完全なテープイメージとしては19552バイトです。これは、昨年の12月13日から作業を始めたことを考えると、私の平均的なコード生産率は週あたりわずか約455バイトであることを意味します!この記事は、私がどのようにしてそこに到達したか、私が学んだいくつかのクールなトリック、そしてSpeccyとZ80アセンブリについて(再)学ばなければならなかったことの技術的な概要です。これは私のこれまでのサイドプロジェクトの中で最もお気に入りのものの一つであると同時に、モニターを蹴り飛ばしたくなるほどフラストレーションが溜まったものの一つでもあります。そのすべてを最後に振り返りますが、まずは完成品を見たいという方は、記事のトップにあるダウンロードボタンをクリックしてください。付属の.tapカセットテープイメージは、どのエミュレータでもロードできるはずです。YouTubeのキャプチャ、pouet.netでのプロダクションへのリンクもあります。私のTNFSサイトポータルにアクセスして、ウェブブラウザから実行することもできます。オプション4で最新のアップロードを確認してください。
再生、巻き戻し
しかし、80年代後半に少しだけ戻りましょう。8ビットのカセットテープローディングコンピュータの世界から来た私にとって、初めてAmigaを見たときの感覚は、まるで宇宙からの何かに出会ったかのようでした。当時の誰もがそうであったように、私はその驚異的なグラフィックとサウンド、そして画期的なゲームライブラリに圧倒されました。しかし、私は海賊版ゲームの冒頭に表示される、神秘的で(そして完全にクールな)「イントロ」にさらに魅了されました。ソフトウェアの海賊版グループがコピープロテクションを解除し、フロッピーディスクベースのゲームを配布するために作成したそれらは、それ自体がミニチュアのアート作品でした。音楽、グラフィック、そしてグループの腕前を披露するためのクールなエフェクトが特徴でした。YouTubeには、これらのイントロ(または「クラクトロ」)の素晴らしいコレクションがアーカイブされています。それらのビデオをいくつか見れば、ほとんどすべてのクラクトロが共有する「デザイン」の定型句にすぐに気づくでしょう。画面上部にはクールでエッジの効いたロゴ(血が滴っていたり、「メタル」な要素があればボーナスポイント)、何らかのエフェクトの上に表示される自慢げなテキスト(通常はスクロールするパララックススターフィールドや回転する3Dオブジェクト)、そしてさらに、挨拶、仲間の仮名のクラッカーへのメッセージ、そして海賊版BBSシステムの宣伝でいっぱいのスクロールテキストです。言うまでもなく、80年代/90年代初頭の子供にとって、これはおそらく史上最もクールなものでした。私はこれを見たとき、これが最高だと思いました。サインスクローラー、海賊版BBS広告、剣付きのクールなロゴ、そしてもちろんスターフィールド。ここには誰にでも楽しめるものがあります。この音楽は私の脳に焼き付いています。90年代初頭のLemmingsの人気を考えると、私のクラスメートのほとんどがこのイントロを知っていたと思います。Skid Rowというグループは今日でも活動しており、これはおそらくその時代の最も典型的なAmigaクラクトロでしょう。無限の海賊行為。エッジが効いている。別のクールなロゴ、さらにクールなテキストフォント、サインウェーブスクローラー、スターフィールド、そして自慢げなテキスト。クラシックは決して時代遅れになりません。別の素晴らしい必須要素の組み合わせ。クールなロゴ、さらにクールなテキストフォント、スクロールスターフィールド、そして画面下部を走るスクロールテキスト。ヴィンテージな素材。ロゴ。テキスト。スクローラー。しかしスターフィールドはありません - それ以外はAnthroxの堅実な努力です :)
デモシーンはこれらのイントロから成長しました。クラッキングはやがて背景に追いやられ、コーダー、グラフィシャン、ミュージシャンが、彼らの能力を披露し、他のグループと競い合い、マシンを限界までプッシュする長編プロダクションに貢献しました。驚異的な創意工夫と純粋な「コードとしての芸術」の偉業の中で、このシーンは今日でも生きており、グループはこのようなものやこのようなもののような息をのむようなプロダクションを生み出しています。どちらも7MHzの家庭用コンピュータで、フロッピーディスク、1MBのメモリ、そして1985年のサウンドチップを搭載していることを念頭に置いてください。しかし、私がその純粋なスキルと献身をどれほど賞賛するとしても、私が常に魅了されてきたのは、初期の「シングルスクリーン」のスクロールテキストとスターフィールドのクラクトロでした。それらは私にとって一種の神秘的な質を帯び、私が外部からしか経験できなかったシーンと文化を暗示していました。だからこそ、私はSinclair BASICで、それらを再現しようと無駄な時間を費やし、いつか自分自身のAmigaを持つ日を夢見ていたのです。
ジャンプバック
私は最終的に一連のAmigaシステムにアップグレードし、いくつかの「シーン」グループに参加し、様々な活動に没頭しましたが、試験と10代の終わりの時期が迫ってきました。私は当時Z80コードをいじっていましたが、68kアセンブリについては、大学でのいくつかの「組み込みシステム」モジュールのおかげで、交通信号機やエレベーターコントローラーのセットをプログラムしなければならなかったため、なんとかごまかせる程度には知っていました。しかし、私の$DAYJOBではそのようなものの需要はあまりないので、ほとんど記憶から消えていました。私は空き時間に多くのプロジェクトで作業を続けており、その中でもお気に入りの一つが私のTNFSサイトです。これは、古いスタイルのBBSシステムまたはSpectrum用のインタラクティブな「ウェブサイト」のようなもので、Sinclair BASICをどこまでプッシュできるかという楽しい実験から生まれました。これはSpectrumに搭載された最新のネットワークカードに依存しており、そのおかげで私はTNFSプロトコル愛好家の「Desertkun」とチャットするようになりました。彼は現在、Speccy用の素晴らしい新しいWiFiネットワークカードを製造しており、彼のプロトタイプのいくつかを提供してテストしてくれました。彼のハードウェアと低レベルのコーディング能力に大いに刺激を受け、ビデオ通話で開発環境を比較していたとき、彼はなぜ私が自分でZ80アセンブリを書かないのか尋ねました。軽いコメントでしたが、挑戦は設定されました!サイト全体をアセンブリで書き直す気にはなれませんでしたが、初期の「BBStros」のスタイルでそれを宣伝するための自己完結型イントロを作成できると考え、ついに私自身のシーンプロダクションを持つクールな子供の一人になれると思いました :) 結局、どれほど難しいことか?(おおおー、伏線!)
開発環境
このプロジェクトの開発環境は非常にシンプルで、TNFSサイトの開発にも使用しているのと同じスタックです。Makefile駆動のビルドシステムを使用し、コードをPasmoアセンブラ、zmakebasの私のフォーク(BASICファイルを作成するため)、そしてテスト用のFUSEエミュレータに通しました。実際のハードウェアでの最終テストのために、.tapファイルをローカルのTNFSサーバーにアップロードし、そこで+3で実行しました。大きく貢献した追加ツールをいくつか挙げる必要があります。一つは、Z80命令を検索しているときに見つけた素晴らしいウェブベースの「asm-エディタ」です。このサイトには、すべてのZ80命令の優れたリファレンスがあるだけでなく、サンプルコードを実行してメモリやさまざまなレジスタの状態変化を確認できるエディタもあります。例えば、djnz命令を例にとると、それを構築して、例のループ構造を一度に一つずつステップ実行できます。または、スクリーンショットにあるadd命令の私の例を試して、レジスタからビットがシフトアウトされたときにキャリーフラグがどのように機能するかを確認してください。Pasmoとは少し異なる構文を使用しているため(コードを直接ドロップできませんでした)、手動でステップ実行する際には大いに役立ちました。そして最後に、おそらくこのプロジェクトで使用した最も重要なデバッグツールは、ノートとペン、そして私の2匹の犬です(「こんにちは!」とBiscuit & Pebbleに言ってください…)。これについては、さらに詳しく書くつもりです。