現在地

ソフトウェア

BASICの拡張法

カテゴリー:

以前68000 Tiny BASICの予約語で書いたように独自の命令を追加していました。

でもソースコードもあり自由に変更できたTiny BASICなどだけでなく、マスクROMが使用されソースコードも無い市販パソコンのBASICの命令拡張も良く行われていました。ちょっとした数十バイト程度のものから本格的なものまで当時の雑誌には頻繁に掲載されていたものです。

以下はある程度知っているN-BASIC, N80-BASICを例に書いてみます。

ところでマスクROMのBASICをどうやって拡張するのでしょう?

BASICによっては要所要所でRAM上の特定番地をCALLするようになっていました。そこは起動時にはRET命令が置かれているので、これを用意したルーチンへの分岐命令に書き換えることで動作に介入することができるのです。これを「フック」と読んでいました。

介入したい個所にピンポイントでフックが無い場合は少し手前のフックから目的個所までのROM内の処理を自分のルーチン内で行ない、さらに戻り番地を調整するなどを行ないます。

ピタゴラス数

カテゴリー:

ちょっと思い出してきたので今回は原始ピタゴラス数の探索について書こうと思います。

高校生の頃に原始ピタゴラス数の探索をしていたことがありました。ピタゴラス数というのは a2+b2=c2 を満たす自然数の組で、各辺の長さの比がこれになっている三角形は直角三角形になります。(3, 4, 5)などのいくつかは学校でも習いますね。

ある時もっとあるだろうから探してみようと思い立ちました。

40年近く昔のことですからネットで探すなどということはできません。

当然パソコンを使って探すわけですが、当時手元にあって使えたのはPC-8001mk2かFP-1100くらい(FM-7はまだなかったと思う)でした。ある理由(後述)でFP-1100の方が良いのですが、遅かったことやFDDが無かったことなどでPC-8001mk2を使いました。言語も当時使えたのはBASICのみ(平方根を使いたいのでTL/1, GAMEは不向き)でした。

ZZ86のマニュアルが出てきた

テーマ:

カテゴリー:

また探し物をしていたら...... 今度はこんなものが出てきました。


ZZ86というのはPC-9801シリーズ用の逆アセンブラ、そのマニュアルだけが発見されました。

逆アセンブルはコード領域とデータ領域の分離とか、ラベルの命名とか、全自動ではうまく行かずに人が補助してあげないといけない部分があります。このZZ86はその作業を対話的に行なうことができるのがウリでした。

当時PC-286note-F, PC-386note-Aを買ったあと自分の環境整備のためにいろいろ逆アセンブル(DEBUG.COMを使っていたように記憶しています)していたので買ったのです。

私の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とほぼ一緒です。

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

ページ