Almost lost technologies

ここは昔の CPU を用いた工作記事を書くために用意しました。雑談は https://bsky.app/profile/alpine183.bsky.social で。関連ファイルは https://github.com/alpine183 にあります。

買い物:AFPP(μPD72291) - PIN配置推定

とりあえず導通チェッカで当たってみました。灰色はPINのないところ。茶色と緑色は各々導通のあるところです。まだ確認していませんが緑が GND、茶がVcc (5V) の可能性が高そう。信号ピン 25 + 電源ピン 14 + 不明(かなりの数がNC)29pin ですかね。

 

PIN配置

 

買い物:AFPP(μPD72291)

D751 はファームウェアのぼちぼちデバッグ中ですが、まだ書ける内容に乏しいため、買い物の話題です。Electrelic(あさのさんとこ)で噂していた μPD72291 ですが、みつけたので落としてみました。わりと出回っているようで、ESじゃないものでも CPUshack Museum さんのところに写真があるし、少なくともデートコードは3種あるようです。

 

D72291R-16

さて、資料皆無よりはましですが、なにか作れる程度の資料はないです。

・NEC技報 Vol41_14に概要があります。80287 とはアーキは異なるのではないかと。

・V53A 16ビット・マイクロプロセッサハードウェア設計編に読みにくいけど信号ピン記載があります。V53Aのユーザマニュアルには接続とタイミング資料、US5396599の図面に信号ピン図があります。最初の資料と一致しているので、信号ピンは確定かな。

・電源ピンはよくわかりません。まぁ導通チェッカである程度あたれるかも。

・ものは68pin なんですが、43pin も不明ピンがあります。μPD72691 も 68pin で共通ではないかと思うのですが、そちらは32ビットバスで、あと16ビット切替えの制御ピンが少なくとも1ピンはありそう、電源ピンは5ピン+αぐらいかなぁ。なので16ビット分の信号を含めて大量のNCピンを探すことになります。CMOSなのでバックバイアスピンなんかはないはずです。

V53Aでボードを作ったら調べる手はありそうですが、少しペンディングかなぁ。

P.S. 命令セットは一応わかりました。

HP 64873 V-Series Cross Assembler/Macro Preprocessor Reference

に記載がある。80287 非互換です。あとは電源ピンとNCか。命令セットと信号線からはμPD72691 とのある程度の互換性も疑わしいような……

uPD751 SBC制作 (6) uPD751用アセンブラ

The Macroassembler AS にパッチを当てて、とりあえず uPD751 のソースがナントカできるところまでは持ってきました(はず)。

一旦途中結果のパッチを Githubに置きました。1.42p298想定ですが、多分最近のものなら通るんじゃないかな。ただし、expect 疑似命令の使い方がよくわからないため(pass1でノーエラー、pass2 でエラーを検知するという指定がドキュメント読んでもわからない。吐かせているコードの問題なのかもしれないけど)テストは通りません。

uPD751 SBC制作 (5) RESET関連の動作仕様

リセット関連の動作仕様で、いくつかまずいところがあったのでそのへんを簡単に触れておきます。

  • uPD751 と ATmega16 のリセットを繋いでいたのは Arduino 的に動かすにはまずいので切ります。直前に Omniboot にでもしようとして繋いだんですけどミス。
  • uPD751 はリセット中の少なくとも一部、および直後は G/!H信号を 'H' にしておかないと停止する(リセット待ちになる)ため、ATmega16 の G/!H はプルアップしておきます(これは考慮済み)。それでは、G/!H をどこで落とすのか。ここでまず uPD751 のリセットが落ちたタイミングで uPD751 は勝手に走り出します。実際にはまず、ベクタを読み込んで、そのベクタをもとに命令を実行開始するという手順になりますが、ベクタ読み出しは何も信号が出ないので外から判定ができません。最初に外からCPUの動きが判定できるのは最初の命令実行の IF が出たタイミングですが、ここで G/!H を落としても最初の命令は走ってしまうことになります。MYCOM-4 では命令手動書き込みまでは止まっているのでこのへんは目視で何とかなるため問題になりません。

で、どうすることにしたかというと、

  • uPD751 のリセットを引き伸ばして、リセット期間中に BUSSTEAL信号で制御を ATmega側に移して、メモリの初期化をしてしまう。このため、リセット幅のCを 0.1μから1μに変更して、リセット幅を 300mS 程度に伸ばします。64kB 分のコードは初期化できなそうですけど、uPD751 そのものの 4kB 分のエリアの初期化ならなんの問題もない(はず)。いずれにせよ ATmega16 にはせいぜい 12KB 程度のコードしか格納できませんし。また、これだと G/!Hは '1' のままにしておいても問題ありません。
  • こんどは BUSSTEALをどこで落とすかですが、最初はメモリ初期化が終わったタイミングで落として uPD751 のリセット完了を待とうか、と当初設計時は考えていたんですが、それだとベクタ読込み時にメモリが反応するのでベクタが読めない。いろいろ考えたんですが結局 BUSSTEAL を伸ばして、IF を見たタイミングで落とすことにしました。これだとベクタを読むタイミングで CPUデータバスを駆動しているデバイスはないので、当初予定のプルアップで対応可能です。最初の処理がメモリ書き込みだと結構タイミング微妙なんですが、命令フェッチなので問題ない(はず)。

結局こんなシーケンス/タイミングです。もっと ATmega側に信号を引き込んでいれば楽だったとは思いますが ……

uPD751 初期化

 

uPD751 SBC制作 (4) 配線ミス

調子よく部品を取り付けていたら配線ミスを発見しました。LS612/HCT612 はいまでこそ PC-AT の部品で入手容易ですが、もともと TMS9900 のシリーズで、ビットエンディアンがビッグ、つまり bit0 が最上位です。逆にしていた。

配線修正を減らすため以下のように直しました。右が修正後です。

左:修正前 右:修正後

一応部品を取り付けたときの写真も置きます。いくつかまずいところがあるのですが、裏側で少しずつ直しているところ。Tj7660は出てこなかったのですけど LT1054 は上位品なのでこのまま行く予定。

記念写真

 

Side Work: i8080A SBC(8)

REV5 が問題なく動きました。2個所のバグ修正と、-5Vのダンプ、CLKのダンプを入れた版です。資料は一応 Github に置きました。

github.com

一応記念写真を。再度マンデルブロを流したところ、10:03 と前回と同じ値になりました。

SBC8080A(一枚版)REV5

 

uPD751 SBC制作 (3) 設計_PCB

スペース的には余裕があったようで Freerouting はすぐ終わりました。その結果に昨日から色々修正していて(主に電源周り)現状こんな感じ。

uPD751SBC PCB設計図

もう少し考えてから SBC8080 と一緒に製造に出そうと思います。急いでないですし。