090101から、開発機のカバーをつけるとロムモニタからプログラムをロードす
る際に失敗するようになった。なんとなく理由がわかってきたので解決しまし
た。
問題はここだ。上が8個のLEDユニットで、下がポート4のコネクタ。ポート4で LEDを点灯させるように設定すると、確実に失敗する。

裏からはこんな感じ。ポートからの入力が、74HC04に入って、出力がLEDを点灯 する。ロムモニタではポート4の初期化をしてないので、デフォルトのまま入力 になっている。そうすると74HC04の入力が不定なので、発振してしまっていた 様子。
ロムモニタの最初でポート4を出力に設定して、出力を固定してやってOK。 入力ピンの処理は確実にしないとだめね。

一区切りついたところで、C++化してみることにしました。今迄もコンパイラは g++を使っていたので、libstdc++を使わないまでのC++だったのだけど。一つク ラスに変更してみたところ...libstdc++で45KBもとられた....。H8/3052はロム に512KBあるので、まぁなんとかなる(といってもロード時間がたるくなる)けれ ど、H8/TinyのH8/3664はロムは32KB。余裕で無理だ。

DRO試作一号機のプログラムを、DRO試作二号機のテクノロジで書き直してます。 配線が違っていたりするのだけど、そこはソフトで吸収で。
問題はここだ。上が8個のLEDユニットで、下がポート4のコネクタ。ポート4で LEDを点灯させるように設定すると、確実に失敗する。

裏からはこんな感じ。ポートからの入力が、74HC04に入って、出力がLEDを点灯 する。ロムモニタではポート4の初期化をしてないので、デフォルトのまま入力 になっている。そうすると74HC04の入力が不定なので、発振してしまっていた 様子。
ロムモニタの最初でポート4を出力に設定して、出力を固定してやってOK。 入力ピンの処理は確実にしないとだめね。

一区切りついたところで、C++化してみることにしました。今迄もコンパイラは g++を使っていたので、libstdc++を使わないまでのC++だったのだけど。一つク ラスに変更してみたところ...libstdc++で45KBもとられた....。H8/3052はロム に512KBあるので、まぁなんとかなる(といってもロード時間がたるくなる)けれ ど、H8/TinyのH8/3664はロムは32KB。余裕で無理だ。
[c++]
LOAD off 0x00000000 vaddr 0x0007ff4c paddr 0x0007ff4c align 2**0
filesz 0x0000e808 memsz 0x0000e808 flags rwx
LOAD off 0x0000e808 vaddr 0x000fe200 paddr 0x0008e754 align 2**0
filesz 0x00000874 memsz 0x00001416 flags rw-
LOAD off 0x0000f07c vaddr 0x000fdf10 paddr 0x000fdf10 align 2**0
filesz 0x00000004 memsz 0x00000004 flags rw-
LOAD off 0x0000f080 vaddr 0x000fdf40 paddr 0x000fdf40 align 2**0
filesz 0x000000c4 memsz 0x000000c4 flags r--
-rwxr-xr-x 1 uch staff 190569 Jan 20 10:27 ud01.elf
-rwxr-xr-x 1 uch staff 177138 Jan 20 10:27 ud01.mot
-rw-r--r-- 1 uch staff 112150 Jan 20 10:27 ud01.nm
strip
-rwxr-xr-x 1 uch staff 62144 Jan 20 10:30 ud01.elf
[c]
LOAD off 0x00000000 vaddr 0x0007ff4c paddr 0x0007ff4c align 2**0
filesz 0x00003e28 memsz 0x00003e28 flags r-x
LOAD off 0x00003e28 vaddr 0x000fe200 paddr 0x00083d74 align 2**0
filesz 0x000003ec memsz 0x00000d54 flags rw-
LOAD off 0x00004214 vaddr 0x000fdf10 paddr 0x000fdf10 align 2**0
filesz 0x00000004 memsz 0x00000004 flags rw-
LOAD off 0x00004218 vaddr 0x000fdf40 paddr 0x000fdf40 align 2**0
filesz 0x000000c4 memsz 0x000000c4 flags r--
-rwxr-xr-x 1 uch staff 30393 Jan 20 10:29 ud01.elf
-rwxr-xr-x 1 uch staff 48768 Jan 20 10:29 ud01.mot
-rw-r--r-- 1 uch staff 10518 Jan 20 10:29 ud01.nm
strip
-rwxr-xr-x 1 uch staff 17448 Jan 20 10:31 ud01.elf
やはりカーネル部分はCで、アプリケーションのターゲットによってC++を使えれば
使う程度が落としどころか...。
libstdc++を使わない範囲の同じソースをg++とgccでコンパイルすると
[g++] -rw-r--r-- 1 uch staff 234030 Jan 20 14:32 ud01.dis -rwxr-xr-x 1 uch staff 31452 Jan 20 14:32 ud01.elf -rwxr-xr-x 1 uch staff 50448 Jan 20 14:32 ud01.mot -rw-r--r-- 1 uch staff 11008 Jan 20 14:32 ud01.nm -rwxr-xr-x 1 uch staff 31452 Jan 20 14:32 [gcc] -rw-r--r-- 1 uch staff 233440 Jan 20 14:35 ud01.dis -rwxr-xr-x 1 uch staff 31100 Jan 20 14:35 ud01.elf -rwxr-xr-x 1 uch staff 50394 Jan 20 14:35 ud01.mot -rw-r--r-- 1 uch staff 10685 Jan 20 14:35 ud01.nm -rwxr-xr-x 1 uch staff 31100 Jan 20 14:35 ud01.rom.elf -rwxr-xr-x 1 uch staff 48208 Jan 20 14:35これはそう変わらない。

DRO試作一号機のプログラムを、DRO試作二号機のテクノロジで書き直してます。 配線が違っていたりするのだけど、そこはソフトで吸収で。
