現在地

ASのIM6100対応(その4)

カテゴリー:

前回の最後に複合命令の処理がイマイチと書いたのは次のようなことです。

     	SNL MQA

SNLはグループ2ですから次のMQAは共通命令テーブルとグループ2の命令テーブルを探すことになります。ところがこれはグループ3なので当然見つかりません。

結果として"unknown instruction"エラーになるわけですが、MQAは存在する命令でただSNLとグループが違っているだけです。"invalid instruction combination"エラーの方がより親切というものでしょう。

そこですべてを1つの命令テーブルに入れることにしました。各命令ごとに複合命令にできるか、できるならどのグループかの情報を付加して組み合わせられるか判定します。

ASのIM6100対応(その3)

カテゴリー:

ASでは数多くのエラーメッセージが用意されており大抵はその中から選べるのですが、新たなプロセッサへの対応をしているとどれもしっくりこないことがあります。

そこで3回目の今回はエラーメッセージの追加方法を書いてみます。

IM6100には元になったミニコンPDP-8のコンソールパネルを再現するための特別なモードがあり、そのモードでしか実行できない命令あるいは逆に通常モードでしか実行できない命令があります。これは他のプロセッサにはない概念なので適当なエラーメッセージは存在しません。

これを例にエラーメッセージの追加方法について書いていきます。

まずはエラーの名称(表示内容ではなくプログラム中から参照するときの識別子です)とエラー番号を決めます。ちなみにエラー番号は1000未満だと"Warning", 1000以上だと"Error"として扱われます。

最初はどう決めてよいかわからないと思いますので既存のものを参考にするのが良いでしょう。

これをerrmsg.hに追加します。

EMILY Board +16

テーマ:

カテゴリー:

uPD78CG14ボードの基板と一緒に注文していたのがこのEMILY Board +16の基板です。


現時点でのEMILY Boardのフル拡張状態です。

これで8ビット・16ビット・32ビット幅のバスが使えるようになります。メモリ構成的には4k×8bit, 4k×16bit, 4k×32bitですが、プロセッサボードに簡単なアドレスデコーダを積むことで16k×8bitや8k×16bitのような使い方も可能です。

ASのIM6100対応(その2)

カテゴリー:

第2回目はメモリ参照命令についてです。

IM6100のメモリ参照命令は6つ(うち2つはジャンプ系)しかありません。フォーマットも単純です。

0 1 2 3 4 5 6 7 8 9 10 11
Op Code (0-5) IA MP Page Relative Address

Op Code部が6の場合は入出力のIOT命令、7の場合はOperate命令(前回の複合命令はこれ)です。

ASのIM6100対応(その1)

カテゴリー:

前回楽ではなさそうと書きましたが、基本機能は動くようになりましたのでIM6100対応について数回に分けて書いていきたいと思います。

第1回目は複合命令の処理です。

前回3種類のアイデアを書きましたが最終的にはオリジナルのアセンブラ書式に近い3番目を採用しました。

ASの一般的な処理を知らないとわかりにくいと思いますので、簡単に説明しておきます。

まずSwitchTo_xxxx()関数(これはCPU疑似命令で切り替わったときに呼ばれます)で必要な命令を登録します。特殊な疑似命令が必要ならそれもここで登録します。

	AddMR("AND", 00000);
	AddMR("TAD", 01000);

ここでAddMR()は同じ引数を繰り返すのが面倒で用意したラッパーなので、例えば1行目は以下のように書いたのと同じです。

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)というグループの命令は以下のようになっています。

uPD78CG14ボード(その2)

テーマ:

カテゴリー:

前回、ピギーバックのROMと内蔵RAMで動作したので、今回は外部RAMを追加してみます。


ハードウェア的には未実装だった74HC04, 74HC573, 62256を載せるだけです。

ソフトウェアとしては、内蔵ROM(ピギーバック含む)有効モードで起動するとポートD,FはポートになっているのでMM(Memory Mapping)レジスタを設定してバスに切り替えないといけません。

uPD78CG14ボード(その1)

テーマ:

カテゴリー:

先日のuPD78CG14E、QUIPなのでユニバーサル基板では扱いづらい上にμPD7800ともピン配置が大きく異なるのでuPD7800Gボードを流用するわけにもいかず...

別な基板発注するついでに専用基板起こしてみました。


写真はとりあえず動作したところです。

I/Oピンを引き出すためのコネクタと外部RAMが未実装ですが、Universal Monitorは動きます。RAMが内蔵の256バイトしかないので大したことはできませんが。

このボードは以下のようなコンセプトで作っています。

模型のリモコン

カテゴリー:

もう何週間か前になりますが Twitter で面白いスイッチを見つけました。(下記リンク参照)

これの両モーメンタリタイプ、40年ほど前に欲しくて探したんですが見つけられなかったんですよね。今みたいに通販でどんなものでも買えるわけではなく、特殊なものはよほどの偶然と幸運が無ければ入手できませんでした。

ということで今回はこれが欲しかった理由手に入るものでどう代用したかを書いてみようと思います。

まだ小学生だった頃、よく近所の図書館で『模型とラジオ』などの模型雑誌を読んでいました。電子工作目当てなのですがついでに模型製作の記事も読んだりしていまして、ラジコン自動車の製作記事なんかがあるわけです。

飛行機もあったはずですが、さすがに雲の上の存在と思っていて...

いわゆるプロポを使った左レバーで前後進と速度を右レバーでステアリングという操作に憧れました。

とはいえそんなものを買うお金はありません。

スイッチによるON / OFF制御とコード付きのリモコンなら自分で作れるし、そんなにお金はかからないだろうと思ったのですが...

ページ

Electrelic RSS を購読