aki_iic’s blog

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

20260801 : トップ画像はLLM(Google nanobanana2)で生成された物(つまり虚像)が掲示される場合があります。
20260821:Picocalc関連はカテゴリ 電子小物・ガジットを、node-red と rpiで〇〇、レトロマイコン(motorola mc6800、基板組立など)、ラジオ少年関連は趣味・道楽をご参照下さい。
20260729 : カテゴライズがポンコツな為:)サイドバーの検索 トピック(例:今月の基板)でサーチされた方が宜しいかもしれません(すみません)。

基板組立(その6−1)HD63C09E@3MhzでSBCと実験

eb6809_v1 HD63C09E@3MhzでSBCと実験

 ノスタルジーシリーズ(まだやってます:)その6のアップデートという事でその6−1であります。ベースはその6ですので

基板組立(その6)MC6809EでSBC - aki_iic’s blog

をご参照下さい。アップデートの要点は以下のとおり。

・プロセサはHD63C09E@3Mhzに換装、クロックは8Mhz⇒12Mhzに

・上記に伴いボーレートは38.4k/9.6k ⇒ 57.6k/14.4k に変更(13分周故)

・HD63B21,HD63B50をHD63C09E@3Mhzとインタフェースする回路実験

⇒ ph2 = (eout # qout) & (!nPIA # !nACIA)  で実験

・psdのpb7をpsdpb7なるネット名に変更し、piaのpb7との結合(バグ)を修正

 後半がいかがわしいですが(その5)、(その7)で6821,6850と非68xx系プロセサをインタフェースしたロジックを反映して実験してみました。故にこれを汎化する意図はございません(実験とみなして頂けると有り難いです)。

 

0.タイミング検討

・MC6809E bus timing(再掲)

MC6809E bus timing

・MC68xx bus timing(再掲)

MC6850 bus timing

 3Mhzの6809E(HD63C09E)とHD63B21,63B50をインタフェースしようとすると、

・PWEL=166ns,PWEH=166ns(3Mhz)であり、6850,6821の要求する210ns,220nsを満足しない

 が問題となり、定石通りに68xx周辺としてインタフェースすると解無しとなります(今更ですが)。なので則を超えつつ鑑みるに(大した事ではございません):

・6850,6821のPWEH = 220ns を満たす為に 63C09EのE と Q の論理和を取る。つまり

 PWEH(68xx) = 333ns(tcyc@3Mhz) * 3/4(E # Q) = 250ns > 220ns(68b50のPWEH)を満たす事は出来ますがPWELが83ns < 210ns となり具合が悪い(あたりまえ)。なので

・ph2(68xxへのEクロック)= (E # Q) & (!nPIA # !nACIA) つまりPIAとACIAをアクセスした時だけEとQのORを68b50,68b21に供給する)というインチキ回路を考えてみました。こうするとPWEL >> 210ns(次のCPUアクセスまで)となりMotorola様の技術思想を冒涜:)しますがインタフェース可能かもしれないと考えました。

 但し例によって欠点があって周期クロックではなく単なるストローブ信号となるので周期クロック供給を前提とする回路(具体的にはPTM等)は使用出来ないという点ですがこれは別の手段で回避しようかと(姑息ですね:)。

 定石を無視すると大抵碌なことにならないので実験として試してみようか(欠点は承知の上で)という次第であります(お恥ずかしいのですが)。

・ch0(赤) : Eクロック、3Mhzなのでtcyc=333ns

・ch1(青):ph2クロック、(eout # qout) & (!nPIA # !nACIA)、PWEH=250ns

・ch2(緑):cpuからのread/write

・ch3(黄):nRAM、ramのchip select

・ch4(茶):nPIA、PIA(63B21)のchip select、本信号がassert時にph2がassert

 

1.ブロック図

eb6809_v1 block diagram

 上記グルーロジックはPSDのPLDブロックで吸収します。ISPなので更新も柔軟に対応出来るので手前味噌ですが重宝しております(Obsoluteだけど)。

PSD8XXのエコシステムについての覚え書き(その2) - aki_iic’s blog

 

2.回路図

eb6809_v1 回路図

eb6809_v1_sch_20260504.pdf - Google ドライブ

 

3.パターン図(全レイヤ合成)

eb6809_v1 パタン図(全レイヤ合成)

・3dモデル(部品面)

eb6809_v1 3dモデル(部品面)

 

4.実装ボード(実物)

eb6809_v1 実装ボード(部品面)

 上図右上からhd63b21(PIA),hd63c09e,1Mbit sram,ae-ft245rn、左上からhd63b50(ACIA)、12Mhz OSC、psd834f2-90jです。CPUとOSC以外はいつもの縛り構成となっています。左端のピンヘッダはロジアナ接続用で右端のrcbusピンヘッダと併用してデバッグ・検証に使用します(テスト・検証準備は大切:)。

20260623 11:49追記:消費電流は 0.053A(53mA)でした(0.265W)。HD63B09E@2Mhzで確か 40mA程度でしたからこんなもんかと思われます。

 

5.デバッグ環境

eb6809_v1 デバッグ環境

 ロジアナ写っておりませんがタイミング検証にはLA2016を使用しました(計測器は必要)。

・PIAアクセスタイミング(拡大)

eb6809_v1 PIA アクセスタイミング(拡大)

・PIAアクセスタイミング(連続)

eb6809_v1 PIAアクセスタイミング(連続)

 dba で$F400〜$F4ffのio領域をダンプした時のタイミングを取得したものです。ph2がPIA(或いはACIA)アクセス時のみ発生しております(邪道ですが・・・)。

 

6.PLA(抜粋)

module eb6809v1
a0 PIN 30; "Address line
a1 PIN 31; "Address line
a2 PIN 32; "Address line
a3 PIN 33; "Address line
a4 PIN 34; "Address line
a5 PIN 35; "Address line
a6 PIN 36; "Address line
a7 PIN 37; "Address line
a8 PIN 39; "Address line
a9 PIN 40; "Address line
a10 PIN 41; "Address line
a11 PIN 42; "Address line
a12 PIN 43; "Address line
a13 PIN 44; "Address line
a14 PIN 45; "Address line
a15 PIN 46; "Address line
r_w PIN 47;
sysclk PIN 49;
e PIN 50;
_reset PIN 48;
d0 PIN 29; "Data bus line
d1 PIN 28; "Data bus line
d2 PIN 27; "Data bus line
d3 PIN 25; "Data bus line
d4 PIN 24; "Data bus line
d5 PIN 23; "Data bus line
d6 PIN 22; "Data bus line
d7 PIN 21; "Data bus line
eout PIN 7;
qout PIN 6;
BCK PIN 5;
ph2 PIN 4;
nFT245TXE PIN 3; "MCU I/O
nFT245RXF PIN 2; "MCU I/O
nCF PIN 52;
pb7 PIN 51; "MCU I/O
tms PIN 20;  "TMS
tck PIN 19; "TCK
nFT245RD PIN 18;
FT245WR PIN 17;
nRAM PIN 14;
tdi PIN 13; "TDI
tdo PIN 12; "TDO
nPIA PIN 11;
nACIA PIN 10;
nRD PIN 9;
nWR PIN 8;
csiop node;
fs0 node;
f1 NODE istype 'reg_D';
f2 NODE istype 'reg_D';
q1 NODE istype 'reg_D';
q2 NODE istype 'reg_D';
q0 NODE istype 'reg_D';
q3 NODE istype 'reg_D';

X = .x.;
address = [a15..a0];
Vcc = 1;
Gnd = 0;


// Begin user preserved declarations (not affected by iterations of DA usage) ===================
count = [q3, q2, q1, q0];

// End user preserved declarations (not affected by iterations of DA usage) ===================

 

equations

csiop = *1;
fs0 = *2;
! nCF = *3;
! nFT245RD = *4;
FT245WR = *5;
! nRAM = *6;
! nPIA = *7;
! nACIA = *8;
eout = f1;
eout.oe = Vcc;
qout = !f2;
qout.oe = Vcc;
ph2 = (eout # qout) & (!nPIA # !nACIA);
ph2.oe = Vcc;
pb7.oe = _reset;
nRD = !(e & r_w);
nRD.oe = _reset;
nWR = !(e & !r_w);
nWR.oe = _reset;
f1 := !f2;
f1.ck = sysclk;
f1.re = Gnd;
f2 := f1;
f2.ck = sysclk;
f2.re = Gnd;
q1.ck = sysclk;
q2.ck = sysclk;
q0.ck = sysclk;
q3.ck = sysclk;


// Begin user preserved equations (not affected by iterations of DA usage) ===================
WHEN (count == 12) THEN
    count := 0;
ELSE
    count := count + 1;

BCK = (count == 12);

// End user preserved equations (not affected by iterations of DA usage) ===================


end eb6809v1

 

7.dba

 AS V1.42 Beta [Bld 270] - Source File eb6809_t3.asm - Page 1 - 2026年06月21日 14時17分40秒


    1/   0 :                                cpu    6809
    2/   0 :                            
    3/   0 :                            ; 20260304 : hc11f_v1 ⇒ eb6802_v0にバックポート
    4/   0 :                            ; 20260320 : eb6802_v0 ⇒ eb6809_v0に移植
    5/   0 :                            ; 20260511 : d3コマンドのmemwルーチンをYレジスタをd5(ループカウンタ)に最適化
    6/   0 :                            ; 20260621 : eb6809_v1(hd63c09e@3Mhz)対応(メッセージ変えただけ)
    7/   0 :                            
    8/   0 : =$F800                     romtop    equ    $f800
    9/   0 : =$F400                     csiop    equ    $f400    ; $f400-f43f(256バイト境界)
   10/   0 : =$F000                     ramtop    equ    $f000    ; $f000-f3ff
   11/   0 : =$F3FF                     rambtm    equ    ramtop+$3ff
   12/   0 : =$F405                     pb7    equ    csiop+5 ; psd portb7
   13/   0 : =$F401                     pbin    equ    csiop+1 ; ft245 status
   14/   0 : =$F478                     ft245    equ    $f478    ; $f478
   15/   0 :                            
   16/F000 :                                org    ramtop
   17/F000 :                                
   18/F000 :                            a0    rmb    2    ; pseduo a0
   19/F002 :                            a1    rmb    2
   20/F004 :                            a2    rmb    2
   21/F006 :                            a3    rmb    2
   22/F008 :                            a4    rmb    2
   23/F00A :                            a5    rmb    2
   24/F00C :                            a6    rmb    2
   25/F00E :                            d0    rmb    2    ; pseduo d0
   26/F010 :                            d1    rmb    2
   27/F012 :                            d2    rmb    2
   28/F014 :                            d3    rmb    2
   29/F016 :                            d4    rmb    2
   30/F018 :                            d5    rmb    2
   31/F01A :                            d6    rmb    2
   32/F01C :                            d7    rmb    2
   33/F01E :                            
   34/F800 :                                org    romtop
   35/F800 :                            
   36/F800 : =$5                        dly_cnt    equ    5
   37/F800 :                            
   38/F800 : 10 CE F3 FF                start    lds    #rambtm    ; sp init
   39/F804 :                            
   40/F804 : BD F8 C8                       jsr    pb7on    ; pb7=on
   41/F807 : BD F8 D2                       jsr    dly
   42/F80A : BD F8 C2                       jsr    pb7off
   43/F80D :                            
   44/F80D :                            ; cmd待ち
   45/F80D : BD F8 C2                   cmd    jsr    pb7off
   46/F810 : BD F8 9F                       jsr    pbin0    ; cmd受信
   47/F813 : BD F8 C8                       jsr    pb7on
   48/F816 : C1 D1                          cmpb    #$d1    ; memory dump?
   49/F818 : 26 04                          bne    cmd1
   50/F81A : 8D 3A                          bsr    memc    ; cmd exec
   51/F81C : 20 EF                          bra    cmd
   52/F81E : C1 D2                      cmd1    cmpb    #$d2    ; go?
   53/F820 : 26 04                          bne    cmd2
   54/F822 : 8D 3D                          bsr    go    ; go cmd
   55/F824 : 20 E7                          bra    cmd
   56/F826 : C1 D3                      cmd2    cmpb    #$d3    ; memory write?
   57/F828 : 26 04                          bne    cmd0
   58/F82A : 8D 0A                          bsr    memw    ; memw exec
   59/F82C : 20 DF                          bra    cmd
   60/F82E : C1 D0                      cmd0    cmpb    #$d0    ; machine id?
  AS V1.42 Beta [Bld 270] - Source File eb6809_t3.asm - Page 2 - 2026年06月21日 14時17分40秒


   61/F830 : 26 DB                          bne    cmd
   62/F832 : 8D 41                          bsr    id
   63/F834 : 20 D7                          bra    cmd
   64/F836 :                            ; memory write
   65/F836 : 8D 52                      memw    bsr    adrin    ; 戻り値はDとする
   66/F838 : B7 F0 04                       sta    a2    ; adrs = a2
   67/F83B : F7 F0 05                       stb    a2+1
   68/F83E : 8D 4A                          bsr    adrin
   69/F840 : B7 F0 18                       sta    d5    ; length = d5
   70/F843 : F7 F0 19                       stb    d5+1
   71/F846 : BE F0 04                       ldx    a2
   72/F849 : 10 BE F0 18                    ldy    d5
   73/F84D : 8D 50                      memw0    bsr    pbin0    ; accb
   74/F84F : E7 80                          stb    0,x+    ; (x)<=accb
   75/F851 : 31 3F                          leay    -1,y
   76/F853 : 26 F8                          bne    memw0
   77/F855 : 39                         memw2    rts
   78/F856 :                            ; memory dump
   79/F856 : 8D 32                      memc    bsr    adrin    ; adrs = a2
   80/F858 : B7 F0 04                       sta    a2
   81/F85B : F7 F0 05                       stb    a2+1
   82/F85E : 8D 4A                          bsr    dump
   83/F860 : 39                             rts
   84/F861 :                            ; go
   85/F861 : 8D 27                      go    bsr    adrin    ; adrs = a2
   86/F863 : BE F0 04                       ldx    a2
   87/F866 : AD 84                          jsr    0,x    ; subroutineとして呼び出し
   88/F868 : B6 F4 01                   go0    lda    pbin    ; ft245 rxf?
   89/F86B : 85 10                          bita    #$10
   90/F86D : 26 F9                          bne    go0
   91/F86F : 86 00                          lda    #0
   92/F871 : B7 F4 78                       sta    ft245    ; 常に00を返す
   93/F874 : 39                             rts
   94/F875 :                            
   95/F875 : 8E F8 E3                   id    ldx    #tgt_id
   96/F878 : C6 1E                          ldb    #30    ; 30文字固定
   97/F87A : B6 F4 01                   id0    lda    pbin
   98/F87D : 84 10                          anda    #$10
   99/F87F : 26 F9                          bne    id0
  100/F881 : A6 80                          lda    0,x+
  101/F883 : B7 F4 78                       sta    ft245
  102/F886 : 5A                             decb
  103/F887 : 26 F1                          bne    id0
  104/F889 : 39                             rts
  105/F88A :                            
  106/F88A :                            adrin:
  107/F88A : 8D 13                          bsr    pbin0    ; 上位2バイトは読み飛ばす
  108/F88C : 8D 11                          bsr    pbin0
  109/F88E : 8D 0F                          bsr    pbin0    ; 戻り値はaccbに
  110/F890 : F7 F0 02                       stb    a1
  111/F893 : 8D 0A                          bsr    pbin0
  112/F895 : F7 F0 03                       stb    a1+1
  113/F898 : B6 F0 02                       lda    a1    ; 戻り値 = a,b
  114/F89B : F6 F0 03                       ldb    a1+1
  115/F89E : 39                             rts
  116/F89F :                                
  117/F89F : B6 F4 01                   pbin0    lda    pbin
  118/F8A2 : 84 20                          anda    #$20
  119/F8A4 : 26 F9                          bne    pbin0
  120/F8A6 : F6 F4 78                       ldb    ft245    ; 受信データ <- accb
  AS V1.42 Beta [Bld 270] - Source File eb6809_t3.asm - Page 3 - 2026年06月21日 14時17分40秒


  121/F8A9 : 39                             rts
  122/F8AA :                            
  123/F8AA : 10 8E 01 00                dump    ldy    #256    ; == 256
  124/F8AE : BE F0 04                       ldx    a2
  125/F8B1 : B6 F4 01                   dump0    lda    pbin
  126/F8B4 : 84 10                          anda    #$10
  127/F8B6 : 26 F9                          bne    dump0
  128/F8B8 : A6 80                          lda    0,x+
  129/F8BA : B7 F4 78                       sta    ft245    ; 送信データ
  130/F8BD : 31 3F                          leay    -1,y    ; 256byteなので
  131/F8BF : 26 F0                          bne    dump0
  132/F8C1 : 39                             rts
  133/F8C2 :                            
  134/F8C2 : 34 02                      pb7off    pshs    a
  135/F8C4 : 86 80                          lda    #$80    ; pb7 led off
  136/F8C6 : 20 04                          bra    pb7set
  137/F8C8 : 34 02                      pb7on    pshs    a
  138/F8CA : 86 00                          lda    #0    ; pb7 led on
  139/F8CC : B7 F4 05                   pb7set    sta    pb7
  140/F8CF : 35 02                          puls    a
  141/F8D1 : 39                             rts
  142/F8D2 :                                
  143/F8D2 : 34 02                      dly    pshs    a
  144/F8D4 : 86 05                          lda    #dly_cnt
  145/F8D6 : 8E 00 00                   dly0    ldx    #0
  146/F8D9 : 30 1F                      dly1    leax    -1,x
  147/F8DB : 26 FC                          bne    dly1
  148/F8DD : 4A                             deca
  149/F8DE : 26 F6                          bne    dly0
  150/F8E0 : 35 02                          puls    a
  151/F8E2 : 39                             rts
  152/F8E3 :                            ;                123456789012345678901234567890    
  153/F8E3 : 65 62 36 38 30 39 5F 76 31 tgt_id    fcc    'eb6809_v1:20260621E00         '
      F8EC : 3A 32 30 32 36 30 36 32 31
      F8F5 : 45 30 30 20 20 20 20 20 20
      F8FE : 20 20 20                  
  154/F901 :                                
  155/FFFE :                                org    $fffe
  156/FFFE : F8 00                      resvec    fdb    start    ; reset vector
  157/10000 :                           
  158/10000 :                               end
  AS V1.42 Beta [Bld 270] - Source File eb6809_t3.asm - Page 4 - 2026年06月21日 14時17分40秒


  Symbol Table (* = unused):
  --------------------------

*A0 :                          F000 C |  A1 :                          F002 C |
 A2 :                          F004 C | *A3 :                          F006 C |
*A4 :                          F008 C | *A5 :                          F00A C |
*A6 :                          F00C C |  ADRIN :                       F88A C |
*ARCHITECTURE :                                      "x86_64-unknown-linux" - |
*CASESENSITIVE :                  0 - |  CMD :                         F80D C |
 CMD0 :                        F82E C |  CMD1 :                        F81E C |
 CMD2 :                        F826 C | *CONSTPI :        3.141592653589793 - |
 CSIOP :                       F400 - | *D0 :                          F00E C |
*D1 :                          F010 C | *D2 :                          F012 C |
*D3 :                          F014 C | *D4 :                          F016 C |
 D5 :                          F018 C | *D6 :                          F01A C |
*D7 :                          F01C C |
*DATE :             "2026\-027\-071\-07606\-026\-100\-12021\-026\-105\-091" - |
 DLY :                         F8D2 C |  DLY0 :                        F8D6 C |
 DLY1 :                        F8D9 C |  DLY_CNT :                        5 - |
 DUMP :                        F8AA C |  DUMP0 :                       F8B1 C |
*FALSE :                          0 - |  FT245 :                       F478 - |
 GO :                          F861 C |  GO0 :                         F868 C |
*HAS64 :                          1 - |  ID :                          F875 C |
 ID0 :                         F87A C | *LISTON :                         1 - |
*MACEXP :                         7 - |  MEMC :                        F856 C |
 MEMW :                        F836 C |  MEMW0 :                       F84D C |
*MEMW2 :                       F855 C | *MOMCPU :                      6809 - |
*MOMCPUNAME :                "6809" - | *NESTMAX :                      100 - |
*PADDING :                        0 - |  PB7 :                         F405 - |
 PB7OFF :                      F8C2 C |  PB7ON :                       F8C8 C |
 PB7SET :                      F8CC C |  PBIN :                        F401 - |
 PBIN0 :                       F89F C | *PLAINBASE :                      0 - |
 RAMBTM :                      F3FF - |  RAMTOP :                      F000 - |
*RELAXED :                        0 - | *RESVEC :                      FFFE C |
 ROMTOP :                      F800 - |  START :                       F800 C |
 TGT_ID :                      F8E3 C |
*TIME :               "14\-026\-103\-12617\-027\-120\-12240\-025\-089\-110" - |
*TRUE :                           1 - | *VERSION :                     142F - |

     65 symbols
     31 unused symbols

  AS V1.42 Beta [Bld 270] - Source File eb6809_t3.asm - Page 5 - 2026年06月21日 14時17分40秒


  Code Pages:
  ----------

STANDARD (0 changed characters)

1 code page

0.02 seconds assembly time

    160 lines source file
      2 passes
      0 errors
      0 warnings

・dba(起動時)

eb6809_v1 起動時

 コードはv0と同じで識別情報を変更しただけです。

・dba(ramtest)

dba ramtest

・dba(io領域)

dba io領域

8.性能測定(オレオレベンチマーク:)

eb6809_v1 性能測定(56KB ロード時間測定)

 測定条件は56KBのバイナリをdbaでロードする時間を測定したものです。

・56KB/0.785289sec = 71.31KB/sec , 23.77KB/Mhz

 となりました。これはz80@8Mhzにかなり近いスコア(CPI換算では妥当だろうか)。

・順位(転送速度):

6309@3Mhz > z80@8Mhz >  65816@2Mhz > 6809@2Mhz > 9995@3Mhz(0w) > 6502@2Mhz > 6802@2Mhz

・順位(Mhz辺りの転送速度):

65816 > 6809 > 6502 > 9995(0w) > 6802 > z80

名称 ebz80_v0 eb6809_v1 eb65816_v0 eb6809_v0 eb9995_v0 eb6502_v0 eb6802_v0
CPU z80 6309 65816 6809 9995(0wait) 6502 6802
クロック(Mhz) 8 3 2 2 3 2 2
転送速度(KB/s) 71.01 71.31 54.3 47.65 42.94 30.48 27.5
速度/Mhz 8.87625 23.77 27.15 23.825 14.3133333333333 15.24 13.75
順位(転送速度) 2 1 3 4 5 6 7
順位(速度/Mhz) 7 3 1 2 5 4 6

 

 

 

 

 

 

9.まとめ

・eb6809_v1 を組立・動作確認・タイミング測定を行いました

・6850,6821インタフェース回路はTP書いて検証しようと考えています(loopback testレベルですが)

・レトロマイコンはクロックリニアなので予測可能なベンチスコアですが:)80系と68系(6800系ですね、68000ではなく)のCPIに関する技術思想が垣間見える(今更ですな、40年前から知れた事を・・・)印象。

 

・前のトピック:

aki-iic.hatenablog.com

*1:address >= ^hF400) & (address <= ^hF43F

*2:address >= ^hF800) & (address <= ^hFFFF

*3:address >= ^hF4A0) & (address <= ^hF4AF

*4:address >= ^hF478) & (address <= ^hF47F) & (e & r_w

*5:address >= ^hF478) & (address <= ^hF47F) & (e & !r_w

*6:address >= ^h0000) & (address <= ^hF3FF

*7:address >= ^hF480) & (address <= ^hF48F

*8:address >= ^hF490) & (address <= ^hF49F