目次
前
次
アーキテクチャ概要
i8048のアーキテクチャは、次のブロック図を見ると理解できます。
次のブロックに分けて見ていきます。
- 内蔵ROM
- 内蔵RAM
- ポート1
- ポート2
- BUSインタフェース
- 内蔵タイマーカウンタ
- 条件分岐機構
- 制御タイミング処理
各ブロックの概要を見ていきます。
内蔵ROM
内蔵ROMは、i8048では1024バイトと規定。
国内で使われている8ピンのPICの内蔵FlashROMの
サイズが512バイトから2048バイト程度。発売年を
考えると、そこそこに大きな容量でしょう。
ただし、内蔵ROMを殺して外部ROMのプログラムを
読み出して実行できるカラクリを用意していた
ので、1024バイトの2倍、4倍という容量も使う
ことはできます。
内蔵RAM
内蔵RAMは、i8048では64バイトと規定。
CPUの中には、汎用レジスタを持たないで
内蔵RAMに8バイトx2を確保していると
いうのが特徴でしょう。
最近のマイコンでは、CPU内部にレジスタを持ちますが
i8048の頃は、容量の関係からRAM上に汎用レジスタを
用意するのは、特段珍しいことではなかったです。
MOSTEKの6502は、RAMの$00から$FFをゼロページとして
利用するアーキテクチャでした。
汎用レジスタを256バイト持っているとして、CPU内部の
レジスタ2バイトx2に限定しています。
汎用レジスタは、RAM上におくので、CPU内部には
Accumlatorレジスタをひとつ用意するだけ。
面白いのは、汎用レジスタ、スタック、汎用レジスタ
と3ブロックを並べ、その後に汎用メモリエリアを
確保していること。
- $00 - $07 general purpose registers(r0 - r7)
- $08 - $0F stack
- $10 - $17 general purpose registers(r0' - r7')
- $18 - $3F memory area
スタックが8バイトしかないので、サブルーチン
コールするときには、スタックを使い切らないか
考えておかないと、暴走させることになります。
汎用レジスタの内容を破壊したくないような使い方
では、2ブロックのレジスタを切り替えて利用する
という芸当を見せることができるでしょう。
ポート1
ポート1は、入力か出力ポートになります。
ビットごとの入出力方向を設定できず
入力あるいは出力のどちらか。
ポート2
ポート2は、4ビットごとに分けて使います。
ポート2の下位ニブルは、外部メモリのアドレス上位
4ビットを指定します。
ポート2の上位ニブルは、汎用のI/Oで使えます。
BUSインタフェース
BUSインタフェースは、外部メモリのアドレス出力と
データ入出力を担当。
アドレス出力後、データ入出力に切り替えるので
時分割マルチプレクスで、ピン数を減らす工夫が
あります。
内蔵タイマーカウンタ
内蔵タイマーカウンタは、システムクロックを480分周
したクロックをカウンタに入れて+1するか、外部の
イベントトリガーでカウンタを+1するかを選択でき
ます。
カウンタは8ビットサイズですが、初期値を与えておき
255から0に変化するときに、オーバーフロー割込みを
発生させることが可能。
システムクロックの分周クロックを利用すれば、タイマー
割込み処理に使えます
イベントトリガーをカウンタのクロックにするなら
イベントをモニタする処理に使えます。
条件分岐機構
ブロック図で、使われる信号を確認します。
信号をリストしてみます。
- TEST 0
- TEST 1
- INT
- FLAG 0
- FLAG 1
- TIMER FLAG
- CARRY
- AC
上からの6信号は、割込みに関係する分岐で
使い、最後の2信号はレジスタの状態を活用
すると判断できます。
制御タイミング処理
ブロック図で、使われる信号を確認します。
信号名と機能をリスト。
- nINT
- nRESET
- PROG
- EA
- XTAL1
- XTAL2
- ALE
- nPSEN
- nSS
- nRD
- nWR
nINTは、外部割込みの印加で利用。
nRESETは、リセットを印加するため。
PROGは、外部にあるICをプログラムでアクセスするために利用。
EAは、内蔵ROMを殺して、外部ROMを使うとき利用。
XTALは、外付けの水晶発振子を接続。
ALEは、BUSからメモリのアドレスを出力し、ラッチする制御用。
nPSENは、外部ICからプログラムを読み込むとき利用。
nSSは、シングルステップ動作の制御で利用。
nRDは、データを入力する制御信号。
nWRは、データを出力する制御信号。
目次
前
次