現在地

ソフトウェア

私のOS遍歴(実行環境編)

カテゴリー:

このシリーズは久しぶりですね。

以前私のOS遍歴では使った操作環境について書きましたが、今回はどんな環境向けのプログラミングをしてきたかについて書いてみたいと思います。今回は組み込みOSも含めています。

  1. N/N80 BASIC 【家】
    自宅のPC-8001mk2です。BASICの他、GAME, TL/1, アセンブリ言語などで書いたものも含みます。
  2. N88 BASIC(86) 【学】
    中学のときマイコン部部室(技術科準備室)にあったPC-9801F2向けです。
    当時書いていた程度のものなら十分な速度で実行できたのでこれはBASICのみでした。
  3. CP/M-80 【家】
    これも自宅のPC-8001mk2、アセンブリ言語がメインで、末期にCを少しといった感じでした。

ダンプ入力とチェックサム

H8/500にUniversal Monitorの移植をしていてIntel HEXやMotorola S-recordのコードを書いていたら、そういえば大昔のチェックサムの話を書いていないなぁと思い出しましたので今回はその辺を書きたいと思います。

チェックサムと言えばもっとも簡単な誤り検出符号の一つで実装が簡単なので昔から使われてきました。

最近はCRCとかが用いられることが多くなりましたが......

ですが今回書こうと思うのは主に1980年代頃のパソコン文化としてのチェックサムのお話です。

今パソコン用のソフトウェアを配布するとしたらオンライン配布が当たり前、少し前ならフロッピーディスクやCD-ROMといった物理媒体も多かったですが、パソコンの黎明期から1980年代末くらいにかけては紙に印刷したものを書籍や雑誌の形で流通させユーザが手入力するという形態も広く用いられていました。

そんな面倒なことはやってられないという人のためにカセットテープやフロッピーディスクの販売も行われていましたが、暇はあっても金は無い学生は雑誌を買って打ち込むというのはよくあるソフトウェアの入手手段でした。

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.を試すにしても優先度はかなり低いですね。

ページ