トラ技biosとかの話(D78F0730)
 
先週の記事

では、トラ技基盤のドライバーをインストールして
トラ技biosが起動するところまで確認しました。
しかし、
コンパイラとかライブラリが無いとそれ以上進めなかったので
これを購入。
 

『USBマイコンでパソコンI/O![78K0基板付き]―Windowsから自在にコントロール (マイコン活用シリーズ)』
中古なので2000円ぐらい。
300円で買った基盤を動かすために2000円の出費。
ま、趣味なんで。良いんす。
 
ちなみに、並べて写真を撮ると、そっくりですね。
裏面にNEC、マルツパーツ、トラ技、村田製作所のロゴと
78K0 USBマイコン基板 TR0808U
 と印刷されています。
 

それぞれ左が秋月で右が本のおまけ

 

で、わかったことを書いていきますね。

 

■スペック

 

CPU:μPD78F0730
   8ビット
クロック:16Mhz
メモリ:
 ROM:16Kバイト
 RAM:3Kバイト(高速1Kバイト)
タイマー:5チャンネル

インターフェース
 USB2.0
 GPIO 19本(本基板では15本使用可能)
   UART、PWM
 AD/DAコンバーターは無い

 

■ピン配置

 

CN1
 15:GND
 16:V50
 17:P12
 18:P11
 19:P10
 20:GND
 21:GND
 22:FLMD0
 23:~RESET
 24:P30
 25:P01
 26:P00
 27:P120
 28:GND

CN2
 14:GND
 13:V50
 12:P31
 11:P32
 10:P61/LED
  9:P60
  8:VIO
  7:P33
  6:P17
  5:P16
  4:P15
  3:P14
  2:P13
  1:GND


■トラ技基盤のメモリマップ

 

FFFF
 特殊機能レジスタ
FEFFF
 内部高速RAM(1024バイト)
FB00
 USB用領域
 ---------
 使用不可領域
F7FF
 内部拡張RAM(2048バイト)
 ユーザプログラム領域
F000
EFFF
 使用不可
4000
3FFF
 フラッシュメモリ(16Kバイト)
 内蔵ROM
0000

 

■トラ技bios起動時のメモリマップ0000~3FFF(フラッシュメモリ)の詳細

 

3FFF
 ユーザプログラム領域
2000
1FFF
 トラ技bios格納領域
1800
 ブートコード格納領域
 ベクタテーブル等
0000

 

■トラ技biosのコマンド

 

load:HEXファイルをRAM上にロードする

 

 ex...
  load
 パラメータ
  無し
 使い方
  teratermで接続してloadコマンドを入力すると
  Drop a HEX file.
  と出るので
  hexファイルをドラッグしてteratermにドロップ
  バイナリを指定してOK
  complete
  と出れば成功

 

flash:HEXファイルをフラッシュメモリにロードする

 

 ex...
  flash
 パラメータ
  無し
 使い方
  loadと同じようで違う。
  プログラムは1Kバイト単位でしか転送できないので
  コマンドの指示に従って最大8回転送する必要がある
  teratermで接続してflashコマンドを入力すると
  2000-23FF の範囲を含むHEXファイルを入力してください
  Drop a HEX file.
  と出るので、
  hexファイルをドラッグしてteratermにドロップ
  complate
  と出て続けて
  2400-27FF の範囲を含むHEXファイルを入力してください
  と出るので後は繰り返し。
  プログラムの大きさによって繰り返す回数が異なるが
  必要な回数が終わったらctrl+cで終了

  hexファイルは分割する必要はなく、トラ技biosがわで適切に書き込んでくれるようです。


wr:任意の番地に任意のデータを書き込む

 

 ex...
  wr f000 10
 パラメータ
  メモリ番地 値

dump:任意の番地のメモリ内容をdumpする

 

 ex...
  dump 0 2000
 パラメータ
  開始番地 バイト数

 

jmp:任意の番地にジャンプする

 

 ex...
  jmp F000
 パラメータ
  プログラムを実行する番地

 

■開発環境のセットアップ

 

アセンブラと統合開発環境をインストール


ra78k0_w401_j.exe


上記を起動してデフォルトのままインストール
(クリックして互換性のトラブルシューティングで
 WindowsXP(ServicePack3)でインストールするとよろしい)

 

C言語コンパイラをインストール


cc78k0_w400_j.exe
上記を起動してデフォルトのままインストール
(ここも右クリックして互換性のトラブルシューティングで
 WindowsXP(ServicePack3)でインストールするとよろしい)

 

デバイスファイルをインストール


df780731_v110.exe


上記exeを実行すると解凍先を聞かれるのでc:¥CQを指定して解凍
スタートメニュー→NEC Electronics Tools→デバイスファイルインストーラーを起動
インストールをクリックして


C:¥CQ¥df780731_v1.10¥NECSETUP.INI
 を指定して次へ→同意


 あとはデフォルトのまま進む
 レジストリの所にμPD78F0730とμPD78F0731が表示されるはず。
 終了しておく

 

■開発環境の使い方

 

起動してワークスペースを作る

 

 スタートメニュー→NEC Electronics Tools→PM+V6.30
