- SCREEN3とは
- いにしえの、SCREEN3アニメの提唱者
- なぜSCREEN3でアニメーションが良いのか
- SCREEN3アニメーション専用の画像変換ツールが登場
- アニメーションを実現する方法
- 皆さんのSCREEN3作品集
- アニメーションから、その先へ
- 【参考】DMシステム2を利用したアニメーション事例
SCREEN3とは
- MSX1から利用できる、1画面が横64×縦48ドットのスクリーンモード
- SCREEN3では点(ドット)のことを「ブロック」と呼ぶ
- 通称「マルチカラーモード」と呼ばれ、ブロックは16色から自由に配置できる(SCREEN2の横8px毎2色のような制限が無い)
- 1ブロックの点の大きさは、他のスクリーンモードでは4×4pxに該当する(64×48ブロック=256×192px)
- VRAMのデータ仕様が複雑で使いづらい
- MSX2以降ではカラーパレット(RGB333)が利用できる
- MSX2以降ではVDP設定を変更すると128KBのVRAMへアクセスできる(デフォルトは16KB)
- MSX2以降ではVDP設定を「212ラインモード」へ変更すると縦方向が53.5pxまで拡張する(デフォルトは「192ラインモード」)
SCREEN3を扱ううえで最大の課題が「VRAMのデータ仕様が複雑」なことです。MSX2以降のビットマップモードのようにシンプルなデータ管理ができなく、なぜか縦2×4ブロック(横8×縦32px)単位の管理が必要です。
そのため、「とにかく画質が粗い」という見た目の問題も相まって、SCREEN3の活用がユーザー間に広まらず、ほとんど見向きされませんでした。
この本はバイブルです。ぜひ大切に保存してください!
いにしえの、SCREEN3アニメの提唱者
SCREEN3を用いたアニメーション動画の制作については1990年代から研究はされていて、2000年頃にWebで公開された「スクリーン3のススメ」で広く(!?)認知されるようになりました。ここに、偏屈ながらも熱い想いが集約されています。
↓こちらをクリック↓
一般人の見識「こんなん何の役に立つん?」がまさにその通りなんですが…。技術的には可能であることが分かりつつ、とにかくアニメーションのフレーム(コマ)データをどう効率的に作成するか?という問題が目下の課題でした。
なぜSCREEN3でアニメーションが良いのか
- SCREEN3はVRAMが低コスト。1画面を構成する点の数が64×48ブロックしかなく、実質データ量は1536バイトとかなり小さい
- SCREEN3は最大16色使える64×48pxのビットマップ画像とも言え、「横8px中2色しか使えない」というような色の制限は受けないので、絵を描きやすい
- 画面のページ切り替え処理がBASIC言語で簡単に実装できるので、フレームアニメーションがやりやすい
- MSX2以降の機種ではVRAMが128KB搭載されており、1フレーム2KBと見積もっても60超のフレームを格納できるため、オンメモリでのアニメーションに適している
- MSX2以降の機種ではデフォルトカラーのほかパレット16色を自由に作成できるので、アニメーションのフレームごとに最適な色を決められる
お分かりのように、基本的にはMSX2(VRAM128KB搭載機種)以上の規格での動作が前提になります。そして、極めつけが…
2023年夏にリリース予定である MSX0 Stack の登場により1980・90年代にMSXをいじっていたマイコン少年のプログラミング熱・MSX熱がにわかに再燃しつつあるなか、MSX0 Stackの液晶画面が実質4cm角というとても小さな面積であることで、精細な画面表示をしてもどうせよく見えない(実際SCREEN6/7の高解像度はMSX0 Stackでは正確に表示できない)のであれば、いっそSCREEN3という粗画質でもMSX0 Stackの小画面なら意外と見栄えがするのでは?という予想がありました。
- MSX0 StackはMSX2+相当のエミュレーションで動作する(=MSX2以降に拡張された機能が利用できる)
- MSX0 Stackのファイルアクセス(ローディング)は瞬時である(実際のFDDのアクセス速度をエミュレーションしていない)
実際にMSX0 StackでSCREEN3アニメーションのプログラムを作成・実行する人が現れ始め、粗画質の筆頭株であるSCREEN3のスクリーンモードが見直されてきています。
SCREEN3アニメーション専用の画像変換ツールが登場
「Easy SCREEN3 Animation Converter(オンライン MSX SCREEN3アニメーション画像コンバータ)というWebアプリが登場しました。任意の動画データをWebブラウザでアップロードすると、SCREEN3のアニメーションデータを生成し、起動用BASICプログラムまで付いてきます。
なんと良い時代になったんでしょう。
アニメーションを実現する方法
ページ切替法
アニメーションのフレームデータをMSX2のVRAMへ大量に配置しておき、SCREEN3におけるパターンジェネレータテーブルの開始アドレスを1コマごとずらすことで、あたかもページを切り替えるように高速で画面を書き換えることができます。ただしこれには前提条件があります。
BASIC的にはSCREEN5・VDPモードはSCREEN3
MSX2はVRAMが128KB搭載されていますが、MSX BASICでSCREEN3を指定するとVRAMは先頭の16KBしかアクセスできなくなります(MSX1との互換性維持のため)。そこで、BASICではSCREEN5として起動し、VDPへSCREEN3のモードへ切り替えるよう直接命令します。こうすることで、MSX BASIC上はSCREEN5の認識のまま実際はSCREEN3の画面として表示されるようになります。
BASIC上はSCREEN5のままなので、VRAMへのアクセスは16KBの制限を受けず128KBアクセス可能になります。アニメーションのフレームデータをVRAMへ大量に配置しておき、パターンジェネレータテーブルの開始アドレスをフレームごとに変更すれば画面がどんどん切り替わる、という仕掛けです。
かくいう筆者(nf_ban)も実は去る90年代にページ切替法でSCREEN3アニメーション動画を作成していました。フレーム画像はソニーのビデオデジタイザカートリッジ・HBI-V1を用いて映像を1枚1枚デジタイズ(デジタルスキャン)、そしてSCREEN8→5→3コンバータでデータ化しました。
ブロック転送法
RAM→VRAMのブロック転送
RAMに格納した画像データをVRAMのパターンジェネレータテーブルへ次々と転送することで画面を書き換える手法。ページ切り替えではないため処理速度は低下しますがVDPの制御はシンプルで、MSX1でも利用できます。予めフレーム画像を切り替えるだけの予定調和的な動画でなく、CPUによる演算結果をVRAMへ都度出力したりするようなインタラクティブな演出におすすめです。
反面、RAMの容量が不足気味(特にBASIC+FDD環境では約20KB程度まで減少)となり、フレーム画像を多数用意するような演出には向きません。マッパーRAMまで活用するなら話は別ですが…
ROM→VRAMのブロック転送
画像データをメガROMの形状にして、ROMからVRAMのパターンジェネレータテーブルへ次々とブロック転送することで画面を書き換える手法。データ量に応じてROMの容量を拡張してゆけるのでRAMのようなMSX本体側の制限がなく、長編のアニメーション動画にも向いています。
音楽再生をMSXの音源でこなし、音声合成もやっていて、もはやオーパーツでしょ…
ブロック転送による縦スクロール
SCREEN3のパターンネームテーブルは横2×縦8ブロック(横8×縦32px)が1単位となっているため、1ブロック単位の画面スクロール処理がとてつもなく面倒です。
とは言え、パターンネームテーブルの最小単位である「縦8ブロック(32px)単位の縦スクロール処理」はBASICでも比較的簡単です。
縦8ブロック(32px)単位で縦スクロールする、BASICのサンプルプログラム。
同様に、パターンネームテーブルの配置を工夫すれば「横2ブロック(横8px)単位の横スクロール」も比較的簡単に実装可能かと追われます。
パレット切替法(パレットアニメーション)
MSX2ではRGB333(RGBの各輝度が3bit)のパレットを16色作成できます。パレットを高速に切り替えることでアニメーションの演出に使うことができます。色を変更するだけなのでデータ量が小さく(16色フルに変更してもたった32バイト)、処理速度も軽いのがメリットです。
パレットアニメーションはMSX・FANの「AVフォーラム」のほか、市販レトロゲームの演出でもよく使われていました。「スーパーマリオブラザーズ」のコインが光る表現、「ベア・ナックル」の海岸に波が打ち寄せる表現…それらはキャラクターの色は変わっていますがキャラクターのパターン(ドット絵データ)が変更されているわけではありません。
この手法はSCREEN3に限らず、SCREEN5以降でも利用できます。MSXを用いたサンプルは以下のページで解説しています。
↓こちらをクリック↓ www.gigamix.jp
白黒画像のOR演算法
上のツイートを解説します。白黒2階調のフレーム画像4枚を工夫して合成し、「見せたいフレーム」だけ色を有効化しそれ以外は無効化(背景化)するようにパレットを切り替えると、最大4枚のフレームを1画面のデータ量で表現できます。
どういうことか言うと、白黒2階調の画像を以下の仕様で作成します。
- 1枚目は「背景色をcolor 0、有効色をcolor 1(bit0が1)」
- 2枚目は「背景色をcolor 0、有効色をcolor 2(bit1が1)」
- 3枚目は「背景色をcolor 0、有効色をcolor 4(bit2が1)」
- 4枚目は「背景色をcolor 0、有効色をcolor 8(bit3が1)」
よく見ると、有効色が1bitずつずれています。この4枚をOR演算で合成します。
4枚なので4bit、全てのbitが1になっている(&b1111=4枚全ての画像で色が付いた)点の状態でも、最大16色(4bit)しか使用しません。SCREEN3は64×48pxしか領域がありませんが点の色を16色の中から自由に決められる、ある意味ビットマップ画像ですから、OR演算で合成した画像はそのまま表示できます。
そして、MSX2以降の規格ではパレットによって16色を自由に決定できますので、見せるフレーム・見せないフレームごとにパレットを変更することで影絵のようなアニメーションが実現できるわけです。
皆さんのSCREEN3作品集
アニメーションから、その先へ
SCREEN3はもはやアニメーションを超えて、ドットが粗いキャンバスとして自由に活用できるようになるかもしれませんね。
【参考】DMシステム2を利用したアニメーション事例
ページ切替法とパレット切替法の二つを組み合わせています。