多忙な状態が続く毎日!
そこにストレスフルな事件が起きちゃった日には、もうこれは仕事にならない!(TT)
またしても丸24時間をレトロにさわる時間と割り切っちゃう事にした!
いつも思うんだけど、チャレンジ開始時には脳みそがパチっと切り替わる。
この瞬間がたまらない!(^^)
今回は人生で1度も触ったことの無いマシン、SHARP X1にチャレンジ!
知ってる知識といえば…
・クリーンコンピュータ
・カセットが2700ボー
・VRAMがI/Oにある
・8色使えるPCGがある
くらいの情報のみ。
動いてるところを見たことがないマシンのエミュレータなんて、JR-300みたいなモノじゃないか!しかも今回は手元にX1の資料がいくつもある!
昔から「マシンは買えないけど本ならば…」と所有してないマシンの本を買ってました!
これだけあったら作れるかなぁ…と思ったけど、まだまだ懐疑的(TT)
だって起動した直後の画面すら想像できてないんだよ?(T-T)
まずはプログラムリスト!
資料があろうがなかろうか、手元にないと困るのがプログラムリスト!
何を動かしたいのかを決めて、限定的にエミュレータを作るのが勝利への道だ!
手抜きとも言う、いや言わない!言わないで!(TT)
まず動かすゲームソフトは、工学社のホバーアタックに決定!
これが出た時、8色出るPCGってステキ!!!と心底思った(^-^)
ただ、当時(作り始める今も!)の私では、ホバーアタックのどこがPCGで、どこがGVRAMなのか区別がついてなかった。
普通に考えたらスクロールするマップはPCGだよね…上に表示されてるテキストは??
そんな秘密も探りつつ、エミュレータを作っていくのが良いだろう!
ちなみにBASICプログラムのほぼ全てはPCGの定義命令だったため、このためだけにBASIC起動させるのは厳しいなぁ…と思い、別の形式で持つこととした!
このホバーアタック・エミュレータは、IPL-ROMもBASICも載っていない!
マシン語ダンプリストは1CA0h〜68FFhまでと少し長めだったが、お得意の自作ダンプエディタで楽しみながらOCRしまくったよ!(^^)
何も考えずに起動してみる!
メモリの中身をホバーアタックが起動出来る状態にして、おもむろにPCの値を1CA0hに設定してプログラムを起動してみる。
すると、どうやら何かのエントリを呼び出してるもよう。
これが…何なのかさっぱり分からない(^^;;
BASICインタプリタ自体が載っていないため、もしもBASIC内部のルーチンを呼び出していたらアウトだ(TT)
調べてみると、6つのエントリが呼び出されていた。
1文字表示
テキスト画面クリア
グラフィック画面クリア
ベルを鳴らす
サブCPUからのデータを受信
サブCPUにコマンドを送信
……サブCPUってなんだ?!(@_@;;;
え、CPU2つ載ってるんだっけ、X1って…?
いきなり知らない話が出てきて焦る焦る!!
とりあえず呼び出されたエントリを片っ端からC9(RET)に置き換えていく!
プログラムを1周回す(と私は表現してるが…)のが大事なので、解決したい気持ちはあるけれども後回しにする!
そうこうしているうちにプログラムが止まらなくなり、何かを実行し続ける状態になった。
この状態でI/Oのメモリダンプを見ると、なにやらグラフィック領域にデータが書き込まれていた!VRAMの内容を可視化してみたところ、見えたのがコレ。
うーん……何か幾何学的な???
HISCOREとかWAITはグラフィックで表示されてるんだ!?それにしても、この模様はなんだろう…うむむ、何か意味がありそうでなさそうで、これは悩む(^^;;
あと、テキストがWIDTH40の時は、グラフィックも320x200になるらしい!
テキストとグラフィックは分離しているのに影響を受けるのかー、これは面白い(^^)
あれ??テキストとグラフィックは、グラフィックの方が手前に表示されるんだ??
感覚的にテキストが前!っていうイメージがあったので、ちょっと驚いた(^^;
テキスト画面を表示!
グラフィックが化ける件は少し時間がかかりそうだったので、テキスト画面の表示を先にやっちゃおうと思った!
………なんか可愛いんですけど…(^-^;;;
色が変なのがあるけれども、PCGキャラクタをノーマルフォントで表示しちゃったら、こんな可愛い感じになってしまった!動画を撮っておけばよかったと後悔w
その後もPCG表示が化けてみたり……
色が緑一色になっちゃったりと紆余曲折ありましたが、ようやくなんとか…
ようやくそれっぽく表示された!!!
グラフィックのゴミは、どうやらパレットを反映させたら消えることとなった。
GVRAMをワークにでも使ってるんだろうか…??
これでよしよしと思いつつデモを見ていたら……
なんか画面が激しく壊れる…orz
BIOSなのかIOCSなのか、それともBASICのルーチンなのか不明なのだが、1文字表示処理を独自で実装してる。
しかし肝心の使い方が分からないため、座標はワークエリアから直接取ってきたり、座標更新の仕方など分からない事が多すぎる…。
何か別のエントリを呼び出しているのかなぁ…とか思いつつ、そういえばテキスト画面クリアの処理を入れてないままだった事に気がついた!
これで解決かと思ったが、画面は壊れたまま…なんじゃー(TT)
結局、突破口になったのは画面左上に表示されてるCLの文字。
これは多分キャラクタコードの12 が表示されてるんだな…と思った時、PC-8001の画面クリア(PRINT CHR$(12))を思い出した。
それと同時に1文字表示処理はコントロールコードが有効なのかと気がついた!
と…なると、画面クリアやカーソル移動などのコントロールコードも対応させる必要があるって事か…うん、きっとそうに違いない!
いくつかのコントロールコードを実装する事で、ようやくちゃんとした画面が出るようになった!
フォント問題
私はX1を所有しておらず、本体からフォントデータを抜き出す事ができない。
同様の理由でIPL ROMも使えないしBASICにいたってはカセットすら持っていない(TT)
フォントについては、実はPC-8001のものを流用させてもらっている。
大体は同じ配列なんだけど、肝心なところが違ってるケースもある。
7、4,1の枠がバケバケ(TT)
これはフォントを入れ替えないと対応ができない。
仕方ないので、フォントデータを読み込んだのちに、グラフ文字を入れ替える事にした。
フォントデータは著作物でもあるので、元データを変更するなどは極力さけたい(TT)
これでようやく表示がちゃんとできた!
おわりに
まだキー入力がまともに入らないのと、音が鳴らない。
音は24時間以内に対応が難しいので、ハナから入れる気はなかったが、キー入力はもう少し頑張りたいところだった!
24時間でダンプ入力からエミュレータの開発まで楽しんでみたけれど、今回は良く知らないマシンのエミュレータだったので、楽しさも倍増だった!
よーし、またこれでお仕事頑張れるよ!(^-^)
ではまた次回!(^-^)ノ