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

Ali*_*ani 1 assembly 6502 atari-2600

请原谅我可能全错的问题。我学习为 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 #$68  ; 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
        
Run Code Online (Sandbox Code Playgroud)

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

当我这样做时,我可以看到我的背景颜色出现。如果我不这样做,那就漆黑一片。我认为我们最终可以用任何内存引用或任何值得该字节数的东西来填充 ROM。

谢谢。

Tho*_*ger 5

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

$FFFE-$FFFF | Break/Interrupt
$FFFC-$FFFD | Reset
$FFFA-$FFFB | Non-Maskable Interrupt
Run Code Online (Sandbox Code Playgroud)

当这些条件之一发生时,处理器从相应的位置读取地址,并开始在该地址执行(除了根据执行此操作的原因推送某些状态之外)。

线条

    org $FFFC
    .word Frame
    .word Frame
Run Code Online (Sandbox Code Playgroud)

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

相反,这些行可能应该是

    org $FFFC
    .word Reset
Run Code Online (Sandbox Code Playgroud)

以便Reset在复位时调用。目前尚不清楚调用中断是否合适Frame

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

    org $FFFA
    .word DummyNmi
    .word Reset
    .word DummyIrq
Run Code Online (Sandbox Code Playgroud)

并添加简单地从中断返回的例程。