CPLD+SIMMを使ってUSBプロトコルの解析を!
VHDLを速習! XC95144XL+16MB・SIMMを使ってUSBプロトコルアナライザを作ってしまいました!
主目的は差し迫った事情からUSBプロトコルの解析をすることだったのですが、その手段として選んだのがコレ!
[第50回]
●ハードウェアによるウォームブートに取り組んでいました
このところずっとホームページの更新ができませんでした。
至急解決しなければならないちょいと難しい問題に取り組んでおりました。
今週のはじめに葛Z術少年出版の吉崎様からメールをいただきました。
Legacy8080に搭載しているCP/M互換DOSでのCTRL+Cの扱いについてのご質問です。
ZB3BASICではCTRL+Cの入力でシステムブレークしてしまいます。
しかしCP/MモードのときはCTRL+Cを入力してもシステムブレークはしないようにしてあります。
代わりにウォームブートを行ないます。
ウォームブートは、システム全体を初期リセットせずに、必要なシステムプログラムだけをリロードして再起動する仕組みです。
この機能はオリジナルのCP/Mでもそのようになっていましたので、CP/M互換DOSでもそのようにしてあります。
吉崎様からは、そのようにしてありますか?とのお尋ねでしたので、そのようになっています、とお答えしました。
そこまではよかったのですが…。
吉崎様からはさらに、「CPU RESETでウォームブートしませんが、これはできませんか?」とのお問い合わせが来ました。
Legacy8080のフロントパネルのリセットスイッチには2つの機能があります。
押し下げるとCPUだけではなくてシステム全体のリセットになります。
通常はこのリセットを使います。
機能的にはパワーオンリセットと同じです。
リセットするとともにシステムプログラムをRAMにロードしてワーク領域を初期クリアします。
昔はこのような初期動作をコールドブートとかコールドスタートとかといいました。
逆にスイッチを押し上げるとCPUだけがリセットされます。
これも吉崎様からいただいた仕様によるものです。
しかし実際のところCPUのみをリセットしてもほとんど役には立ちません。
なにしろLegacy8080にはCPU(Z8S180)のほかにもPIC16F886とPIC18F14K50という「CPU」が搭載されているうえに、CP/Mモード、BASICモードのときはPIC18F14K50を経由してUSBで常時Windowsパソコンとつながっていますから、CPUだけをいきなりリセットしてしまったら、交信が中断されてしまってたちまちハングアップしてしまいます。
ですので「CP/MモードやBASICモードではCPU RESETによってウォームブートするのはとても無理です。できません」とご返事いたしました。
そういたしましたら吉崎様からまたメールがまいりました。
「最初にまとめた仕様書では下記のようになっているのですが…」
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
RESETスイッチはCPUリセットのみの「ホットスタート」専用とする。 IPLブートは行わず、CP/M互換OSを「ホットスタート」する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(そのメールを読みまして、私)「えっ。」
(しばし絶句…でありました)
あわてて、以前にいただいた仕様書を読み直してみましたら…。
本当でした。
そのように当初にいただいた仕様書にはちゃんと書いてありました。
ふむむむむむ。
そういうことになりますと。
できませんでは済まされませんでしょう。
これはえらいことですよ。
しかし。
なんとかしなければなりませぬ。
で。
この数日その難問と取り組んでいたのです。
うんうんうなって枯れかけた脳細胞を総動員して工夫しました結果、ようやくなんとかすることができました。
その詳細については次回にゆずることにいたしまして(またまたしっかりテーマ違いです)、まずはCPU RESETによってウォームブートが実行される様子を見ていただくことにいたします。
Legacy8080をWindows7(32bit)パソコンに接続して、CP/Mモードで起動したところです。
デバッグ中のためいろいろごちゃごちゃしたメッセージが表示されています。
この状態でLegacy8080のフロントパネルのリセットスイッチを押し上げますと、下の画像のようになります。
cpu reset detected と表示され、必要なシステムプログラムが再ロードされたあと、再びCP/Mにエントリします。
ウォームブートです。
なお、Legacy8080の場合、普通にシステムリセットを行なうとUSB接続が遮断されるため、Windows側のシステムプログラムがハングアップするか通信エラーでブレークしてしまいます。
今回作ったCPUのみのリセットによるウォームブートでは、USB接続は遮断されず上の画像にありますように見かけ上シームレスに再起動が行なわれます。
CPLD+SIMMを使ってUSBプロトコルの解析を![第50回]
2014.5.17upload
前へ
次へ
ホームページトップへ戻る