aki_iic’s blog

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

基板組立(その7)TMS9995でSBC

eb9995_v0 実装ボード

 ノスタルジーシリーズその4と言いますか当方にとっては温故知新と言う方が正確かもしれません。

 TMS9900は学生の頃買ったbit別冊の16ビットマイクロプロセサの後半部分に掲載されていたので存在は知っていたのですが実際にチップに触ったのは2007年頃、Eagle + Olimexで基板を安価(45EURぐらい、FAXでクレカ番号送信したのも(その為だけにFax買いました:)に作れる様になってからでありました。

 トピックとしては来月の基板(2026年3月)の3項目目の続きになります。

aki-iic.hatenablog.com

 一部重複しますが見やすさの為に重複記載ご容赦。

0.TMS9995につきまして

www.st.rim.or.jp

 やはりココが一番わかり易いしアーキテクチャからISA迄コンパクトに纏めてあるので良いです。TMS9900も参照する必要はあると思いますが。

 大昔は共立出版から16ビットマイクロプロセサTMS9995とVDP(TMS9918)の和書が出ていて購入もしたのですが行方不明なのが残念:)。

20260417 17:57追記:同書は誤記が多いのでTIの一次情報を参照すべしとのコメント頂きました(efialtes_htn様、ご教示頂き有難うございます)。やはり一次情報に当たるのが鉄則の様です。

 

・TMS9995ブロック図

tms9995 block diagram

 ご承知の通りTMS9995は周辺回路(タイマ)とRAM(WPを想定)を集積(無論、面倒臭い4相CKGも)した8ビットバスの16ビットMCUでMC6803等に近いイメージですか(アーキでなく、コンポーネント構成として)。

 動作クロックは3Mhz(12Mhz)ですが0waitだと1クロック(333ns)がRWサイクルなので意外と速い、無論レトロマイコン的には、ですが。

・リード・ライトサイクル、クロックタイミング

tms9995 read/write/clk timing

 

 これまた有名でありますがTMS9900ファミリはCRUというクロック同期系のシリアルインタフェースを内蔵しておりそれ専用の空間と命令もサポートしています。なのでメモリ空間とCRU空間を判別する為にnMEMENがLでメモリ空間、HでCRU空間(他にも条件があります)nDBIN、nWRでバスタイミングを構成します。

・自動ウェイト

tms9995 autowait timing

 当時のメモリは450ns品が標準だったので自動1ウェイト生成回路がリセット時にREADYピンがHであれば機能し、Lならば0waitで動作します。本機のSRAMは70ns(1Mbit sram),90ns(psdのflash/sram)なので0waitでも余裕ですが68xx系とのインタフェースの為にEクロック>222ns以上が必要なのでまづはautowait有功(reset時のREADY=H)で始めます。

・tms9995のメモリマップ

tms9995 memory map

 F000-F0FB,FFFA-FFFFが内部RAMでWPとタイマとNMIベクタとして予約されております。リセット時は0番地からWP(WorkspacePointer)、リセットベクタの2ワードをフェッチする形になります。TMS9900ファミリはworkspace memoryアーキテクチャなのでWPとして使用するメモリは最速であるべきで内蔵RAMはそれを満たすので通常はそれを使用します。

・その他

 ・この頃のTIのチップはBig endianであるので注意が必要です。アドレスもデータもbit0がMSBでbit15/bit7がLSBなので今日(というかTI以外の)チップとはMSBとLSBが逆なのでくれぐれもお間違い無き様に(念の為)。

 ・バイト配列も当然ビッグエンディアンなので所謂モトローラ系のendianとなります。

 

1.ブロック図(再掲)