起動したら
ファイル→ワークスペースの新規作成
ワークスペース・ファイル名とフォルダ位置を入力
次へ

使用ツールの指定の画面になる

・・・

ここまでやって
買った本の通りにならない。困った。投資が回収できない。回収するのは心の栄養ね。

・・・・・試行錯誤・・・・・・

とりあえず、やった事。

/*たぶんここは関係ない。
 * RENESASさんからe2_studioをダウンロードしてインストール
 * https://www.renesas.com/jp/ja/software/D4001299.html
 * なんかすごく時間がかかるので
 * 途中で飽きて
 *たぶんここまでは関係ない。
 */

元の本に戻って
cc78k0_w400_j.exeを再インストールした。
途中でWindowsが気を使ってくれて、互換性が何とかの画面になって
正常にインストールできなかった方のボタンをクリックしたところ
なんか、うまく行ったっぽい

使用ツールの指定の画面になる
CC78K0の所をW4.00 RA78K0の所をW4.01にしてOK
st78k9p.dllが見つからないといわれる。
OKを押すと今度は
ra78k0p.dllが無いといわれる。
以下同様に3個のdllが無いといわれ全部で5個のdllが無いらしい。

ra78k0_w401_j.exeの方も互換モードでインストールする必要があるっぽいですね。

ra78k0_w401_j.exeを右クリックして互換性のトラブルシューティングとやって、
WindowsXP(ServicePack3)でインストールしたら、

PM+を起動するショートカットをWindowsXP(ServicePack3)互換設定にする

上記の操作で次に進めた。もうDLLが無いとは言わせないよ。

あとはデフォルトのままで次へをクリック。最後に完了をクリックする。

 

ワークスペースにプログラムを追加

 

 作成したワークスペースを閉じている場合は
ファイル→ワークスペースを開く
として開く。
ファイル→新規作成一つサブウインドウが開くのでそこでプログラムを入力


void main()
{
}



ファイル→名前を付けて保存
適当にファイル名つけて今はsample1.cとした。
保存。


ワークスペースに最初から出ているProjectWindowでソースファイルの所を
右クリック→ソースファイルの追加
さっきのファイル(sample1.c)を選択して開く

ソースファイルの中に追加される。

コンパイル

 ビルドのボタンを押すまたはF7でもよいらしい
じゃ、F7で。


なんかうまく行ったっぽい。


こんな感じで表示された。


"C:¥Program Files (x86)¥NEC Electronics Tools¥CC78K0¥W4.00¥bin¥cc78k0.exe" -cF0730 -y"C:¥Program Files¥NEC Electronics Tools¥DEV" -_msgoff sample1.c
Compilation complete,    0 error(s) and    0 warning(s) found.
"C:¥Program Files (x86)¥NEC Electronics Tools¥RA78K0¥W4.01¥bin¥lk78k0.exe" -y"C:¥Program Files¥NEC Electronics Tools¥DEV" -_msgoff -oa.lmf "..¥..¥..¥..¥Program Files (x86)¥NEC Electronics Tools¥CC78K0¥W4.00¥lib78k0¥s0l.rel"  -pa.map -bcl0.lib -bcl0f.lib -i"C:¥Program Files (x86)¥NEC Electronics Tools¥CC78K0¥W4.00¥lib78k0" -s  sample1.rel 
Link complete,     0 error(s) and     0 warning(s) found.
"C:¥Program Files (x86)¥NEC Electronics Tools¥RA78K0¥W4.01¥bin¥oc78k0.exe" -y"C:¥Program Files¥NEC Electronics Tools¥DEV" -_msgoff  a.lmf
Object Conversion Complete,      0 error(s) and     0 warning(s) found.
Build Total error(s) : 0  Total warning(s) : 0 

 

□トラ技bios用になにかする

 

なになに、本によると
CDの中のtr0808.exeを解凍してcommonの中にあるファイルを5個コピーして
プロジェクトフォルダーにコピー。
RAMAPP.dr、RamStart.asm、ROMAPP.dr、RomStart.asm、trgbios.h
コピーしたファイルの
RAMAPP.dr、ROMAPP.drをPM+で開いて
MERGE @@LCODE  : =
の行をコメントアウトする
#MERGE @@LCODE  : = xxxx
xxxxはそれぞれ異なる

 

そしてさらに、
サンプルプログラムを以下に書き換える
#pragma sfr
void main()
{
  PM6.1 = 0;
  while(1){
    short i;
    for(i=0;i<30000;i++){
      
    }
    P6.1 ^= 0x01;
  }
}

 

コンパイルオプション変更


ツール→コンパイラオプションの設定
機能拡張→C++コメントの使用を許可するにチェックを付ける
スタートアップルーチン→標準のスタートアップルーチンを使用するのチェックを外す
標準のライブラリを使用するのチェックを外す

ソースファイルに先ほどコピーしたRamStart.asmをプロジェクトに追加
方法は
ProjectWindowでソースファイルの所を
右クリック→ソースファイルの追加

プロジェクト関連ファイルにRamStart.drを追加


