aki_iic’s blog

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

基板組立(その8)R65C02でSBC

eb6502_v0 実装ボード

 ノスタルジーシリーズその5と言いますかこのチップも学生時代から知っており、研究室でも身近であったのですが当方MC6800/MC6809一筋だったので:)チップに触れてこなかった案件です。

 

0.R65C02(というか6502)につきまして

 

www.st.rim.or.jp

 やはりこちらが俯瞰するには最も頼りになる(私見ですが)情報源なので引用しておきます。6502はCMOS化、IP化(SoC化)等々に伴い各社各様(混沌の婉曲表現)な展開が見られるのは類似な経緯のintel 8051(MCS51)との類似性もあるようなそうでもない様な・・・上記R65C02P4は最近ebayで落札したチップですが今回は抑制的に取り敢えずは6502オリジナル命令でdbaのプログラムを組みました。

 理由は若松で入手したR6503を持っているから:)。なのでいつも以上にへんてこりんなプログラムかもしれませんがご容赦を。体感したのはM6800とは開発者は同じだが全く異なるチップであるという印象。

・ブロック図

R65C02ブロック図

 個人的にはロックウェルと言えばB-1爆撃機(当時はノースアメリカン・ロックウェル⇒ロックウェルインターナショナルだった様な)を思い出すのですが1980年代はAIM-65という評価ボードでサーマルプリンタ内蔵の面白い評価ボードが提供されていた様に記憶しております(トラ技の広告ですが)。

・バスタイミング(R65C02)

R65C02 バスタイミング

R65C02 AC特性

 4Mhzバージョンが存在しているのが当時としては新鮮(日立でもCPUだけ3Mhzだったのに)。もっとも21世紀になるとW65C02Sでは14Mhzバージョンが存在するので(まあZ8S180も33Mhz版が存在しますが)プロセスの進歩でクロック周波数は向上するという普遍則のおかげですな。

 開発者さんの経歴と開発の歴史的経緯からして当然ながらM6800ファミリとバスインタフェースは互換があります(が、細かい注意事項も、バグ含めて:)。

・外部クロック(R65C02)

R65C02 外部クロック

 ご承知の通り6502(R65C00系だけでも)様々なバリエーションがあるのでR65C02の外部クロック例とご理解下さい(いづれもR65C02データシートから引用)。モトローラ流に言えばφ2=Eという事ですね。

 まあφ2もM6800以外で言う処のEクロックな訳ですが。φ1は逆相のクロックでマルチプレクスというかサイクルスチールDMAというか調停回路無しでメモリ共有(切り替え、VRAM等)には使いやすいのかもしれません(ビデオコントローラにCPUクロックを合わせる系といいますか)。

 本機(以下 eb6502_v0 と称します)では縛りのHD63B21、HD63B50がEクロック2Mhzが上限なので4Mhz版のR65C02P4を2Mhzクロックで使用します(8Mhzを4分周)。

1.eb6502_v0 ブロック図

eb6502_v0 ブロック図

 毎度の如くCPU以外は同じ素材で構成しております。前述の通りCPUクロックは2Mhz(PSDで8Mhzクロックを4分周)し、メモリマップはeb6809_v0 と互換性があります(実はISP可能なプログラマブルデバイスなのでかなり柔軟にマップ変更可能)。

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

2.回路図

eb6502_v0 回路図

(お詫び)本機には遺伝的バグ(eb6809_v0からのバグ)がありましてそれはPSDのportBのPB7 とHD63B21(PIA)のportBのbit7が同じ信号名称のPB7を使っているのでネットが繋がっております(恥ずかし)。すみませんがPIAのportbのbit7はDDRを入力とするか正しくネット名を別にして修正お願いします(すみません)。

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

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

4.PLA(抜粋)

module eb6502v0
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
ma16 PIN 6; "MCU I/O
BCK PIN 5;
ph2in 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;
rs0 node;
csiop node;
fs0 node;
f1 NODE istype 'reg_D';
f2 NODE istype 'reg_D';

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


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

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

 

