前回の記事を踏まえて増設したRAM上にモニタを起動してみます。
まずモニタの開始アドレスとスタックポインターを変更します。
変更前
[asm]
; 前半略
.org 0x0000
jp start
.org 0x100
start: ;cold start
ld sp,0x8000 ;stack pointer set
call com_init ;serial channel initialize
; 以下略
; .org 0x0000
; jp start
.org 0xf000
start: ;cold start
ld sp,0x0000 ;stack pointer set
call com_init ;serial channel initialize
; 以下略
ファイル名を 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