CPU判別法(68編)

現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。

自作のUniversal Monitorのソースコードを例に解説してみます。

MC6800系

まずは昨日目処が立ったと書いたMC6800系からです。

この系統はあまり情報が無く(旬な時期にあまりかかわらなかったのも理由です)手持ちのデバイスで試しながら書いたものです。

該当部分のソースは次のようになっています。

[UniMon] レジスタ命令追加

カテゴリー:

8080, Z80, 6809に続いて6800用でもCPU判別を追加しようと思っているのですが情報があまりありません。

わかった範囲ではMC6800 ⇒ MC6801/MC6803 ⇒ HD6301/HD6303と改良されるにしたがって命令は追加されていますが、既存命令の挙動は変化が無いようです。これは互換性という点では非常にありがたいのですが、判別という点では困ったことです。

追加された命令の存在が確認できれば良いのですが、そのオペコードは旧プロセッサでは未定義なので何が起こるかわかりません。データシートにも記載は無いので試してみるしかないのです。

レジスタを設定し、問題の命令を実行し、レジスタがどう変化したかを地道に見ていく必要があります。

そこでレジスタを任意に設定して実行する機能、レジスタの内容を表示する機能を追加することにしました。これはデバッグにも有効です。

片面単密

テーマ:

カテゴリー:

8インチのディスケット探していたらこんなものが出てきました。

8インチ片面単密ディスケット
8インチ片面単密のディスケット、IBM純正ですね。

内容を表すラベルがありませんが、一緒に出てきたほかのディスケットから想像するに高校のころ廃棄されるものをもらったものではないかと思います。

マウスパッド

テーマ:

こんなマウスパッドが出てきました。

マウスパッド
保管状態があまり良くなかったのでキズが結構あります。

こうして全体を見ると単なる黒っぽい光沢のあるマウスパッドでしかありません。

が、拡大してみると...

一部を拡大...
一部を拡大してみると格子模様が印刷されているのがわかります。

Panafacom MN1613A

テーマ:

カテゴリー:

前からずっと探していたモノを遂に入手できました。

MN1613A
Panafacom MN1613A、初期の16ビットマイコンです。

このシリーズはどれも入手困難なので贅沢は言えないのですが、一応MN1611かMN1613を優先して探していました。

まずMN1610は+12V, +5V, -3Vの3電源、MN1610Aも+5V, -3Vの2電源を要求します。MN1613AはMN1613とピン数が異なる上にデータシートが見当たらず、半導体コレクション展示会場くらいしか情報がありません。MN1617も資料が無い上にパッケージがQFPしかありません。

[UniMon] Z280のI/Oページに対応

カテゴリー:

Universal MonitorをZ280のI/Oページレジスタに対応させました。

先日のI/O命令追加はそもそもZ280ボードで内蔵UARTの検討用に始めたのですが、あのままではZ280内蔵デバイスへのアクセスには使えません。

Z280内蔵デバイスはI/Oページ0FEH, 0FFHに配置されています。I/OページレジスタはOS 8,FEなどとすれば変更できますが、0FEH, 0FFHに切り替えたとたんに外部I/Oデバイスへのアクセスができなくなります。現状コンソールを外部のZ80 SIOに頼っているのでこれではキー入力・画面出力が不能になってしまいます。

そこで"I", "O"コマンドで実際にI/Oアクセスする直前にI/Oページレジスタを変更し終わったら元に戻す必要があります。

ここまでは簡単ですが、コマンドをどうするのかは悩みました。

[UniMon] I/O命令追加

カテゴリー:

8080とZ80のUniversal MonitorにI/OアクセスのコマンドとCPU判別を追加しました。

  • I(nput)
    入力ポートから入力して表示します。
    1. I <port>
    2. IW <port> (Z280のみ)
    3. IS <port> (Z280のみ)

    1の形式では<port>番の入力ポートから8ビット幅で入力して表示します。2の形式では16ビット幅で入力して表示します。3の形式ではZ280のCPU制御/ステータス・レジスタを読んで表示します。
    Z80系では<port>は16ビットアドレスが使用可能です。

74シリーズの変り種(その4)

テーマ:

カテゴリー:

74シリーズの変り種も今回で4回目、これでいったん終了とします。

いつものように初回の注意事項を繰り返しておきます。

それと誤解がないように書いておきますが、特記のない限り実際に使ったことはありません。古いデータシートを読んで気になったものを取り上げているだけなので、勘違いなどあるかもしれません。入手も難しいものが多いと思いますので「へぇ~」という軽い気持ちでお読みください。

最終回となる今回は「汎用とは呼べないモノたち」です。

74LS361

データシートは未発見ですが、TMS9916 Bubble Memory Controllerのマニュアルの中にSN74LS361 Function Timing Generatorとして登場します。

74LS362

前にTMS9900を取り上げましたが、これはそれ用のクロックジェネレータです。

74シリーズの変り種(その3)

テーマ:

カテゴリー:

74シリーズの変り種の3回目になります。

例によって初回の注意事項を繰り返しておきます。

それと誤解がないように書いておきますが、特記のない限り実際に使ったことはありません。古いデータシートを読んで気になったものを取り上げているだけなので、勘違いなどあるかもしれません。入手も難しいものが多いと思いますので「へぇ~」という軽い気持ちでお読みください。

74LS600, 74LS601, 74LS603

これらはMemory Refresh Controller、DRAMのリフレッシュを行うためのカウンタやタイミング回路をまとめたものです。

3種類あるのは対応するDRAMの容量とリフレッシュのモードが異なるため。

タイミングはR,Cを外付けします。

SN74LS610 ~ SN74LS613

これはMemory Mapperといって4ビットのアドレスを12ビットに拡張します。簡易MMUみたいなものです。

ページ