eb9995_v0 block diagram

 本シリーズ共通の縛りでCPU以外は同じ構成としています。68xx系周辺へのEクロック生成は !nMEMEN & (!nDBIN # !nWR) & (!nPIA # !nACIA) のPLAで取り敢えず動かしてみます。

20260417 01:52追記:老婆心ながらこの手の方法は当然ながらPTM(6840),VIA(6522のタイマカウンタ部)とは相性が悪いので利用不可です。上記ロジックはE信号をクロックというよりかはストローブ信号と見做して生成しているので一定周期のクロック(まともなモトローラ系のEクロック)を前提としたチップ(タイマカウンタ系)には不適である点はご承知置き下さい(念の為)。

#TMS9995はタイマカウンタ内蔵なのでそれで乗り切るのが吉:)。

 

2.回路図(再掲)

eb9995_v0 回路図

3.パタン図(全レイヤ)再掲

eb9995_v0 パタン図(全レイヤ)

4.PLA(抜粋)

module eb9995v0
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
_wr PIN 47;
CLK PIN 49;
_rd 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
E PIN 7;
nMEMEN PIN 6;
BCK PIN 5;
READY 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;
nIORD PIN 9;
nIOWR PIN 8;
rs0 node;
csiop node;
fs0 node;
rd1 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;
! nACIA = *9;
E = !nMEMEN & (!_rd # !_wr) & (!nPIA # !nACIA);
E.oe = _reset;
BCK.oe = _reset;
READY = Vcc;
READY.oe = Vcc;
pb7.oe = _reset;
nIORD = !(!nMEMEN & !_rd);
nIORD.oe = _reset;
nIOWR = !(!nMEMEN & !_wr) ;
nIOWR.oe = _reset;
rd1 := !nPIA # !nACIA;
rd1.ck = CLK;
rd1.re = _reset;


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

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


end eb9995v0

5.実装ボード(実物)

eb9995_v0 実装ボード

 毎度の構成ですが右上からHD63B21(PIA)、TMS9995、1Mbit sram、AE-FT245RL、左上からHD63B50(ACIA)、PSD834F2J90(PSD)です。クロックは12Mhz OSCを外部クロックとしてCPUに入力という至ってオーソドックスな構成。CRUインタフェースを全く考慮していない(縛り故)のですが気にしない・・・

6.開発環境

開発環境

 これも毎度同じで図中上にあるのがRAISONANCE社のRlinkというPSD開発用のJTAGプログラマというかST系MCU開発ツールというか。左下は変換基板でARM24PInをPSD JTAG標準の14Pinに変換し、フラットケーブルでターゲットに接続しています。

 ターゲットはUSB給電でAE-FT245RNからボード内の電源(+5V)として供給されます(BUSパワーですね)。消費電流は0.29から0.36A(1.5〜1.8W)ですがパッケージ特性なのか意外とCPUは熱くない様な・・・

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

USB電圧電流電力計

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

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

 

 基板右手の40PinヘッダはRCBUS(TMS9995も記載されています)準拠?のバスコネクタで今回はロジアナ接続してデバックに活躍してくれました。左のProbe(テストピンヘッダ)含めてデバッグへの備えは重要(教訓)。

 星回りが悪いのか?今回は3個も外れ(不良品)を引いてしまいデバッグに苦労しました。

1.CPUからnMEMENが出力されない

nMEMENがLにスタック

 最初は何かの間違いかと思いましたが他のCPUに差し替えると正常にnMEMENが出力されるので不良と判断(1/3=33%)。

2.PSDのA7がHにスタック(VCCと短絡)し、reset時に正しいリセットベクタを読めない

psd834f2j90のa7がvccと短絡

 切り分けて行く中でテスタでa7とVCCがショートしている様なのでcpu,sram,psdを1個づつ外していくと・・・PSDに原因があったと言う事で(素子不良ですな)。

 オークションだから外れを掴む事はあろうかと(過去に1Mbit sramで外れ掴んだし)覚悟はしていたがキーデバイスのPSDにも不良品があるのはちょっと考え込んでしまいました。

 尚、JTAG書込は正常なので外部ピンの破損(静電気なり経年劣化なり、元々不良品だった可能性も)まさかa7とVCCがチップ内で短絡とは思いもしなかった訳で・・・教訓になりましたよ(反芻)。

3.PSDのa9が開放状態?

 上記が解消されdbaが動作する様になったのですが版数情報の後半部分が文字化けする。別のPSDでISPすると正常に表示されるのでPSD個別不良と判断し、メッセージが化ける場所を確認すると0x0200〜でコードは0〜170h迄しか無い筈なのに200〜3ffhにも同じのが出てくる・・・A9ピンが開放というかチップ内部でデコーダ故障っぽい(びっくり)。

 今回落札したPSDは10個だったので(2/10=20%以上の不良率)。オークションのリスクというか安物買いの・・・というか考えさせられる事案でありました(深刻)。

 なのでキーデバイスのPSDと可能であればCPUを簡易的にでもテストする(Function testでも)検査治具でも検討しようかという気になっています・・・

 

7.dba

eb9995_v0 dba 起動時

 色々ありましたが dba起動時の画面です。0番地がWP、2番地がリセットベクタです。4番地からコード入ってますがINT1ベクタ領域なので80hからコードを配置するのが正解:)。

eb9995_v0 dba ramtest

 fs0を0〜7FF、外部sramを800〜EFFFに配置したので1Mbit sramのテストです。

eb9995_v0 dba io空間

 こちらはIO空間。ACIAはFE90-FE9Fに配置しており、手動で0x43,0x15と初期化してACIAのTDREが1になってるので簡易的にはアクセス出来ていると判断(手抜きですね)。

・dbaソースコード

 AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 1 - 2026年04月10日 13時24分17秒


    1/   0 :                                cpu    tms9995
    2/   0 :                            
    3/   0 :                            ; 20251102 : hc11f_t3.asm 小さなrom debug agent風のもの
    4/   0 :                            ; 20260405 : eb9995_t3.asm に移植
    5/   0 :                            ; 20260406 : 取り敢えずアセンブルエラー消し込む。動作するかは別の話。
    6/   0 :                            ; 20260410 : iomapをffxx ⇒ fexxに変更(csiop,acia,pia含めて)
    7/   0 :                            ;
    8/   0 :                            
    9/   0 : =0F100H                    rs0    equ    0f100h        ; rs0 : 0f100-0feffh
   10/   0 : =0H                        fs0    equ    0h        ; fs0 : 0-07ffh
   11/   0 : =0FE00H                    csiop    equ    0fe00h        ; csiop
   12/   0 : =0FE01H                    pbin    equ    csiop+1
   13/   0 : =0FE05H                    pb7    equ    csiop+5
   14/   0 : =0FE78H                    ft245    equ    0fe78h        ; ft245 r/w
   15/   0 : =0FE80H                    pia    equ    0fe80h        ; pia
   16/   0 : =0FE90H                    acia    equ    0fe90h        ; acia
   17/   0 :                            
   18/   0 : =0H                        romtop    equ    fs0        ; rom top
   19/   0 : =7FFH                      rombtm    equ    fs0+07ffh        ; rom bottom (2KB)
   20/   0 : =0F000H                    wp    equ    0f000h        ; internal ram
   21/   0 : =0FD00H                    ramtop    equ    0fd00h        ; rs0 
   22/   0 : =0FDFFH                    rambtm    equ    0fdffh
   23/   0 :                            
   24/   0 : =0H                        t1    equ    0000h    ; 待ち
   25/   0 :                            
   26/   0 :                            ;---------------------------------------------------------
   27/   0 :                            ; マクロ定義
   28/   0 :                            ;---------------------------------------------------------
   29/   0 :                            FUNC macro  name
   30/   0 :                            name:
   31/   0 :                                    MOV  R11, @name_R11  ; 戻り先をRAMへ保存
   32/   0 :                                    endm
   33/   0 :                            
   34/   0 :                            RET   macro  name
   35/   0 :                                    MOV  @name_R11, R11  ; RAMから復元
   36/   0 :                                    B    *R11
   37/   0 :                                    endm
   38/   0 :                                    
   39/F080 :                                org    wp+80h
   40/F080 :                                
   41/F080 : 0000                       a0    word    0    ; pseduo a0
   42/F082 : 0000                       a1    word    0
   43/F084 : 0000                       a2    word    0
   44/F086 : 0000                       a3    word    0
   45/F088 : 0000                       a4    word    0
   46/F08A : 0000                       a5    word    0
   47/F08C : 0000                       a6    word    0
   48/F08E : 0000                       d0    word    0    ; pseduo d0
   49/F090 : 0000                       d1    word    0
   50/F092 : 0000                       d2    word    0
   51/F094 : 0000                       d3    word    0
   52/F096 : 0000                       d4    word    0
   53/F098 : 0000                       d5    word    0
   54/F09A : 0000                       d6    word    0
   55/F09C : 0000                       d7    word    0
   56/F09E :                            
   57/F09E :                            ;---------------------------------------------------------
   58/F09E :                            ; 領域定義
   59/F09E :                            ;---------------------------------------------------------
   60/F09E : 0000                       pb7on_R11:    word    0
  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 2 - 2026年04月10日 13時24分17秒


   61/F0A0 : 0000                       pb7off_R11:    word    0
   62/F0A2 : 0000                       pbin0_R11:    word    0
   63/F0A4 : 0000                       dly_R11:    word    0
   64/F0A6 : 0000                       memc_R11:    word    0
   65/F0A8 : 0000                       memw_R11:    word    0
   66/F0AA : 0000                       id_R11:        word    0
   67/F0AC : 0000                       go_R11:        word    0
   68/F0AE : 0000                       adrin_R11:    word    0
   69/F0B0 : 0000                       dump_R11:    word    0
   70/F0B2 :                            
   71/   0 :                                org    romtop
   72/   0 :                            
   73/   0 : =5H                        dly_cnt    equ    5
   74/   0 :                            
   75/   0 : F000                           word    wp
   76/   2 : 0004                           word    init
   77/   4 :                            
   78/   4 : 06A0 014C                  init    bl    @pb7on
   79/   8 : 06A0 015E                      bl    @dly
   80/   C : 06A0 013A                      bl    @pb7off
   81/  10 :                            
   82/  10 :                            ; cmd待ち
   83/  10 : 06A0 013A                  cmd    bl    @pb7off
   84/  14 : 06A0 00FE                      bl    @pbin0    ; cmd受信
   85/  18 : 06A0 014C                      bl    @pb7on
   86/  1C : 0283 D100                      ci    r3,0d100h    ; memory dump?
   87/  20 : 1603                           jne    cmd1
   88/  22 : 06A0 0078                      bl    @memc    ; cmd exec
   89/  26 : 10F4                           jmp    cmd
   90/  28 : 0283 D200                  cmd1    ci    r3,0d200h    ; go?
   91/  2C : 1603                           jne    cmd2
   92/  2E : 06A0 008E                      bl    @go    ; go cmd
   93/  32 : 10EE                           jmp    cmd
   94/  34 : 0283 D300                  cmd2    ci    r3,0d300h    ; memory write?
   95/  38 : 1603                           jne    cmd0
   96/  3A : 06A0 004C                      bl    @memw    ; memw exec
   97/  3E : 10E8                           jmp    cmd
   98/  40 : 0283 D000                  cmd0    ci    r3,0d000h    ; machine id?
   99/  44 : 16E5                           jne    cmd
  100/  46 : 06A0 00B4                      bl    @id
  101/  4A : 10E2                           jmp    cmd
  102/  4C :                            
  103/  4C :                            ; memory write
  104/  4C : (MACRO)                    memw    FUNC    memw
  104/  4C :                            MEMW:
  104/  4C : C80B F0A8                          MOV  R11, @MEMW_R11  ; 戻り先をRAMへ保存
  105/  50 : 06A0 00D8                      bl    @adrin    ; 戻り値はDとする
  106/  54 : C802 F084                      mov    r2,@a2    ; adrs = a2
  107/  58 : 06A0 00D8                      bl    @adrin
  108/  5C : C802 F098                      mov    r2,@d5    ; length = d5
  109/  60 : C0A0 F084                      mov    @a2,r2
  110/  64 : C1A0 F098                      mov    @d5,r6
  111/  68 : 06A0 00FE                  memw0    bl    @pbin0    ; accb
  112/  6C : DC83                           movb    r3,*r2+    ; (x)<=accb
  113/  6E : 0606                           dec    r6
  114/  70 : 16FB                           jne    memw0
  115/  72 : (MACRO)                        RET    memw
  115/  72 : C2E0 F0A8                          MOV  @MEMW_R11, R11  ; RAMから復元
  115/  76 : 045B                               B    *R11
  116/  78 :                            ; memory dump
  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 3 - 2026年04月10日 13時24分17秒


  117/  78 : (MACRO)                    memc    FUNC    memc
  117/  78 :                            MEMC:
  117/  78 : C80B F0A6                          MOV  R11, @MEMC_R11  ; 戻り先をRAMへ保存
  118/  7C : 06A0 00D8                      bl    @adrin    ; adrs = a2
  119/  80 : C802 F084                      mov    r2,@a2
  120/  84 : 06A0 011A                      bl    @dump
  121/  88 : (MACRO)                        RET    memc
  121/  88 : C2E0 F0A6                          MOV  @MEMC_R11, R11  ; RAMから復元
  121/  8C : 045B                               B    *R11
  122/  8E :                            ; go
  123/  8E : (MACRO)                    go    FUNC    go
  123/  8E :                            GO:
  123/  8E : C80B F0AC                          MOV  R11, @GO_R11  ; 戻り先をRAMへ保存
  124/  92 : 06A0 00D8                      bl    @adrin    ; adrs = a2
  125/  96 : C0A0 F082                      mov    @a1,r2
  126/  9A : 0692                           bl    *r2        ; subroutineとして呼び出し
  127/  9C : D120 FE01                  go0    movb    @pbin,r4    ; ft245 rxf?
  128/  A0 : 0244 1000                      andi    r4,1000h
  129/  A4 : 16FB                           jne    go0
  130/  A6 : 0204 0000                      li    r4,0
  131/  AA : D804 FE78                      movb    r4,@ft245    ; 常に00を返す
  132/  AE : (MACRO)                        RET    go
  132/  AE : C2E0 F0AC                          MOV  @GO_R11, R11  ; RAMから復元
  132/  B2 : 045B                               B    *R11
  133/  B4 :                            
  134/  B4 : (MACRO)                    id    FUNC    id
  134/  B4 :                            ID:
  134/  B4 : C80B F0AA                          MOV  R11, @ID_R11  ; 戻り先をRAMへ保存
  135/  B8 : 0202 0178                      li    r2,tgt_id
  136/  BC : 0206 001E                      li    r6,30    ; 30文字固定
  137/  C0 : D120 FE01                  id0    movb    @pbin,r4
  138/  C4 : 0244 1000                      andi    r4,1000h
  139/  C8 : 16FB                           jne    id0
  140/  CA : D832 FE78                      movb    *r2+,@ft245
  141/  CE : 0606                           dec    r6
  142/  D0 : 16F7                           jne    id0
  143/  D2 : (MACRO)                        RET    id
  143/  D2 : C2E0 F0AA                          MOV  @ID_R11, R11  ; RAMから復元
  143/  D6 : 045B                               B    *R11
  144/  D8 :                            
  145/  D8 : (MACRO)                    adrin:    FUNC    adrin
  145/  D8 :                            ADRIN:
  145/  D8 : C80B F0AE                          MOV  R11, @ADRIN_R11  ; 戻り先をRAMへ保存
  146/  DC : 06A0 00FE                      bl    @pbin0    ; 上位2バイトは読み飛ばす
  147/  E0 : 06A0 00FE                      bl    @pbin0
  148/  E4 : 06A0 00FE                      bl    @pbin0    ; 戻り値はr3に
  149/  E8 : D803 F082                      movb    r3,@a1
  150/  EC : 06A0 00FE                      bl    @pbin0
  151/  F0 : D803 F083                      movb    r3,@a1+1
  152/  F4 : C0A0 F082                      mov    @a1,r2    ; 戻り値 = r2
  153/  F8 : (MACRO)                        RET    adrin
  153/  F8 : C2E0 F0AE                          MOV  @ADRIN_R11, R11  ; RAMから復元
  153/  FC : 045B                               B    *R11
  154/  FE :                                
  155/  FE : (MACRO)                    pbin0    FUNC    pbin0
  155/  FE :                            PBIN0:
  155/  FE : C80B F0A2                          MOV  R11, @PBIN0_R11  ; 戻り先をRAMへ保存
  156/ 102 : D120 FE01                  pbin1    movb    @pbin,r4
  157/ 106 : 0244 2000                      andi    r4,2000h
  158/ 10A : 16FB                           jne    pbin1
  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 4 - 2026年04月10日 13時24分17秒


  159/ 10C : D0E0 FE78                      movb    @ft245,r3    ; 受信データ -> r3
  160/ 110 : 0243 FF00                      andi    r3,0ff00h
  161/ 114 : (MACRO)                        RET    pbin0
  161/ 114 : C2E0 F0A2                          MOV  @PBIN0_R11, R11  ; RAMから復元
  161/ 118 : 045B                               B    *R11
  162/ 11A :                            
  163/ 11A : (MACRO)                    dump    FUNC    dump
  163/ 11A :                            DUMP:
  163/ 11A : C80B F0B0                          MOV  R11, @DUMP_R11  ; 戻り先をRAMへ保存
  164/ 11E : 0206 0100                      li    r6,256
  165/ 122 : D120 FE01                  dump0    movb    @pbin,r4
  166/ 126 : 0244 1000                      andi    r4,1000h
  167/ 12A : 16FB                           jne    dump0
  168/ 12C : D832 FE78                      movb    *r2+,@ft245
  169/ 130 : 0606                           dec    r6
  170/ 132 : 16F7                           jne    dump0
  171/ 134 : (MACRO)                        RET    dump
  171/ 134 : C2E0 F0B0                          MOV  @DUMP_R11, R11  ; RAMから復元
  171/ 138 : 045B                               B    *R11
  172/ 13A :                            
  173/ 13A : (MACRO)                    pb7off    FUNC    pb7off
  173/ 13A :                            PB7OFF:
  173/ 13A : C80B F0A0                          MOV  R11, @PB7OFF_R11  ; 戻り先をRAMへ保存
  174/ 13E : 0204 8080                      li    r4,8080h    ; pb7 led off
  175/ 142 : D804 FE05                      movb    r4,@pb7
  176/ 146 : (MACRO)                        RET    pb7off
  176/ 146 : C2E0 F0A0                          MOV  @PB7OFF_R11, R11  ; RAMから復元
  176/ 14A : 045B                               B    *R11
  177/ 14C :                                
  178/ 14C : (MACRO)                    pb7on    FUNC    pb7on
  178/ 14C :                            PB7ON:
  178/ 14C : C80B F09E                          MOV  R11, @PB7ON_R11  ; 戻り先をRAMへ保存
  179/ 150 : 0204 0000                      li    r4,0        ; pb7 led on
  180/ 154 : D804 FE05                      movb    r4,@pb7
  181/ 158 : (MACRO)                        RET    pb7on
  181/ 158 : C2E0 F09E                          MOV  @PB7ON_R11, R11  ; RAMから復元
  181/ 15C : 045B                               B    *R11
  182/ 15E :                                
  183/ 15E : (MACRO)                    dly    FUNC    dly
  183/ 15E :                            DLY:
  183/ 15E : C80B F0A4                          MOV  R11, @DLY_R11  ; 戻り先をRAMへ保存
  184/ 162 : 0205 0005                      li    r5,dly_cnt
  185/ 166 : 0204 0000                  dly1    li    r4,0
  186/ 16A : 0604                       dly2    dec    r4
  187/ 16C : 16FE                           jne    dly2
  188/ 16E : 0605                           dec    r5
  189/ 170 : 16FA                           jne    dly1
  190/ 172 : (MACRO)                        RET    dly
  190/ 172 : C2E0 F0A4                          MOV  @DLY_R11, R11  ; RAMから復元
  190/ 176 : 045B                               B    *R11
  191/ 178 :                            
  192/ 178 :                            ;                123456789012345678901234567890    
  193/ 178 : 6562 3939 3935 5F76 303A   tgt_id    byte    'eb9995_v0:20260410E00         '
       182 : 3230 3236 3034 3130 4530
       18C : 3020 2020 2020 2020 2020
  194/ 196 :                                
  195/ 196 :                            
  196/ 196 :                                end
  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 5 - 2026年04月10日 13時24分17秒


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

*A0 :                         0F080 C |  A1 :                         0F082 C |
 A2 :                         0F084 C | *A3 :                         0F086 C |
*A4 :                         0F088 C | *A5 :                         0F08A C |
*A6 :                         0F08C C | *ACIA :                       0FE90 - |
 ADRIN :                        0D8 C |  ADRIN_R11 :                  0F0AE C |
*ARCHITECTURE :                                      "x86_64-unknown-linux" - |
*CASESENSITIVE :                  0 - |  CMD :                           10 C |
 CMD0 :                          40 C |  CMD1 :                          28 C |
 CMD2 :                          34 C | *CONSTPI :        3.141592653589793 - |
 CSIOP :                      0FE00 - | *D0 :                         0F08E C |
*D1 :                         0F090 C | *D2 :                         0F092 C |
*D3 :                         0F094 C | *D4 :                         0F096 C |
 D5 :                         0F098 C | *D6 :                         0F09A C |
*D7 :                         0F09C C |
*DATE :             "2026\-027\-071\-07604\-026\-100\-12010\-026\-105\-091" - |
 DLY :                          15E C |  DLY1 :                         166 C |
 DLY2 :                         16A C |  DLY_CNT :                        5 - |
 DLY_R11 :                    0F0A4 C |  DUMP :                         11A C |
 DUMP0 :                        122 C |  DUMP_R11 :                   0F0B0 C |
*FALSE :                          0 - |  FS0 :                            0 - |
 FT245 :                      0FE78 - |  GO :                            8E C |
 GO0 :                           9C C |  GO_R11 :                     0F0AC C |
*HAS64 :                          1 - |  ID :                           0B4 C |
 ID0 :                          0C0 C |  ID_R11 :                     0F0AA C |
 INIT :                           4 C | *INSUPMODE :                      0 - |
*LISTON :                         1 - | *MACEXP :                         7 - |
 MEMC :                          78 C |  MEMC_R11 :                   0F0A6 C |
 MEMW :                          4C C |  MEMW0 :                         68 C |
 MEMW_R11 :                   0F0A8 C | *MOMCPU :                      9995 - |
*MOMCPUNAME :             "TMS9995" - | *NESTMAX :                      100 - |
 PB7 :                        0FE05 - |  PB7OFF :                       13A C |
 PB7OFF_R11 :                 0F0A0 C |  PB7ON :                        14C C |
 PB7ON_R11 :                  0F09E C |  PBIN :                       0FE01 - |
 PBIN0 :                        0FE C |  PBIN0_R11 :                  0F0A2 C |
 PBIN1 :                        102 C | *PIA :                        0FE80 - |
*RAMBTM :                     0FDFF - | *RAMTOP :                     0FD00 - |
*RELAXED :                        0 - | *ROMBTM :                       7FF - |
 ROMTOP :                         0 - | *RS0 :                        0F100 - |
*T1 :                             0 - |  TGT_ID :                       178 C |
*TIME :               "13\-026\-103\-12624\-027\-120\-12217\-025\-089\-110" - |
*TRUE :                           1 - | *VERSION :                     142F - |
 WP :                         0F000 - |

     79 symbols
     35 unused symbols

  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 6 - 2026年04月10日 13時24分17秒


  Defined Macros:
  ---------------

FUNC                                  | RET                                  

      2 macros

  AS V1.42 Beta [Bld 270] - Source File eb9995_t3.asm - Page 7 - 2026年04月10日 13時24分17秒


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

STANDARD (0 changed characters)

1 code page

0.03 seconds assembly time

    198 lines source file
    238 lines incl. macro expansions
      2 passes
      0 errors
      0 warnings

 TMS9900のプログラムは2007年に一度挫折してるので妙な記述もあるかと思いますが一応。TMS9995はオリジナルのTMS9900がTIのミニコンをシングルチップ化した歴史的経緯がある為かi8080/M6800の様な生粋のマイコンに比べて個人的にはミニコン的なかほり(まあ、当方ミニコンに触った事が無いのですが)がする脳内イメージを未だに持っております。

 M6800から入門した者にとってはSPが無いだけでも衝撃でアドレッシング・モードや命令が簡潔だが充実している(まあ、個性もありますが)のは逆に新鮮に写ります(温故知新と称した所以です)。

 当方TI99/4にもぴゅう太にも関心がありませんが(パソコン自体に関心無かったので)TMS9900系というアーキテクチャには関心を唆られます(結構、とても)。

その為かMSP430も大好きなんですよねぇ・・・(今は昔)。

8.まとめ

 ・eb9995_v0 を組立、動作確認を行いました(dba迄)。

 ・途中、CPU不良、PSD不良x2に遭遇し、オークションというか流通在庫品のリスクについて再考させられました(対策検討を)。

 ・最近、惹きが強い様なのでお祓いにでも行きましょうか(半分冗談、半分本気:)。

tms9995 psd834f2j90 不良品

 

次のトピック:

aki-iic.hatenablog.com

前のトピック:

aki-iic.hatenablog.com

*1:address >= ^hF100) & (address <= ^hFDFF) & (!nMEMEN

*2:address >= ^hFE00) & (address <= ^hFE3F) & (!nMEMEN

*3:address >= ^h0000) & (address <= ^h07FF) & (!nMEMEN

*4:address >= ^h0000) & (address <= ^h07FF) & (!nMEMEN

*5:address >= ^hFE78) & (address <= ^hFE7F) & (!nMEMEN & !_rd

*6:address >= ^hFE78) & (address <= ^hFE7F) & (!nMEMEN & !_wr

*7:address >= ^h0800) & (address <= ^hEFFF) & (!nMEMEN

*8:address >= ^hFE80) & (address <= ^hFE8F) & (!nMEMEN

*9:address >= ^hFE90) & (address <= ^hFE9F) & (!nMEMEN