Windows上でJWASM(フリーのMASM6互換アセンブラ)と98エミュを使ってのプログラム作成に関するエトセトラ。また、PC-98プログラミング関係の書籍紹介とか自作ソフトの進捗とかも。

この項の存在意義

PC98で拡大縮小は難しいらしいので、それに関しての個人的なメモ。
ZOOMコマンドの検証以外はコードを書いていない思考実験です。

拡大

GDCのZOOMコマンドで拡大

これはGDCにコマンドを送って線を書いたり文字を書いたりする時に有効っぽい。
VRAMを書き換える場合には意味はない模様。

テーブルを使って拡大

0101→00110011などにするのが拡大なので、0000〜1111などをテーブル使って処理すればいいじゃない、という速度優先のやり方。
テーブルはExcelを使ってcsvを作成し、プログラムでは[bx+si]で処理すると非常に簡単だろうと思う。
2^nはblを使って再度呼び出しとかで使い回しが効くが、3倍は別の表が必要だったりするし、再呼び出しまですると逆に遅い可能性が高そう。

力業

あるレジスタを0にして、拡大対象の1の桁が1→3を足す、2の桁が1→12を足す…と言うのを繰り返すだけ。
ループとシフトを使えば容量はかなり小さくなるので、遅い代わりににメモリの負荷は小さいだろうと。
eaxなどを使えば4倍まではいけるし、足す数字を変えるだけなのでMACRO化とかPROC化しやすいのでそういう意味では楽そう。

縮小

メタルフォークでの場合

手元のフリー版を動作させてみた限りでは、途中のドットを間引いて縮小表示を実現している模様。
パッと見、残す割合は2/3と1/2程度だと思う。
同人版にはソースが付いているそうなので、それを持ってる人はそれを参照。


自分では特に思いつきませんでした。

余談のメタルフォークの見た目での分析
1ドットが8×8画素で構成され、拡大、縮小してもドットのサイズは不変。
背景はGRCGのTDWモード塗りつぶしで描画っぽい気がする。(対応機種でEGCを積んでいないのが含まれているし、自機と敵のヘリ以外EGCを使う旨味があまりないので…)
拡大の場合、基本は縦横の表示回数を増やして対応してるっぽい。
斜めの時はドットをずらして表示し、斜めに見せている。

驚異の回転技術だが、ステージファイルが256ドット×256ドット固定らしく、同人版ではステージエディタがあったようなので、事前にテーブル処理で全ての回転データを作成してステージファイルとし、回る度にステージ画像のデータ元セグメントを切り替えて表示していたのではと思われる。
よく見てないので適当だが、回転角度は45度単位かその半分か、だと思う。
テーブルで回転画像を作るのと、角度毎に自機と背景の対応を設定してループする様にできれば、後は何とかなりそう。

また、単純に切り替えるのではなく、中心部から順に切り替えてそれっぽい表示にしている気がするが、気のせいかもしれない。

同人版のソースを是非見てみたいが、今更出てこないだろうな…

Menu

管理人/副管理人のみ編集できます