Answers:
基于6502的每个ROM和我见过的兼容代码在RESET例程期间初始化堆栈指针(LDX #$FF
,TXS
)。你也应该。
以后可能会对6502版本(即Apple II中的65C02)进行明确初始化,以及65816 16位变体及更高版本。
我敢打赌,这.S
是原始6502和Commodore 64中的6510上升的随机值,甚至可能是NES中的2A07。
通常任何6502重置例程也从以下开始,通常作为前两个指令:
SEI ;disable interrupts (set interrupt disable flag)
CLD ;turn decimal mode off
如果您观看迈克尔斯蒂尔关于逆向工程6502(http://www.youtube.com/watch?v=fWqBmmPQP40)的演示,您将在42:15左右看到他解释了当RESET发生时会发生什么。作为RESET处理的一部分,6502实际上确实推动了PC和P值。堆栈指针从0x100开始,在推送这三个字节后,由于这个原因,最终在0x1fd。
http://forum.6502.org/viewtopic.php?t=468&sid=ccdf15a560f1520a347ba896ae89767f声称它没有指定。
http://whats.all.this.brouhaha.com/2011/07/07/stack-usage-in-the-apple-1-monitor/也声称没有明确说明,如果你没有说明没关系不关心该页面内堆栈的确切位置。无论它在哪里开始它都会换行,所以只要你不使用超过256个字节的堆栈就可以了。
http://visual6502.org/JSSim/是实际硬件的晶体管级仿真,似乎启动SP设置为FD; 你可以跟踪那里的实际寄存器,并确定这是故意还是仅仅是巧合。
(在这种情况下,“监视器”意味着低级控制程序而不是显示器)