Home
2024年
2023年
2022年
2021年
2020年

8月31日 超軽量8bit CPU WZeta搭載パソコンのコンセプト

今年の2月の日記にICF3-Zを並列につないだVattles というパソコンのコンセプトを考えていますが、また新しいパソコンのコンセプトです。 結論を先に言うと8千~1万円の既製品のボードを買って BASICや機械語などの言語を付けて、そのままパソコンにして数万円で売れば儲からないか? みたいなことです。
昨日、次世代MSXがネット上で噂になりました。
4Gamer.net記事 MSXの立役者・西 和彦氏が“次世代MSX”に「もうすぐ」とコメント。 自身で“狂気の沙汰”と呼ぶプラットフォームとは
次世代MSXのCPUは2つあって1つはFPGAなので、これをWZetaに置き換える改造もあるかと 思ったのですが、次世代MSXが東京大学で開発されていると上記の記事に、 はっきり書いてあって、これは税金プロジェクトになりそうなので WZetaの方針に反するので無理ということに。
税金プロジェクトだとWZetaの普及が阻まれるので問題なのです。 そしてWZeta搭載のパソコンを考えても、次世代MSXに市場を奪われるのかなと考え、 WZeta搭載のパソコンの方針を変更かなぁと。
新しいCPUのWZetaは新しい価値を創造します。 少しでも将来の仕事になることを考える人向けのWZeta搭載パソコンになればいいなぁと。 まだ動作検証中のCPUなので必ず成功するということはないです。 CPUが普及しなかった責任を僕せいにしようと思う人は使ってほしくないと思っています。

以下はツイッターのサブ垢 のツイートの転記です。
次世代8bit CPU!?、WZeta の命令セットは公開されています。少ないトランジスタ数で構成され、 8bit幅のメモリ1個でいいことやシリアル転送による 基板実装のし易さなど製造原価を下げるのに向いています。 他にないハードマクロ命令はコンパイラに新世界をもたらします。
命令セットは16bit固定長でオペランドの8bitだけで投機的に実行が開始できる命令セット。 この結果、メモリをリードしてライトするまで5サイクルの命令が4サイクルに高速化される。 全く独自のアーキテクチャも売り。
IoTのCPUは要求仕様を満たす範囲で最も低スペックなCPUを選択するのだと思います。 将来、IoTを作るときに、まずWZetaで要求仕様を満たすか?を判断するようになればと思っています。 つまり多くの人がWZetaを知ることになり、それが、さらにWZetaの普及につながってWZetaが世界へ広がっていけばと。
安価な8bit CPUのパソコンを作ることを目指すなら XilinxのFPGA搭載のCmod A7-15T(75ドル)をUSBでパソコンにつなげて テキスト・ターミナルでBASIC、機械語が動くようにするとか。 これだとGPUを追加設計する必要がない。 A7-15TはSRAM512KB搭載なのでメインメモリとして使える。すぐにパソコンできそう。
XilinxのFPGA搭載のボード Cmod A7-15T(75ドル)
Cmod A7-15Tは入手しにくいようなら上位モデルの Cmod A7-35Tが秋月で約1万円で売られている。 僕はA7-35Tを持っているけど8bitパソコンを作る時間があるか、どうか。 もう少し安価なCmod S7もあるけどSRAMが搭載されてない。
こんな感じの8bit CPUのパソコンになるのかも。
こちらのブログにArduinoでシリアル・コンソールのBASICを作った人、いるみたいです。 Arduino Basicを改良してシリアルコンソール対応


8月31日 進捗報告、動作検証環境の仮想化

QEMUが6.1.0になったので、頑張ってCentOS8+QEMU6.1.0の 動作検証環境を作りましたが、CentOS7+QEMU6.0.0に戻しています。 Xilinxの開発環境VivadoがCentOS8.2までしか対応していないので、 ホストOSでVivadoが走らないという問題が起きたので。
長時間シミュレーションをゲストOSで走らせておいて、 Vivadoによる論理合成が、必要になったところで、 ゲストOSを止めて、ホストOS上で論理合成をできるようにします。 ゲストOSの停止はCtrl-A + CでモニターにしてからSTOPコマンド一発でゲストOSが止まります。 再会はCONTコマンド一発で再会、モニターから通常のターミナルに戻るのはCtrl-A + C。(←QEMUの機能)
かなり便利な環境ができたかもと思ってます。


8月27日 超軽量CPUの使い道

