もう明らかなんですが、先頭に置いた命令が間違っていて「LSPD」は間接アドレッシングで引数のアドレスに格納されているデータをスタックポインタにセットする動作でした。
メモリアドレスFF00はバックアップされていないSRAM領域なので電源ONでのデータは不定です。ただ、たまたまその値がFFになることが多く、その場合スタックポインタの初期値がFFFFとなり辛うじてFFFEから正常にスタックされていたというわけです。
もし不定の値がやはりたまたまROM領域を示すアドレス値になっていたら、サブルーチンからリタンするとき復帰アドレスが取り出せず暴走するのはもっともなことです
というわけで当たり前ですがイミディエイト16ビット転送命令「LXI」でリテラルのFFF0をSPにセットするよう修正。
これでちゃんとスタックもFFEFから積まれているのがわかります。
電源ON起動でフリーズすることもなくなりました
バージョンが0.05と2個上がっていますが、モニタコマンドのメモリEDITで、メモリ内容を変更しない、の意でエンターだけ押したとき、エンターの0x0dをメモリにセットしてしまうバグが見つかったのでそれをあとから修正しています。