NCR65C02A

テーマ:

カテゴリー:

CPU判別法(6502編)のもう一つの未入手品、NCR65C02が到着しました。

NCR65C02A
NCR65C02A、1986年製のようです。「A」付きということは2MHz版ですかね。

CMOS化に伴って命令が拡張されているものの、Rockwellの追加命令は含まれていないというものです。普通に使うならわざわざこれを選ぶ必要はありませんが、CPU判別ルーチンの確認用ということで敢えて入手してみたものです。

ちなみにこの「NCR」というメーカ、後にPCIバス用のSCSIコントローラで有名になりました。

MUTIF09

テーマ:

Universal Monitorを移植しようと組み立てたMUTIF09、他の石も載せてからと思っていましたが時間かかりそうなのでとりあえず現状です。

MUTIF09
MUTIF09はKasumi YOSHINO(JA1UMI)氏のシングルボードコンピュータボードで、資料はBOOTH・プリント基板はオレンジピコショップにて入手可能です。Universal Monitor移植に最低限必要なもの(と手持ちがあって迷いのないものの一部)を搭載しています。

WDC W65C02

テーマ:

カテゴリー:

CPU判別法(6502編)の最後に書いたW65C02が到着しました。

WDC W65C02
上が偽物の疑いのあるW65C02S8P-10、10MHz品です。

下はMouserで購入したW65C02S6TPG-14、14MHz品です。MouserはWDCの正規代理店なのでこちらは本物と見て間違いないでしょう。

ことの発端は6502の判別をテストしていた時です。

SY6502A, UM6502, UM6502A, RP65C02Gと取り替えて試していて特に問題は無かったのですが、W65C02S8P-10に変えたとたんモニタすら起動しなくなってしまいました。オープニングメッセージすら表示しないので判別ルーチンに引っかかっているわけではありません。

MN1613のステップ実行(その2)

テーマ:

カテゴリー:

MN1613のステップ実行(その1)以降、少し進展がありました。

一つ目はアドレスバスとMEMR, MEMWをLED表示する基板を用意したこと、これで1本ずつテスタで電圧を測る必要がなくなりました。

本当はIOR, IOW, FSYCなども見たいところなのですが、EMILY Boardのリボンケーブルを利用する形にしたので諦めました。アドレスの上位4ビットは未使用ピンに割り当てたのですが、あまり今回だけの信号を割り当てるのは避けたかったのです。数も少ないことですしテスタ対応すればすむことです。

データバスはコネクタまでは準備したのですがLEDは未実装です。ステップ動作中でもメモリの内容はEMILY Board側から自由に参照・変更できるのでとりあえず無くても何とかなりそうだからです。

新年初はMSM2128

テーマ:

カテゴリー:

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

MSM2128-1AS
今年初はいつ入手したかわからないこれです。

OkiのMSM2128-1AS、2k×8bitのSRAMです。以前もこの構成のものをいくつか取り上げました。

見てのとおりセラミックのSide Brazed DIPです。ピンが金メッキでハンダ付けの形跡が無い(曲がってはいますが)ので未使用品かソケット使用だったようです。1ピンマークが昔のグリーン車のマークのような形をしていますね。丸とか「1」とかはよく見ますがこれはあまり見たことがありません。

[UniMon] レジスタ命令の内側(その3)

カテゴリー:

最後となる今回は「3. メモリに退避されている内容をレジスタに戻しユーザプログラムに制御を渡す」です。

コマンドで値を変更したらその状態でユーザプログラムを実行できなくては意味がありません。

要はレジスタに値を設定して目的の番地にブランチすれば良いだけなのですが、すでに設定済みのレジスタを壊さないようにしなくてはいけないので進むにつれ制約が増えていきます。

比較的多くのプロセッサで使える手は、「スタックに積んでおいてPOP,...,POP,RET」です。ちょうど1回目の逆です。

スタックを使った割り込みに対応しているプロセッサなら大抵これが使えます。

割り込み時にはレジスタの状態を元に戻す必要があるからです。スタックが専用空間にあって自由にアクセスできないなど使えないプロセッサもありますが...

MC6800を例に見てみましょう。

[UniMon] レジスタ命令の内側(その2)

カテゴリー:

前回は「ユーザプログラムからモニタに制御が渡ったときにレジスタ内容をメモリに退避する」でしたので、今回は「2. メモリに退避されている値を表示・変更する」についてです。

レジスタ内容をメモリに退避するのはプロセッサ固有の書き方が必要でしたが、すでにメモリ上にある値を表示・変更するだけであれば特殊なプログラミングは必要ありません。とはいえレジスタの名称や個数はプロセッサ毎に異なりますからそれなりの工夫は要ります。

まず全レジスタの一覧表示は簡単です。ループとテーブルで書いてもいいのですが、レジスタ数が少ないうちは「レジスタ名を表示・メモリから値をロード・16進表示」を必要数分並べてしまっても大したことはありません。

レジスタの変更はそうはいきませんので、以下のようなテーブルを用意しました。

[UniMon] レジスタ命令の内側(その1)

カテゴリー:

MC6800に続いて6502, MC6809についてもレジスタ命令を追加しましたので、その内側について書いてみたいと思います。

さて、レジスタ命令とはレジスタの値を表示・変更する機能なわけですが、CPUがある瞬間に実行できるプログラムは1つですからユーザプログラム実行中はモニタプログラムは実行できません。モニタプログラム自身の動作にもレジスタは必要です。

ではどうするか?

モニタプログラムには次の3つの機能が必要になります。

ページ