8bit CPU WZeta の動作を検証する環境の構築に時間がかかっていますが、 超軽量CPUの使い道の一つについて書いてみます。

一昨日のGIGAZINE記事
AMD復活の功労者でFPGA開発企業CEOのジム・アンダーソン氏へのインタビューが公開中

何年か前、記事のFPGA開発企業Latticeの講習会に参加したときに、 もう少しFPGAのメリットについて講師が説明されていたこと思い出しました。
同じFPGA企業のXilinxは大型、超大型のFPGAが多いので、超軽量8bit CPUを 実装しただけのマイコンを作っても、コスト的に見合うものを作るのは難しいかなと思ってました。
一方、LatticeのFPGAは小型のFPGAが多く、ASICとピン互換のFPGAマイコンを作れば、 ASICマイコンがEOL(製造中止)になっても、FPGAにすれば、いいというメリットを 講習会で説明していました。
小型のFPGAだと超軽量8bit CPUすら入らないサイズのものもあるので、 ピン互換なFPGAマイコンに使うCPUとして、WZetaは最適かも、と思っていたりします。
ピン互換FPGAマイコンのメリットがどのくらいなのかは、 具体的に製品を製造しているところでないと、わからないと思いますが。


8月15日 2005年に日立製作所を辞めた理由

いつも○○したり脅迫してくる産業スパイなのですが、 理由について日記に書くように言っている。 話すと長くなるので手短に話してみます。 2002年に大型コンピュータ事業部から金融部門に転勤になった。 営業配転ということは聞いていなかったので営業の人に囲まれながら、 1人黙々とプログラミングをしていた。 日立や関連企業が開発するソフトウエアを買って売る 立場だった。つまりエンジニアがボッタクリな値段を 言ってくるのを、やり方含め、適正な価格で買うことが自分の 将来の仕事になるのだろうと思っていた。 だから日立や関連企業のソフトウエアエンジニアに混じって ソフトウエアをやるわけにいかなかったのである。 その後、日立の研究所に金融部門の所属のまま出向。
熱の出ない風邪で1週間近く休むことが良く起きた。 1人黙々とプログラミングをしているわけですから、 自分の成果を上げるのは、自分しかいない。 風邪で苦しい状態で寝ていたが、それ以上に、辛かった。
そしてUSBメモリをICカードエミュレーションする ソフトウェアが完成した。 これは現在も公開中のmyuToken のことです。2004年12月、日立社内に展開するべく会社に 報告しようとしたところで、風邪が悪化して、出社できない状態になった。
熱の出ない風邪も、風邪の悪化も会社の嫌がらせだと思っていたが、 当時、あまりそれをうまく説明する方法を思いつけなかったし、 そもそも大型コンピュータ事業で活躍していたので、 会社を辞めさせられると思っていなかったためリストラに対する 準備がなかった。
このため自己都合で辞めることになったのですが、 事実上は汚い方法で会社に辞めさせられたのです。

もう少し言うなら、活躍した僕を辞めさせると会社は 大儲けという状況。汚い方法で辞めさせたことを隠蔽するために、 ○○で口を封じるのだが、なかなか、これをネット上で言うのは、 難しい。しかし、そろそろ、自転車創業を見逃すのも、 法学関係の人にとっても、限界ということにならないだろうか。
当時、僕がプロジェクトに参加すると1億円が出るような、 うわさが立っていた。僕を半殺しにして口封じをして 1億円をリストラ屋が得たという事件でもあると僕は思っています。 1億円出せるってことは、僕はいったい何億、稼いでいたのだろうかということかも。


8月14日 超軽量8bit CPU WZeta作業報告

WZetaのC言語によるシミュレータはアセンブラ(wzasm)に内蔵 させていたのですが、C言語実装のWZeta命令セットシミュレータ(wzsim) として分離作業中。高速なシミュレータを目指すというよりは、 簡単に作れることが目標になっています。内蔵だったのを分離するだけの 作業なのですがアドレス拡張を考え12GBのメモリにアクセス できるように作り直しています。12GBのメモリをアクセスするためには calloc()で12GBのメモリが確保できるOSである必要がありますけど。 最大192KBのメモリをアクセスできれば良かった実装では、 気にしなくてよかった問題が、12GBでは起きるので。
産業スパイによる妨害で眠くて、作業が進まない。


8月13日 自作標準ロジックCPUをWZetaでエミュレート(2)

