出来上がったハードのチェックをしていきます。

開発環境は、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で作成したモニタを移植したいと思います。

おすすめの記事