2017.10.20
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[総合第110回]



●USB接続型/独立型システムの切換え

[総合第105回]で27C512の使い道について書きました。
USB接続型システムと独立型システムを27C512に書いたものをROM/RAM/RTCボードに実装してディップスイッチで切り換えて使うというアイデアについてでした。
大分県のH様からお寄せいただいたアイデアですが、H様からはその後にいただいたメールで「ディップスイッチで切り換えなくてもソフトウェアでバンクアドレスを切り換えることもできるのでは?」という提案もいただきました。
それはその通りなのですが、ことはそうはすんなりとはいきません。
USB接続型システムも独立型システムもどちらもバンク00で動作することを前提にしてソフトが出来上がっています。
ディップスイッチで27C512の1番ピンを強制的にHに固定する方法は27C512のアドレス8000〜7FFFに書かれているプログラムを「強制的に」0000〜7FFFで動作させる方法なので、プログラムそのものには全く手を加えることなく使うことができます。
この場合はバンク00でもバンク10でも8000〜FFFFのシステムが選択されます。

しかしそのようにするのではなくて、ソフトウェアでバンク00とバンク10を切り換えて使うようにするためには、もともとバンク00で動作するように作られたシステムをバンク10で動作させるようにプログラムを直さなければなりません。
分かり易い例が「ROM/RAM/RTCボードの製作」[第30回]にあります。
TK−80/ND80Zモニタプログラムのキーアクセスルーチンです。
ここはもともとはキースキャンコードとしてI/Oアドレス9CにF6、F5、F3をOUTしていたのですが、出力データの上位ビットを64KB以上のROM/RAMでバンク切換えに使うことにしたため、そこを06、05、03に変更する、という内容でした。
出力データの上位4ビットはROM/RAM/RTCボードではアドレスA18、A17、A16、A15として使います。
I/Oアドレス9Cに06、05、03を出力すると、キースキャンデータが出力されると同時にシステムROMのバンク00がセレクトされます。
USB接続型システムも独立型システムもともにバンク00で動作することを前提にしていますから、キースキャンの部分は両方とも06、05、03になっています。
そこをそのままにしておいてたとえば独立型システムをバンク10に書き込んだとします。
ソフトウェアでバンク10に切り換えて独立型システムを選択したとしても、キースキャンルーチンが実行された途端にバンク00が選択されて、USB接続型システムに切り換わってしまいます。
バンク00の選択をしているところはキースキャンだけではありません。
システムプログラムのどこかで突然バンク10からバンク00にシステムが切り換わるとおそらく多くの場合はプログラムが暴走することになってしまいます。
そのほかいろいろ問題点が考えられますから、[総合第105回]では、ソフトウェアでのシステムの切換えは将来のバージョンアップで考えることにします、と書きました。

ところが。
実際に27C512にUSB接続型システムと独立型システムを書いて、それをディップスイッチで切り換えて試してみますと。
面白くないのですよねえ、これが。
とにかく切り換えるたびにリセットすることになります。
そこが面白くありません。
独立型はともかくとしてUSB接続型はそのたびにWindows側のシステムプログラム(ZB3.exeまたはZB3DOS.exe)を再起動しなければなりません。
面倒でもあります。

実は納期の迫った仕事を複数抱えておりまして、もう半分目がつり上がっている状態なのでありますが。
まことに困った性分で。
なんとかしたいと思いついたりしますと、そこが気になってどうしようもなくなってしまいます。
緊急やらなければならないお仕事なのですけれど。
まま、ちょっと半日だけ棚上げにしておいて。

半日で済むわけはないのですよね。
とうとうこの2日間、入れあげてしまいました。

まだ完全ではありません。
プロトタイプ、試作プログラムですけれど。
27C512の0000〜7FFF(バンク00)にUSB接続型システムを置きます。
8000〜FFFF(バンク10)に独立型システムを置きます。
Windows側のシステム(ZB3.exeまたはZB3DOS.exe)は先に起動しておかなければなりませんから、先にUSB接続でZB3システムを立ち上げます。

私のところではまだWindows98SEは健在です。
こういう作業ではことのほか重宝していてなかなか手放せません。
苦闘しながら、もがきながら作業していることが見て取れる汗と涙の画面であります。
右側前面に表示されているDOSプロンプト画面がまさに今テスト中の画面です。
USB接続型から独立型への切換プログラムをRAMの8000〜に書いています。
そしてそのあとで、JP 8000でそのプログラムを実行しました。
なんてこともない画面のように見えますが、よーく見ていただきますと、おかしなところがあることに気が付きませんでしょうか?

切換プログラムを書く前にDMコマンドで8000〜800Fの内容を表示しています。
そのあと8000〜8006に切換プログラムを書きました。
そしてJP 8000を実行したあと、もう一度DMコマンドで8000〜800Fの内容を表示しています。
さわっていないはずの8007〜800Dになんだかプログラムらしきものが入っています。
一体何がおきたのでしょう?
その疑問の答えはこちらの画像にあります。

こちらはテスト中の写真です。
写真では丁度USBケーブルのところが切れてしまっていますが、独立型システムですけれどUSBでWindowsともつながっています。

こちらが独立型システムのディスプレイ画面です。

さきほどのWindpwsの画面で8000〜に書いたプログラムはバンクを10に切り換えてアドレス0800にジャンプするプログラムです。
独立型システムも初期設定が必要なので一旦はND80Zモニタ(0800〜)にエントリする必要があります。
そこで[I/O][8]と操作して開始したのが上の画面です。
ここで8007から後ろに今度はUSB接続型システムへのジャンププログラムを書いています。
そしてJP 8007を実行したことでUSB接続型システムに制御が戻り、さきほど上でお見せしたWindows画面の>JP 8000の下につながりました。
そのあとのDM命令以下は動作確認のため、Windows側で操作しています。

このあと続いてもう少しテストを続けました。

スクロールアップして消えてしまいましたが、USB接続型に戻ったあとの画面です。
独立型システムも初期設定したあとは次からはダイレクトにZB3BASICシステムにエントリすることができます(アドレス1000)。
簡単なBASICプログラムを書いたあと、独立型システムのZB3BASICへのジャンププログラムを書いて、実行しました。

今度はND80ZモニタではなくてZB3BASICの画面にエントリしました。
システムの切換えを行なってもユーザーのエリアには影響しませんから、このようにUSB接続型のほうで作成したBASICプログラムやマシン語のプログラム、データをそのまま表示したり実行することができます。


このテストをしてみて気が付きました。
USB接続型システムではZB3BASICへのエンリアドレス1000でもリエントリポイント1033でも見かけ上特別の違いはありませんが、独立型システムでは1000にジャンプすると画面クリアが行なわれます。
1033にジャンプした場合には画面クリアは行なわれません。
そこでジャンプ先アドレスを1033に変更して再実行しました。

ごく普通に上の画面の続きに見えますが、実は下から5行目JP 8007のところで一旦はUSB接続型システムに行って、そちらからJP 800Eで戻ってきたのです。

うーん。
これはなかなかに便利ですねえ。
使い勝手が飛躍的に向上しました。
これはよいものができました(自画自賛です)。

ここではテスト版として8000から切換プログラムを書いて実行しましたが、最終的にはコマンドを用意するつもりです。
USB
ALONE
あたりを考えています。

CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第110回]
2017.10.20upload

前へ
次へ
ホームページトップへ戻る