AKI-H8のコツ -SRAM増設編-



目次(すべてこの1ページ内です)
  • SRAMを接続
  • モニタを手に入れる
  • 動作試験

SRAMを接続

4Mbit(=512kbyte)のSRAMを増設する。日立の HM628512BLP-5 で、アキバの若松通商で3000円。 接続はこの回路図を使わせていただきました。バスを繋ぐだけの簡単な回路です。

H8 は 16bit のデータバスを持つが、SRAM との接続は上位データバス D15〜D8 を使う。これは後述のモニタプログラムで設定している。したがって、SRAMのデータバス D0〜D7 には、H8のD8〜D15 が接続されている。なお、HWR信号は H8 が上位データバス D15〜D8 を使って外部アドレスへライトする時にアクティブになる。


モニタを手に入れる

必要なもの(3つ)

MS-DOS版(C/C++コンパイラVer. 3.0) H8/300H用 モニタプログラム
日立のサイトで配布しているモニタ。これをカスタマイズして使う。なお、モニタのバージョンは Ver. 2.2A 。バージョンが違う場合は、カスタマイズの方法が変わるので注意。
モニタ生成用の必要ファイル
monitor.src
上記の「モニタ生成用の必要ファイル」の中に monitor.src が用意されているが、ハードウェア構成が異なるので、このファイルに置き換える。これをしないと、増設SRAMへ読み書きしても、チグハグな値が読み書きされてしまう。

カスタマイズ

カスタマイズはこちらに書かれている方法で行う。

300hmoni.zip を 300hmoniディレクトリに展開。monitor.src を上書きでコピーする。
300hmoniディレクトリの下に bat と obj という名前のディレクトリを作り、bat 内に monitor.sub, as-300hmoni.bat, lnk-300hmoni.bat をコピーする。

秋月アセンブラの A38h.exe、C38h.exe、L38h.exe の3つのあるディレクトリへパスを通し、2つのバッチファイル as-300hmoni.bat, lnk-300hmoni.bat を bat ディレクトリから実行すると、bat内に monitor.mot ができている。

>set path=c:\h8;%PATH% (アセンブラへパスを通す)
>cd 300hmoni\bat
>as-300hmoni
>lnk-300hmoni monitor.sub

最終的にはこうなる


動作試験

できた monitor.mot を H8 に焼きこむ。
TeraTerm を起動し、シリアルポートの設定を行う。

        Port : COM1
   Baud rate : 38400
        Data : 8bit
      Parity : none
        Stop : 1bit
Flow control : Xon/Xoff

マザーボードの電源を入れて



 H8/3048 Series Advanced Mode Monitor Ver. 2.2A
 Copyright (C) Hitachi, Ltd. 1995
 Copyright (C) Hitachi Microcomputer System, Ltd. 1995

:

と表示されればオッケー。文字化けする場合は、上記のシリアルポートの設定があやしい。

"?"コマンドで、コマンドの説明とアドレス空間が表示される。


: ?
 Monitor Vector 00000 - 000FF
 Monitor ROM    00130 - 05ACF
 Monitor RAM    FEF10 - FF08B
 User    Vector 00000 - 000FF

 .  : Changes contents of H8/300H registers.
 A  : Assembles source sentences from the keyboard.
 B  : Sets or displays or clear breakpoint(s).
 D  : Displays memory contents.
 DA : Disassembles memory contents.
 F  : Fills specified memory range with data.
 G  : Executes real-time emulation.
 H8 : Displays contents of H8/3042 peripheral registers.
 L  : Loads user program into memory from host system.
 M  : Changes memory contents.
 R  : Displays contents of H8/300H registers.
 S  : Executes single emulation(s) and displays instruction and registers.
:

H8/3048内臓の 4kbyte の RAM は H'FEF10〜H'FF08B に割り当てられていることが分かる。
RAM なので自由に読み書きできるので、H'FEF10〜H'FEF30 を H'FF で埋めてみて、正しく書き込まれているかを確認してみる。


