現在地
ソフトウェア
CPU判別法(80編)
CPU判別法(68編)
現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。
自作のUniversal Monitorのソースコードを例に解説してみます。
MC6800系
まずは昨日目処が立ったと書いたMC6800系からです。
該当部分のソースは次のようになっています。
Universal Monitor コマンド一覧
Universal Monitor Z8の基本機能が現在対応している全プロセッサで使用可能になりました。
前回はコマンドの概要のみを書きましたが、今回はコマンドラインの形式も書いておきます。
コマンドは原則1文字ですが、PI
などのように2文字のものも一部あります。
<addr>,<offset>といった数値パラメータは16進表記で必要以上の桁数を入力した場合は末尾が使用されます。
英字の大文字小文字は区別されません。
コマンドとパラメータの間・パラメータとカンマの間には空白を入れても構いません。ただし行入力バッファは短いので注意してください。
FDCボード (テスト編 その4)
カテゴリー:
Universal Monitor Z8
カテゴリー:
先日のROMエミュレータを2732には去年作ったZ8613ボードにモニタを移植するのが目的でした。
とりあえず基本的な機能が動くようになりましたので、試しているスクリーンショットを載せておきます。
まずは0FFF8H~0FFFFH,0000H~0077Hまでのメモリダンプ、次のHコマンドでCが表示されているのでこれはプログラム(コード)メモリ空間です。
FDCボード (テスト編 その3)
カテゴリー:
ちょっと間があいてしまいました。
前回CRCエラーが出ているとはいえ一応セクタが読めるようになりました。データ転送のオーバランも発生していません。
FDCの回路を作るのは今回が初めてですが、8ビット時代に製作記事はよく読んでいました。そこではデータ転送が間に合うかどうかが大きな課題として扱われることが多く、ソフトウェアでステータスを見ながらでは取りこぼすということでいろいろな工夫がありました。
- 他の割り込みを禁止する
- DMA(Direct Memory Access)を利用する。これは速度の余裕ができてからもほかの理由で使われ続けました。
- ステータスをチェックしないでデータ転送する。そのままでは正常に転送できないので、ハードウェアでFDCへのアクセスを引き伸ばす。
それで当初は心配していたのですが、さすがに当時とはCPUの速度が一桁以上上がっているので余裕がありますね。
FDCボード (テスト編 その2)
カテゴリー:
前回手動でコマンド発行するところまで書きました。
このままでは面倒ですし、何よりデータ転送を伴うコマンドが使えません。
メモリ上にコマンドとパラメータ列を書いておいて自動で送信、リザルトステータスの受信までを行えるようにします。
当初はステータスレジスタを参照しながら送信・受信を自動切換えさせようとしたのですが、なぜか不安定だったのでパラメータやリザルトのバイト数を指定するように変更しています。
これでFDCとのやりとりはできるようになったので、実際にディスクを読んでみることにします。