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

新製品の紹介(プチ連載です)
27C256WRITER組立キット

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
たまにはちょいと息抜きで小品も作ってみたいものです。
簡単にチョイチョイと…。
でも、なかなかそうは簡単にはいかなくて、いつものごとく回を重ねてしまうことになるのかも…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜


[第19回]


●JP@コマンド

前回に続いて今回も/W256 Sコマンドについての説明を続けます。
前回は/W256 Sコマンドを実行すると、そのいわば副産物として、システムROMの内容がアドレス0000〜7FFFに置かれた「裏RAM」にそっくりそのままコピーされるということを説明しました。
今回はそのこととJP@コマンドを合わせて使うことで、とても面白いことができてしまうということについて説明をします。

JP@コマンドもDM@、CM@コマンドと同様、ZB3DOS(CP/M互換DOS)のZB3BASICで、もとのDM、CM、JPコマンドから拡張された機能です。
DM@、CM@はワンボードマイコンでCP/Mを![第163回]以降で説明をしています。

[第17回]でも書きましたが、DM@、CM@、JP@はZB3DOS(CP/M互換DOS)ではない通常のZB3.EXEでは使うことができませんが、今回27C256WRITERプログラムを組み込むことによって、ついでにDM@、CM@、JP@も普通のZB3.EXEでも使えるようにしました。
もちろんZB3DOS(CP/M互換DOS)のZB3BASICでも使えますが、従来は/CPMコマンドで一旦CP/Mモードにしたのち、ZB3コマンドでZB3BASICに戻ってからでないと、DM@、CM@、JP@を使うことはできませんでした。
今回の27C256WRITERプログラムの組込みによって、ZB3DOSでも起動直後からそれらのコマンドを使えるようになりました

実は27C256WRITERプログラムを組み込むにあたり、DM@、CM@はついでに使えるようにしてしまうことはすぐに思いついたのですが、当初はJP@までは不要だろうと考えていました。
ま、しかしプログラムにほんの少しの追加をするだけですから、最終的にJP@も使用できるようにしておくことにしました。
それでも、そんなものは使い道がないだろう、と思っていたのですが。
超便利な意外な使い道がありました。

以下具体例で説明をします。

すでに説明しましたように、ZB3BASICを起動後にすぐにDM@コマンドやCM@コマンドを使うことができるようになりましたが、ここでは普通のDMコマンドを使っています。
DM 7FF0,7FFF[Enter]の実行によって表示されているのは、システムROMの中身です。
(@をつけない普通のDMコマンドですから「裏RAM」ではなくてシステムROMの中身が表示されます)

ところでこの範囲(7FF0〜7FFF)にはシステムプログラムは書かれていません。
表示されているのは、それ以前のプログラム編集の過程で残った、いわばゴミデータです。
したがってこの範囲はZB3BASICの実行に影響はありません。
以上のことをまず理解しておいてください。

次に/W256 S[Enter]と/CS[Enter]を続けて実行しました。
チェックサム456Bが表示されたので、システムROMの中身がそのまま「裏RAM」にコピーされたことがわかります。

そこまで準備をしておいて、そのあと普通のCMコマンドと普通のDMコマンドを実行しました。
どちらもこのアドレスではシステムROMにアクセスしていますから、CMコマンドで値を書き換えても、中身は書き換わりません。
ま、これは当然のことです。

さていよいよマジックの始まりです。
JP@1033[Enter]を実行しました。
JP@コマンドは「裏RAM」の0000〜7FFFの範囲にジャンプするコマンドです。
(その範囲のアドレスに対して@をつけない普通のJPコマンドを実行すると、システムROMにジャンプします)

アドレス1033はZB3BASICのリエントリポイントです。
BASICコマンドやマシン語モニタコマンドなどの実行後は必ずこのアドレスに戻ります。
マシン語のユーザープログラムでもプログラムの終わりに1033へのJP命令を書いておくと、暴走しないで無事にシステムに戻ることができます。
この画面ではわからないかも知れませんが、JP@1033[Enter]の実行後は何も起こらず>が表示されました。

そのあと先程と同じように、また普通のCMコマンドとDMコマンドを実行しました。
すると、今度は?
先程と全く同じことをしたにもかかわらず、不思議なことに今度は7FF0と7FF1の中身が書き換えられてしまいました。
CM@やDM@ならばわかるのですが、ここでは間違いなく普通のCMコマンドとDMコマンドしか使っていません。
一体何が起きたのでしょうか?
うーん。
ややこしくて、頭が混乱してしまいます?
カギはJP@コマンドの実行にあります。

27C256WRITER組立キット[第19回]
2016.2.25upload

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