V20-MBCエミュレータの開発 その10

絶賛行き詰まり中!

エミュレータの開発は暗礁に乗り上げてる状態です!(ToT)

症状としては…

・Turbo Pascalコンパイル後のプログラムが実行出来ない

・BASIC Compilerのコンパイル後のプログラムが実行出来ない

…どっちも原因を調べるのは相当に厄介です(T^T)

例えコンパイラの中身を解析して理解できたとしても、なぜそうなってしまうのか、本当はどうあるべきなのか…などを調べるのに相当苦労しそう。

うーん、でもきっとキャリーフラグやオーバーフローフラグの生成に問題があるんだろうなぁ…と思いつつも、調べきれない状態が続いてます。

 

清く正しく現実逃避!

焦っても仕方ないし、のんびり見てくしかないかー…とハラをくくったので、ここは潔く現実逃避をしつつ、デバッガならぬトレーサーっぽいものを作ってみる事にした。

 

テキストに出力した大量の逆アセンブラを追い掛けていくデバッグ方法でも、ある程度の大きさまでは平気だと思うんだけど、そろそろキツくなってきた。

あと、リアルタイムにメモリの内容が見られないのもやりづらくて仕方が無い。

いくつかの条件を満たそうとするとIDEのような総合環境があると便利なのかも知れないけれども、デバッガとしての機能は大して必要無いという事実もある。

…となれば、テキストベースで十分に作れそうな気もする。

試行錯誤しながら作ってみましょ!(^-^)

 

画面描画については、cursesというライブラリを利用する事にした。

このライブラリを使えば、BASICのような「LOCATE X,Y:PRINT "HELLO"」みたいな感覚で画面を作っていく事が出来る(^^)

これなら楽しみながら作れそう♪

 

まずはなんとなくレイアウトを考えてみる…。

f:id:PocketGriffon:20200902014037p:plain

特にこだわりがあるわけではないけれども、80x25のサイズで動くモノを考えたい。

一番上がレジスタ、その下がダンプ、逆アセンブラ、コマンド入力の4つのイメージ。

レジスタ表示はSYMDEB.EXEの出力を見慣れてしまってるので、出来るだけ表示レイアウトを変更したくない。行数がもったいないけど横に並べて見えるようにしよう。

将来的には画面サイズを縦長にすれば、ダンプや逆アセンブラのウィンドウが伸びるようにすればいいんだろう…と思うので、今はこだわりなく配置しておく、うん。

 

試しに表示してみた感じ↓

f:id:PocketGriffon:20200902014648p:plain

おお、なんかソレっぽいw

それぞれのウィンドウはTABキーで切り替えてフォーカスさせる。レジスタウィンドウは特に何をするわけでもないのでフォーカスは当たらなくした。フォーカスされてるウィンドウを目立たせるために、キャラクタを[-]から[=]へしてみたけど、あんまり目立たない…。

 

もう少し作り込んでみたのがこちら↓

f:id:PocketGriffon:20200902015020p:plain

[#]にしてみたらだいーぶ目立つようになった!

メモリのダンプ表示をスクロールさせられるようにしてみたら、速度的には満足出来るほど速かった。エミュレータで動いてるわけじゃないのでそりゃそうだ(^^)

 

f:id:PocketGriffon:20200902015204p:plain

アセンブラにカーソルを持って行き、上下カーソルで移動させると「その命令を実行した状態」にレジスタやメモリがセットされる。

メモリについては変更があった箇所のみを保存して、その差分パッチを当てる事でメモリの状態を保持出来るようにした。まぁふつーのやり方だね。

今のところ際限無く情報を保持してしまうので、メモリの使用量が気になるところ。

起動→終了で2050KBの消費、試しに500行ほどスクロール(実行)してみたところ、2132KBに増加。500命令で82KBという事は、1命令実行すると約168バイトずつ消費していく。うーん…これはちょっと多い??まぁメモリの効率化はあとで考えよう(^^)

 

f:id:PocketGriffon:20200902015902p:plain

コマンドラインでの入力も出来るようになった。

cursesライブラリに便利なものがあったけれども、なんとなく自前でreadlineっぽいものを作りたかったので、最低限の実装だけしてみた。

 

凝り始めるといつまでも作ってしまいそうなので、あと気になっていることを何個か入れたら、元の開発に戻りますw

コマンドラインにヒストリ機能が欲しい

・メモリの変更があった箇所を色替え

レジスタも同じく色替え

・コンソール出力エミュレーション

・その他

とりあえずこのくらいやってみたら戻ります、うん。

最後の「その他」ってのが怪しいけど(^^;;

 

ではまた次回!(^-^)ノ