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。
谢谢。
在其内存映射的末尾,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)
并添加简单地从中断返回的例程。