: d fef10
                    <  D  A  T  A  >                     < ASCII CODE >
  FEF10   4D 28 C4 C1 4B 82 BF F1  80 04 00 01 06 A8 1E 19   "M(..K..........."
  FEF20   1A 24 06 05 CF CA 80 1A  06 7E 42 02 B5 FC 06 0D   ".$.......~B....."
  FEF30   20 48 09 76 06 02 07 F1  00 01 06 AF 84 48 69 82   " H.v.........Hi."
  FEF40   06 BB 00 85 56 17 00 00  77 7B 82 00 64 20 66 65   "....V...w{..d fe"
  FEF50   66 31 30 0D 00 05 50 39  02 04 ED 6C 04 2A 21 39   "f10...P9...l.*!9"
  FEF60   D0 07 23 4A E2 30 24 84  8D 2D 0E C0 0D 81 60 46   "..#J.0$..-....`F"
  FEF70   00 01 A6 41 08 08 5C F5  08 98 CA 11 00 09 7E 68   "...A..\.......~h"
  FEF80   8E 46 A5 00 EE AA 51 1E  83 96 07 88 0D 3D 00 A8   ".F....Q......=.."
  FEF90   80 00 F1 D1 24 00 27 A2  06 A2 AD A5 D0 D8 84 DE   "....$.'........."
  FEFA0   E7 1B 00 08 A8 75 C8 08  CF 3D 21 82 0D CE 80 8E   ".....u...=!....."
  FEFB0   80 00 11 7C 03 10 90 EF  04 00 D4 AC 00 20 9C DB   "...|......... .."
  FEFC0   E6 63 01 11 A2 7D 01 12  B7 33 20 44 0D 95 00 03   ".c...}...3 D...."
  FEFD0   53 00 A4 21 02 11 06 8A  00 01 0F C4 04 00 78 12   "S..!..........x."
  FEFE0   F8 8A AC 1F 95 4E E8 00  7E 0B 40 2A 64 20 66 65   ".....N..~.@*d fe"
  FEFF0   66 31 30 0D 50 11 41 05  10 40 0B 58 20 52 14 F1   "f10.P.A..@.X R.."
  FF000   BA F6 50 40 92 FE 08 20  FF 5B 40 00 44 00 00 00   "..P@... .[@.D..."
: f fef10 fef30 ff
: d fef10
                    <  D  A  T  A  >                     < ASCII CODE >
  FEF10   4D FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "M..............."
  FEF20   FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  FEF30   FF 48 09 76 06 02 07 F1  00 01 06 AF 84 48 69 82   ".H.v.........Hi."
  FEF40   06 BB 00 85 56 17 00 00  77 7B 82 00 64 20 66 65   "....V...w{..d fe"
  FEF50   66 31 30 0D 00 05 50 39  02 04 ED 6C 04 2A 21 39   "f10...P9...l.*!9"
  FEF60   D0 07 23 4A E2 30 24 84  8D 2D 0E C0 0D 81 60 46   "..#J.0$..-....`F"
  FEF70   00 01 A6 41 08 08 5C F5  08 98 CA 11 00 09 7E 68   "...A..\.......~h"
  FEF80   8E 46 A5 00 EE AA 51 1E  83 96 07 88 66 20 66 65   ".F....Q.....f fe"
  FEF90   66 31 30 20 66 65 66 33  30 20 66 66 0D D8 84 DE   "f10 fef30 ff...."
  FEFA0   E7 1B 00 08 A8 75 C8 08  CF 3D 21 82 0D CE 80 8E   ".....u...=!....."
  FEFB0   80 00 11 7C 03 10 90 EF  04 00 D4 AC 00 20 9C DB   "...|......... .."
  FEFC0   E6 63 01 11 A2 7D 01 12  B7 33 20 44 0D 95 00 03   ".c...}...3 D...."
  FEFD0   53 00 A4 21 02 11 06 8A  00 01 0F C4 04 00 78 12   "S..!..........x."
  FEFE0   F8 8A AC 1F 95 4E E8 00  7E 0B 40 2A 64 20 66 65   ".....N..~.@*d fe"
  FEFF0   66 31 30 0D 66 65 66 33  30 20 66 66 0D 52 14 F1   "f10.fef30 ff.R.."
  FF000   BA F6 50 40 92 FE 08 20  FF 5B 40 00 44 00 00 00   "..P@... .[@.D..."
:

