SN74141

テーマ:

カテゴリー:

ウクライナから買った石でニキシー管用のデコーダ・ドライバのSN74141が入手困難らしいと書きましたが、その後eBayで度々見かけたのでいくつか購入しました。単にこれまで欲しいと思わなかったので目に入っていなかっただけみたいです。


これはオリジナルのTIのSN74141ANです。元々SN7441というのがあって、それの改良版です。

SN7441もSN74141もBCD-to-Decimal Decoder / Driverというもので、デコーダの出力は60Vという高耐圧のオープンコレクタになっています。これは多くのニキシー管のカソードを直接ドライブ可能です。

MC68020 / MC68030 の判別

カテゴリー:

アドレスエラー・バスエラー時の表示は、未対応のフォーマットの場合にはスタックに積まれたワードをそのまま16進ダンプするようにしたので、デコードルーチンは後回しにして判別を書くことにしました。

まずMC68020以上であることの判別は容易(MC68010の判別(補足)参照)なのですが、MC68020からMC68030で追加された命令はありません。というかあるにはあるのですがMMU関係の命令なのでMC68020+MC68851(PMMU)でも実行できてしまいます。細かな動作の違いはあるかもしれませんが...

Z8000セグメントモード対応(その3)

カテゴリー:

前回までで従来の機能がセグメントモードで動作するようになりましたが、セグメントモードで動作するなら当然D(ump)などのコマンドでもセグメントが指定できなくてはなりません。

この辺りは8086のセグメントやTLCS-90のバンクを移植する形で対応しました。

表記はZ8000らしく<<SEG>>OFFSET形式も考えましたが、長くなるので8086同様SEG:OFFSET形式としています。

コマンドのパラメータ以外に対応が必要なのはR(egister)コマンドにおけるSSPとPCです。

  1. SSPH, SSPL, PCH, PCLのように16ビットずつ別のレジスタ名をつける
  2. 32レジスタとして扱う
  3. 16ビットずつに分けるが「:」で区切ってレジスタとしては1つとして扱う

などの方法が考えられます。

1.は勝手に名前を付けることになることと、2回に分けて設定するのは面倒です。

Z8000セグメントモード対応(その2)

カテゴリー:

前回枠組みができたので実際に変更していきます。

直接アドレスやJR, CALRなどの相対アドレスはアセンブラが良きに計らってくれるので書き直す必要はありません。

問題はレジスタ間接(インデックスなども含む)です。これは単純に書き換えられない上に、アドレスレジスタが隣り合う2つのレジスタをペアにする関係でレジスタの割り当てを大きく変更する必要がありました。幸いレジスタ数に余裕があったためレジスタ番号の書き換え程度で済んでいますが、不足する場合はメモリに退避するなど変更規模が大きくなってしまいます。

今回は大きく3つのパターンで対応しました。

単純に32ビットレジスタへ置き換え

レジスタ間接のまま32ビット化するのが一番手っ取り早いのですが、レジスタをペアで使用するので多用するとレジスタが足りなくなる恐れがあります。

これはどこを指すかわからない場合に使用しました。具体的にはSTROUTルーチンへの引数と各コマンドでの対象メモリへのアクセスです。

Z8000セグメントモード対応(その1)

カテゴリー:

Z8001を動かすで非セグメントモードで動くことがわかりました。動作する石も複数確保できましたので、本来のセグメントモードで動かすことにします。

Z8000ファミリにはセグメントモードでも動作するZ8001(とZ8003)と非セグメントモード専用のZ8002(とZ8004)があります。両者はリセット時のPC, PSWの初期値を格納する形式が異なる上にアドレスが重なるので同一バイナリで両方に対応することはできません。

どちらの形式で読んでも辻褄の合う値を設定することは不可能ではありませんがメモリマップの制約が大きくなります。

Z8001(とZ8003)はセグメントモードでも非セグメントモードでも動作させることができます。これは同一バイナリで両対応するのは可能ですが、ほぼすべてのルーチンを2つ持つようなことになってしまいます。

結局3種類のバイナリを作ることになります。

TMPZ8003

テーマ:

カテゴリー:

前回無事にZ8001が動作したわけですが、あれは以前中国から買ったもので念のため製作と並行して国内でZ8003も調達していました。


東芝製のTMPZ8003P-6、Z8003のセカンドソース品です。

Z8003というのはZ8001を仮想記憶対応したもので、MC68000に対するMC68010のようなものです。同様にZ8002に対するZ8004というのもありますが、セグメント無しの仮想記憶という需要はあまりなかったためか見かけませんね。

マイコンとマイコンをつなぐ法

テーマ:

カテゴリー:

懐かしい本を発見しました。


その名の通りパソコン同士を繋ごうという本なのですが...

初版が1982年末という古い本なので、いわゆるパソコン通信のBBSにアクセスするとかではないし、ましてやインターネットへの接続法といった本でもありません。

まずはコネクタと電線を買ってきてハンダ付けしてケーブルを作ろところから始まります。

アドレスエラー・バスエラー (その4)

カテゴリー:

アドレスエラー・バスエラーについて今度こそ終わりにするつもりです。

MC68040

MC68040からは大きな方向転換があったように感じます。

複雑度は増しているはずなのにスタックに積まれる情報は減っているのです。前にもMC68010の判別(補足)に書きましたが、命令の再開を諦めて頭からやり直す方針のようです。

まずはアドレスエラーの場合です。

アドレスエラー・バスエラー (その3)

3回目は残りですが書ききれるかなぁ。さらに1回増えてしまうかもしれません。

ここからは自分の手で動かしたことはないのでマニュアルを元にざっくり書いていきます。

MC68020 / MC68030

この両者はソフトウェアから見た例外処理はほぼ共通のようなのでまとめて書きます。

これらではエラー発生時の状況によってスタックに積まれる情報量に違いがあるようです。キリの悪いところで発生すると保存しないといけない項目が増えるということなのかな。

どちらが使われたかはSP+6の上位4ビットでわかります。

この4ビットでどのフォーマットかはわかりますが、それが何ワードなのかは書かれていません。
Universal MonitorではこれまでMC68010までの対応だったので0000なら4ワード、それ以外なら29ワードとしていました。それをMC68020以降で実行するとスタックがおかしなことになります。今回MC68010, MC68020, MC68030, MC68040, MC68060, SCC68070で使われているフォーマットとその長さをテーブルにして引くようにしました。

まずは少ない場合から。

ページ