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

EGCのエミュと実機の違い

前提事項

EGCはword単位でVRAMアクセス可能な点で、byte単位となる直接VRAMを扱う場合より転送速度が優れているとされています。
VRAMアクセスを行う場合はaxなどword単位で転送してもOKですが、EGCの場合は色々と問題が起きるので実際のコードで示してみました。
EGCはIOを叩くのが基本ですが、C++などでクラスや関数の初期設定を行っている感じで扱えるので、恐れるほどではないです。
情報系でなく組み込み系などもやったことが無く、N88-BASICとHSPはある程度、CとC++の基本しか知らないレベルの私が扱えるレベルですし。

EGCは扱った書籍も少なくなく、解説サイトやUNDOCUMENTED9801のネット公開版で情報を手に入れることも出来ます。
しかし、正確な仕様が公開されていないらしく、エミュレーターでは厳密に再現されていないようです。
そのことでプログラミング上困るのが、あるエミュレーターで正常に動くコードが別だと上手く行かない、どちらでも上手く行くのが実機だと動かない、ということが起こることです。
ということで、去年頃自分が体験したことを踏まえ、そういうことに関する調査を改めて行ってみました。
面倒だったので細かくはやってないですが、要するに偶数バイトからwordアクセスすれば問題ないです。
それ以外ではエミュ、実機のどちらかで上手く行かなかったりします。

また、IOの設定が同じだからと再設定を怠ると、場合によっては実機で正常動作しないことがあります。
これに関しては面倒だったので詳しく調査していませんが、04AEHのマスク設定はシフトをいじると消えるので、バグの原因となりやすそうです。

参考になる資料

EGCについて手持ちで一番詳しく分かり易い本は「マシン語ゲームグラフィックス」でした。
他の本で98関係全般の内容が載っているものでは「PC9801スーパーテクニック」がサンプルコードがあって良いでしょう。
「PC9801プログラマーズバイブル」は情報量があって良い本ですが、EGCについてはネットで無料の「UNDOCUMENTED9801」やEGCでググって出てくる某サイトと内容がほぼ変わらないと思います。

EGCに関する同じプログラムをキャプで見てみると

np2

T98Next

実機

マウス表示の際に04AEHのマスク設定を最初しか行わなかった場合


大まかな中身

縦線関係(np2基準で左から順に)

特に指定がない場合は偶数アドレスにword書き込みしています
1:04A4Hを0CAAH(TDW相当)に設定
2:1を4ACHを00F0Hにして転送で15dotシフトさせたもの
3:4A4Hを1000H(プログラマーズbibleなどで出てくるTDW相当)に設定した場合
  np2では上手く行かない
4:3をシフトしたもの
  np2では上手く行かない
5:04A4Hを0CAAHで4A8Hを0001Hにしてマスクを使ってみた場合
  全てで上手く行かない
6:5を15dotシフトさせたもの
  実機では上手く行くが、書き込み開始位置と次のアドレスまで1dotだったからだったっぽい
7:byteで書き込んだ場合
8:byte書き込みで7dotシフトした場合
9:byte書き込みで15dotシフトした場合
10:byte書き込みを15dotシフトし二回書き込んだ場合
11:奇数アドレスから書き込み
12:11を15dotシフト
13:奇数アドレスからbyte書き込み
14:13を15dotシフト
15:14で二回書き込んだ場合

マウス画像(3,4,8の下以外は基本的には上と共通です)

1,2:04A4Hに0CC0Hを入れて透過情報を書き込んだ場合
3,4:04A4Hが00CF0hの単純コピー
5,6:04A8Hを使ってマスクした場合
7,8,9、10:透過付きbyte書き込み系
8の下側:7dotシフトでbyte書き込み二回
11,12:奇数アドレスから
13,14,15:奇数アドレスから書き込み系


サンプルコードと必要なファイルなど

こちらから
mouse.pal:パレット定義ファイル
mouse.TCP:透過データ付き16色プレーン情報ファイル
103A_VRAM.TXT:VRAMアクセスのサンプル
103B_EGC.TXT:EGCアクセスのサンプルコード ★今回のメイン
その他:PC98用実行ファイルと画像データ

サンプルコードはJWASMでのコンパイルを確認しています。
MASM6ではそのまま、5ではセグメント定義部分を書き換えれば動作するはずです。

このページへのコメント

Yahoo!ボックスの一部機能終了により、サンプルコードのリンクが切れている様です

0
Posted by ねこなで 2020年09月15日(火) 00:09:18 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

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