H8/3048でLチカ
約15年前に遊んでいた秋月のH8ボードを押し入れから出して遊んでみました。
今から始めるのは絶対にやめたほうがいいです。
デバッガを使うのでデバッガを知らない人のための簡単な使い方も書いてあります。
今回用意したもの
-
AKI-H8/3048 開発キット (終売品・公式HPから削除済)
-
USB-シリアル変換
本当は3052Fでやりたかったんですが、デバッガのコンパイルについて解説しなければならなくなるため今回は3048でやります。3052Fはまた別の機会に。
Windows 10で動くか動かないか
H8/3048F用BASICコンパイラ
実質、AKI-H8マイコン用マザーボード専用BASICコンパイラです。(主にLCDのPRINT)
日立ではなく秋月オリジナルのようです。ROMのバイナリが吐かれるのでリンカなどは不要。
3048F用となっている原因はどうやらBASICランタイムがクロック周波数に依存するかららしい。
https://akizukidenshi.com/download/kairo/データ/SOFT関係/B002_BASICコンパイラ.pdf
マニュアル p.9に0000 3E80 -> 0000 4CCC とすると 19.6608MHzに対応できるとあります。
H8 3052Fは25MHzなので0000 61A8とすれば3052Fでも動きます。
(参考ページ。昔はもっとこういう解説ページがあったと思うんですが、いつの間にか消えています)
http://jr2hap.com/BASIC_Patch.html
Windows 10でサンプルファイルのコンパイルを確認しました。
AKI-H8-USBには使えません(LCDのPRINTが使えない)
あと、COM通信のエンコードはSJISです。
AKI-H8シリーズ用Cコンパイラ
日立のCコンパイラの評価版。
H8/300H C COMPILER(Evaluation software) Ver.1.0
3048F用のヘッダファイルしか収録されていませんが、それ以外のヘッダファイルもあります。
3048-one/3052/3067/3069は当時まだ出ていなかったのでありませんが、後継バージョン(2.2)のヘッダファイルがHEWの体験版や300hhew2.exe(記事一番下のリンク参照)に含まれています。
- H8/3001
- H8/3002
- H8/3003
- H8/3004
- H8/3005
- H8/3032シリーズ
- H8/3042シリーズ
- H8/3048 F-ZTAT ←これだけ収録されている
- H8/3048シリーズ
- H8/3072
アセンブラ・リンカ・オブジェクトコンバータが別途必要。
H8 3052F開発ソフトCDにあるCコンパイラとは別物。
Windows 10でサンプルファイルのコンパイルを確認しました。
AKI-H8 3048開発キット CD
収録物
- 日立のアセンブラの評価版 Ver 1.0
- ライタープログラムF-ZTAT (ライタープログラムが3048しかないので3048専用)
- 日立半導体セミナーで配布されていたサンプルプログラム+α(AD1, LCD1のみ秋月オリジナル)
- マザーボードサンプルプログラム(秋月オリジナル)
- 「H8/300Hシリーズプログラミングマニュアル」と3048シリーズのハードウェアマニュアル
アセンブラキットは全部バージョン1.0。Windows 10でサンプルファイルのコンパイルを確認しました。
日立半導体セミナーで配布されていたサンプルプログラムのうち、AD.SRCが抜けています
F-ZTATはWindows 10非対応です。16ビットアプリケーションなので動きません。ライタープログラムは他にもあるので代替が効きます。
H8/300Hシリーズプログラミングマニュアルは画質がひどく文字が潰れて読めないため、縮写コピーが付属していました。3052付属CDでは画質の良いPDFが付属しているため縮写コピーは無いです。
Hterm (H8のデバッガ用プログラム)
https://www.renesas.com/jp/ja/document/swr/1403891?r=721346
私の環境では正常に動きません。
vmware上のWindows meから動かす事にしました。
ちなみに、3048/3052Fでは書き込み機能が使えません(使用するにはライティングソフトを製作する必要があります)
何も知らない人が陥りやすいポイント
製作マニュアルをよく読もうねっていう話。
AKI-H8マイコン専用マザーボード
https://akizukidenshi.com/catalog/g/gK-00140/
Dサブ25ピンのポートはライター回路に接続されていますがDサブ9ピンのポートはどこにも繋がっていません。いまどき(H8で遊んでいたおよそ15年前)のPCには25ピンシリアルポートなんて付いてる訳なく、殆どは9ピンです。注意したいのは、いまどきのPCについているDサブ25ピンはパラレルポートでシリアルポートではないです。パラレルポートに接続しても動作しません。Dサブ9ピンで接続を確立させるためには自分で配線する必要があります。
参考
https://www.japansensor.co.jp/faq/942/index.html
具体的にどうつなげればいいかはパターンを追ってください。マザーボード説明書3ページ目の回路図にもそれっぽい事が書いてあります。
https://akizukidenshi.com/download/kairo/データ/マイコン関係/A018_H8マザーボード.pdf
後期のマザーボード(現行品)は3052F用に改造する際に必要なホールが空いていません。初期のものはユニバーサル基板のように全て空いていたので簡単に改造できました。
あと、3048に書き込む際はモード7で動作させます。MD0/1/2のピンは全てオープンです。
個人的メモ:ライターモードに切り替わらない時はトランジスタA1015-GRが生きているか確認してみよう
H8 3048でLチカ
秋月H8用マザーボードと3048の組み合わせでやりました。
BASICやらCやらで書いてもインパクトに欠けるのでアセンブラで書きます。
LEDを点灯させる
高級言語ならピンをHIGHにする記述とWAITの命令を書いて終わりですが、WAITの命令がありません。
まずはLEDを点灯させる事から始めます。次のスクリプトは秋月のウェブページで公開しているAE-H8MB用のLED点灯プログラムを改変したものです。
;----------------------------------
; AE-H8MB用LED点灯プログラム
;----------------------------------
;
;-----CPUの指定-----
.CPU 300HA
;-----アドレス指定/リセットベクトル-----
.SECTION RESET0,DATA,LOCATE=H'000000
.DATA.L INIT ;リセットベクトル
;-----シンボル-----
P5DR .EQU H'FFFFCA ;ポート5データレジスタ
LED1 .BEQU 0,P5DR ;LED1(P5-0)
LED2 .BEQU 1,P5DR ;LED2(P5-1)
;-----I/Oの初期設定-----
INIT: MOV.L #H'FFF10,ER7 ;スタックポインタ設定
MOV.B #H'FF,R0L ;出力設定...
MOV.B R0L,@H'FFFFC8 ;...ポート5に
;-----MAIN-----
MAIN: BSET LED1 ;LED1のビットをセット(ON)
BSET LED2 ;LED2のビットをセット(ON)
AAA: JMP @AAA ;無限ループ
;-----MAIN終了-----
.END
CPUの指定・リセットベクトル・スタックポインタについては#include <stdio.h>みたいなものと思ってください。アセンブラではほぼ必ず最初に書くコードです。
デバッガ用にアレンジする
ただし今回はデバッガ上で実行したいのでコードを変更します。具体的にはリセットベクトルとスタックポインタの記述を削り、ROMアドレスではなくRAMアドレスを指定します。今回使用しているデバッガの場合、ユーザRAM領域はFF030 - FF12Fです。
;----------------------------------
; AE-H8MB用LED点灯プログラム デバッガ用
;----------------------------------
;
;-----CPUの指定-----
.CPU 300HA
;----- アドレス指定-----
.SECTION P,CODE,LOCATE=H'0FF030
;-----シンボル-----
P5DR .EQU H'FFFFCA ;ポート5データレジスタ
LED1 .BEQU 0,P5DR ;LED1(P5-0)
LED2 .BEQU 1,P5DR ;LED2(P5-1)
;-----I/Oの初期設定-----
INIT: MOV.B #H'FF,R0L ;出力設定...
MOV.B R0L,@H'FFFFC8 ;...ポート5に
;-----MAIN-----
MAIN: BSET LED1 ;LED1のビットをセット(ON)
BSET LED2 ;LED2のビットをセット(ON)
AAA: JMP @AAA ;無限ループ
;-----MAIN終了-----
.END
これを付属のA38Hでオブジェクトに吐き出し、L38Hでアブソリュートロードモジュールに吐き出します。ROMに書き込む場合はC38HでモトローラSコードに吐き出しますが、デバッガ用コードではアブソリュートロードモジュールをRAMに転送します。
3048のROMには予めデバッガを入れておきます。書き換え耐久性が悪く、100回しか保証されていない(とはいえ通常の使用環境では1万回耐えると仕様書には書いてある)ので昔はROMにデバッガを入れてRAMにプログラムを転送して実行するのが主流でした。
入れたデバッガ
https://www.vector.co.jp/soft/other/h8/se299983.html
Hterm (Windows 10 非対応?)
https://www.renesas.com/jp/ja/document/swr/1403891?r=721346
vmware上のWindows Meから操作しました。これならHtermだけでなくF-ZTATを用いて3048にプログラムを書き込む事も可能です。
プログラムを転送するにはコマンド(M) > Load を選択して転送する.ABSファイルを指定し、転送後にコマンド(M) > Go を選択するとRAMに転送されたプログラムが実行されます。違うプログラムを入れたくなったら電源を切って入れなおすだけです。
ウェイトを入れてLEDを点滅させる
これだとLEDがついただけで点滅しないので、点滅させるためにウェイトを導入します
ちゃんと1秒の精度を求めたいなら例えばサンプルプログラムのTIMERみたいな割込みを使った方法があるらしいですが、今回はなるべく簡潔にコードを書きたかったので以下の方法を採用しました。
参考動画
https://www.youtube.com/watch?v=h2Vg49zRKfQ
;----------------------------------
; AE-H8MB用Lチカプログラム デバッガ用
;----------------------------------
;
;-----CPUの指定-----
.CPU 300HA
;----- アドレス指定-----
.SECTION P,CODE,LOCATE=H'0FF030
;-----シンボル-----
P5DR .EQU H'FFFFCA ;ポート5データレジスタ
LED1 .BEQU 0,P5DR ;LED1(P5-0)
LED2 .BEQU 1,P5DR ;LED2(P5-1)
;-----I/Oの初期設定-----
INIT: MOV.B #H'FF,R0L ;出力設定...
MOV.B R0L,@H'FFFFC8 ;...ポート5に
;-----MAIN-----
BSET LED2 ;LED2のビットをセット(ON)
MAIN: BNOT LED1 ;LED1のビットを反転
BNOT LED2 ;LED2のビットを反転
JSR @WAIT ;ウェイトサブルーチンの呼び出し
JMP @MAIN ;無限ループ
;-----MAIN終了-----
;-----ウェイト-----
WAIT: MOV.L #D'2000000,ER6 ;約1秒のウェイトサブルーチン
AAA: DEC.L #1,ER6 ;ER6を1デクリメント.いわゆるFORループです
NOP ;なにもしない
BNE AAA ;FORループ
RTS ;メインルーチンへ復帰
;-----ウェイト終了-----
.END
先にLED2を点滅させておくことで1秒間隔でLEDが交互に点滅するプログラムとしました。
Webarchiveのリンク集
トランジスタ技術 1998年9月号 AKI-H8マイコン・ボードにモニタを移植する
http://web.archive.org/web/20020602235642/http://www.cqpub.co.jp/toragi/DLF/TR9809M1.htm
(詳しくはこちらの記事で)
H8/3048用モニタデバッガ(2.0B)を評価版コンパイラでコンパイルする方法
https://elchika.com/article/aeb68fa7-9514-48f2-8a65-d8c6eb46e375/
日立半導体セミナー (旧バージョンの秋月H8モニタプログラムと旧バージョンのHterm)
http://web.archive.org/web/20010617160642/http://www.hitachi.co.jp/Sicd/Japanese/Seminar/top.htm
H8/300H, H8/300H Tiny 用 サンプルプログラム (HEW 300hhew.exe / HEW2 300hhew2.exe)
http://web.archive.org/web/20050208165856/http://www.renesas.com/jpn/support/seminar/sample/index.html
HEW3/HEW4用 300hhew3.exeのアーカイブがどこにもないようです。
自分は保存済なので無くても困らないのですが、欲しい方はRenesasに聞いてみるといいかもしれません(今更始める人もいないと思いますが…)
投稿者の人気記事
-
sanguisorba
さんが
2021/09/17
に
編集
をしました。
(メッセージ: 初版)
-
sanguisorba
さんが
2021/09/17
に
編集
をしました。
Opening
3duilab
2021/09/21 -
sanguisorba
さんが
2021/10/02
に
編集
をしました。
(メッセージ: 誰得情報の追記)
-
sanguisorba
さんが
2021/10/10
に
編集
をしました。
(メッセージ: 追加)
-
sanguisorba
さんが
2021/12/07
に
編集
をしました。
ログインしてコメントを投稿する凄いですアセンブラ、私はとても無理
基本的なところよく知らないとできない