正しく書き込まれていることがわかる。

電源を切り、マイコンボード AE-3048 上の CN5 の1番と2番をショートさせ、モード6とする。ジャンパピン等を使うと良い。ちなみに、何もしないときはモード7。
電源を入れてモニタで "?" コマンドを実行すると、アドレス空間が変わっている。モード7が 1Mbyte のアドレス空間なのに対し、モード6は 16Mbyte のアドレス空間を持っているからだ。


: ?
 Monitor Vector 000000 - 0000FF
 Monitor ROM    000130 - 005ACF
 Monitor RAM    FFEF10 - FFF08B
 User    Vector 200000 - 2000FF

    (省略)


増設した SRAM は、モニタプログラムで H'200000〜H'27FFFF に割り当ててある。この範囲に値を書き込んでみて、正しく読み書きできるかを確認する。


: d 200000
                    <  D  A  T  A  >                     < ASCII CODE >
  200000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  200090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000A0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000B0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000C0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000D0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000E0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
  2000F0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   "................"
: f 200000 200100 ff
: d 200000
                    <  D  A  T  A  >                     < ASCII CODE >
  200000  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200010  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200020  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200030  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200040  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200050  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200060  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200070  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200080  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  200090  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000A0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000B0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000C0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000D0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000E0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2000F0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"


: d 270000
                    <  D  A  T  A  >                     < ASCII CODE >
  270000  77 FF FF 7B F7 A9 7F FA  DF DD DF BB 1F D0 76 F3   "w..{..........v."
  270010  AE EF 59 BF 4A F8 DB FF  F7 6B 7E F5 FD 90 7B F7   "..Y.J....k~...{."
  270020  BB B4 2A FE F7 F7 36 EF  73 7F DE DF 6D 6F EB 57   "..*...6.s...mo.W"
  270030  F4 D5 FD BB ED 4D 93 34  FF FE EF B9 F9 E6 1F 1D   ".....M.4........"
  270040  61 9D FB 7E 1B DE 0D AA  AD BC 5F 6E DE 8E E7 35   "a..~......_n...5"
  270050  EE 6F BB 9B D3 BF 79 97  6F 23 7F FB ED F9 7C 36   ".o....y.o#....|6"
  270060  DA AB E5 9E F5 EE 76 AD  96 5B BB 6E ED 36 95 EF   "......v..[.n.6.."
  270070  B4 74 5F 73 AE C6 BB 3A  BD 7C D4 DF B3 59 FB EE   ".t_s...:.|...Y.."
  270080  80 A5 34 AC 12 02 54 00  46 E9 00 50 0D 02 E1 40   "..4...T.F..P...@"
  270090  0F 64 AD 04 40 11 84 02  42 00 36 41 18 C0 4D 20   ".d..@...B.6A..M "
  2700A0  54 2E 1A 25 26 00 24 4A  A6 C2 40 00 30 03 49 90   "T..%&.$J..@.0.I."
  2700B0  0A 57 46 48 31 90 01 0B  A3 10 81 11 01 54 58 16   ".WFH1........TX."
  2700C0  40 44 99 4A 20 00 10 81  56 17 8E A1 59 21 83 24   "@D.J ...V...Y!.$"
  2700D0  A4 30 0C 20 08 86 01 52  84 09 C0 9A 84 04 90 FB   ".0. ...R........"
  2700E0  62 3A AB 81 C1 60 19 92  14 44 01 01 DE 4A 12 82   "b:...`...D...J.."
  2700F0  22 F9 AA 14 34 0A 29 01  09 3A 7B 04 A3 16 45 C8   ""...4.)..:{...E."
: f 270000 271000 ff
: d 270000
                    <  D  A  T  A  >                     < ASCII CODE >
  270000  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270010  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270020  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270030  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270040  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270050  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270060  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270070  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270080  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  270090  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700A0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700B0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700C0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700D0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700E0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"
  2700F0  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF   "................"

書き込んだ値が、正しく読み込めているのが分かる。
ここでは H'FF を書き込んでみたが、H'AA と H'55 を交互に書き込んでみると良い。

H'55 = B'01010101
H'AA = B'10101010
ってことで、ビットのショートなんかを発見するテクニック。

TOP