ハードの動作チャックを行っていきたいと思います。
電源を入れる前に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で作成したモニタを移植したいと思います。