現在地

ソフトウェア

IBM DOS

テーマ:

木曜日のネットワーク工事に向けて部屋を片付けている時にこれが出てきました。


初めて386bsdをインストールした話の最初に触れたDOSのメディアです。

「5.02だったかな」の記憶はあっていましたね。IBM DOS バージョン J5.02/V、いわゆるDOS/Vと呼ばれていたものです。

パソコンでの日本語表示は主に2つの方式がありました。

  1. 画像として表示する
  2. 文字として表示する

1.はハードウェアは簡単になりますが(特にCPUパワーが低い時代は)速度が犠牲になります。2.は速度は速いですがハードウェアは複雑になります。

初めて386bsdをインストールした話

カテゴリー:

初めてPCを組んだ話でハードウェアの話を書いたので、今回はソフトウェアの話を書こうと思います。

当初私はHDDを丸ごと386bsd 0.1にするつもりだったのですが、いろいろと相談していた友人K氏に「DOSも無いと困るからせめて半分はDOSにしておけ」と言われまして、折衷案で32MBがDOSで残りの170MBが386bsdということにしました。

DOSは動作確認も兼ねてIBMのPC DOS 5.02だったかな、をインストールしました。確かET-4000の関係でconfig.sysのどこかの行に/HS=LCを追加した記憶がありますが、それ以外はあまり面倒は無かったと思います。

/HS=LC付けてないとスクロールしているときに画面が乱れるんですよね。

これはまぁ動くようにしただけで環境整備的なことはほとんどしませんでしたね。

ASのIM6100対応を検討する

Nanoprocessor対応はAS-users MLに投げて無事本家にマージされました。

で次は何をやろうかなと考えているわけですが、V60は作者のAlfredさんが取り組んでいるような書き込みがありましたし、TRONは気軽に手を出せるようなシロモノではありません。

HD1-6120ボード(ソフトウェア編)で短ループのテストしただけになっているIM6100 / HD1-6120がASで使えるようになればUniversal Monitor移植も視野に入ってきます。

やってみたいのですが... IM6100系のアセンブラは結構特殊なところがあって楽ではなさそうです。気になる点について実現方法を考えてみました。

複合命令

やはりIM6100系の特徴といえばこの複合命令でしょう。通常、命令語は機能を表す部分が一つとその対象を表す部分がいくつか(0のこともある)で構成されていますが、IM6100系には機能を表す部分が複数あるのです。

例えばOperate Instruction (Group 3)というグループの命令は以下のようになっています。

KiCad 6.0

テーマ:

カテゴリー:

もう随分前(Version 4の頃)になりますがKiCadをインストールしていたことがありました。自作のデータセパレータ基板AVRタイマなどに掲載した回路図はそれで描いたものです。

ただ当時は、ライブラリがあまり充実しておらずシンボルなどを自分で作る必要に迫られることが多かったこと、ユニバーサル基板であまり困っていなかったこと、などの理由で練習を兼ねて完成済み回路図の清書をしてみただけに終わりました。

そのまま放置していたのですが...

最近になってプリント基板を作るのも悪くないと思い始めました。

  1. SBCZ8002のような16ビットバスのボードで使うためにはROMエミュレータは複数欲しい。あれをもう一度手配線するのは面倒くさい。

ASをCP-1600対応に

CP-1600を実際に動かしてみるとなると問題になるものの一つとして開発環境をどうするかというのがあります。

ざっと探してみましたが使えそうなアセンブラが見当たりません。

Cコンパイラなどが無いのはともかく、アセンブラも無いのはさすがに困ります。いくら昔を懐かしむといっても今さらハンドアセンブルはしたくありません。

というわけで以前ASをMN1610対応させたようにCP-1600対応のコードジェネレータを書いてみました。

16ビットワードマシンであることなどMN1610に似ている点もあり、基本的な枠組みはMN1610とほぼ一緒です。

続いて各命令のデコーダを書いていきますが、結論から言うととても楽でした。

INS8073のROMを読む(続き)

前回、ROM内のコンソールからの1文字入力ルーチンは0x092Bではないかという予測が立ちました。これをもう少し確認してみます。

