在 Atari 2600 代码中如何填充 ROM 的末尾有关系吗?

Does it matter how you fill the end of ROM in Atari 2600 code?

请原谅我可能全是错误的问题。我正在学习为 Atari 2600 制作游戏是为了好玩。

所以这是我的代码:

; Welcome 

    processor 6502

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; include your macros 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    include "vcs.h"
    include "macro.h"
        

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; variable declaration
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; cleaning memor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    seg code 
    org $F000
Reset:
    CLEAN_START

    lda #  ; load color into A reg
    sta COLUBK  ; store A to bg color address ....> #09 

    lda #22
    sta COLUPF
        
        
        
        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; frame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Frame:
    ldx #2
    stx VSYNC
    stx VBLANK
  
; lets do a loop for VSYNC 

    ldy #3 
vsync_loop:
    sty WSYNC 
    dey 
    bne vsync_loop
    sty VSYNC
        

    REPEAT 37
        sta WSYNC
    REPEND 
    lda #0 
    sta VBLANK
        
    ; nada in visible lines for now
    REPEAT 192
        sta WSYNC
    REPEND
        
    ; overscan - 30 lines
    lda #2
    sta VBLANK
    REPEAT 30       
        sta WSYNC
    REPEND 
    lda #0 
    sta VBLANK
        
        
    
        
    jmp Frame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; filling the ROM size
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    org $FFFC
    .word Frame
    .word Frame
        

不完整。你能解释一下为什么我应该用“重置”改变最后的两个“框架”吗?

当我这样做时,我可以看到我的背景颜色出现了。如果我不这样做,它就会变黑。我想我们可以在最后用任何内存引用或任何值得那个字节数的东西填充 ROM。

谢谢。

在其内存映射的末尾,6502(和变体)有一个向量 table,地址为 $FFFA-$FFFF:

$FFFE-$FFFF | Break/Interrupt
$FFFC-$FFFD | Reset
$FFFA-$FFFB | Non-Maskable Interrupt

当其中一种情况发生时,处理器从相应位置读取地址,并开始在该地址执行(除了根据这样做的原因推送某些状态)。

线条

    org $FFFC
    .word Frame
    .word Frame

意思是复位和中断向量都是Frame。但是,在重置时,您需要 运行 初始化代码,而不是 运行 下一帧代码。

相反,这些行应该是

    org $FFFC
    .word Reset

以便在重置时调用 Reset。不清楚在中断时调用 Frame 是否合适。

相反,您可能想要为 IRQNMI 添加虚拟中断例程,直到您想要使用它们:

    org $FFFA
    .word DummyNmi
    .word Reset
    .word DummyIrq

并添加仅 return 来自中断的例程。