パチパチ1号、完成
2011年12月25日
パチパチマイコンが、完成品になった。

ハードウェア上は、予定通りの動きをすることが確認できたので、とりあえず完成としたい。性能は、次の通り。
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が行う形になっている。
回路図は、次の通り。



BIOS入力用のPIC16F690のプログラムは、先に書いた記事を参照のこと。
BIOSは、現在製作中であるが、暫定的には次のようなソースコード。リセットスイッチを押すと、カセットテープインターフェースからの入力待ちになり、プログラムが入力できれば実行するようになっている。
256バイトに収めるために、必要最小限の仕様。本当は、保存を行った後に確認の動作を組み込みたかったが、容量が足りなかった。
次のマイコンでは、キャラクターディスプレイとキーボードを使えるようにしたい。

ハードウェア上は、予定通りの動きをすることが確認できたので、とりあえず完成としたい。性能は、次の通り。
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が行う形になっている。
回路図は、次の通り。



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バイトに収めるために、必要最小限の仕様。本当は、保存を行った後に確認の動作を組み込みたかったが、容量が足りなかった。
次のマイコンでは、キャラクターディスプレイとキーボードを使えるようにしたい。