基板組立(その1)からの続き・・・といえるかどうか・・・
今回は2.のz180_v0(仮称)に関するものです。
https://www.zilog.com/docs/z180/dc4077.pdf
超有名(というか我が国ではHitachi HD64180Zと呼んだ方が通りが良いかもしれませんが)なチップなので説明は省略。
資料は下記を参照下さい(すみませんがマップが激変しているので参考程度にしかなりませんが)↓
プログラマブルなチップを(In System Programです:)使用しているのでいきあたりばったりで躊躇無くマップや構成を変えてしまう私(道楽の世界故、広い心でご容赦の程:すみません:)
以下、そんな資料から抜粋させて頂きます。
1.基本的な考え方

2.ブロック図

尚、本機にはオリジナルがありましてFuzixのサイトで紹介されているRIZ80を参考にしております(リンク切れ?の様なので回路図を引用しておきます)↓

3.マップ・・・すみません大幅変更されています(アドレス、memory mapped / io mapped等色々)。具体的には後述のPLDロジックをご参照下さい(すみません)。

4.回路図

5.パタン(全レイヤ合成)

6.実装ボード(実機)

z180_v0 実装ボード(部品面)
左上はz8s180cpu(PLCC68)、右上はPSD834F2J90、左中が4Mbit sram、右下が秋月AE-FT245RLであります。
転がし系にはよくある話ですが本機はCPU以外の素材は共通というかPSD834F2J90チップにglue logicを組み込んでいるので何といいますか金太郎飴的な構成になっております(常に新しいエクスペリエンス!を求める方には相性が悪いのかもしれませんが・・・所詮レトロだし、当方猫型人間故:)。
20251112 10:07追記:消費電力書き漏らしてました。USBポートで4.96V, 0.12A(つまり約0.6W)で電池向きではないがUSBバスパワー電源では余裕。
最近はまともな電源を使った事がなく(DCジャックの非互換・不統一がどうも・・・)USB電源(PCなり充電器なり)ばかりであります。これも便利な時代になったというか今時+12Vを必要とする機器は絶滅危惧種なので(ああ、GPU等の世界は存じませんが:)もっともUSB-Cは避けますが(規格が複雑過ぎて対応出来る気がしない:個人的に:)
7.開発環境

今回は虫取りにLA2016ロジアナを投入しましたのでその写真をば(上記)。dba(後述)デバックでft245のリードが上手く出来ない状況が発生して色々調べたのですがどうやらどこかとコンフリクトしている様だ・・・という事でft245のリード時のデータバスを見てみようという事で↓

ご覧の通りFT245リード時にデータバス(D0-7)がコンフリクトしてるっぽい、デコーダは確認して競合していないので調べてみるとfs1(flashの8000-ffffhにマップしたもの)とFT245(0xFF80-FF8f)がコンフリクトしていたのでfs1-fs7を未使用に設定しなおしました。変更後の波形がコレ↓

ご覧のとおりD0-7のデーバスのコンクリフトが解消され、FT245のデータが正常に読み出される事をrpt(retro μP toolの略:ちと厳しいかもしれない)で確認しました。

