Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール
明けましておめでとうございます。元旦より、読者の方から催促のエールを頂きましたので、急遽予定を変更し、「新春 機械語入門講座」を開講したいと思います (“本物を探せ” は、この講座終了後に続く)。
まず最初に、「機械語を理解できたよ、母さん!」とは具体的にどういう境地を指すのか、この点を明らかにしておきましょう。諸説あるとは思いますが、私の考える機械語習得に関する第一段階は次のようなものです。
未知のプロセッサーであっても、データシートさえ入手できれば、ハンドアセンブルできる
ハンドアセンブルとは、これも今や死語になっていますが、アセンブリ言語のソースリストを "手作業で" 機械語に変換することを意味します。この作業を遂行するためには、データシートに記載されたオペコードマップとアドレッシングモード、レジスタフィールドを読み解く必要がありますし、プログラムカウンタの動きについても若干の知識が必要になります。
具体例を示しましょう。日本国内で最も安価で入手が容易なマイコンボードと言えば、秋月電子の H8 シリーズは避けて通れません(30年前のマイコンは "my computer" を意味していたが、現代のマイコンは "MCU: Micro Controller Unit" を意味する)。ちなみに、我が家には次の「秋月電子3点セット」があります。
しめて 3750円也。手元に USB シリアル変換ケーブルがあれば、なんと2350円ポッキリでマイコン実験が楽しめるという、30年前には想像すらできなかった極楽浄土が目の前に開けるのであります。
このH8マイコンは、元日立・現ルネサス社が販売する国産マイコンの代表格ですが、大昔に紹介したことがある通り、Cybiko や LEGO mindstorm RCX という世界的に有名なプラットフォームにも採用された経歴があります。
今回紹介する、秋月電子の H8 3694F タイニーマイコンキット は、名前の通りH8マイコンファミリーの中のひとつ、H8/3694というタイプの小型マイコンを搭載したヘッダーボード(header board)です。ボード上には、プロセッサ本体・クロック用の水晶・RS-232C用のレベル変換ICなど、必要最低限のパーツしか搭載されていません。このため、ホストPCとのシリアル接続端子(DB9)・リセットスイッチ・006P-乾電池による電源・I/O ポート動作確認用のLEDなどを搭載した タイニー I/O ボード が別途用意されています(写真中央:上記三点セットを組み合わせ、ホストPCから USB 経由でシリアル接続した様子)
この H8/3694F ボードのスペックは下記の通り。
RAM 容量こそ少ないものの、スピードでは往年の NEC PC-8001 (4MHz) を軽く凌駕しています。TK-80, TK-85 などは論外。3000円ばかりで、これだけの環境が揃うとは、本当に恵まれた時代になったものでございます。
さて、ハードウェア環境が整ったところで、次に必要なものはデータシートです。必要な資料は、ルネサス本社 "H8/3694 グループ" の左メニューバーに記載されている "ドキュメント" をクリックすると現れます。
ちなみに、同サイト上の H8/3694 グループに関する解説文を見て、尻込みする必要はありません。「チンプンカンプン・・」というのが普通の反応です。ルネサスに限らず、半導体デバイスのページは「分かる人が読めば分かる、分からない人には分からない」ようにしか書かれていないからです。
取り急ぎ、ドキュメントのページに紹介されている H8/3694グループ ハードウェアマニュアル をゲットすべし。ところが、このマニュアルは経典の後半部でありまして、プログラマにとって最も重要な前半部分が欠落しています。しかもこの経典、サイトの奥深くに隠されているのだから、困ってしまう・・。
それでは、目指す前半部を発掘しましょう。"H8/3694 グループ・ドキュメント" のページ上段に表示されている、ナビゲータの中から
ホーム / 製品 / マイクロコンピュータ / H8 ファミリ / H8/300H Tiny シリーズ / H8/3694 グループ /
"H8ファミリ" を選択し、再度左メニューバーにある "ドキュメント" をクリック。新しく表示されるドキュメントタイプ一覧の中にある、"ソフトウェアマニュアル(4)" をクリックすると、目的の経典前半部を納める H8/300H シリーズ プログラミングマニュアル が現れます。
まとめますと、秋月電子 H8 3694F タイニーマイコンキットを自在にプログラミングするためには、下記2冊のマニュアルが必要となります。
名前から類推できる通り、前者はプログラマの視点に立ったアーキテクチャ解説書、後者はハードウェア設計者の視点に立ったアーキテクチャ解説書です。H8/3694 グループは、プロセッサに H8/300H と呼ばれる CPU コアを内蔵していますので、前者を読めば各命令セットの機能やオペコードマップ、命令実行に必要なステート数など、機械語プログラミングに必要なすべての情報を得ることができます。
それでは、後者のハードウェアマニュアルは、何のために分冊になっているのでしょうか?実は、H8マイコンには H8/3694 グループの他にも、H8/300H CPU コアを内蔵した多種多様の亜型が用意されています。同じプロセッサコアではあるけれども、あるものはモータ制御機能を余分に搭載し、またあるものは車載用のCANインターフェースを搭載しているなど、用途に応じて進化を遂げている訳です。このハードウェア上の差異(特に I/O 機能)を吸収するために、各グループ毎にハードウェアマニュアルが用意されているのです。
アセンブリ言語から機械語へハンドアセンブルするためには、プログラミングマニュアルのみで間に合いますが、今回のように、特定のボード上に実装された MCU から外部に接続された LED を制御しようとすると、ハードウェアマニュアルが必要不可欠となります。
参考までに、"H8/300H シリーズ プログラミングマニュアル" の「はじめに」を引用しておきましょう。
H8/300H シリーズは、内部32ビット構成の H8/300H CPU をコアとしています。H8/300H CPU は、16ビット×16本の汎用レジスタと高速動作を指向した簡潔で最適化された命令セットを備え、16M バイトのリニアなアドレス空間を扱うことができます。命令は、H8/300 シリーズとオブジェクトレベルで上位互換を保っており、容易に H8/300 シリーズから移行できます。また、高級言語Cで書かれたプログラムも効率的に実行できます。
本マニュアルは、H8/300H CPU の命令の詳細について記載しており、H8/300H シリーズ共通に使用することができます。なお、ハードウェアの詳細については、当該 LSI のハードウェアマニュアルをご覧ください。
ここに書かれている通り、プログラミングマニュアルとハードウェアマニュアルは本来不可分のものであり、特に後者は、回路設計者が読むだけのものではありません。その意味は、次回・次々回で明らかになります。
今日の教訓 「プログラミングマニュアルとハードウェアマニュアルは、セットで座右に置くべし」
明日は、プログラミングマニュアルを読みながら、LED1秒点滅プログラムのハンドアセンブルに挑戦してみましょう。ちなみに、明後日は開発環境や専用ツールには一切頼らず、ハードウェアマニュアルを参照しながら、自力で機械語プログラムを秋月ボードへ転送する予定 (GCCプログラミング工房の連載を思い出す私・・)。