出来上がったハードのチェックをしていきます。
開発環境は、Z80(Z80+8251+8255)と同様にラズベリーパイ(Raspbian)でasxxxxのasz80及びaslinkです。
最初にROMの確認から行います。
電源投入後にD-F/F(74HC74)に接続しているLEDのうち、Q(5pin)に接続のLEDが点灯しているか確認します。この状態(QがLow)のときにROMが選択されます。
確認のソフトですが、リセット後、0x0000番地から0x0100へジャンプしてHALT命令を実行します。
HALT命令が実行されたら、HALT端子がLowになり、接続されているLEDが点灯します。
; rom check
;
; Z80 cpu
; rom 0000h -- 7fffh
; ram 8000h -- ffffh
; External clock 4.9142MHz
; assembler
; program start 0000H
; main 0100H
;
; assemblers ASxxxx and ASlink V5.10
; file name rom_check.asm
; $ asz80 -l -s -o rom_check.asm
; $ aslink -i rom_check
; windows10 rom-writer TL866-2 plus rom_check.ihx
;
.z80
.area TEST(ABS)
.org 0x0000
start:
jp main
.org 0x0100
main:
halt
.end
次にRAMの確認を行います。
RAMは、0x8000-0xFFFFの間に配置されてますので、一番高位の0xFFFFにHALT命令を書き込んで、ここにジャンプし、HALT命令を実行します。
ROMのチェックと同様、HALT端子に接続のLEDが点灯します
; ram check
;
; Z80 cpu
; rom 0000h -- 7fffh
; ram 8000h -- ffffh
; External clock 4.9142MHz
; assembler
; program start 0000H
; main 0100H
;
; assemblers ASxxxx and ASlink V5.10
; file name ram_check.asm
; $ asz80 -l -s -o ram_check.asm
; $ aslink -i ram_check
; windows10 rom-writer TL866-2 plus ram_check.ihx
;
.z80
.area TEST(ABS)
.org 0x0000
jp start
.org 0x0100
start:
ld a,0x76
ld hl,0xffff
ld (hl),a
jp (HL)
.end
これで、ROMとRAMが動作してるようなので、次にシリアル通信の確認を行っていきます。
RAMが使えるようになったのでスタックポインタを設定してCALL命令が使えるようにします。
SIOをソフトウェアリセット、イニシャライズします。(A-CH 及びB-CH)8bit、1ストップビット、ノンパリティー、1/16分周に設定
割り込みはなしに設定。
「OK」の2文字を出力したのち、入力文字をエコーバックします。ボーレートは38400です。
; Z80 + SIO serial communication test (CH-A)
;
; Z80 cpu
; rom 0000h -- 7fffh
; ram 8000h -- ffffh
; External clock 4.9142MHz
; SIO serial communication A-CH
; extemal Clock 0.6144MHz (1/16=38400bps)
; assembler
; program start 0x0000
; main 0x0100
;
; assemblers ASxxxx and ASlink V5.10
; file name com_check.asm
; $ asz80 -l -s -o com_check.asm
; $ aslink -i com_check
; windows10 rom-writer TL866-2 plus com_check.ihx
;
.Z80
.area TEST(ABS)
SIOAD .equ 0x84 ;SIO A-CH DATA REG
SIOAC .equ 0x85 ;SIO A-CH CONTL REG
SIOBD .equ 0x86 ;SIO B-CH DATA REG
SIOBC .equ 0x87 ;SIO B-CH CONTL REG
.org 0x0000
jp start
.org 0x0100
start:
ld sp,0x0000
call sioinit
main:
ld a,"O"
call com_out
ld a,"K"
call com_out
loop:
call com_in
call com_out
jr loop
sioinit:
ld b,0x0b
ld c,SIOBC
ld hl,SIO_INIT_TB_B
otir
ld b,0x09
ld c,SIOAC
ld hl,SIO_INIT_TB_A
otir
ret
com_in: in a,(SIOAC)
bit 0,a
jr z,com_in
in a,(SIOAD)
ret
com_out:push af
com_out01:
in a,(SIOAC)
bit 2,a
jr z,com_out01
pop af
out (SIOAD),a
ret
SIO_INIT_TB_A:
.db 0x18 ;ch RESET
.db 0x14 ;WR4 set ,int reset
.db 0b01000100 ;x16 8bitchar 1stopbit nonparity
.db 0x03 ;WR3 set
.db 0b11000001 ;rx 8bit char ,RxEnable
.db 0x05 ;WR5 set
.db 0b01101000 ;tx 8bit char ,TxEnable ,DTR=0 ,RTS=0
.db 0x11 ;WR1 set ,int reset
.db 0b00000000 ;non int
SIO_INIT_TB_B:
.db 0x18 ;ch RESET
.db 0x02 ;WR2 set
.db 0x00 ;int tabel 0x00
.db 0x14 ;WR4 set ,int reset
.db 0b01000100 ;x16 8bitchar 1stopbit nonparity
.db 0x03 ;WR3 set
.db 0b11000001 ;rx 8bit char ,RxEnable
.db 0x05 ;WR5 set
.db 0b01101000 ;tx 8bit char ,TxEnable ,DTR=0 ,RTS=0
.db 0x11 ;WR1 set ,int reset
.db 0b00000000 ;non int
.end
これで、シリアル通信もできるようになりましたので、次は、Z8S180で作成したモニタを移植したいと思います。