You are here
ソフトウェア
INS8073のROMを読む
カテゴリー:
INS8070ボードでROMのBASICの1文字入出力ルーチンを独自のものにしようとしてうまくいかなかったと書きましたが、モニタを移植したことでROM内を読めるようになったので関連箇所を調べてみることにしました。
まずはPコマンドでROMのアドレス範囲(0x0000~0x09FF)をPCに持ってきます。
手頃な逆アセンブラがないかネットを探してみたのですが見当たらなかったので簡単なものを書いてしまいました。
さて、どこから手を付けるかですが、先頭から読んでいくのはしんどいです。
今回調べたいのは文字入出力だけなのでメッセージから追っていくことにします。
メモリダンプを見ていくとASCII文字列がいくつもありますが、多くはBASICの予約語なので今回の目的には使えません。その中で良さそうなものが見つかりました。
MC68010の判別(補足)
カテゴリー:
今回はブレーク処理についての予定でしたが、MC68010の判別で書き足らなかったことがいくつかありますのでそちらを書くことにします。
MC68008の判別
MC68008の判別もできないか考えたのですが...
- ソフトウェア的にはMC68000からの命令等の追加・変更はありません
- 最初MC68008は8ビットバスなので奇数番地からのワードアクセスで判別できるのではないかと思ったのですが、データシートによると奇数アドレスからのワード・ロングワードアクセスはアドレスエラー例外を発生するとあるのでこれで判別はできません。
- プリフェッチキューあたりに相違があるかもしれませんがデータシートからはよくわかりませんでした。実機が試せるようになったら見てみたいところではあります。
MC68010の判別は例外処理に必要なのに対し、MC68008の判別はどうしても必要というわけではありません。3.を試すにしても優先度はかなり低いですね。
MC68010の判別
カテゴリー:
SH7045ボードへのUniversal Monitorの移植に着手したのですが、その前にMC68000系で動くようになっていますのでそのあたりの話を何回かに分けて書こうと思います。
MC68000自体は30年ほど前にいじっていて(だから未経験のプロセッサを優先して後回しになっていました)サクサク書いていたのですが、これまで書いたことがなかったのがプロセッサの識別です。
当時からMC68010は載せていましたがモニタは専用にアセンブルしていました。
ですからMPUを載せかえる時はROMも一緒に交換です。
今回は基本部分がすんなり動作したので識別ルーチンに挑戦することにします。
識別の原理はもちろんプロセッサによる挙動の違いを検出するわけですが、これにはいくつかのパターンがあります。
HD1-6120ボード(ソフトウェア編)
予告どおりソフトウェア編です。これまでの「ソフトウェア編」ではモニタ程度のものが動いていることが多かったと思いますが、今回はプログラムの実行ができているらしいとわかる程度です。
最も簡単なテストプログラムは実行開始番地で無限ループさせるものでしょう。
HD1-6120(IM6100も)は0FFFH番地から実行を始めますので、ここに0FFFH番地へのJMP
命令を置きます。これを実行させておいてアドレスバスの状態を観察するとA0~A11までがすべて"H"になっていて0FFFH番地を読み続けていることがわかります。
次に異なるアドレスでループさせてみます。
HD1-6120でダイレクトにJMP
できる先は、同ページ(アドレスの上位5ビットが同じ)か0ページ(アドレスの上位5ビットがすべて0)だけです。それ以外へ飛びたいときは同ページか0ページにアドレスを書いておいて間接アドレッシングを使います。ここでは簡単に0ページで試してみます。
ポケコンパイラ
CPU判別法(6502編)
5.25インチ版 SIP
カテゴリー:
前に3.5インチ版を見つけましたが、5.25インチ版も発見です。
紙製のケースに入っていました。「Flexible disk」というのがいいですね。
EPSONのディスクというとソフトウェア・インストレーション・プログラム(SIP)くらいしか心当たりはありません。
ASに新CPU対応を(その4)
カテゴリー:
モニタも動いてこれまでに実装済みのMN1610命令に問題無いことがわかり、時間にも余裕が出てきたので、残りのMN1613拡張命令も一気に実装してしまいました。
MN1613で追加された命令にはパースの面倒なアドレッシングなどは無く、命令の数が多いだけの単純作業に近かったですね。
一段落したので現時点のファイル(asl-patch-20191120.tar_.gz)を添付しておきます。
ビルド方法
MN1613ボード(モニタ移植編)
カテゴリー:
前回は簡単なテストプログラムを動かしましたが、その後アセンブラもある程度動作するようになったのでいつものUniversal Monitorを移植することにします。
しばらくボードを動かしていなかったので念のためにもう一度小さなプログラムを試してみましたが、何故か動作が変というかいきなり暴走している感じです。
原因はいくつか考えられます。
- ボードかCPUが壊れてしまった
- (リセット動作には不明な点が多いので)以前動いたのは偶然だった
- アセンブラが誤ったコードを吐いている
ハンドアセンブルと比較したり、以前と同じコードを試したりで3.で無いことはすぐに判明しました。