前回の記事を踏まえて増設したRAM上にモニタを起動してみます。

まずモニタの開始アドレスとスタックポインターを変更します。
変更前
[asm] ;    前半略 
.org 0x0000
jp start

.org 0x100

start: ;cold start
ld sp,0x8000 ;stack pointer set
call com_init ;serial channel initialize
;    以下略

[/asm] 開始アドレスを F000番地に スタックポインターをFFFFより使用

[asm] ;    前半略 
; .org 0x0000
; jp start

.org 0xf000

start: ;cold start
ld sp,0x0000 ;stack pointer set
call com_init ;serial channel initialize
;    以下略

[/asm]

ファイル名を moni71f.asmとしてアセンブルしました。

モニタが用意できたので、早速RAM上のモニタ機動に取り掛かります。

今回は前々記事の例2でRAMを配置します。
手順としては、
1、リセット後の8000~FFFFをRAM化する
2、F000から開始できるようにしたモニタをダウンロードする
3、2のモニターを起動する。
4、モニター上で0000~7FFFをRAM化する。

となります。

1、リセット後の8000~FFFFをRAM化する

まずCBARを変更します。
BA=8,CA=8なので
CBAR=88

>i 3a F0 88
>i 3a 88

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

まず最初はBBR
>i 39 00 20
>i 39 20

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

モニタの転送先のメモリ内容確認
>d f000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F000 42 2E 21 7A 93 C2 61 03 A4 5D 0F 60 CE 4B C3 47
不定の内容になっています。

2、モニタをダウンロードします
このモニタはF000から配置され、F000から開始するこの記事の
冒頭の変更したモニタ moni71f.ihxです。
(この変更以外にオープニングメッセージを変更しています)
lコマンドで読み込みます。

メモリ内容を確認します。
>d f000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
F000 31 00 00 CD 72 F2 21 7F F2 CD 51 F2 3E 3E CD 65

3、2のモニターを起動する。
jコマンドで F000番地にジャンプします。

>j f000 y:
Monitor Z180 CPU ver0.71f by Pinecone 2017/2/26

4、モニター上で0000~7FFFをRAM化する。
0000〜7FFFはFRAMになっているのでRAMに切り替えます。

その前に現在のRAMの状態を確認
>d 0000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0000 00 00 01 00 F8 00 F8 00 F8 00 F8 00 F8 00 F8 00

>d 0100
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0100 31 00 80 CD 72 03 21 7F 03 CD 51 03 3E 3E CD 65

切り替えは CBARを再設定するだけです。

>i 3a 88 00
>i 3a 00

RAM後のRAMの状態と書き込みを確認しました。
>d 0000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0000 A2 F2 6E C2 B7 64 23 86 DA B4 6B 4B E4 94 BA BF
>m 0000 A2 00
>m 0001 F2 01
>m 0002 6E 02
>m 0003 C2 ef
>d 0000
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0000 00 01 02 EF B7 64 23 86 DA B4 6B 4B E4 94 BA BF

>d 0100
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0100 E6 87 82 03 24 04 5E 93 62 C4 D2 D7 CE 97 B2 C2
>m 0100 E6 00
>m 0101 87 01
>m 0102 82 02
>m 0103 03 03
>m 0104 24 ef
>d 0100
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0100 00 01 02 03 EF 04 5E 93 62 C4 D2 D7 CE 97 B2 C2

無事 RAM化されているようです。

この手順をプログラム化すれば自動的にRAM上のモニタ化ができます。
MMUってすごく便利なことがわかりましたwww

おすすめの記事