ハードの動作チャックを行っていきたいと思います。

電源を入れる前にICの向き、入れ間違いを確認します。以前にメモリを逆方向に入れて、指先を軽くやけどしてしまいました。くれぐれもご注意を!

異常がなかったら、ソフトによるチェックを行っていきたいと思います。
アセンブラは以前から使用しているasxxxxのasz80とaslinkです。
ラズベリーパイのRaspbian(OS)上で行っています。
asxxxxのラズベリーパイへのインストールは姉妹ブログのこちらを参照ください。
EEPROMライタのTL866ⅡPLUSはWindows機に接続し、WinSCPでラズベリーパイから転送しています。asxxxxはwindows(Cygwin)でも動作するのでwindowsで完結した方が楽という話もありますが・・・ 
でも、ラズベリーパイも勉強しないといけないのでwww このような構成でソフト作成していきたいと思います。

Z80と8251のクロックはチェックを確実にするために、シリアル通信用の4.9152MHzに切り替えを行っています。モニタまで起動できるようになったら、クロックアップしたいと思います。

では、初めにROMの動作確認を行います。
その前に、電源投入後にD-F/F(74HC74)に接続しているLEDのうち、Q(5pin)に接続のLEDが点灯しているか確認します。この状態(QがLow)のときにROMが選択されます。
確認のソフトですが、リセット後、0x0000番地から0x0100へジャンプしてHALT命令を実行します。
HALT命令が実行されたら、HALT端子がLowになり、接続されているLEDが点灯します。

;   rom check
;
	.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

       	.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命令が使えるようにします。
8251をソフトウェアリセット、イニシャライズします。(8bit、1ストップビット、ノンパリティー、1/16分周に設定)
「OK」の2文字を出力したのち、入力文字をエコーバックします。ボーレートは38400です。

;       Z80 + 82C51 serial communication test 
;       extemal Clock 

        .Z80

        .area TEST(ABS)

USARTD	.equ	0x84		;USART DATA REG
USARTC	.equ	0x85		;USART CONTL REG

        .org    0x0000
        jp      start

        .org    0x0100
start:
	ld	sp,0x0000
	call	usartinit

main:
	ld	a,"O"
	call	com_out
	ld	a,"K"
	call	com_out
loop:
      	call	com_in
	call	com_out
	jr	loop
 
usartinit:
	xor	a
	ld	b,3
usartinit01:
	out	(USARTC),a		;dummy command
	djnz	usartinit01
	ld	a,0b01000000		;reset commmand 
	out	(USARTC),a
	ld	a,0b01001110		;1 stop bit,Parity disble,8char,1/16
	out	(USARTC),a
	ld	a,0b00110111		;RxEnable,TxEnable,RTS=0,DTR=0
	out	(USARTC),a
	ret
	
com_in:	in     	a,(USARTC)
	bit	1,a
        jr      z,com_in
	in      a,(USARTD)
	ret

com_out:push	af
com_out01:
	in      a,(USARTC)
        bit     0,a
        jr      z,com_out01
	pop	af
        out     (USARTD),a
	ret

	.end

これで、シリアル通信もできるようになりましたので、次は、Z8S180で作成したモニタを移植したいと思います。

おすすめの記事