方法は
ProjectWindowでプロジェクト関連ファイルの所を
右クリック→プロジェクト関連ファイルの追加

リンクの設定
ツール→リンカオプションの設定
出力ファイル名をsample1.lmf

ということで、なんか色々設定をいじった。


ビルド

で、


load 
ドラッグアンドップ


jmp f000

動かん。ピクリともしない。

 

 

・・・・・試行錯誤・・・・・・

 

・・・

 

 

・・

 

 

 

 


・・

ん、3時間経過

なんとか動くように調整できた。

 

■まとめ。

 

Windows10の場合

互換モードでインストールしないとうまく行かないっす。

 

□統合開発環境のインストール

 

ra78k0_w401_j.exe

インストーラーの実行は右クリックして互換性のトラブルシューティングでWindowsXP(ServicePack3)でインストールする。

上記を起動してデフォルトのままインストール

 

 

□C言語コンパイラをインストール


cc78k0_w400_j.exe

インストーラーの実行は右クリックして互換性のトラブルシューティングでWindowsXP(ServicePack3)でインストールする。

上記を起動してデフォルトのままインストール
 

□起動用アイコンもWindowsXP(ServicePack3)の互換モードに設定する。

 上記2つのツールの起動アイコンは互換モードの設定をする。

 

□デバイスファイルをインストール


df780731_v110.exe


上記exeを実行すると解凍先を聞かれるのでc:¥CQを指定して解凍
スタートメニュー→NEC Electronics Tools→デバイスファイルインストーラーを起動
インストールをクリックして


C:¥CQ¥df780731_v1.10¥NECSETUP.INI
 を指定して次へ→同意


 あとはデフォルトのまま進む
 レジストリの所にμPD78F0730とμPD78F0731が表示されるはず。
 終了しておく

 

□ファイルを取りそろえる。

 

適当な場所でプロジェクト用にフォルダを作成

 

□プログラム本体をプロジェクト用にフォルダに作成


[sample1.c]


#pragma sfr
void main()
{
  PM6.1 = 0;
  while(1){
    short i;
    for(i=0;i<30000;i++){
      
    }
    P6.1 ^= 0x01;
  }
}

 

□以下の4ファイルをプロジェクトファイル内に作成
    
    [ramstart.asm]
            NAME    @ramstart

            EXTRN   _main

        TSTA CSEG    AT      0F000H

        trgstart:
            BR      _main

            END


    [RAMAPP.dr]
        memory ROM     : ( 00000H, 01800H )
        memory BROM    : ( 01800H, 00800H )
        memory UROM    : ( 02000H, 02000H )
        memory IXRAM   : ( 0F000H, 00800H )
        memory RAM     : ( 0FB00H, 00500H )

        #プログラム中で明示的に定義されていないセクションの配置アドレスを指定する
        MERGE @@CODE : = IXRAM
        MERGE @@CNST : = IXRAM
        MERGE @@DATA : = IXRAM
    

    [ROMAPP.dr]
        memory ROM     : ( 00000H, 01800H )
        memory BROM    : ( 01800H, 00800H )
        memory UROM    : ( 02000H, 02000H )
        memory IXRAM   : ( 0F000H, 00800H )
        memory RAM     : ( 0FB00H, 00500H )

        #プログラム中で明示的に定義されていないセクションの配置アドレスを指定する
        MERGE @@CODE : = UROM
        MERGE @@CNST : = UROM
        MERGE @@DATA : = IXRAM
        
    [romstart.asm]
            NAME    @romstart

            EXTRN   _main

        TSTA CSEG    AT      02000H

        trgstart:
            BR      _main

            END


□トラ技biosのヘッダーをコピーして作成    
   toragi.h (これはCDからコピーする)

 

□起動してワークスペースを作る

 

 スタートメニュー→NEC Electronics Tools→PM+V6.30


起動したら


ファイル→ワークスペースの新規作成
ワークスペース・ファイル名とフォルダ位置を入力
次へ

□使用ツールの指定の画面になる


詳細設定をクリック
CC78K0の所をW4.00 にチェックを付ける
RA78K0の所をW4.01 にチェックを付ける
でOK
次へをクリック

□ソースファイルの設定になる


追加をクリックして
RamStart.asm
samle1.c
を指定
開くをクリック
次へ

残りはデフォルトで次へで進めて
完了をクリック

 

□設定を行う

 

ツール→コンパイラオプションの設定→機能拡張


C++コメントの使用を許可する
スタートアップルーチン→標準のスタートアップルーチンを使用するのチェックを外す
標準ライブラリを使用するのチェックを外す

出力→
アセンブラ・ソース・モジュール・ファイル出力のチェックを入れる
Cソース付き(インクルード非展開)にする
OK

 

ツール→リンカオプション→その他
ディレクティブファイル 参照してRAMAPR.drを指定

 

ツール→オブジェクトコンバーターオプションの設定→出力1

オブジェクト充てんのチェックを外す

OK

で、ビルド。

プロジェクトフォルダにhexファイルが出来る

loadコマンドで送り込んで
jmp f0000  実行。


おおーLEDぴかぴかしています。成功ですね。