まず0x0020~0x003FまでのCALL命令のベクタには0x092Bは登場しません。

それではJSR 0x092Bはどこかにないか、と探してみると1箇所だけありました。1箇所からしか呼ばれないなら貴重なCALL命令のベクタを割り当てないのも納得がいきます。

例によって付近を逆アセンブルしてみます。

INS8073のROMを読む

カテゴリー:

INS8070ボードでROMのBASICの1文字入出力ルーチンを独自のものにしようとしてうまくいかなかったと書きましたが、モニタを移植したことでROM内を読めるようになったので関連箇所を調べてみることにしました。

まずはPコマンドでROMのアドレス範囲(0x0000~0x09FF)をPCに持ってきます。

そう、P(unch)コマンドを実装したのはこのためです。

手頃な逆アセンブラがないかネットを探してみたのですが見当たらなかったので簡単なものを書いてしまいました。

さて、どこから手を付けるかですが、先頭から読んでいくのはしんどいです。

今回調べたいのは文字入出力だけなのでメッセージから追っていくことにします。

メモリダンプを見ていくとASCII文字列がいくつもありますが、多くはBASICの予約語なので今回の目的には使えません。その中で良さそうなものが見つかりました。

MC68010の判別(補足)

今回はブレーク処理についての予定でしたが、MC68010の判別で書き足らなかったことがいくつかありますのでそちらを書くことにします。

MC68008の判別

MC68008の判別もできないか考えたのですが...

  1. ソフトウェア的にはMC68000からの命令等の追加・変更はありません
  2. 最初MC68008は8ビットバスなので奇数番地からのワードアクセスで判別できるのではないかと思ったのですが、データシートによると奇数アドレスからのワード・ロングワードアクセスはアドレスエラー例外を発生するとあるのでこれで判別はできません。
  3. プリフェッチキューあたりに相違があるかもしれませんがデータシートからはよくわかりませんでした。実機が試せるようになったら見てみたいところではあります。

MC68010の判別は例外処理に必要なのに対し、MC68008の判別はどうしても必要というわけではありません。3.を試すにしても優先度はかなり低いですね。

MC68010の判別

SH7045ボードへのUniversal Monitorの移植に着手したのですが、その前にMC68000系で動くようになっていますのでそのあたりの話を何回かに分けて書こうと思います。

MC68000自体は30年ほど前にいじっていて(だから未経験のプロセッサを優先して後回しになっていました)サクサク書いていたのですが、これまで書いたことがなかったのがプロセッサの識別です。

当時からMC68010は載せていましたがモニタは専用にアセンブルしていました。

N BASIC上で動く簡易クロスアセンブラを使用していたので条件アセンブルなどはできずソースを別個に管理していたように記憶しています。

ですからMPUを載せかえる時はROMも一緒に交換です。

今回は基本部分がすんなり動作したので識別ルーチンに挑戦することにします。

識別の原理はもちろんプロセッサによる挙動の違いを検出するわけですが、これにはいくつかのパターンがあります。

HD1-6120ボード(ソフトウェア編)

テーマ:

予告どおりソフトウェア編です。これまでの「ソフトウェア編」ではモニタ程度のものが動いていることが多かったと思いますが、今回はプログラムの実行ができているらしいとわかる程度です。

最も簡単なテストプログラムは実行開始番地で無限ループさせるものでしょう。

HD1-6120(IM6100も)は0FFFH番地から実行を始めますので、ここに0FFFH番地へのJMP命令を置きます。これを実行させておいてアドレスバスの状態を観察するとA0A11までがすべて"H"になっていて0FFFH番地を読み続けていることがわかります。

次に異なるアドレスでループさせてみます。

HD1-6120でダイレクトにJMPできる先は、同ページ(アドレスの上位5ビットが同じ)か0ページ(アドレスの上位5ビットがすべて0)だけです。それ以外へ飛びたいときは同ページか0ページにアドレスを書いておいて間接アドレッシングを使います。ここでは簡単に0ページで試してみます。

ページ