2.(ファイル)レジスタって?(その2)
・・・もう少し読み進めてみる(英語版のP.16の「2.2 Data Memory Organization」を読む)。
上の図にあるように、ファイルレジスタはBank0~3と4つの領域に分かれるようです。読み込んだり書き込んだりする時は、上図のPR1(0x0c)とPR2(0x0d)を以下のように設定して各バンクを指定してから、そのバンク内のレジスタを指定するようです。
PR1 | PR2 | 選択Bank |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 2 |
1 | 1 | 3 |
更に読み進める(英語版のP.19の「2.2.2 SPECIAL FUNCTION REGISTERS」を読む)。
「SPECIAL FUNCTION REGISTERS」って、日本語では「特殊機能レジスタ」って言うんですね。また、どうも上の図のINDF(「Indirect addr.(*)」って書いている部分)とかTMR0とか名前がついている部分のところが、「SPECIAL FUNCTION REGISTERS」にあたるみたいです。
また日本語資料を読むと、Bank0の0x20-0x7F、Bank1の0xa0-0xef、Bank2の0x120-0x16f、Bank3の0x1a0-0x1efの部分が「汎用レジスタ」と記述されてます。
この「汎用レジスタ」は、プログラマが自由に使用できる領域のようです。前頁で計算プログラムを見て頂きましたが、計算結果を入れる領域に「ANS」というのを指定しました。
様々なプログラム言語がありますが、それらの「変数」的な扱いが出来るようです(各Bankに存在するので、スタティック変数的な扱いかもぉ?)。
あと・・・、Bank1~3の一番下にある「accesses 7CH-7FH」とある部分ですが、これは何なんでしょう?・・・Bank0の汎用レジスタの0x7c~0x7fをアクセス出来ると言う事なのだろうか?であるなら、様々なプログラム言語がありますが、それらの「グローバル変数」的な扱いになるかも知れません。(・・・これについては、今後のアセンブラを勉強していく中で発見していきましょう!)
自分なりにファイルレジスタを纏めると、(今の学習レベルでは)以下の図のような構成を持っていると(勝手に)推測しました。
※図の白い部分が、Read/Write出来る部分。グレーの網掛け部分が触れない部分。
No | レジスタ | 説明 |
1 | 特殊機能レジスタ | イコン内に既に定義されたRead/Write出来るレジスタ(1バイト単位で、名前あり)。 ※この部分のレジスタをRead/Writeすることで、周辺モジュールの設定をしたりマイコンに入出力される電気信号を読んだり出したりします。 「2.2.2 SPECIAL FUNCTION REGISTERS」の初めに記述されている内容を見ると、特殊機能レジスタはCPUと周辺モジュールが使うとのこと。 |
2 | 汎用レジスタ | プログラマが自由に使用できる空間(一部バンク切り替えを考えないで使用できる[16バイト分])。 |
焼き込むプログラムは、マイコンを制御するのでCPU側?になるのかなぁ(?)。
こんな感じのイメージだろうか?
記述されている事を自分なりに理解して図を描いてみました。CPUと周辺モジュールが
どんな仕組みで特殊機能レジスタを使うのかは今の段階では判りません。
ソフトは周辺モジュールの(動作)設定を特殊レジスタに書き込む。
マイコンの外部から入力された電気信号や状態が周辺モジュールとかCPUから特殊機能
レジスタへ書き込まれる。それをソフトが読み込んで次の処理を行う。
・・・と、いうところでしょうかね。
・・・と、徐々にファイルレジスタの内容がぼんやりと判ってきたような錯覚に囚われてきました(・・・正しいのかどうかは、今後の学習が明らかにしてくれるでしょう。たぶん・・・)。
何となく判ったような気になったところで、読み進めますが英語版のP.19の「2.2.2 SPECIAL FUNCTION REGISTERS」をこれ以上読んでも各レジスタのビットごとの説明があるものの、意味が理解出来ません(理解できる人は、凄い!)。なので、次の章を見ていきます(判らないところは、今は何も考えずにシカトしましょう)。