補足。仮想マシンの分岐命令やCALL命令の実装で割込み禁止が必要だと書きましたが、 なくても問題なく動作します。昨日の日記のほうも取り消し線で修正しました。 なるべく情報を早く出そうとした結果なのですが、あまり大きな問題ではないと思っています。 まだverilogなどのファイルを公開していないので、本格的に考える人があると 思っていなかったのです。1人で開発をやっているので万全な広報をするのは、少し大変。


8月12日 自作標準ロジックCPUをWZetaでエミュレート

標準ロジックで自作したCPUの命令セットは部品点数などの制限から、 非常に少ない命令数になることが多く、WZetaの仮想マシン機能で エミュレーションできることが、しばしばあります。
WZetaでエミュレーションできることで自分の自作CPUに興味を持つ人がでてきて、 ソフトウェアを作ってくれる人が増えるかもしれません。 一方、互換CPUを勝手に作られて、自分のCPUが、全く売れないということも 起きるかもしれません。 標準ロジックで自作したCPUの命令セットに対して、どうのようなライセンスなのかが 明記されていれば、WZetaの仮想マシンでエミュレーションして、何かできそうかを 考えることがきるのかもしれないと思います。
WZetaの仮想マシンで最も効率のいい命令コードのフォーマットは16bit固定長、 6bitのオペコードと8bitのオペランドです。 Z80のような8bit可変長の命令セットでも、比較的効率良く変換できるかもと 思っています。プログラムコード1バイト毎に WZetaの仮想マシンの命令コード2バイトを割当てるのです。 バイナリ互換のエミュレーションではなくなりますが、 アセンブラのコードがあれば、一対一の変換が可能です。 WZetaは全命令2バイト固定長なので、分岐命令のアドレスは、 2バイト単位のアドレスなのです。 つまり1バイトの命令コードに2バイトを割当ますが、分岐アドレスは同じ になります。一対一のときに再計算する必要がありません。 WZetaのPC(プログラムカウンタ)をエミュレーションするCPUの PCとして使えるということです。
エミュレーションCPUのアプリが64KBを使い切るような場合でも、 WZetaはプログラム128KB、データ64KBをアクセスできるので、 自己書き換えするようなアプリでなければ容易にアプリを 移植できるだろうと思います。
エミュレーションするCPUの分岐命令やCALL命令は、GETPC命令、SETPC命令を使うことで実装できます。 GETPCやSETPCはWZetaのPC(プログラムカウンタ)の値を取得したり変更したりします。 仮想マシン(ハードマクロ命令)実行中は、WZetaはハードマクロ命令の カウンタで動いてるのでPCを変更しても、動作がおかしくなることはありません。 ただ割込み禁止状態でGETPC、SETPCを実行する必要があると思います。 あるいはINT命令でGETPC、SETPCの実装をすれば、割込み禁止にする手間が省けます。 (割込み禁止にしなくても、問題なく動作します)
もしご興味がある方があれば、お気軽にご連絡ください。


8月11日 8bit CPU WZetaの仕様を更新しました

今回は更新したPDFを公式サイトではなくsubnote のほうに置きました。オプションで4GBのメモリにアクセスできるような命令セットの案です。 少ないトランジスタ数で4GBのメモリアクセスできることに重点が置かれています。 性能は良くないと思いますが、シンプルな命令セットなので使い易いかと。


8月11日 8bit CPU WZetaアドレス拡張(案)第2回目

SNSで未使用の命令コードを使わないの?という感じのものもありましたが、 一昨日の日記のPREFIXが良さそうだと思います。もっと具体的に書いてみました。
第2回目の案


8月9日 8bit CPU WZetaアドレス拡張(案)

WZetaのメリットはトランジスタ数が 少ないこと。このため192KB(プログラム128KB、データ64KB)のアドレス空間でもいいだろうと 設計を進めてきました。ようやくアドレス拡張について考える時間ができたので、 考えはじめています。まだ本当に実装できるのか不明ですが、 良さそうな案ができたので、案を書いたPDFを ここに置いてみます。 案という状態で公開しようと思った理由は、先に公開している命令セットを僅かに変更したため。 SETPCとSETMCのオペコードを変更しただけなので気になる人もいないと思っています。
もう一つの理由は、うまくアドレス拡張できているので、WZetaの将来性の 評価を良くできないかと思ったからです。 トランジスタ数を、あまり増やさないことを最大の目標としているので、 性能は非常に遅いのですが、わかりやすく、使い易い。そして自然に拡張された アドレスへのメモリアクセスのサイクル数を増加させられるので実装しやすい。
最大8GBのプログラム、4GBのデータにアクセスできますが、 レジスタの数は増えていません。 性能は非常に遅くなると思うので期待できませんが、これで大きなシステムでも動かすことはできるかな?


