在 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
是否合适。
相反,您可能想要为 IRQ
和 NMI
添加虚拟中断例程,直到您想要使用它们:
org $FFFA
.word DummyNmi
.word Reset
.word DummyIrq
并添加仅 return 来自中断的例程。
请原谅我可能全是错误的问题。我正在学习为 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
是否合适。
相反,您可能想要为 IRQ
和 NMI
添加虚拟中断例程,直到您想要使用它们:
org $FFFA
.word DummyNmi
.word Reset
.word DummyIrq
并添加仅 return 来自中断的例程。