JR-300エミュレータの開発話、第6弾!(^-^)
かなり動いてきた感はあるけれども、今の動きがどのくらい正しいのか私には分かってない。分からないどころか、誰もJR-300を知らないので答えがない(^^;;
実は妄想のマシンを作り上げてるだけなのかもしれないな……
そんな不安を感じつつも、JR-300と書かれたカセットテープを信じて作っていくよ!(^^;
2022/11/26(土)
テキストに描画するフォントを、ノーマルフォントを使うのかPCGフォントを使うのかの切り替えは、どうやらアトリビュートのbit6(0x40)らしい事が判明。
bit6が1の場合はノーマルフォントを、0の場合はPCGフォントを使うらしい。
8ビット情報のうち、これで7ビットの役割が判明。(xP_BBB_FFF)
残りのMSB(x)は何に使われているのか…汗
PCGを表示出来るようにプログラムを変更してみたところ、画面上から変なゴミみたいな表示は消えた。でも…画面には文字しか表示されていない。
まさかこういうデモ??(@_@;
いや違うだろうな…うーん…
動作時のログを追ってみると、大量のLINE描画が発行されている。
LINE命令のPSETするかPRESETするか判定がBASICの時と違っているようで、なぜかLINEが描画しない。
あれれおかしいな…BASICでさんざんテストしていたのに(T-T)
VRAMにはデータがでてるんだろうか?
うん、VRAMを無理やり描画(というよりもアスキーアート的な感じで出力)してみると、確かにデータは出力されてるっぽい。
仕方ないので、オールセット(理論上は真っ白な線が表示される)でテストしてみたところ…
うお!絵が出た!!
出たけど…出たけど……なんか変?!
画面の解像度が640x200ドットになっていそう…
あとグラフィックよりもテキストが奥に表示されてる。
これはBASICインタプリタの初期化に合わせたつもりだったけど、解釈が逆だったか。
デモンストレーションの結果を見て修正する必要がありそう。
あと…なぜか色が出てる。
ドットが真っ白になる事を覚悟して変更をしたつもりだったのに…。
うーん、1つ1つの動作が謎いぞ。
横のドットを修正して表示されたJR-300ロゴ!
気になるところが多いなー。
まず…背景が青一色であってるんだろうか??
それに画面下の無限マークのテキスト。これも意図と違う気がする。
カーソルが表示されちゃってるのは、これはまだ未解析のサブCPU側のコマンドがあるからだろう。
デモを1周回す
おかしな画面は置いとくとして、まずは先にデモを1周回しちゃおうと思い、未定義なグラフィックコントローラな部分などをすっとばしていったところ、なんとか回ることに。
デモは全部で5種類入っていた。
・タイトル(JR-300表示)
・ワープロ(漢字表示は??)
・絵(ペイントで塗りつぶされちゃう:最後に飛行機?が飛ぶ)
・スプレッドシート
・棒グラフ?(白で塗りつぶされちゃう)
絵が表示されるデモを見たとき、PAINTがハデにあふれて画面が1色になってしまう現象が出ていた。LINEの終端が届いてないのかと思ったけれど、デバッグログに不穏なものが…。
…なにかの……補間機能っぽいものを使おうとしているデータがでていた。
しかもタイプ違いの8種類。
コレは嫌な予感がする…(-_-;
これ…もしかしたら円を描こうとしてるんじゃんないだろうか??
BASICではドットを計算してPSETしていたCIRCLEだけど、デモでは違う?
私自身、グラフィックコントローラで円を描かせた経験がないので、パラメータが想像できぬ。
うぬぬ…これは困ったぞ(T-T)
気になる問題はあるけれど、後回しにできるものは後で解決する!
まずはこれらのデモを個別に1つずつ見られるようにする手法を確立しとかないと、この先のデバッグがとても大変になりそうだ!
プログラムで個別ジャンプ、またはジャンプテーブルが見つからないかな…。
…と思っていたら、あっさり見つかった!
0x010Dから並んでいるCALL nnnnがデモ呼び出しだった!
これを修正すれば、選んだデモだけをテストする事ができそうだ!(^-^)
そして目視で確認した時には5つのデモだと思っていたが、どうやら見えてないデモがあるらしく全部で6種類存在するっぽい。
・タイトル(JR-300表示)
・ワープロ(漢字表示は??)
・絵(ペイントで塗りつぶされちゃう:最後に飛行機?が飛ぶ)
・未知のなにか
・スプレッドシート
・棒グラフ(白で塗りつぶされちゃう)
2022/11/27(日)
謎の8回出ていた補間機能っぽいものが気になる。
もしも円の描画だとすると、なんとなくPC-9801で使用されていたGDCに似た機能を持ってるコントローラなんだな…。当時、そんな何種類もグラフィックコントローラって出てたんだっけ??
そう思いつつGDCの資料を見直したところ、同じものではないけれども、構造的には良く似てるとわかった。
コマンドそのものに共通点はないものの、コマンド系体的に良く似てるというか。
参考になるところがたくさんあることがわかった。
あああ……GDCの資料を見て思い出したことが!
LINE(0,0)-(319,199),7,,&HABCD ← 最後がラインスタイル
GDCと同じような機能があるのなら、ラインスタイル指定ができそうなんだけどなぁ…と思って調べていたら、しっかりデータが出てました…。
N88-BASICやF-BASIC4.0以降にあるラインスタイルと同じ指定方法だった。
うーん、一度試してみてErrorになった気がしてたんだけどな…。
対応するべき事がどんどん増えていく…。
・LINEのラインスタイル対応
・謎の8回補完機能解析
・グラフィックコントローラの実行サイクル試案
2022/11/28(月)
LINE命令のラインスタイルに対応させるため、一度初心に戻って詳しく調べる事にした。
そういえば、今までアドレスデータがビット反転されていたのをいちいち手で元に戻してチェックしていたが、デバッグログに出力するときにひっくり返したら簡単じゃん…と今更ながら思った。
それで一度、アドレスデータだけじゃなくて、すべてのデータをひっくり返して出力した。
出力されたデータを見たとき……ある衝撃が…。
つい先日、GDCの本を見た時のコードが思い出される…。
μPD7220でLINEを描画するのは
[78] TEXTW
[33] WRITE
[49] CSRW
[4C] VECTW
[6C] VECTE
の順番でコマンドを発行するらしい。
そんな目線でBASICのLINE命令で発行されているコマンドを追いかけてみると……
01 1E [78] - [TEXTW]
00 AB [D5]
00 CD [B3]
01 CC [33] - [WRITE]
01 92 [49] - [CSRW]
00 84 [21]
00 C0 [03]
00 04 [20]
01 52 [4A] - [MASK]
00 20 [04]
00 20 [04]
01 32 [4C] - [VECTW]
00 90 [09]
00 28 [14]
00 00 [00]
00 28 [14]
00 00 [00]
00 00 [00]
00 00 [00]
00 14 [28]
00 00 [00]
01 36 [6C] - [VECTE]
……え?
……ええ?
………えええ!!??
マジで?(@_@;
ちょっと待って!!
GDCと同じデータが出力されている!
今まで、アドレスデータはプログラムでビット反転されていたので「このデータは反転している」と認識できたけれど、コマンドデータはそのまま出力されていたので意識していなかった。
けど、よくよく考えれば同じデータポートに出力されているんだから、同じようにビットが反転したデータが送られていると考えるべきだったのか!
μPD7220は3画面同時書き込みが出来ないので、3回同じデータが出るのもうなづける。
あとPC-9801のようにメインメモリにはVRAMがマッピングされていないと思えば、沢山のコマンドが発行されるのも理解出来る。
なんてこった……ずっと不明だったグラフィックコントローラは、μPD7220だったのか!
これはもう確定事項にしてしまって良いと思う!(^-^)
ずーっと手元にGDCの資料を置きながら作業してたのに気づかなかったなんて…orz
うーん…ソースを書き直したくなるよ…どうしよ…(^^;;
ではまた次回!(^-^)ノ