Z8S180のMMUの設定についてレジスターを変更してみます。

3つのレジスタのI/Oアドレスは
BBR  0x39
CBR  0x38
CBAR 0x3A
となっています。

さらにCBARの上位4ビットが CA
        下位4ビットが BA
です。

リセット時の値を確認してみます。
モニターで確認すると
>i 39 00
>i 38 00
>i 3a F0

となっています。
前回の記事の例1のようなメモリ構成に変更してみます。
その前にちゃんとメモリが変更されたか確認のために変更前の
メモリ値について確認してみます。

1000番地から16バイトを01〜16に設定しました。
>d 1000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
1000 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16

また、F000〜番地の値はメモリを実装していないので書き込みができません
>m f000 7E 00
>m f001 7E 01
>m f002 7E 02
>d f000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F000 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E

ちなみに 8000番地からメモリを実装していないので書き込みできないことを確認してみます。
>m 8000 7E 00
>m 8001 7E 01
>m 8002 7E 02
>d 8000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
8000 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E

まずCBARを変更します。
BA=1,CA=Fなので
CBAR=F1

>i 3a F0 f1
>i 3a F1

続いてBBR,CBRを変更します。
メモリは20000から実装しているので
BBR=20
CBR=20です。

まず最初はBBR
>i 39 00 20
Monitor Z180 CPU ver0.71 by Pinecone 2017/2/22
今回はモニターに戻ってきましたが、設定を変更することでスタックの
値が変わってしまいます
(スタックポインターの値が8000なので7FFF以前の値が不定になるためです。 スタックポインターを1000に設定することで回避できます)
暴走した場合はリセットします^^

続いてCBR
>i 38 00 20
>i 38 20

変更後のメモリを確認します。
まずは1000番地から
>d 1000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
1000 0A 9D AE A6 C3 22 C6 AE 0E 75 AF E9 10 BF C4 9A
内容が不定の値に変わってしまいました。
書き込みができるか確認します。
>m 1000 0A 01
>m 1001 9D 02
>m 1002 AE 03
>m 1003 A6 fe
>d 1000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
1000 01 02 03 FE C3 22 C6 AE 0E 75 AF E9 10 BF C4 9A
書き込みできました。

続いてF000番地を確認します。
>d f000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F000 42 AA 21 7A 93 C2 61 03 A4 5D 0F 60 CE 4B C3 4B
不定値となっています。
>m f000 42 01
>m f001 AA 02
>m f002 21 03
>m f003 7A fe
>d f000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F000 01 02 03 FE 93 C2 61 03 A4 5D 0F 60 CE 4B C3 4B
書込みできました

8000番地も同様に確認して見ました。
>d 8000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
8000 BD 5F 1F A1 F0 F5 44 C6 A1 07 43 4F 47 CE 02 BC
>m 8000 BD 01
>m 8001 5F 02
>m 8002 1F 03
>m 8003 A1 fe
>d 8000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
8000 01 02 03 FE F0 F5 44 C6 A1 07 43 4F 47 CE 02 BC

ということで意図したとおりにメモリ配置できていました。
次回にフルRAM上でモニタを動作させてみたいと思います。

おすすめの記事