8月8日 僕とコンパイラ

今年の2月末から新型の8bit CPU WZeta を開発してきました。FPGAに実装できるverilogファイルでプログラムを動かして動作検証をしています。 近日中にApache License 2.0(←予定)のオープンソースのライセンスで公開予定です。 WZetaは税金を使わないことを方針としているので学会関係と相性は良くありません。

前置きは、ここまでで「僕とコンパイラ」いきます。

僕が、はじめてコンパイラを使ったのは1982年に発売されたSHARP MZ-2000という 8bitパソコン向けのWICSという整数型BASICコンパイラでした。 まだ中学生でしたが、周囲の中学生はゲームに熱中する中、 コンパイラを購入するような子供だった。 何故、ゲームに熱中しなかったのか、自分でも不思議。 工学社I/Oに掲載されていた3Dの迷路のゲームを打ち込んで BASICより10倍以上速いということを体感。
高校に入ってSHARP PC-1251というメモリがたったの4.2KBのコンピュータ で遊ぶことが多かったのですが、工学社I/Oに「ポケコンパイラ」という コンパイラが掲載されていたのを見て、こんなメモリが少ないコンピュータでも コンパイラが動くのかと感動した覚えがあります。 PC-1251はメモリの節約のためBASICの予約語は中間コードで保存する方式です。 この中間コードにコンパイラ独自の意味を割当てるなどして、 少ないメモリで動くコンパイラを作っていたようです。
大学では筧先生の学部の授業でコンパイラの作り方を習いました。 PL/0というPASCAL風の言語のコンパイラを実際に作って実習させていただきました。 10年くらい前に大学で会合があったときに、その場にいらしたので、名刺を持って、 ご挨拶に伺ったこともあったのですが、大勢の中の一人だったから、覚えてないと思いますけど。 PL/0はLL(1)文法でパーサが作りやすのでyacc&lexを使わない方法だったと思います。
コンパイラの研究室に入ってコンパイラで使われる 最適化アルゴリズムの研究をしていました。 このとき大学の先輩に言われてコンパイラの名著「ドラゴンブック」の 英語版を買ったりもしています。著者は2020年にチューリング賞を受賞した有名人。 この本にはyacc&lexについても書かれていました。
PL/0の出所が日立絡みだとすると、回避してyacc&lexを選択か? いや僕がWZetaのコンパイラまで手をだせる時間はあまりないかも。


8月7日 Windows11で必須のTPM(暗号プロセッサ)

この秋に登場する次期Windows11で必須となるTPM2.0(暗号プロセッサ)は RSA暗号2048、楕円暗号、SHA-256などの暗号演算をするプロセッサです。 OSやファームを書き換えるサイバー攻撃を防止できるもので必要度の高いプロセッサだと思います。 僕が使っているパソコンは5年前くらいに自作したものでTPMがありません。 産業スパイによるサイバー攻撃で、あれこれ妨害されるので僕もTPMが欲しくなっています。
TPM2.0で必要な暗号演算のすべての論理設計を僕1人で持っています。 僕が開発した暗号プロセッサICF3(1999年) はRSA暗号の性能が世界一でした。大型コンピュータの暗号装置として世界の銀行などに製品出荷されました。 そして2018年に僕が発明した暗号プロセッサSnakeCube は高速&高効率で世界最高の技術です。これを活かしていれば日本は儲かっていたのではないでしょうか。

これを活かせなかったのは産業スパイが原因であり、日本の大きな損失となってしまいました。

仮にSnakeCubeの技術を使ったディスクリートTPMを開発したとしましょう。 新しいCPUにはTPMの機能を内蔵しているので、多くの人はパソコンを買い換えることになると思います。 このためディスクリートTPMの売れる数は、それほど多くないと思いますが、 日本の知名度が向上する分、儲かったと言えるように思います。
それ以外にも、メリットはあります。 量子コンピュータの進歩によりRSA暗号が解読される心配があります。 鍵を長くするのではなく、鍵をとてつもなく長くすることで回避するという方法の 選択肢を世界の人に提供できるという価値を、僕の暗号プロセッサSnakeCubeは 創造できます。またSnakeCubeは巨大な整数の四則演算が必要とされる 新しい公開鍵暗号の発明できるという選択を可能にします。 公開鍵の安全性は素因数分解の困難性などの性質を使います。 人類が選択でき得る困難性の幅を広げておけば、公開鍵が全滅するという シナリオを想定する重税を回避できると思うのです。
なんとかすべきです。○○を続ける産業スパイと話をしていても、うまくいかないのです。 現在も、なお産業スパイが僕に害を与え続けているため、 僕が発明の収益に期待する量が増加している問題を考える必要があります。