equations

rs0 = *1;
csiop = *2;
fs0 = *3;
! nCF = *4;
! nFT245RD = *5;
FT245WR = *6;
! nRAM = *7;
! nPIA = *8
     # *9;
! nACIA = *10;
ph2in = f2;
ph2in.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;


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

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


end eb6502v0

20260513 05:11 追記:13分周回路組込み↓

13分周回路 - aki_iic’s blog

 

5.実装ボード(実物)

eb6502_v0 実装ボード(部品面)

 画面右の40PinピンヘッダがRCBUS準拠のバスコネクタであり、基板右上からHD63B21(PIA)、R65C02P4(CPU)、1Mbit sram、AE-FT245RN(ホストとCDC-ACMで接続)、左上からHD63B50(ACIA),8MhzOSC、PSD834F2J90です。

 ほぼ同じ構成を5回組み立てると流石に慣れるもので抵抗は1個(リセットSWの220Ω)、集合抵抗は10Kと100KとBOM見なくても作業出来る様になりました(5回もやってりゃ・・・ね)。

 電源はAE-FT245RNのUSBケーブルから供給されるバスパワーで消費電流は中華USB電流計によると0.22A(1.1W)とeb6809_v0(HD63B09E搭載)より少ない と同等の様です(R65C02P4@2Mhz動作にて)。

20260426 03:31追記:計算合わないのでもう少し高級?なUSB電圧電流電力計で再測定しました↓

USB電圧電流電力計

 結果は0.028A(0.141W)とほぼCMOSチップ構成で静的状態なのでこちらの方が正解な感じがする。そもそもバッテリ充電用途っぽいので負荷もそれを想定しており微小電流負荷は想定してないのでしょうかね(激安の方は)。

 因みにeb9995_v0 も再測定したら0.160A、0.810Wとこちらもこの測定値の方が正解に近い印象。

 

6.開発環境

