rabbit2000のリセット後の動作は、SMODE端子によって動作が異なります。
SMODE0(36pin)、SMODE1(35pin)の2つの端子より4つのモードがありますが、ここでは、リセット後メモリの0x0000からスタートするノーマルプロセッサーオペレーション(SMODE0=L(GND))・SMODE1=L(GND))を選択しました。したがって、SMODE0/1(36/35pin)はGNDに接続します。

メモリのチップセレクト(CS)は、デコードする回路は内蔵されており、メモリ用にCS0、CS1、CS2の3つの端子が用意されています。また、書き込み端子WE及び読み込み端子OEも2系統用意されています。

今回は、ROMに対しては、CS0(デフォルトで0x00000からスタート)を選択、読み書き端子はWE0、OE0(デフォルト設定)選択しますが、ROMなのでWE0は無接続になります。

今回はRAMのチップセレクトCSはCS1を使用します。また、読み書き端子はWE1、OE1を使用します。

Rabbit2000の内蔵レジスタで、メモリのチップセレクトに関するレジスタはMB0CR・MB1CR・MB2CR・MB3CRですが、今回は、CS0及びCS1だけ使用しますので、MB0CR及びMB1CRを設定関連づけします。

MB0CRは、A19=0、A18=0の時、有効になります。(デフォルト設定)
 A19 A18 A17 A16
  0 0 * *   なので、0x00000~0x3ffffの範囲で、ROMが実装
            されているアドレスを指定できます。

MB1CRは、A19=0、A18=1の時、有効になります
 A19 A18 A17 A16
  0 1 * *   なので、0x40000~0x7ffffの範囲で、RAMが実装
            されているアドレスを指定できます。

実際の設定は次のようになります。
MB0CRとMB1CRは同じ設定方法です。
Bit1,Bit0 00=CS0 01=CS1 1x=CS2
Bit3,Bit2 00=OE0とWE0を使用 01=OE1とWE1を使用 
     10=OE0(リード専用) 11=OE1(リード専用)
Bit4   0=アドレスA18をそのまま使用
     1=アドレスA18を論理反転して使用
Bit5   0=アドレスA19をそのまま使用
     1=アドレスA19を論理反転して使用
Bit7,Bit6 00=4Waits 01=2Wiaits  10=1Waits 11=0Waits

したがって
MB0CRはCS0を選択、OE0とWE0を選択、A18,A19のアドレスはそのまま使用、4Waiteに設定しました。
MB0CR=0b00000000=0x00
MB1CRはCS1を選択、OE1とWE1を選択、A18,A19のアドレスはそのまま使用、4Waiteに設定しました。
MB1CR=0b00000101=0x05

次にMMUの設定に移ります。
MB1CRの設定でRAMの物理アドレスは0x40000から配置されます。
64K論理アドレスのうち、今回は0x0000~0x7fffまでをROMに、0x8000~0xffffまでをRAMに割り当てます。
またRAM領域は、0x8000~0xcfffまでをデータセグメント領域、0xd000~0xdfffまでをスタックセグメントに0xe000~0xffffをXPC領域に割り当てます。

データセグメントのベースアドレスは64K論理アドレスで0x8000、物理アドレスでは0x40000に割り当てます。
したがって、データセグメントレジスタは0x40に設定しました。
続いて、スタックセグメントのベースアドレスは、64K論理アドレスで0xd000、物理アドレスでは0x40000に割り当てます。
したがって、スタックセグメントレジスタは、0x40に設定しました。
セグサイズ設定レジスタは、論理アドレスで0x8000と0xd000に分割しているので、0xd8に設定しました。
XPCの64K論理アドレスでのベースアドレスは、初期状態では0xe000となっているので、XPCは0x40に設定しました。

最後に、グローバルコントロールレジスタGCSRの設定を行います。
ここでは、内部クロックの取り扱いの設定と周期的な割り込みの設定を行います。
内部クロックは源発振周波数を分周せずにそのまま使用、周期的な割り込みは禁止に設定しました。
GCSR=0b00001000=0x08

次回は、実際にプログラムを作成してROMの動作確認を行ってみたいと思います。

参考に回路図を提示します。

おすすめの記事