Загрузка # $ FF в A и сохранение по адресу $ 0000 не работает - PullRequest
0 голосов
/ 26 февраля 2019

Я изучаю ассемблер для 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, как я и запрограммировал.

1 Ответ

0 голосов
/ 26 февраля 2019

В вашем коде отсутствует куча информации, необходимой для того, чтобы эмулятор знал, что это за ПЗУ, и для 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   
...