Z80

パチパチ1号、完成

2011年12月25日

パチパチマイコンが、完成品になった。

2011-12-25-IMG_9501_2.jpg

ハードウェア上は、予定通りの動きをすることが確認できたので、とりあえず完成としたい。性能は、次の通り。

CPU: Z80
clock: 2 MHz
RAM: 32K bytes
BIOS: 256 bytes
human interface: 8 bits LED & 8 bits toggle switches for data + 10 bits toggle switches for address
mass storage: tape-recorder interface. average 1600 bps.

BIOSは、PIC16F690内蔵のEEPROMに書かれている。本来、トグルスイッチで手入力する類のものであるが、256 bytesと比較的大きなプログラムのため、手入力の代わりをPIC16F690が行う形になっている。

回路図は、次の通り。

2011-12-25-schematics.png
2011-12-09-Image.png
2011-12-06-Image.png

BIOS入力用のPIC16F690のプログラムは、先に書いた記事を参照のこと。

BIOSは、現在製作中であるが、暫定的には次のようなソースコード。リセットスイッチを押すと、カセットテープインターフェースからの入力待ちになり、プログラムが入力できれば実行するようになっている。

org 0000
ld sp,8000
call init:
ld hl,(00f8)
call read8bytes:
pop hl
push hl
ld bc,(00fa)
inc b
loop1:
call read8bytes:
dec c
jr nz,loop1:
dec b
jr nz,loop1:
in a,80
pop hl
jp (hl)
end:

org 0020
save:
call beginsignal:
ld hl,00f8
call write8bytes:
ld hl,(00f8)
ld bc,(00fa)
inc b
s_loop1:
call write8bytes:
dec c
jr nz,s_loop1:
dec b
jr nz,s_loop1:
ret

check:
ld b,00
c_loop1:
in a,ff
rra
jr c,c_loop1:
c_loop2:
inc b
in a,ff
rra
jr nc,c_loop2:
ld a,b
ret

read8bytes:
push bc
push de
xor a
ld e,08
r8_loop1:
call read1byte:
ld (hl),d
inc hl
xor d
dec e
jr nz,r8_loop:
call read1byte:
cp d
pop de
pop bc
ret z

show_error:
in a,40
call e_wait:
in a,80
call e_wait:
jr show_error:
e_wait:
djnz e_wait:
dec c
jr nz,e_wait:
ret

get1bit:
call check:
cp 08
jr c,show_error:
cp 31
jr nc,show_error:
cp 20
ret

read1byte:
ld c,08
r1_loop1:
call get1bit:
rr d
dec c
jr nz, r1_loop1:
ret

init:
ld hl,0000
in a,80
i_loop1:
call check:
cp 08
jr c,init:
cp 20
jr nc,i_begin:
inc hl
dec h
inc h
jr z,i_loop1:
in a,40
jr i_loop1:
i_begin:
dec h
inc h
jr z,init:
ret

writeabit:
jr nc,writebit0:

writebit1:
ld b,1c
djnz fe
in a,80
ld b,1f
djnz fe
in a,40
ret

beginsignal:
ld bc,06dc
bs_loop1:
ld d,ff
call write1byte:
dec c
jr nz,bs_loop1:
dec b
jr nz,bs_loop1:

writebit0:
ld b,3c
djnz fe
in a,80
ld b,3f
djnz fe
in a,40
ret

write8bytes:
ld e,08
xor a
w8_loop1:
ld d,(hl)
xor d
inc hl
call write1byte:
dec e
jr nz,w8_loop1:
ld d,a

write1byte:
push bc
push af
ld c,08
w1_loop1:
rr d
call writeabit:
dec c
jr nz,w1_loop1:
pop af
pop bc
ret

256バイトに収めるために、必要最小限の仕様。本当は、保存を行った後に確認の動作を組み込みたかったが、容量が足りなかった。

次のマイコンでは、キャラクターディスプレイとキーボードを使えるようにしたい。

コメント

コメントはありません

コメント送信