2023年

テーマ:

カテゴリー:

新年あけましておめでとうございます。
今年もよろしくお願いします。

2022年の大きな変化はプリント基板を注文するようになったことでした。
今年は何ができるかな。いろいろ構想しているものはあるので少しずつでも実現させていきたいですね。

続・SN74141を試す

テーマ:

カテゴリー:

SN74141を試すで触れた消灯しているはずなのに中央がボーっと光る問題、思い当たることがあると書きましたが、対策が効いてほぼ原因が確定したのでそれについて書きたいと思います。

実は、ヒントになることはニキシー管を点灯してみたにも少し書いています。

あの時はこんな現象は起きていませんでした。

何が違っているかというと、カソードを1本ずつ手でGNDに接続していたのをSN74141で切り替えるように変更したことです。

SN74141を試す

テーマ:

カテゴリー:

複数のSN74141が揃ったので動かしてみることにします。ニキシー管を点灯してみたで使った基板を流用します。


4ビットのカウンタを追加して順に点灯させることにします。

管もSN74141も取り換えて試すのが目的です。管は前回同様、ピン1, 13のみ穴に通し基板にハンダづけしているのはアノードのピン13だけです。SN74141はZIFソケットを使いました。

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種類のバイナリを作ることになります。

Pages