増設したSRAMにモニタを転送するコマンドを追加しました。

この転送コマンドは次のような手順でSRAMにFRAM上のモニタを転送しています。
転送手順は、前回の記事の手順に従ってプログラム化しました。

転送コマンド開始 Tキー

上位アドレス 8000~をRAMに
[asm] ld a,cbar_set ;ram 0x8000 to 0xffff
out0 (CBAR),a
ld a,ram
out0 (BBR),a
out0 (CBR),a
[/asm] 続いて、モニタプログラム(オブジェクト)をRAM化したアドレス8000~にコピー
[asm] ld hl,0x0000 ;moni copy at temp_addr
ld de,temp_addr
ld bc,prog_end
ldir
[/asm] コピーしたアドレス8000~の指定した場所(move_prog)にジャンプ
[asm] ld hl,move_prog+temp_addr
jp (hl) ;temprary address jump
[/asm] ここから、指定した(move_prog)アドレスから実行(オフセット +8000)
下位アドレス0000~07FFFをFRAMからSRAMに切り替え
[asm] move_prog:
xor a ;ram 0x0000 to 0x7fff setting
out0 (CBAR),a
[/asm] 8000~にコピーしたモニタをSRAM上の0000~7FFFにコピー
[asm] ld hl,temp_addr ;moni moveing at ram 0x0000 to prog_end
ld de,0x0000
ld bc,prog_end
ldir
[/asm] SRAMにコピーしたモニタの指定した場所(go_moni)にジャンプ
[asm] ld hl,go_moni
jp (hl) ;ram monitor jump
[/asm] モニタをスタートする前のいろんな設定!
ここでは、スタックポインタの再設定、クロックのスピード変更、メモリ及びI/Oのwaitの変更
を行っています。
[asm] go_moni:
ld sp,0x8000
in0 a,(CMR) ;XTAL*2
set 7,a
out0 (CMR),a
in0 a,(CCR) ;XTAL/1
set 7,a
out0 (CCR),a

in0 a,(DCNTL)
res 7,a ;MWI1=0
res 6,a ;MWI0=0 Memory wait state =0
res 5,a ;IWI1=0
res 4,a ;IWI0=0 I/O wait state =1
out0 (DCNTL),a
[/asm] モニタのスタート
[asm] jp start
[/asm] 次回に転送コマンドを追加したモニタソースを展開します。

おすすめの記事