aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

基板組立(その2)

 基板組立(その1)からの続き・・・といえるかどうか・・・

aki-iic.hatenablog.com

今回は2.のz180_v0(仮称)に関するものです。

https://www.zilog.com/docs/z180/dc4077.pdf

 超有名(というか我が国ではHitachi HD64180Zと呼んだ方が通りが良いかもしれませんが)なチップなので説明は省略。

 資料は下記を参照下さい(すみませんがマップが激変しているので参考程度にしかなりませんが)↓

drive.google.com

 プログラマブルなチップを(In System Programです:)使用しているのでいきあたりばったりで躊躇無くマップや構成を変えてしまう私(道楽の世界故、広い心でご容赦の程:すみません:)

 以下、そんな資料から抜粋させて頂きます。

1.基本的な考え方

z180_v0 基本的な考え方

2.ブロック図

z180_v0 ブロック図

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

RIZ180 回路図(参考)

 

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

z180_v0 マップ(変更あり)

 

4.回路図

z180_v0 回路図

 

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

z180_v0 基板図(全レイヤ合成)

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.開発環境

z180_v0 開発環境&虫取り中

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

z180_v0のFT245リードでコンフリクト発生

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

z180_v0 コンフリクト解消後

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

z180_v0(仮称)の 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 symbols

  AS 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_v0 retro μP tool画面(メモリテスト)

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

z180_v0 dba rom領域

 

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

 ロジアナ繋いでいた時にdbaのタイミングを取得してみました↓

z180_v0 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的展開を目指すなりちょこちょこ遊んでみたいと考えております。