製作したハードの確認を行っていきたいと思います。
まずはROMの動作確認をしていきます。
HALT端子(56pin)には、LEDを接続していますので、ROMにHALT命令を書き込み、実行することで、HALT端子がLowレベルになり、LEDが点灯します。
下記のプログラムをASXXXXでアセンブルし、ROMライターでROMに書き込みします。
システムクロックは16MHzになっていますが、内部クロックは1/2の8MHzです。Φ端子(64pin)から出力されています。
asz80でのHD64180のアセンブル指示として .hd64を表記します。
; HD64180 rom check
; HD64180 cpu
; rom 0000h -- 7fffh
; External clock 16MHz
; assemblers ASxxxx and ASlink V5.10
; file name rom_test.asm
; $ asz80 -l -s -o rom_test.asm
; $ aslink -i rom_test
; win10 ROM writer TL866(2)PLUS rom_test.ihx
;
;
.hd64
.area TEST(ABS)
.org 0x0000
start:
jp main
.org 0x0100
main:
halt
.end
LEDが点灯することを確認します。
次にRAMを確認します。
RAMのアドレスは、今回の回路では、0x20000~から割り当てています。
HD64180は最初に制作したZ80ボードのZ8S180の元祖にあたるハードですから内蔵しているMMUも同じような構造になっています。
したがって、MMUの割り付けも、Z8S180にならって設定していきます。
(RAMのアドレス設定もZ8S180ボードと同じ0x20000~です)
MMUのレジスタは3つのレジスタで物理メモリアドレスを論理メモリアドレスに割り振ります。
物理メモリアドレスは、ハードで構成されるメモリアドレスで、ここではROMは0x00000から、RAMは0x20000から配置されています。
論理メモリアドレスはZ80メモリ空間で、0x0000~0xffffまでの64Kバイトを指します。
MMU関連レジスタは、コモンバンクエリアレジスタCBAR(8bit)、バンクベースレジスタBBR(8bit)、コモンベースレジスタCBR(8bit)で構成されます。
さらに、コモンバンクエリアレジスタCBARは上位4bitをコモンエリアCA、下位4bitがバンクエリアBAを指定します。
論理メモリエリア64Kバイトは、3分割でき、0x0000~から0x(BA)00までをコモンエリア0、0x(BA)000~0x(CA)000までをバンクエリア、0x(CA)000~0xffffをコモンエリア1として指定します。
今回のプログラムでは、CBAR=0x88(CA=8,BA=8)、BBR=0x20、CBR=0x20となっています。
CA=BAの場合、バンクエリアは消滅し、コモンエリア0とコモンエリア1だけになります。
つまり、コモンエリア1として0x8000~0xffffを指定しています。
コモンエリア0は、0x0000~0x7fffまでの範囲になります。(ここではROMが割り当てられます)
今回のハード設定では物理メモリアドレスは、0x00000~0x1f000までがROMに0x20000~からRAMになりますが、MMUレジスタの設定により、RAMエリア(コモンエリア1)は0x28000~0x2ffffまでが論理メモリアドレス0x8000~0xffffに割り与えられます。(ROMエリア(コモンエリア0)は、物理アドレス0x00000~0x07fffが論理アドレス0x0000~0x7fffに割り当てられます。)
バンクベースレジスタBBR(8bit)、コモンベースレジスタCBR(8bit)は、CA及びBAを指定する際の物理メモリアドレスのベースアドレスを指定します。
ここでは、物理メモリアドレスは0x20000から配置しているので、0x20を指定しています。
ちなみに64KフルRAMにするためには、CBAR=00に設定することにより、コモンエリア0が消滅し、コモンアエリア1だけとなり、物理メモリアドレス0x20000~0x2ffffがRAMとして割り与えられます。
下記のプログラムは、MMUで0x8000から0xffffまでをRAMに設定したのち、0x8000にHALT命令を書き込み、0x8000にジャンプし、HALTを実行します。
; HD64180 cpu
; rom 0000h -- 7fffh
; ram 8000h -- ffffh(MMU setting)
; External clock 16MHz
; assembler
; program start 0000H
; main 0100H
; assemblers ASxxxx and ASlink V5.10
; file name ram_test.asm
; $ asz80 -l -s -o ram_test.asm
; $ aslink -i ram_test
; win10 writer (TL866(2)PLUS ram_test.ihx
;
.hd64
.area TEST(ABS)
CBR .equ 0x38 ;i/o setting reg
BBR .equ 0x39
CBAR .equ 0x3a
ram .equ 0x20 ;ram address 0x20000
cbar_set .equ 0x88 ;moni move temprary CBAR setting address 0x8000
.org 0x0000
jp init_ram
.org 0x0080
init_ram:
ld a,cbar_set ;ram 0x8000 to 0xffff
out0 (CBAR),a
ld a,ram
out0 (BBR),a
out0 (CBR),a
jp start
.org 0x0100
start:
ld hl,0x8000
ld a,0x76
ld (hl),a
jp (hl)
.end
LEDが点灯することを確認します。
これでROMとRAMが動作しましたので、次回はシリアル通信を確認して、最初のモニタを書き込みしたいと思います。