3

我正在为 NES 学习汇编,我编写了这个程序:

    .org $8000 ; set code to start of rom
Start:         ; make a label called start
    lda #$ff   ; set acc to 0xff
    sta $0000  ; store address 0x0000 to acc which is 0xff
    jmp Start  ; jump to label start

我用NESASM3编译程序,它编译成功,然后在我的模拟器中运行它,当我进入模拟器中的内存查看器时,看看地址$ 0000,它是01,而不是FF,就像我编程的那样。

4

1 回答 1

7

您的代码缺少一堆信息,这些信息对于模拟器了解这是什么类型的 ROM 以及 NES 了解它应该从哪里开始执行所必需的。

一个工作示例可能看起来像这样(在 FCEU 中测试):

   ; ROM header
   .inesprg    2        ; Two 16k PRG-ROM banks
   .ineschr    1        ; One 8k CHR-ROM bank
   .inesmir    1        ; Vertical mirroring
   .inesmap    0        ; Mapper 0 (none)

   .bank 0
   .org $8000 ; set code to start of rom
Start:         ; make a label called start
    lda #$ff   ; set acc to 0xff
    sta $0000  ; store address 0x0000 to acc which is 0xff
    jmp Start  ; jump to label start

; Dummy interrupt handlers 
nmi: 
irq:
    rti

; Specify reset and interrupt vectors

    .bank 3       ; The .bank directive uses 8kB granularity, so bank 3
                  ; is final 8kB chunk of our 32kB PRG-ROM.
 .org  $fffa
    .dw   nmi
    .dw   Start
    .dw   irq   
于 2019-02-26T12:44:47.017 回答