久しぶりにuPD78C10ボードをいじっていたら妙なことに気付きました。uPD78C10は0xFF00-0xFFFFに256byteのRAMを内蔵していますが、このボードではさらに0x2000-0x3FFFへ8kbyteのSRAMを外付けしています。ワークエリア、スタックは内蔵RAM領域にアサインして外付けRAMはプログラム領域として丸々使えるようにしたつもりなのですが、外付けRAMの底:0x3F00-に内蔵RAM:0xFF00-と同じデータが読みだされているようです。
このボードのメモリマップは以下のようになっています。ハード的なメモリコンフィグレーションはMODE0=1.MODE1=0としていて外部メモリサイズ16kbyteとしていますがこれはアクセス領域を制限するものではなく、拡張アドレスバスに使用しなかった余りピンを汎用ポートにするための設定であるようで、実際にはメモリ領域全体に外付けROMとRAMのイメージが発生してしまっています。
すると0xE000-0xFFFFに現れる外付けRAMのイメージの後半と内蔵RAMのアドレスがオーバーラップしてしまっています。その場合どちらのメモリがアクセスされるか?は悩むところですがマニュアルを改めてみるとMM(Memory Mapping)レジスタで明示的に内蔵RAMの有効/禁止を設定するようです。
いままでこのレジスタをセットしていなかったのでデフォルトで00H:すなわち内蔵RAMが禁止されて外付けRAMのイメージが使われてた、ということのようです。PUSH/POPやCALL/RETのようなスタック操作も見た目の動きには全く問題がないので気付きませんでした。下位3ビットはROM有りデバイスで外部メモリのサイズを設定するようですが、ROM無しの78C10では"000"で良いとあります。
ROM上のモニタプログラム内でMMレジスタを08Hで初期化を追加。ダンプしてみると内蔵RAM」0xFF00-と外付けRAM:0x3F00-で違うデータが読みだされてきたのでこれで期待する動きになりました