

機械語モニタ(きかいごモニタ、英: Machine code monitor, Machine language monitor)は、機械語レベルのモニタ。
概要
編集機械語モニタは、機械語レベルのモニタ(監視・観察用のソフトウェア)であり、その基本的な機能としては、指定したメモリアドレスから機械語プログラムを実行させて、その結果の主記憶の値の状態をメモリアドレスの範囲を指定して観察したり、コアダンプでCPUのレジスタ類の値を観察するというものがある。その機能に加えて、主メモリの指定したメモリアドレスの値を指定した値に書き換える機能や、指定範囲のデータを補助記憶装置から主記憶へとロードしたり主記憶から補助記憶装置へとストアする機能を備えているものも一般的である。ファームウェアないし基本的なシステムソフトウェアとして提供される。
機械語モニタは、1970年代や1980年代前半のマイクロコンピュータ、特にマイクロコンピュータがまだキット形式やセミキット形式で販売されることもあった時代、特にホビーコンピュータと呼ばれる機種で広く使われたものである。
一部の機械語モニタは1ステップづつ機械語を実行するという機能(原始的なデバッガのような機能)を持たせるようになり、やがて機能が足されてゆきデバッガ、またアセンブラや逆アセンブラなどの機能も加えることも行われたが、1980年代に、マイコンよりも複雑化・高度化したパーソナルコンピュータが一般化してゆき、デバッガ・アセンブラ・逆アセンブラなどがそれぞれ高機能化し単体のソフトウェアとなってゆくにつれ、機械語モニタのほうは使われる頻度が減っていった。現代では機械語モニタが使われる状況は、組み込みシステムやEFIなどできわめてハードウェア寄りの操作をする時など、かなり限られている。現代では、ハードウェア寄りの一部の技術者が使用することはあるが、一般のコンピュータユーザが直接使うことは無い。
1970年代や1980年代前半に一般的だった機械語モニタのありふれた使用法は、たとえば機械語プログラムのデバッグのために使うことであり、開始と停止のメモリアドレスをユーザが入力・指定して機械語プログラムを実行させる。指定した停止アドレスに達した段階でプログラムの実行が停止し、制御をユーザに戻し、ユーザの次の入力を待つ状態になる、というものである。
- Apple IIの機械語モニタの例
たとえば、Apple IIの2番目以降のバージョンでは電源を入れるとen:Applesoft BASICの画面が立ち上がり「]」プロンプトが表示される。
]_
もし機械語モニタを使いたければ次のように入力する[1]。
] CALL -151[1]
そしてエンターキーを押すと機械語モニタが呼び出され、モニタに切り替わったことを示すためプロンプトが「*」に変更された[1]。
*_
Apple II機械語モニタでは次のコマンドが用意されていた。
- XXXX.YYYY - メモリダンプ。XXXX から YYYY までの内容を16進数で表示
- XXXX:YY - アドレス XXXX に YY を書き込む
- XXXX<YYYY.ZZZZ - メモリコピー。YYYY〜ZZZZ の内容を XXXX にコピー
- XXXXG - 実行。アドレス+G 形式で書いたGはGoの略。アドレス XXXX から機械語プログラムを実行
- RESET - システムをリセット
- CTRL+C - モニタから抜けて Applesoft BASIC に戻る
たとえばメモリアドレス $0300以降に機械語を書き込むには、次のように入力しエンターキーを押した。
* 300:A9 0F 8D 32 C0 A9 00 8D 32 C0 4C 00 03
[注釈 1][注釈 2] そしてアドレス300($0300)から実行するには次のように入力しエンターキーを押した。
* 300G
上述のプログラムの無限ループのように、実行が終了しない機械語プログラムを強制的に終了させBASICに戻るには、Apple IIでは「Ctrl+C」を押してreturnキーを押した[1]。Apple IIでも機種でキーが異なり、Ctrl+Cのほか、機種によってはCtrl + Resetを押した[注釈 3]。
プログラムの実行が終了し制御が機械語モニタに戻っている状態でApplesoft BASICに戻るには、次のように入力しエンターキーを押してもよかった。
*3D0G
歴史
編集1950年代などまでは、コンピュータの状態を確認するにはテレタイプ端末やラインプリンタなどでいちいち紙に印字する方法が使われていて、ディスプレイは使われていなかった。
1960年代からCRTを用いるディスプレイが使われるようになったおかげでソフトウェアを用いて画面上でコンピュータの状態を確認することが可能になり、紙やインクリボンの浪費とコストを気にせずコンピュータの状態を何度でも監視・観察することができるようになった。
1970年代後半に登場したマイクロコンピュータ(パーソナルコンピュータの初期段階)では、その歴史の最初から機械語モニタが提供されることが一般的となった。マイクロコンピュータでは機械語モニタは、ファームウェアとして提供される場合も、サードパーティのROMの形で提供される場合も、ソフトウェアとして提供される場合もあった。1970年代のコンピュータではROM(Read Only Memory)には機械語モニタしか書かれていないものもあった。
たとえば1977年にリリースされたApple IIのROMには簡素な機械語モニタが書かれていて、最初のバージョンのApple IIでは電源を入れると最初に表示されるのは次のような、機械語モニタを示す「*」(アスタリスク)のプロンプトだった[1]。
- *
そこから一歩進んだ、BASICを搭載したコンピュータでは、電源を入れると同時にBASICが立ち上がる仕様が一般的となってゆき、ローレベルの処理を行う際にBASIC側から機械語モニタを呼び出すしくみになっていった。たとえば、前述のように、Apple IIの2番目以降のバージョンではそうなった。
その後ROM-BASICやDISK-BASICが標準装備されるコンピュータが登場し、電源を入れるといきなりBASICのモードでマシンが起動するようになっても、「MONコマンド」等を入力すれば機械語モニタを使うことができた。
なお、初期の機械語モニタでは16進数で表示する機能しか備えておらず、機械語をアセンブリ言語に変換して表示する機能は備えていないものがあった。
なおシャープのMZ-80のような「クリーン設計」の機種では、システムの自由度を極限まで高めるために、機械語モニタはROMに書き込まれていなかった。本体ROMに書き込まれているものはIPL(イニシャル・プログラム・ローダー Initial Program Loader)だけで、機械語モニタも補助記憶装置(データレコーダなど)からRAMに読み込まれる方式になっていた[2]。
高機能な機械語モニタは、簡易デバッガとしても機能し、絶対アドレス指定方式のアセンブラや逆アセンブラの機能も備えていた。例えば、Intel 8086を搭載したPC-9801のN88-DISK BASIC(86)(1982年 - )の機械語モニタでは、アセンブラと逆アセンブラを備えていた[3]。この時代、機械語モニタだけでプログラミングを行うこともそう珍しいことではなかった。
以後のパーソナルコンピュータでは、デバッガ・アセンブラ・逆アセンブラはそれぞれの高機能化し便利になり、低機能で作業効率の悪い機械語モニタを使わずに済むようになった。
脚注
編集- 注釈
- ^ Apple IIでは、メモリアドレス$0300に書き込むには300と書けばよかった。
300($0300)はApple II の RAMの空き領域。機械語プログラムを書くときに、よく使われた安全なアドレスのひとつ。
Apple IIでは、以下のようなメモリマップがあった。- 0000–01FF Zero page, stack
- 0200–03FF テキスト入出力、キーボードバッファなど(このアドレスの一部が機械語の実験に使える)
- 0400–07FF テキストスクリーン
- C000–C0FF I/O(グラフィック、色制御など)
- ^
この機械語プログラムは下のようなものである。
A9 0F → レジスタAに0Fをロード
8D 32 C0 → Aの値をC032(テキストスクリーンの色レジスタ)にストア
A9 00 → Aに00をロード
8D 32 C0 → AをC032にストア(色を戻す)
4C 00 03 → JMP $0300。自分自身にジャンプして無限ループ
- ^ Apple IIe Ctrl+Reset 一部機種では Reset だけで BASIC に戻る。 Apple IIcでは、Command+Reset または Ctrl+Reset。
- ^ 3D0Gは、メモリアドレス $03D0Gから機械語を実行せよ、という命令であり、ROMのアドレス $03D0 以降には Applesoft BASIC に制御を戻すための小さな機械語ルーチンが書かれており、"Applesoft BASIC に戻るための入口" (機械語モニタからの便利な"出口")として頻繁に使われた。
- 出典