ディスカッション (7件)
科学技術計算に対応した関数電卓を自作するために、あえてニブル(4ビット)単位で動作するCPUをVerilogで設計しました。
核心的な疑問は「HPの関数電卓はゲートレベルで実際にどう動いていたのか?」ってことだった。その深掘りが、ゼロから自作するきっかけになったんだ。
アーキテクチャを決める上で全ての基本になったのがこれ。十進法電卓は数値をBCD(10進1桁を4ビットのニブルで表現)で格納すべきだっていう点。Z80や6502みたいな一般的なバイト単位のCPUだと、その構造と常に戦うことになる。だから、4ビットが自然なデータ幅で、メモリがニブル単位でアドレッシングできる独自の小型CPUをVerilogで設計したよ。
プロジェクトの内容:
-
自作CPU:ハーバードアーキテクチャ、12ビットISA、8ステート実行のFSM、マイクロコードデバッグ用のFAULT状態を備えたハードウェアスタックガード
-
三角関数用のCORDIC:14桁の有効数字まで検証済み
-
Pythonで書いた2パスアセンブラ(約700行)
-
Verilator + Qtフレームワーク:同じVerilogソースがシミュレーション、デスクトップGUIデバッガ、WebAssembly、そして実機でそのまま動く
-
マイクロコード上で動作するスクリプト言語:ハードウェアをいじらずに機能追加が可能
-
自作PCB(EasyEDA/JLCPCB)、バッテリー、充電回路
詳細記事:https://baltazarstudios.com
Hackadayの記事:https://hackaday.com/2026/05/13/build-the-cpu-then-build-the-calculator/
親父が70年代半ばから90年代半ばまでHPに勤めてたんだ。言うまでもなく、高校や大学ではHPの電卓を使ってたよ。HP電卓の最高なところは、頑丈な作り(11Cや15Cのボタンは最高だった)、正確さ、そしてクラスメートが電卓を貸してくれと言ってきた時に「RPN(逆ポーランド記法)わかる?」って聞くと、みんな恐怖に引きつって引いていくところだね。おかげで誰も借りようとしなかったよ。とにかく、このプロジェクトは最高だね。
CPUがニブル単位(4ビット)志向なら、それって実質的なバイトサイズが4ビットってことにならないの?
これ最高!自分でハードやソフトのツールを作ってる人を見るのが大好きだ。自分も近いうちに時間を捻出してやってみたい。電卓は絶好のプロジェクトだよね。
動画って公開されてる?
素晴らしいプロジェクトだね。(私のDM42は9と正確に返してくれたよ。)
ブログ記事のパート6に間違いがあって、HP-71Bの写真のキャプションが48GXになってるね(両方ともSaturn CPUを使ってるけど)。ちなみに自分もHP-71Bを持ってて、そのForth/アセンブラROMマニュアルを使って最初のHP-48 ROMデコーダーを書いたことがあるよ。
WebAssembly版がここで動かせるよ。デバッガーパネルありとなしで分けといた。
https://baltazarstudios.com/files/calculator-d/Calculator.html
https://baltazarstudios.com/files/calculator/Calculator.html
このWebAsmコードはQtとVerilatorでコンパイルされてて、電卓インターフェースを提供するシンプルなUIシェルの中で「ハードウェア」とマイクロコードを動かしてる。デバッグ版ではマイクロコードのリスト表示や、ブレークポイントの設定、レジスタの確認なんかができるよ。