画面右上のターゲット情報以外は新鮮味が薄い点はご容赦をば、本人なりに省力化(楽するの同義語)に努めておりまして(あはは)・・・
8.dba(debug agent)z180_v0
AS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 1 - 2025年11月11日 04時54分58秒
1/ 0 : ; z180_t3
2/ 0 : ; 20251109 : z180_t0ベース
3/ 0 : ; : rs0 8000-89ffh(仮)だがオフにするかもしれない(4Mbit sramがあるので)
4/ 0 : ; : csiop 00-5fh,psd834f2j90の仕様?でio空間だがa15-0をデコードするのでアクセスは out (c),a 等のbcレジスタを使った16bitアクセスが必要
5/ 0 : ; : fs0 0000-7fffh
6/ 0 : ; : ramtop 8000-ffffhに仮配置しているが512KBのsramなので柔軟に配置可能(PSD834F2J90のdpldによる)
7/ 0 : ; : ft245 78h(仮)、csiopの影響でマップ変更
8/ 0 : ; : cfide 80h(仮)、同上
9/ 0 : ; : z180io c0h
10/ 0 : ; 20251111 : マップ全面変更、csiop,ft245を0ff00-ff8fのメモリマップド領域に移す。理由は80系io空間の互換性維持の為。
11/ 0 : ; : rs0 使用しない(4Mbit sramがあるから)
12/ 0 : ; : csiop memory mappedに配置、0ff00-ff7fに配置
13/ 0 : ; : fs0 0000-7fffに仮配置、fs1-fs7はコンクリフト防止(特にff00-ffffはメモリマップドio空間の為、禁止)
14/ 0 : ; : ramtop 8000h-feffに配置(ff00-ffffはメモリマップド領域)、ramは10000-7ffffに仮配置
15/ 0 : ; : ft245 0ff80-ff8fhのメモリマップド領域に配置、理由は80系io空間互換の為だがio空間に戻しても良い
16/ 0 : ; : cfide io空間の 10h-17hに配置
17/ 0 : ; : z180内蔵周辺 io空間の 0c0-ffhに配置
18/ 0 : ;
19/ 0 : cpu z80
20/ 0 :
21/ 0 : =0FF00H csiop equ 0ff00h ; csiop base address
22/ 0 : =0FF05H pb7 equ csiop+5 ; pb7
23/ 0 : =0FF01H pbin equ csiop+1 ; ft245 status
24/ 0 : =0FF80H ft245 equ 0ff80h ; ft245 data
25/ 0 : =10H cfide equ 10h ; cfide base address
26/ 0 : =0C0H z180io equ 0c0h ; z180 io base
27/ 0 :
28/ 0 : =0H romtop equ 0000h ; rom top address
29/ 0 : =8000H rombtm equ romtop+8000h ; rombottom
30/ 0 : =8000H ramtop equ 8000h ; ram top addess
31/ 0 : =0FEFFH rambtm equ ramtop+7effh ; ram bottom address
32/ 0 : =0FE00H wktop equ ramtop+7e00h ; work area top
33/ 0 :
34/ 0 : =2H t1 equ 02h ; delay time
35/ 0 :
36/FE00 : org wktop
37/FE00 : a0 ds 2
38/FE02 : a1 ds 2
39/FE04 : a2 ds 2
40/FE06 : a3 ds 2
41/FE08 : a4 ds 2
42/FE0A : a5 ds 2
43/FE0C : a6 ds 2
44/FE0E : a7 ds 2
45/FE10 : d0 ds 2
46/FE12 : d1 ds 2
47/FE14 : d2 ds 2
48/FE16 : d3 ds 2
49/FE18 : d4 ds 2
50/FE1A : d5 ds 2
51/FE1C : d6 ds 2
52/FE1E : d7 ds 2
53/FE20 :
54/FE20 :
55/ 0 : org romtop
56/ 0 :
57/ 0 : 31 FF FE init ld sp,rambtm ; sp initialize
58/ 3 : CD B4 00 start call pb7on
59/ 6 : CD BC 00 call delay
60/ 9 : CD AF 00 call pb7off
AS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 2 - 2025年11月11日 04時54分58秒
61/ C : ; call id ; 識別情報送信(試し)
62/ C :
63/ C : ; cmd待ち
64/ C : CD AF 00 cmd call pb7off
65/ F : CD A3 00 call pbin0
66/ 12 : CD B4 00 call pb7on
67/ 15 : 7A ld a,d
68/ 16 : FE D1 cp 0d1h ; memory dump?
69/ 18 : 20 05 jr nz,cmd1
70/ 1A : CD 58 00 call memc
71/ 1D : 18 ED jr cmd
72/ 1F : FE D2 cmd1 cp 0d2h ; go ?
73/ 21 : 20 05 jr nz,cmd2
74/ 23 : CD 6D 00 call go
75/ 26 : 18 E4 jr cmd
76/ 28 : FE D3 cmd2 cp 0d3h ; memory write?
77/ 2A : 20 05 jr nz,cmd0
78/ 2C : CD 3A 00 call memw
79/ 2F : 18 DB jr cmd
80/ 31 : FE D0 cmd0 cp 0d0h ; machine id?
81/ 33 : 20 D7 jr nz,cmd
82/ 35 : CD 7C 00 call id
83/ 38 : 18 D2 jr cmd
84/ 3A : ; memory write
85/ 3A : CD 91 00 memw call adrin ; 戻り値はhlとする
86/ 3D : 22 04 FE ld (a2),hl ; adrs = a2
87/ 40 : CD 91 00 call adrin
88/ 43 : 22 1A FE ld (d5),hl
89/ 46 : 2A 04 FE ld hl,(a2) ; adrs = a2
90/ 49 : ED 4B 1A FE ld bc,(d5) ; length = d5
91/ 4D : CD A3 00 memw0 call pbin0 ; D reg
92/ 50 : 72 ld (hl),d ; (hl)<=Dreg
93/ 51 : 23 inc hl
94/ 52 : 0B dec bc
95/ 53 : 78 ld a,b ; bc=0かチェック
96/ 54 : B1 or c
97/ 55 : 20 F6 jr nz,memw0
98/ 57 : C9 ret
99/ 58 : ; memory dump
100/ 58 : CD 91 00 memc call adrin ; adrs = hl,(a1)
101/ 5B : 1E 00 ld e,0 ; 256
102/ 5D : 3A 01 FF dump0 ld a,(pbin)
103/ 60 : E6 10 and a,10h
104/ 62 : 20 F9 jr nz,dump0
105/ 64 : 7E ld a,(hl)
106/ 65 : 32 80 FF ld (ft245),a
107/ 68 : 23 inc hl
108/ 69 : 1D dec e
109/ 6A : 20 F1 jr nz,dump0
110/ 6C : C9 ret
111/ 6D :
112/ 6D : ret
113/ 6D : ; go
114/ 6D : CD 91 00 go call adrin ; adrs = a2
115/ 70 : 22 04 FE ld (a2),hl
116/ 73 : 21 7B 00 ld hl,go2
117/ 76 : E5 push hl ; 擬似的なcall (hl)
118/ 77 : 2A 04 FE ld hl,(a2)
119/ 7A : E9 jp (hl) ; これだから80系は〇〇だ(溜息)
120/ 7B : C9 go2 ret
AS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 3 - 2025年11月11日 04時54分58秒
121/ 7C : ; id
122/ 7C : 21 D0 00 id ld hl,tgt_id
123/ 7F : 1E 1E ld e,30 ; 30文字固定
124/ 81 : 3A 01 FF id0 ld a,(pbin) ; ft245 statu check
125/ 84 : E6 10 and a,10h
126/ 86 : 20 F9 jr nz,id0
127/ 88 : 7E ld a,(hl)
128/ 89 : 32 80 FF ld (ft245),a
129/ 8C : 23 inc hl
130/ 8D : 1D dec e
131/ 8E : 20 F1 jr nz,id0
132/ 90 : C9 ret
133/ 91 : ; adrin:
134/ 91 : CD A3 00 adrin call pbin0 ; big endianでホストから送られてくる・・・
135/ 94 : CD A3 00 call pbin0 ; 32bitの上位16bit読み飛ばし(空読み)
136/ 97 : CD A3 00 call pbin0 ; 戻り値はDreg
137/ 9A : 62 ld h,d
138/ 9B : CD A3 00 call pbin0
139/ 9E : 6A ld l,d
140/ 9F : 22 02 FE ld (a1),hl ; 戻り値はhl
141/ A2 : C9 ret
142/ A3 : ; pbin0
143/ A3 : 3A 01 FF pbin0 ld a,(pbin) ;
144/ A6 : E6 20 and a,20h
145/ A8 : 20 F9 jr nz,pbin0
146/ AA : 3A 80 FF ld a,(ft245)
147/ AD : 57 ld d,a
148/ AE : C9 ret ; 受信データ <- Dレジスタ
149/ AF :
150/ AF : ; pb7 on / off
151/ AF : F5 pb7off push af
152/ B0 : 3E 80 ld a,080h
153/ B2 : 18 03 jr pb7set
154/ B4 : F5 pb7on push af
155/ B5 : 3E 00 ld a,00h
156/ B7 : 32 05 FF pb7set ld (pb7),a
157/ BA : F1 pop af
158/ BB : C9 ret
159/ BC :
160/ BC : ; delay subroutine
161/ BC : E5 delay push hl
162/ BD : D5 push de
163/ BE : 26 02 ld h,t1
164/ C0 : 16 00 dly02 ld d,0
165/ C2 : 1E 00 dly01 ld e,0
166/ C4 : 1D dly0 dec e
167/ C5 : 20 FD jr nz,dly0
168/ C7 : 15 dec d
169/ C8 : 20 F8 jr nz,dly01
170/ CA : 25 dec h
171/ CB : 20 F3 jr nz,dly02
172/ CD : D1 pop de
173/ CE : E1 pop hl
174/ CF : C9 ret
175/ D0 :
176/ D0 : ; ターゲット識別情報(単なる文字列、30文字固定)
177/ D0 : ; 123456789012345678901234567890
178/ D0 : 7A 31 38 30 5F 76 30 3A 32 tgt_id db 'z180_v0:20251111E00a '
D9 : 30 32 35 31 31 31 31 45 30
E2 : 30 61 20 20 20 20 20 20 20
AS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 4 - 2025年11月11日 04時54分58秒
EB : 20 20 20
179/ EE :
180/ EE :
181/ EE : end
AS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 5 - 2025年11月11日 04時54分58秒
Symbol Table (* = unused):
--------------------------*A0 : 0FE00 C | A1 : 0FE02 C |
A2 : 0FE04 C | *A3 : 0FE06 C |
*A4 : 0FE08 C | *A5 : 0FE0A C |
*A6 : 0FE0C C | *A7 : 0FE0E C |
ADRIN : 91 C |
*ARCHITECTURE : "x86_64-unknown-linux" - |
*CASESENSITIVE : 0 - | *CFIDE : 10 - |
CMD : 0C C | CMD0 : 31 C |
CMD1 : 1F C | CMD2 : 28 C |
*CONSTPI : 3.141592653589793 - | CSIOP : 0FF00 - |
*D0 : 0FE10 C | *D1 : 0FE12 C |
*D2 : 0FE14 C | *D3 : 0FE16 C |
*D4 : 0FE18 C | D5 : 0FE1A C |
*D6 : 0FE1C C | *D7 : 0FE1E C |
*DATE : "2025\-027\-071\-07611\-026\-100\-12011\-026\-105\-091" - |
DELAY : 0BC C | DLY0 : 0C4 C |
DLY01 : 0C2 C | DLY02 : 0C0 C |
DUMP0 : 5D C | *FALSE : 0 - |
FT245 : 0FF80 - | GO : 6D C |
GO2 : 7B C | *HAS64 : 1 - |
ID : 7C C | ID0 : 81 C |
*INIT : 0 C | *LISTON : 1 - |
*MACEXP : 7 - | MEMC : 58 C |
MEMW : 3A C | MEMW0 : 4D C |
*MOMCPU : 80 - | *MOMCPUNAME : "Z80" - |
*NESTMAX : 100 - | PB7 : 0FF05 - |
PB7OFF : 0AF C | PB7ON : 0B4 C |
PB7SET : 0B7 C | PBIN : 0FF01 - |
PBIN0 : 0A3 C | RAMBTM : 0FEFF - |
RAMTOP : 8000 - | *RELAXED : 0 - |
*RET : 6D C | *ROMBTM : 8000 - |
ROMTOP : 0 - | *START : 3 C |
T1 : 2 - | TGT_ID : 0D0 C |
*TIME : "04\-026\-103\-12654\-027\-120\-12258\-025\-089\-110" - |
*TRUE : 1 - | *VERSION : 142F - |
*WARNRELATIVE : 0 - | WKTOP : 0FE00 - |
*Z180IO : 0C0 - |69 symbols
35 unused symbolsAS V1.42 Beta [Bld 270] - Source File z180_t3.asm - Page 6 - 2025年11月11日 04時54分58秒
Code Pages:
----------STANDARD (0 changed characters)
1 code page
0.07 seconds assembly time
182 lines source file
2 passes
0 errors
0 warnings
当方80系の経験が希少故、上記コンクリフトの件も含めてendianがどうちゃらとか間接サブルーチンコール命令も無い野蛮な電卓チップモドキ(これは言い過ぎですね)とか深夜に呪物を唱えながら変態命令と格闘しておりました。
まあ、PICmicroに比べりゃ、Intelチップもマトモに見える今日この頃でございますが(軽い疲労感:)。
9.retro μP tool画面