8月6日 8bit CPU WZetaの仮想マシン機能

WZetaが技術者の関心を引く理由について説明してみます。 CPUなんてどれも同じみたいに思っている一般の人向けです。 8bit CPU WZetaは優れたCPUです。 microPython(IoT向けPython)やLua言語のバイトコード(仮想マシンの命令セット)の実装について調べました。 microPythonのバイトコードは演算命令が見当たらず Pythonの文法の制御をするためのバイトコードという感じです。 一方、LuaのバイトコードはCPUの命令セットに近いので ソースコードを読んですぐに理解できるものでした。 仮想マシンのC言語実装は、どちらもオペコードの命令列を switch文あるいはジャンプテーブルで処理する方式でした。
WZetaの仮想マシン機能(ハードマクロ命令)は、この部分をハード的に高速にして、 かつ、仮想マシンの命令列をデータメモリからプログラムメモリに配置できるようにした点が、 従来8bit CPUにない機能なので関心を持った人が多くあったのではと思います。 これまでより少ないトランジスタ数のCPUで仮想マシンのメリットが得られるため、 製造原価が下がり、地球環境にも良さそうです。

以下は、おまけの内容になります。

WZetaの仮想マシン機能を想定した仮想マシンでなければ十分な性能は出ません。 しかしながらLua言語のバイトコードはWZetaでも比較的性能が出そうです。
WZetaで仮想マシンを作る場合、opコード6bit、オペランド8bitの16bit固定の 命令セットにする必要があるのですが、少し応用すれば、性能が下がりますが、 それ以外でも、どうにか実装できる場合もあります。 opコード5bit、サブopコード5bit、オペランド16bitの32bit固定の命令セットは、 性能が出る形式です。またこの形式はICF3-Zの 仮想マシンと相性がいいのでWZetaとICF3-Zの双方で 動作する仮想マシンが作れるかもしれません。

Z80をエミュレーションするには、完全を期待しなければ、以外と簡単にできます。 WZeta SDogはバンク切替をせずにプログラム128KB、データ64KBをアクセス可能です。 WZetaの仮想マシンのopコードにはZ80の命令であることを示すコードを入れます。 オペランドにはZ80のコードを入れます。このときZ80の命令であることを示す opコードを4っつ使って64命令に分けます。BレジスタにZ80のコードの6bit分を 2倍した値を入れます。次のようなハードマクロ命令4っつを実装します。 Z80_OPnは2命令の分岐命令が128個並んでいる命令列の先頭アドレスのラベル。
JMP ^Z80_OP0:B (Z80コード0~63)
JMP ^Z80_OP1:B (Z80コード64~127)
JMP ^Z80_OP2:B (Z80コード128~191)
JMP ^Z80_OP3:B (Z80コード192~255)

Z80の命令のオペランドの場合は、値を命令処理専用のスタックにPUSHしてハードマクロ命令を終了します。 最後のオペランドだった場合は、Z80のopコードとオペランドがそろった状態なので、 Z80の命令を解釈するルーチンに分岐します。 Z80の分岐命令のアドレスは、WZetaのアドレスとして、そのまま使えます。ただし アドレス低位のハードマクロ命令などがあるところは、ハードマクロ命令の命令コードがあるので、 不可です。性能的には既存のソフト仮想マシン方式とあまり変わらないと思いますが、 データ領域が64KBしかないWZetaではZ80のコードをプログラム領域128KBに置けて、かつ、 分岐アドレスがZ80とWZetaで一致するので、うまくZ80をエミュレーションできるような気がします。 Z80のCコンパイラで出力したコードをWZetaで動かすみたいなことは、できるかも。

8月7日追記
Lua言語もPythonと同じようにIoT向けのサブセットの言語仕様でないと 8bit CPUのメモリ空間に収めることは難しそうです。


8月4日 超軽量8bit CPU WZeta作業報告

長期間報告がないと、どうなったのか心配になるかと思ったので報告。 7月30日の日記で報告した プログラムとデータを分離するセキュリティ機能をASICをターゲットとして 練り直しているところです。


暗号プロセッサ OpenICF3