CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

部品仮配置

とりあえず主要部品だけでも無理くり100mm×100mmの大きさに乗っけてみました。i486DX2ボードを参考にしてますがPLCCパッケージが主でソケットサイズもあるのでかなりみっしり感があります。IDT79R3081のPLCC-84ピンが90度右に回転してるのはわざとで、ロゴが…

シンボル作成

IDT79R3081ボードの回路をkicadで入力始めました。当然ライブラリにシンボルがある筈もなく、まずはシンボル作成からです 周辺回路は32bitバスの既存ボードからコピペで持ってきました。主要部品としては CPU:IDT79R3081(PLCC84) ROM:HN27C4096(PLCC44…

周波数カウンタ

以前入手したICM7226Bを使ったユニバーサルカウンタを寄せ集め基板に載せておいたので部品実装してみました デジタル系はこのカウンタICと水晶、LEDがあれば動作確認できます。このような7セグLEDが乗った計測器はLEDをどうやってパネルに出すか悩みますがラ…

空白記号

IDT79R3081の型番構成を見てみると「-50MJ」の後ろにくる記号は使用温度範囲を示していてBlank(空白)だと商用温度範囲Tc = 0°c to +85°Cということになります つまり空白をSpaceにしてしまうと有るのか無いのかが判らないので「△」を書いて明示的に空白を…

謎の△マーク

IDT79R30xxはファミリをつくっていて今回のR3081はオンチップでFPA(floatingpoint accelerator)を内蔵した最上位モデルになります。これらはピンコンパチなのでReservedピンをうまく処理すれば同じボードへ差し替えができ、さらにR3041に限ってはバスサイジ…

MIPSプロジェクト

STM32は現行品でもあり開発環境が整っていて取り扱いやすく内蔵機能も豊富。しかもべらぼうに速いとなると実務的には選択しない理由はないのですが余りにもあっさり動いてしまってこのブログ的にはいまいちでした。 他に何か面白そうなものがないかと部品箱…

浮動小数点演算

STM32F407ボードでいつものマンデルブロ集合描画によるベンチマークを実行してみました 内部クロックを上限の168MHzにするとMC68040と80486DX2の中間程度で倍精度FPUがなくても高クロックにものを言わせてFPU内蔵CPUに迫っています 倍精度FPUが無いCPUはdoub…

USB-DFU

自作STM32F407ボードでブートローダからUSB-DFU(Device Firmware Upgrade)ができない問題ですがCPU側のハード的制約が絡んでるっぽい感じです。 CPU内蔵のUSB-PHYはPA11/PA12を通してUSBコネクタに接続されますがこの他にPA9/PA10もIDやVBUSの検知に使用さ…

プログラム書込み

このSTM32F407ボードにプログラムを書き込む方法は複数用意しています。 先ずSWD端子にST-Link2プローブを接続しダウンロード。これは確実でしかも高速です。プローブはST純正のものでなくても中国製のコピー品で全く問題ありません 次にシステムROM内にある…

外部バス拡張

H8-3048/3052ボードで外部バス拡張モード6設定にすると下図の網掛部分がバス信号にアサインされGPIOを大量に消費してしまいます。マイクロコントローラでは内部バスを外部へ拡張するのは得策ではないし、STM32F407ZGではそもそもプログラムFLASH領域が1MBも…

評価用マザーボード

元になったボードAkiH8-3048/3052のピンアサインとSTM32F407Zへの接続先引き当てはこんな具合になっています。H8でポートが変わるところでSTM32でも変わるようにしてビット番号もなるべく対応するようにしました A/Dがつながるアナログポートの割り当てはち…

電源投入

部品実装が完了したところで通電してみました。USBバスパワーを3.3Vに降圧してCPUに供給。リセット、クロック関係も配線済なのでこれだけで動作できます。開発環境はSTM32CubeIDE、STM32CubeProgrammerからSTlink2経由でコードをダウンロードしたらあっさり…

部品実装完了

びびっていた144ピン0.5mmピッチLQFPの半田付けは無事突破しました。TLCS-900で既にやってたわけでとにかく盛大に半田ブリッジさせてからじっくり吸取り線で余分な半田を除去すれば物理現象で自ずから安定した接合に落ち着きます 引き続いて残りの表面実装品…

ポート割付け

既に基板が出来上がっている段階で今更ですが設計検討をおさらいしておきます。 まずH8-3048/3052はTQFP100ピンでGPIOが最大78本とれます。これの代替としてはSTM32F407VxxがTQFP100ピンでGPIOが82本となりこれが適当ですがUSB、SDカードI/F、SWDといった独…

STM32プロジェクト

MC68030ボードがだいたい動くようになりましたが実は内職プロジェクトを並行して進めていました ArmCortex-M4コアのSTM32F407です。 これは現行品、しかもメーカのSTmicro社は今年2026年1月1日を起算年として最短10年間は生産を続けると保証していてこのブロ…

WAIT変更

MC68030ボードが何か遅い問題で、先ずはSRAMのWAIT数の変更をしてみました。 メモリ、周辺I/Oのチップセレクトがアクティブになった時、アドレスストローブ/ASの状態をシステムクロックでカウントすることで引き延ばし/DSACKとしてCPUに返送することでWAITを…

はんだ納め

FPUDSACKのプルアップ処理が雑だったので手直しました。周囲がベタGNDなのでチップ抵抗が使えず危なっかしいですがリード部品を空中配線して年内の工作はこれで終了。 最後にいつもの浮動小数点演算ベンチマークテストをやっておきました ・・・なんか遅い・…

FPU動作確認

MC68030ボードはハード的には完成したのでFPUによる浮動小数点演算を確認しておきます。Cソースコードをコンパイルするバッチを少し修正。FPU命令を生成するようにしました 例題はいつものようにマンデルブロ集合の計算をやってみます。判定関数mandel_chk()…

最後の最後で・・

MC68030ボードもついに最後のデバイスMC68882を挿入して電源ON・・したのですがモニタが起動しません。というかダブルフォルトでHALT状態になっているらしく/STATUSインジケータが100%dutyで点灯しています。 これは最後に挿入したMC68882が悪さをしているに…

ロジック変更

基板リファインの一番の理由だったCPLDのFPU制御ロジックを修正しました まずFPUのチップセレクト/FPUCSの生成は新たに引き込んだアドレスラインA19~A13をCPU空間のデコードFC0..2={1,1,1}にANDして出力しています もう1点はメモリ・周辺デバイスをアクセス…

FPU実装

MC68030ボードにいよいよ最後のデバイスであるFPUを実装する段階まできました これも結構高速版のMC68882RC40です これはMC68030RC50とセットで手に入れたものでしばらく行方不明になってましたが以前ジャンクで手に入れた68020VMEボードに乗っかっているの…

メインルーチン

割込みルーチンisr3()の内容はパラレルLEDの最下桁をトグルするようにして/INT3によって1Hzで起動させます。 そのうえでmain()内で今まで作成した関数、ベクタテーブルのVBRセット、割込みマスク解除、周期タイマのイネーブルを呼んだ後、永久ループで割込み…

割込みC化

GCCをバージョンアップして割込みが記述できるようになったので残りの部分も仕上げていきます。 まずinterrupt修飾した中身が空の関数void isr1(void)は次のようにコンパイルされました たしかにRTEで終端されているのでこれはOKです。 次にROMの0番地から埋…

Cコンパイラ交換

現状では割込みベクタテーブルと割込みハンドラはモニタROM内に固定的に埋め込まれていて正常動作は確認できましたが、このままではユーザプログラムから自由に利用できません。割込み関係の処理もまとめてCで書いて0x80000番地から始まるSRAM領域にロードで…

割込みパルス

割込み信号は8-3プライオリティエンコーダ74HC148で/IPL0-/IPL2の3bitにエンコードされて68030に入力されます。このレベルがどれくらい持続する必要があるかですがマニュアルの 8.1.9 Interrupt Exceptionsの項を見るとデバウンスとシンクロナイズのために2…

オートベクタ割込み(3)

このプログラムは1Hz割込みのINT3をイネーブルにします。実行させてみるとROM内の割込みサービスルーチンが起動されて「INT3」の表示がでました。お、うまく行ったのかのように見えますが・・期待したのは1秒おきに「INT3」が出るはずだったのですが実際には…

オートベクタ割込み(2)

ハード、ファーム側のお膳立てができたのでユーザアプリケーション側のコーディングを始めます。 パルス源のPIC10F222を制御する/EI信号はSSC:Am85C30,chBのDTRピンにつながっているのでこれをON/OFFするinihinh()関数をまず作ります 68030MPU内での割込み制…

オートベクタ割込み

割込み要因の準備ができたのでつぎはCPU側の受け入れ態勢を整えます。 今回の割込みは周辺が割込みベクタを発生しないのでオートベクタ方式にするため/AVEC信号を生成するロジックをCPLDに追加しています。ハードはこれで準備完了。 ファームウェアはモニタR…

周期タイマ

基板裏面の米粒PIC:PIC10F222にパルス発生のファームを書き込みました。1Hz,10Hz,100Hzのパルスを同時発生させてそれぞれINT3,INT2,INT1割込みに接続しています。 PICの出力ピンはそのまま外部割込み入力J1につながっているのでここにPICKIT3をつなげばICSP…

グルーロジック

旧基板と同レベルまで動作しているので変更したCPLD、GALのロジックもOKということになります。GALに入れたバスセレクトロジックは最初に示したこの論理式は実は誤っていて(BYTE0~BYTE3の並びが逆だった)通電前に気付いてこっそりこの論理式に直していま…