意外とz180@16Mhzて速い?ので256バイトのRAMテストを10万回やらせてみました。tool画面も金太郎飴風ですが、ROM領域のスクショを付けておきます↓

dba(debug agentの略のつもり:)サイズは238バイト、68030⇒68hc11⇒68008⇒z180(z80)と手作業アセンブラコード変換を人力でやったので勉強になったというかか頭の体操にはなりました(動いてしまえば・・・ですが(溜息))。
ロジアナ繋いでいた時にdbaのタイミングを取得してみました↓

少々見にくいのですが(クリックで拡大)ft245のwrite(z180_v0からホストへのin transaction)に22μS/byte程掛かっている様です(プログラム転送、ステータス監視にて)DMA使ってなくてretroなCPUである点を考慮すると・・・そんなもんかもしれません・・・ああ、z180のデフォルト結構wait入っている様な・・・
LA2016初めて使ったのですがLA1016がサンプルチャネル/周波数が最大3ch/100Mhz止まりだったのがLA2016では200Mhz/16chに向上したので retro マイコンの製作には大体大丈夫(68040とかPentiumとか作らない限りは:)な印象ですが最近のチップには力不足な面はあるのかもしれません(EBIの確認するとき等は)。
10.PLD論理式(抜粋)
========= Equations =========
DPLD EQUATIONS :
=======================
fs0 = !pdn & !a16 & !a15 & !nMREQ & !a19 & !a18 & !a17;csiop = !pdn & !a16 & a15 & a14 & a13 & a12 & a11 & a10 & a9 & a8 & !a7 & !nMREQ & !a19 & !a18 & !a17;
PORTA EQUATIONS :
=======================
rdd.D := _rd;
rdd.PR = 1;
rdd.RE = _reset;
rdd.C = CLK;csd.D := !a7 & !a6 & !a5 & a4 & !a3 & !nIORQ;
csd.PR = 1;
csd.RE = _reset;
csd.C = CLK;PORTB EQUATIONS :
=======================
CLK.LE = 1;nRAM = (a19)
# (!a16 & !a15 & !a18 & !a17)
# (!a16 & a14 & a13 & a12 & a11 & a10 & a9 & a8 & !a18 & !a17)
# (nMREQ);
nRAM.OE = 1;!nCF = (!a7 & !a6 & !a5 & a4 & !a3 & !nIORQ)
# (csd.Q);
nCF.OE = _reset;!nIOWR = !_wr & !nIORQ;
nIOWR.OE = _reset;!nIORD = !rdd.Q & !_rd & !nIORQ;
nIORD.OE = _reset;pb7.OE = _reset;
PORTC EQUATIONS :
=======================
!nFT245RD = !a16 & !_rd & a15 & a14 & a13 & a12 & a11 & a10 & a9 & a8 & a7 & !a6 & !a5 & !a4 & !nMREQ & !a19 & !a18 & !a17;
nFT245RD.OE = 1;FT245WR = !a16 & !_wr & a15 & a14 & a13 & a12 & a11 & a10 & a9 & a8 & a7 & !a6 & !a5 & !a4 & !nMREQ & !a19 & !a18 & !a17;
FT245WR.OE = 1;nIORQ.LE = 1;
PORTD EQUATIONS :
=======================
--- End ---
11.まとめ
・z180_v0(仮称)を組立て、動作を確認しました。
・dba(debug agentのつもり)はhc11f_v0のコードから機械的に変換を試みましたが80系の作法を知らぬ輩の変なコードになってしまいました。
・今どきz180(HD64180Z)なんて・・・ではありますがCP/Mを導入するなり本来の目的であるFuzixを導入するなりIO poorですがrcbus/rc2014バス経由でio拡張してMGH80的展開を目指すなりちょこちょこ遊んでみたいと考えております。