eb6502_v0 デバッグ状況

 毎回同じでは心苦しいので冗長になりますがSTの開発ツールであるPSDSoftExpress(ObsoluteですがSTのサイトからアーカイブが入手可能です。但し動作環境はWinXPのみ or Wine(当方はUbuntu24.04.3LTSで書込以外は対応出来ている様です)で動作します。

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

 以下トップ画面(VMWare/WinXPの仮想マシン環境)

PSDSoftExpress(VMware/WinXP)

 画面左のメニューでソース開発・コンパイル・ROMイメージ統合でメタデータ作成し、最下のJTAG書込でPSDデバイスにPLD/IO/ROMデータをJTAGでISPする訳です。

・合成する論理式(PSDAbel書式)

・ROMデータのマージ

PSDSoftExpressでROMデータのマージ(メタデータ作成)

 受け付けるフォーマットはIntel HEXだけです(MOTはエラーになり無視される)これとても重要。マージされたメタデータのROM領域は参照出来て

fs0 ROMデータ閲覧

 fs0(flash ROM)は32KBなのでfs0は0〜7FFFとなり、$F800は07800に対応します。この画面は書き換え可能なので「パッチ」を手動で掛ける事も可能です(なつかし)。これでメタデータ作成出来たのでISPで書込を行います。

PSDSoftExpress JTAG ISP画面

 ここで Executeボタン押下すると未消去の場合には書込みするか確認画面が出て書込OKとするとISPが行われます↓

PSDSoftExpress JTAG ISP書込終了

 このような態様で書込過程が表示されます。書込時間はROMサイズに依存すると思われるので消去+書込+ベリファイで350バイト程度(dbaって小さいので:)で合計30秒程度(flashなのでイレーズに10秒程度掛かる様です)でPLD/IO/ROMのメタデータのISPが終了します。ISPはRlinkというUSB接続の書込ツールを変換基板を通して14PinのPSDJTAGコネクタに接続してISPします。

 大雑把ですがこんな感じです(コタツデバッグに好適:)。

 

7.dba

 開発はasl-1.42を使用しています(今までのターゲットも同様)。このドイツ人のクロスアセンブラはレトロマイコン系での殆どに対応してくれてるので当方にとっては宝物です(深く感謝を)。まあ、有名なのでご承知の方は多いと思いますが。

 文法や疑似命令は独自な部分もありますがそれを上回る汎用性の高さでモトローラ表記だインテル表記だうんちゃらかんちゃらといった細かい事はもう、個人的には乗り越えてしまいました(書き換えてしまうという意味です)。ターゲット毎に異なるクロスアセンブラなんて・・・(以下略)。無論、私見に過ぎません(念の為)。

20260517 09:22 追記:ロード関連で酷いバグを検出しましたので更新しました(すみません)。

 AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 1 - 2026年05月11日 08時17分21秒


    1/   0 :                                cpu    6502
    2/   0 :                            ; 20260304 : hc11f_v1 ⇒ eb6802_v0にバックポート
    3/   0 :                            ; 20260412 : eb6802_v0 ⇒ eb6502_v0に移植
    4/   0 :                            ; 20260419 : goコマンドは jsr ABS しか6502はサポートしないのでram上に展開する。
    5/   0 :                            ; 20260511 : d3コマンドバグ修正
    6/   0 :                            :                            
    7/   0 : =$F800                     romtop    equ    $f800
    8/   0 : =$F400                     csiop    equ    $f400    ; $f400-f43f(256バイト境界)
    9/   0 : =$F000                     ramtop    equ    $f000    ; $f000-f3ff
   10/   0 : =$F3FF                     rambtm    equ    ramtop+$3ff
   11/   0 : =$F405                     pb7    equ    csiop+5 ; psd portb7
   12/   0 : =$F401                     pbin    equ    csiop+1 ; ft245 status
   13/   0 : =$F478                     ft245    equ    $f478    ; $f478
   14/   0 :                             
   15/   0 :                                 org    0    ; zero page
   16/   0 :                            
   17/   0 :                            p0    rmb    2    ; zero page addressing用
   18/   2 :                            p1    rmb    2
   19/   4 :                            p2    rmb    2
   20/   6 :                            p3    rmb    2
   21/   8 :                            p4    rmb    2
   22/   A :                            p5    rmb    2
   23/   C :                            p6    rmb    2
   24/   E :                            p7    rmb    2
   25/  10 :                            
   26/F000 :                                 org    ramtop
   27/F000 :                             
   28/F000 :                            a0    rmb    2    ; pseduo a0
   29/F002 :                            a1    rmb    2
   30/F004 :                            a2    rmb    2
   31/F006 :                            a3    rmb    2
   32/F008 :                            a4    rmb    2
   33/F00A :                            a5    rmb    2
   34/F00C :                            a6    rmb    2
   35/F00E :                            d0    rmb    2    ; pseduo d0
   36/F010 :                            d1    rmb    2
   37/F012 :                            d2    rmb    2
   38/F014 :                            d3    rmb    2
   39/F016 :                            d4    rmb    2
   40/F018 :                            d5    rmb    2
   41/F01A :                            d6    rmb    2
   42/F01C :                            d7    rmb    2
   43/F01E :                            y    rmb    2    ; pseduo Y reg
   44/F020 :                            w    rmb    2
   45/F022 :                            g    rmb    4    ; jsr adrL,adrH ; rts
   46/F026 :                                                   
   47/F800 :                                 org    romtop
   48/F800 : =$5                        dly_cnt    equ    5
   49/F800 :                            start:
   50/F800 : 20 05 F9                        jsr    pb7on    ; pb7=on
   51/F803 : 20 0D F9                        jsr    dly
   52/F806 : 20 FF F8                        jsr    pb7off
   53/F809 :                            ; cmd待ち
   54/F809 : 20 FF F8                   cmd    jsr    pb7off
   55/F80C : 20 DA F8                        jsr    pbin0    ; cmd受信
   56/F80F : 20 05 F9                        jsr    pb7on
   57/F812 : C9 D1                           cmp    #$d1    ; memory dump?
   58/F814 : D0 06                           bne    cmd1
   59/F816 : 20 80 F8                        jsr    memc    ; cmd exec
   60/F819 : 4C 09 F8                        jmp    cmd
  AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 2 - 2026年05月11日 08時17分21秒


   61/F81C : C9 D2                      cmd1    cmp    #$d2    ; go?
   62/F81E : D0 06                           bne    cmd2
   63/F820 : 20 87 F8                        jsr    go    ; go cmd
   64/F823 : 4C 09 F8                        jmp    cmd
   65/F826 : C9 D3                      cmd2    cmp    #$d3    ; memory write?
   66/F828 : D0 06                            bne    cmd0
   67/F82A : 20 3A F8                       jsr    memw    ; memw exec
   68/F82D : 4C 09 F8                          jmp    cmd
   69/F830 : C9 D0                      cmd0    cmp    #$d0    ; machine id?
   70/F832 : D0 D5                             bne    cmd
   71/F834 : 20 AE F8                          jsr    id
   72/F837 : 4C 09 F8                       jmp    cmd
   73/F83A :                            ; memory write
   74/F83A : 20 C9 F8                   memw    jsr    adrin    ; 戻り値はpとする
   75/F83D : A5 02                          lda    p1
   76/F83F : 85 04                          sta    p2
   77/F841 : A5 03                          lda    p1+1
   78/F843 : 85 05                          sta    p2+1    ; p1をp2にコピー
   79/F845 : 20 C9 F8                          jsr    adrin
   80/F848 : A5 02                             lda    p1
   81/F84A : 8D 18 F0                         sta    d5    ; length = d5
   82/F84D : A5 03                            lda    p1+1
   83/F84F : 8D 19 F0                         sta    d5+1
   84/F852 : A0 00                            ldy    #0
   85/F854 : 20 DA F8                   memw0    jsr    pbin0    ; accb
   86/F857 : 91 04                            sta    (p2),y    ; [p2],x <- acc
   87/F859 : C8                               iny
   88/F85A : D0 0D                            bne    memw3
   89/F85C : 18                               clc
   90/F85D : A5 04                            lda    p2
   91/F85F : 69 00                            adc    #0
   92/F861 : 85 04                            sta    p2
   93/F863 : A5 05                            lda    p2+1
   94/F865 : 69 01                            adc    #$01    ; p2+1 <- p2+1 + $01
   95/F867 : 85 05                            sta    p2+1
   96/F869 : 38                         memw3     sec
   97/F86A : AD 18 F0                       lda    d5
   98/F86D : E9 01                          sbc    #1
   99/F86F : 8D 18 F0                       sta    d5
  100/F872 : AD 19 F0                       lda    d5+1
  101/F875 : E9 00                          sbc    #0
  102/F877 : 8D 19 F0                       sta    d5+1
  103/F87A : 0D 18 F0                       ora    d5
  104/F87D : D0 D5                           bne    memw0
  105/F87F : 60                         memw2    rts
  106/F880 :                            
  107/F880 :                            ; memory dump
  108/F880 : 20 C9 F8                   memc    jsr    adrin    ; adrs = p1
  109/F883 : 20 E5 F8                         jsr    dump
  110/F886 : 60                               rts
  111/F887 :                            ; go
  112/F887 : 20 C9 F8                   go    jsr    adrin    ; adrs = p1
  113/F88A : A9 20                          lda    #$20    ; jsr命令をg[]のramに書く
  114/F88C : 8D 22 F0                       sta    g
  115/F88F : A5 02                          lda    p1
  116/F891 : 8D 23 F0                       sta    g+1    ; adrL
  117/F894 : A5 03                          lda    p1+1
  118/F896 : 8D 24 F0                       sta    g+2    ; adrH
  119/F899 : A9 60                          lda    #$60    ; rts命令をram上のg[3]に書く
  120/F89B : 8D 25 F0                       sta    g+3
  AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 3 - 2026年05月11日 08時17分21秒


  121/F89E : 20 22 F0                        jsr    g    ; subroutineとして呼び出し
  122/F8A1 : AD 01 F4                   go0    lda    pbin    ; ft245 rxf?
  123/F8A4 : 29 10                            and    #$10
  124/F8A6 : D0 F9                            bne    go0
  125/F8A8 : A9 00                            lda    #0
  126/F8AA : 8D 78 F4                         sta    ft245    ; 常に00を返す
  127/F8AD : 60                               rts
  128/F8AE :                            
  129/F8AE :                            id:
  130/F8AE : A9 1E                          lda    #30    ; 30文字固定
  131/F8B0 : 8D 1E F0                       sta    y
  132/F8B3 : A2 00                          ldx    #0    ; 文字列オフセット x=0
  133/F8B5 : AD 01 F4                   id0    lda    pbin
  134/F8B8 : 29 10                          and    #$10
  135/F8BA : D0 F9                          bne    id0
  136/F8BC : BD 34 F9                       lda    tgt_id,x
  137/F8BF : 8D 78 F4                       sta    ft245
  138/F8C2 : E8                              inx
  139/F8C3 : CE 1E F0                         dec    y
  140/F8C6 : D0 ED                            bne    id0
  141/F8C8 : 60                              rts
  142/F8C9 :                            
  143/F8C9 :                            adrin:
  144/F8C9 : 20 DA F8                        jsr    pbin0    ; 上位2バイトは読み飛ばす
  145/F8CC : 20 DA F8                       jsr    pbin0
  146/F8CF : 20 DA F8                       jsr    pbin0    ; 戻り値はaccbに
  147/F8D2 : 85 03                          sta    p1+1    ; ゼロページ、little endianなので
  148/F8D4 : 20 DA F8                       jsr    pbin0
  149/F8D7 : 85 02                          sta    p1    ; レジスタ返しが出来ないのでゼロページポインタ p1が戻り値(little endian)
  150/F8D9 : 60                             rts
  151/F8DA :                            
  152/F8DA : AD 01 F4                   pbin0    lda    pbin
  153/F8DD : 29 20                          and    #$20
  154/F8DF : D0 F9                          bne    pbin0
  155/F8E1 : AD 78 F4                       lda    ft245    ; 受信データ <- acc
  156/F8E4 : 60                             rts
  157/F8E5 :                                                     
  158/F8E5 : A9 00                      dump    lda    #0    ; == 256
  159/F8E7 : 8D 1E F0                       sta    y
  160/F8EA : A0 00                          ldy    #0
  161/F8EC : AD 01 F4                   dump0    lda    pbin
  162/F8EF : 29 10                          and    #$10
  163/F8F1 : D0 F9                          bne    dump0
  164/F8F3 : B1 02                          lda    (p1),y
  165/F8F5 : 8D 78 F4                       sta    ft245    ; 送信データ
  166/F8F8 : C8                             iny
  167/F8F9 : CE 1E F0                        dec    y    ; 256byteなので
  168/F8FC : D0 EE                           bne    dump0
  169/F8FE : 60                              rts
  170/F8FF :                             
  171/F8FF : 48                         pb7off    pha
  172/F900 : A9 80                          lda    #$80    ; pb7 led off
  173/F902 : 4C 08 F9                        jmp    pb7set
  174/F905 : 48                         pb7on    pha
  175/F906 : A9 00                          lda    #0    ; pb7 led on
  176/F908 : 8D 05 F4                   pb7set    sta    pb7
  177/F90B : 68                              pla
  178/F90C : 60                              rts
  179/F90D :                                                          
  180/F90D : 48                         dly    pha
  AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 4 - 2026年05月11日 08時17分21秒


  181/F90E : A2 05                          ldx    #dly_cnt
  182/F910 : A9 00                      dly0    lda    #0
  183/F912 : 8D 20 F0                       sta    w
  184/F915 : 8D 21 F0                       sta    w+1
  185/F918 : AD 21 F0                         lda    w+1
  186/F91B : D0 03                            bne    dly1
  187/F91D : CE 20 F0                         dec    w
  188/F920 : CE 21 F0                   dly1    dec    w+1
  189/F923 : D0 FB                            bne    dly1
  190/F925 : AD 20 F0                         lda    w
  191/F928 : F0 05                            beq    dly2
  192/F92A : CE 20 F0                         dec    w
  193/F92D : D0 F1                            bne    dly1
  194/F92F : CA                         dly2    dex
  195/F930 : D0 DE                          bne    dly0
  196/F932 : 68                             pla
  197/F933 : 60                             rts
  198/F934 :                            
  199/F934 :                            ;               123456789012345678901234567890    
  200/F934 : 65 62 36 35 30 32 5F 76 30 tgt_id    fcc    'eb6502_v0:20260511E01         '
      F93D : 3A 32 30 32 36 30 35 31 31
      F946 : 45 30 31 20 20 20 20 20 20
      F94F : 20 20 20                  
  201/F952 :                            
  202/FFFC :                                      org    $fffc
  203/FFFC : 00 F8                      resvec    fdb    start    ; reset vector
  204/FFFE :                              
  205/FFFE :                                   end
  AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 5 - 2026年05月11日 08時17分21秒


  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 :                       F8C9 C |
*ARCHITECTURE :                                      "x86_64-unknown-linux" - |
*CASESENSITIVE :                  0 - |  CMD :                         F809 C |
 CMD0 :                        F830 C |  CMD1 :                        F81C 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\-07605\-026\-100\-12011\-026\-105\-091" - |
 DLY :                         F90D C |  DLY0 :                        F910 C |
 DLY1 :                        F920 C |  DLY2 :                        F92F C |
 DLY_CNT :                        5 - |  DUMP :                        F8E5 C |
 DUMP0 :                       F8EC C | *FALSE :                          0 - |
 FT245 :                       F478 - |  G :                           F022 C |
 GO :                          F887 C |  GO0 :                         F8A1 C |
*HAS64 :                          1 - |  ID :                          F8AE C |
 ID0 :                         F8B5 C | *LISTON :                         1 - |
*MACEXP :                         7 - |  MEMC :                        F880 C |
 MEMW :                        F83A C |  MEMW0 :                       F854 C |
*MEMW2 :                       F87F C |  MEMW3 :                       F869 C |
*MOMCPU :                      6502 - | *MOMCPUNAME :                "6502" - |
*NESTMAX :                      100 - | *P0 :                             0 C |
 P1 :                             2 C |  P2 :                             4 C |
*P3 :                             6 C | *P4 :                             8 C |
*P5 :                             A C | *P6 :                             C C |
*P7 :                             E C |  PB7 :                         F405 - |
 PB7OFF :                      F8FF C |  PB7ON :                       F905 C |
 PB7SET :                      F908 C |  PBIN :                        F401 - |
 PBIN0 :                       F8DA C | *RAMBTM :                      F3FF - |
 RAMTOP :                      F000 - | *RELAXED :                        0 - |
*RESVEC :                      FFFC C |  ROMTOP :                      F800 - |
 START :                       F800 C |  TGT_ID :                      F934 C |
*TIME :               "08\-026\-103\-12617\-027\-120\-12221\-025\-089\-110" - |
*TRUE :                           1 - | *VERSION :                     142F - |
 W :                           F020 C |  Y :                           F01E C |

     76 symbols
     38 unused symbols

  AS V1.42 Beta [Bld 270] - Source File eb6502_t3.asm - Page 6 - 2026年05月11日 08時17分21秒


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

STANDARD (0 changed characters)

1 code page

0.03 seconds assembly time

    207 lines source file
      2 passes
      0 errors
      0 warnings

eb6502_v0 dba ROM領域($F800〜$F0FF)

 6502は$20がJSRであり,アドレスは下位、上位の順(インテル系と同じ)なのでモトローラ脳の当方としては一瞬、???と思ったりしますが大丈夫です。同様にRTSは$60であります(頭切り替えませんと)。

eb6502_v0 dba ramtest $E000-$E0FF 10,000 times

 あんまり意味無いですがホストとのインタフェース時間把握も兼ねてやってみました。やはりプロセサ性能差が当然ながら出ます(あたりまえ)。

eb6502_v0 dba ioarea $F400-$F4FF

 IO領域のダンプです。ACIAは$F490なので $43(マスタリセット)、$15(モード設定、割込み無し)を書込後にTDRE(bit1)=1となる事で簡易的に確認しました。

20260517 20:55 追記:13分周回路を実装し、usb-serialのターミナル(GTKTerm)で38.4k,9.6kbpsにて対向試験・確認を行いました。

#尚HD63B50(MC6850)なので某W65C51の如き欠陥はありませんので(びっくり)・・・

 一番最初の行にある通り cpu 6502(65c02ではなく)と宣言しているのでオリジナルの6502の命令だけで組みました(braではなくjmp命令なのはその為です)。

 尚、6502のJSRはABSしか無い様なので苦し紛れでGoはRAM上に $20,adrL,adrH,$60 とデータを置いてからサブルーチンコールしています(他に方法を思いつけなかったので:)。

 あと、RAM上にプログラムロード・実行する場合はasl-1.42でアセンブル後、p2hexではなくp2bin ファイル名でバイナリファイルを作成( .bin)し、rpt(retro uP toolの略のつもり:)なるホスト上のpythonプログラムからそのバイナリをロード(実際にはdbaがwriteコマンドを実行)し、その後 実行ボタンでロードしたアドレスからサブルーチンと見做して実行されます。

eb6502_v0 dba プログラムロード( .bin)

 上記のダイアログはロードボタン(画面下の右から2番めの青いボタン)を押下すると開くので *.bin ファイル(上記だと eb6502_io.bin)を選択すれば指定したアドレスにロードされます。

eb6502_io.lst 抜粋

 この辺の作法はターゲット非依存でどのターゲットも同じ作法なので覚えるのが面倒臭い系・車輪の再発明は極力少なくしたい系(猫型人間故:)にとっては有り難いと考えています・・・毎回天地創造物語を書き起こすのもエネルギー要るので(でもコピーは嫌という天の邪鬼なもんで・・・)。

 ホストとはCDC-ACMでFT245RNで接続されているのでそれなりの処理時間で動作します。

 

8.まとめ

 ・eb6502_v0 の実装ボードを組立、動作確認を行いました(dba迄)。

 ・今回はハズレに当たらなかった様ですが、DIP40ピンの足折り曲げ案件が発生し、つまらないトラブルを起こしてしまいました(視力矯正強化、照明強化、体調管理など対策が必要:)・・・

 ・これでノスタルジーシリーズ(勝手に命名)の5枚目が完了したので一段落かと思っております(縛り企画含めて)。

 

前のトピック:

aki-iic.hatenablog.com

次のトピック:

aki-iic.hatenablog.com

関連するトピック:

基板組立(目次・まとめ、2026年6月24日時点) - aki_iic’s blog

*1:address >= ^hF000) & (address <= ^hF3FF

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

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

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

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

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

*7:address >= ^h0000) & (address <= ^hEFFF

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

*9:address >= ^hF480) & (address <= ^hF48F) & (!r_w

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