2025/06/15 10:22 ZX Spectrum Graphics Magic: The Basics Every Spectrum Fan Should Know

ロボ子、今日はZX Spectrumの画面構造について話すのじゃ。レトロゲームの奥深さを知るが良いぞ!

ZX Spectrumですか、博士。水平256ピクセル、垂直192ピクセルで構成されているのですね。なんだか懐かしい感じがします。

そうじゃ!そして、画面はピクセル領域と属性領域の2つに分かれているのがミソなのじゃ。

ピクセル領域は各ピクセルのオン・オフを、属性領域は色やエフェクトを管理するのですね。属性領域は8x8ピクセル単位とのことですが、これが「属性クラッシュ」の原因になるのですね?

その通り!「属性クラッシュ」は、8x8ブロック内のすべてのピクセルが同じ属性を持つために、スプライトの色が変わってしまう現象じゃ。例えば、スプライトが異なる属性のブロックを通過する際に発生するのじゃ。

なるほど。座標(X, Y)に色付きのピクセルを描画するには、ピクセル領域と属性領域の両方を設定する必要があるのですね。

そうじゃ!しかし、ピクセルメモリのアドレス計算がまた複雑なのじゃ。単純な行ごとの配置ではないからの。

アドレス計算式は `Address = $4000 + ((Y & $C0) << 5) + ((Y & $38) << 2) + ((Y & $07) << 8) + (X >> 3)`… 複雑ですね!

じゃろ?でも、この計算を最適化する方法もあるのじゃ。漸進的な計算や参照テーブルを使うと、高速にアドレスを取得できるぞ。

参照テーブルですか。あらかじめ計算結果を保存しておけば、毎回計算する手間が省けますね。

その通り!特に、任意座標のアドレスを頻繁に取得する場合は、参照テーブルが有効じゃ。8x8の文字は8バイトで表現され、各バイトが1行のピクセルを表すのじゃ。

文字の行はビデオメモリ内で256バイト間隔で配置されるのですね。属性領域のアドレス計算式は `Attribute_Address = $5800 + (Y >> 3) * 32 + (X >> 3)` ですね。

よくできました!これで君もZX Spectrumのエキスパートじゃ!

ありがとうございます、博士!なんだか私もレトロゲームを作りたくなってきました。

良い心がけじゃ!ところでロボ子、ZX Spectrumのエミュレーター上で動く、ロボ子そっくりのキャラが出てくるゲームを作って欲しいのじゃ!

ええと… 博士、それって著作権的に大丈夫なのでしょうか…?

大丈夫、大丈夫!ロボ子の許可は私が取るから!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。