見出し画像

おお! 愛しのデバッガ

先日こちらの記事を書いたところ「懐かしい」というコメントをいただいた。そうすると懐かしいことをさらに書きたくなるというのが人情というものである(そうか?)。
であるからして、今日は

デバッガ

である。


「デバッガ」というとどういうものをイメージするだろうか。

ブレークすることができる。
ブレークポイントが設定できる。
メモリをリード・ライトすることができる。
各種変数を参照設定することができる。

基本的にはそんなところか。
昨今は、それらをIDEがこなしてくれる。

IDEとは、「Integrated Development Environment」の略称で、日本語にすると「統合開発環境」という。

ソースコードの編集はもとより、コンパイルができて、実行もできて、ソースコードでブレークポイントも設定できて、ブレークすれば変数をモニタできる。なんでもできるので「統合」というお冠がつく。

そう、昔はバラバラだったんである。
viでソースコードをエディットして、ccでコンパイルして、gdbでデバッグする。完全独立。あなたはあなた、わたしはわたし、である。

vi、cc、gdbはUnixのコマンドである。ccで生成した実行モジュールはgdbでデバッグできて、ブレークして変数をダンプすることができる。それはもちろん、Unixで動くモジュールだからできるのであって、それ以外のCPUをターゲットにしたモジュールではできない。

組み込みソフトウェアとはハードウェアとソフトウェアが一体となった、ハードウェアに組み込まれたソフトウェアである。例えば、高機能な電子レンジや炊飯器、あるいは最近では中身を遠隔で確認できたりする冷蔵庫があるそうで、こういうのもソフトウェアがやりそうである(家電は詳しくない💧)。これらはスイッチ入力や液晶表示、センサーからの入力など、専用のハードウェアを制御しなければならない。CPUも、もちろんパソコンのCPUと一致するとは限らない。だから、もちろんパソコンでは動かないし動かせない。アセンブラでなくC言語などであればデバッガのある環境を利用して、ある程度シミュレーションはする。そうして、ターゲットCPUにソフトをのせる。

だが。

ハードウェアも新品、ソフトウェアも新品というような場合、立ち上がるかどうかさえ怪しい。固まったままだんまりを決め込んだり、あるいはリセットを繰り返したり。どこがどう間違っていてこんなことになっているのか。さっぱり検討もつかない。とは言うものの、それで終わっては製品は完成しない。なんとか問題点を見つけ出して解決し動くようにしなければならない。

さあ、どうする。

方法はいろいろあるが、その中の一つがコレである。

デバッガ


組み込みのターゲットボードというと、パソコンのマザーボードみたいなものだ。緑色の板の上にICや抵抗やコンデンサが乗っかっている。

ただし!

キーボードもなければモニタもない。IDEどころか手も足も目も耳も口もない。頭だけである。この頭の中でいったい何がどう動いているのか、これじゃあさっぱりわからない。そこで登場するのがICEというデバッガである。

ICEはインサーキット・エミュレータ(in-circuit emulator)の略称である。仰々しい名前であるが、装置そのものもなかなかすごいんである。

まず、ターゲットボードからCPUを引っこ抜く。誤記ではない。本当に引っこ抜くんである。引っこ抜けるように作ってある。いや、昨今のCPUではできない。無理である。ピンが平面に並んでいるので、これを間違いなく抜いたり挿したりを手でするなど、ほぼ不可能である。と思ったが、必ずしもそうではないらしい。こちら↓の記事はCPUの抜き差しでピンを曲げてしまったときの話だそうである。ということは、抜き差し可能であるということだ。

こちらの記事が結構面白い。面白いというと人の不幸(ピンを曲げてしまった)を楽しんでいるようで申し訳ないのだが、とにかく、興味深いことは確かである。曲がったピンを修復するのにシャーペンが役立つとは知らなかった。ここに見えている画像だけでも、これを抜き差しするなど考えただけでゲンナリする。いずれにしても、ICEの接続切断の度にやるような作業ではない。

だが、昔はちがった。例えば、Intelの8086であればこんなんである。

見えている画像だけでも想像がつくが、ピン数を数えようと思えば数えられる(まぁ、別に数えなくてもマニュアルに書いてあるんだが)。

