上記アドレス$D6F7からパスワード入力ルーチンが始まっており、Iボタンを押した瞬間にパスワード文字数をチェックしたり、カーソル位置を元に文字コードを生成するといった主要の処理を行っていました。
なお、この段階ではサブルーチンコールJSR(20 xx xx)などをNOP(EA)で破壊し、実際にゲームを実行して挙動を確認するといった、かなり豪快な方法で各処理内容を調査しています。
stackA[stackApos++]=A;
Y=8;
A = A << 1;
if(A>0xFF){ C=1; A=A&0xFF; }else{C=0;}
stackA[stackApos++]=A;
スタック操作(PHA)は配列stackA[]と変数stackAposを用いてLIFOの流れを模倣。
ASL Aを実行すると8ビットのAレジスタを左1ビットシフトし、溢れたビットがキャリーフラグ(C)にセットされるので、これをムリヤリ条件分岐で再現~…というメチャクチャすぎる力技を採用。
その副産物で「環境依存せず、あらゆる言語に移植できた」ので、ケガの功名というか、まあ良かった(のかなぁ???)
--FANTASY ZONE 2 MONITOR
while (true) do
local zz = memory.readbyte(0x0132);
local yy = memory.readbyte(0x0133);
local xx = memory.readbyte(0x0134);
gui.text( 0,32,""..(xx-xx%16)/16);
gui.text( 7,32,""..xx%16);
gui.text(14,32,""..(yy-yy%16)/16);
gui.text(21,32,""..yy%16);
gui.text(28,32,""..(zz-zz%16)/16);
gui.text(35,32,""..zz%16);
gui.text(42,32,"0");
FCEU.frameadvance();
end;