2010年3月13日 by ごきち
◆PICのマシン語
「たった35個の命令を覚えるだけで簡単にPICを操れる」
という謳い文句を掲げる書籍を目にしてまず思ったのは、
「アセンブラ覚えるよりマシン語覚えたほうが早いじゃん。」
しかし、書店の本を片っ端から探してもマシン語らしき命令コード表の紹介がない。
内部構造は詳しく書いているものの、いざプログラミングとなるとアセンブラやC言語で定数やら特殊内部レジスタの番地、ビットなどには一切触れていない。
まぁ実際にプログラムが高級、複雑になってマクロ化するに従ってハードウェア知識は必要なくなるのか?んな訳ないだろう。
私はハードウェア&ソフトウェアを組みたいのだ。
プログラムをえらそうに解説してるんだけど、INCファイルで定義されたアドレス、ビットデータ等の定数を説明無しに使ってプログラムしてるってどうよ?省略ですか?そうですか。←書店で書籍を探していてムカついてた理由。
しょうがないので買った書籍のアセンブラのニモニック表の横に本家マイクロチップ社にあったオペコード表からマシン語に変換して落書きしてみた。
マシン語レベルになるとちょっと増えて53個。(笑
ニモニックは確かに35個だわ。だけど、ディスティネーションはレジスタとレジスタに似せた内部メモリがある。
また、内臓のパラレルI/Oの状態も内部メモリに反映されている。6800系と考えれば良いか。
学生時代にZ80を卒業しきれず、Z80CPUに、DMA、SIO、タイマがワンチップになった HD64180 ボードを組んでNEC PC9801 と RS232C でリンクできるボード&プログラムを組んだ経験がある。 あ、まだどこかに眠っているはず(笑
さてその知識は記憶に残っているか?
◆HEXファイル
プログラミングはもちろんハンドアセンブル。
PICライターに読ませるHEXファイルをメモ帳で直接書く。
なのでHEXファイルのフォーマットを解析する。
昔、学校にあったROMライターでUV−ROMを焼く為に解析した事があったが、やはり忘れていた。
とりあえず、秋月のプログラマーキットに付いてきたサンプルプログラムを解析してみる。
HEXファイルをメモ帳を使って見てみる。
見やすいように間隔をとってみる。ついでに秋月PICプログラマーにも同じHEXファイルを読ませて表示させてみる。
比べるとファイル構造かが分かる。
【一行目】
「:」 データの始まりを表すのコード。お約束。
「02」 一行のデータ数。バイト単位で数える。
「0000」 アドレスデータ。バイト単位のアドレスなので実際のマシン語が格納されるアドレスの倍を表示している。
「00」 データレコードであることを表す。
「3628」 マシン語は 「2836」となる。上位と下位を逆に表記する。”28”:GOTO命令、”36”:絶対アドレス 036h にジャンプ。3FF番地にジャンプする時は「2BFF」となる。
「A0」 チェックサム。 一行のデータをバイト単位で全て足した2の補数。チェックサムまで全て足すと0hになる。
【最終行】
「:00000001FF」
お約束のエンドコード
また、16F84Aの場合はメモリ番地2007h(HEXファイルでは400Eh番地)にコンフィグレーションワード(オシレータの設定や書き込み禁止、動作モードの設定)に情報を書き込む。
とりあえずここまで分かれば、アセンブラを覚えなくてもPICにプログラムできそうかな?
つづく
PICマイコンその4に進む
PICマイコンその2に戻る