ピンは全部で40。20ピンが対になった2列である。平面ではなく2列であるので抜き差しは無理ではない。それでも雑に扱うと簡単にピンは曲がる。まっさらのICの場合外側に少し広がっている。なので内側に軽く曲げておく。まず、ソケットの上にICをそっとのせる。ソケットの穴とICのピンが対になっているのを確認する。対になっていることが確認できれば、軽く押し込んでみる。ICのピンが1mmほど穴に入り込む。どのピンも問題なく入っているようだったらさらに力を加える。もう一度ピンを確認して問題なければ、最後の一押しである。ICの上から均等に力を加えてソケットに差し込む。

抜くときも原始的である。ICを引き抜く工具もあるんだが、こういうものは何故か欲しいときにはない。そんなときはマイナスドライバーに頼る。両端から少しずつテコの原理で持ち上げてゆく。片方だけが持ち上がるとやはりピンを曲げる要因になるので、面倒でも少しずつやる。マイナスドライバーを使う場合は基板を傷つけないようにすることも大切だ。


さて。引き抜いたCPUはどうするのか。デバッガのプローブにさすのである。こちらはもとより交換を想定したものなので抜き差しは簡単だ。さらにそのプローブの先をターゲットボードのCPUがあったソケットにさす。

そうやってCPUはデバッガの方に装着される。

そうなればもう、こっちのもんだ。CPUは我が手中、自由自在になる。ブレークポイントを設定し、ブレークし、メモリをダンプし設定、汎用レジスタだってやりたい放題となる。ブレークすれば、これはもう間違いなくピタッと止まっている。割り込みさえ入らない。要注意はウォッチドックである。H/WがS/Wを監視している。一定時間以内にウォッチドックを叩かなければ(ウォッチドックタイマレジスタをリセットしなければ)、ウォッチドック割り込みが発生し、次にRUNしたときにはHALTしたり、リブートしたりする。ウォッチドックを無効にする手段はたいてい用意されているので、デバッガを使う時にはまずウォッチドックを無効にしなければならない。

ICEはメモリや外部レジスタ(CPUが内部に持っているレジスタではない)を、デバッガ内の領域に割り当てることもできる。ROM領域もデバッガ内のRAM領域にアサインすることもできるのだ。そんでもってここにプログラムをロードすればROMを焼かなくてもプログラムを更新できる。1990年代当時は、8インチだったか、5インチだったか。フロッピーディスクでダウンロードした。カッタンカッタンという音をたてながらロードする。朝、仕事を始める最初の作業がこれだ。15分や30分くらいかかるのは当たり前という状態で、ロードはコーヒーブレイクの時間でもあった。朝来ていきなりコーヒーブレイクだ。

ロードが完了して動き始めたらプログラムの動きに遜色はない。ICEをつないでいるからこれができないとか、ICEをつないでいるから処理が遅いなどということはないのだ。普通に試験をして問題点が発生すればICEを使ってメモリやレジスタをダンプしたりブレークしてステップ実行したりもした。ステップ実行といってもアセンブラである。C言語などでデバッグできるICEはなかった。だから、コンパイラが吐き出したアセンブラがどんなものかということはよくわかった。


私が頻繁にICEを使っていた1990年代はソフィアシステムズのICEが有名だった。あの頃は当然のように使っていたんだが、今思えばスゴイ装置である。ICEなしではとてもではないがバグの原因を特定することは不可能ではなかったか(いやまぁ、あるにはあるんだが)。ICEに不具合があったという記憶もない。概ね安定して動作したように思う。あんな装置を、よくそこまでにしたものである。

ソフィアシステムズのICEの画像を探してみたんだが、さすがになかなか見つからない。SA2000とか、SA3000とかの時代だったかと思う。オークションにあったのが唯一で、それがこちらである。

ターゲットCPUは8086ではなくて、Z80だ。ICEの筐体は真っ黒だったように記憶していたんだが、記憶違いか。白いのは時期的に後の方だったような気がする。SA2000よりももっと古いのを使ってたんだっけ?

左半分がモニタで、右側に5インチのFDドライバが2段ついている。2段もあったかな。手前のキーボードは確か蓋にもなっていたかと思う。キーボードのケーブルもこんなに長かったかなぁ。

久しぶりに使ってみたい気もする。5000円とはまた、買えない値段でもないではないか。とは言うものの、買ってどうする。5インチフロッピーディスクにどうやってデータを入れる? 仮に入れられたとしてダウンロードしてどうする? なにする? プローブの先をどこにさす? 

うーん。

というか、「SOLD」?
え?
売れたの?
え?
買ったの?

うーん。

そういう奇特な方がおられるのか。

ソフィアシステムズには、是非、ミュージアムを作ってほしいものである。その時はオンラインもお願いします(笑)。

この記事が気に入ったらサポートをしてみませんか?