first
This commit is contained in:
76
background/background.asm
Normal file
76
background/background.asm
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
.inesprg 1 ; 1x 16KB PRG code
|
||||||
|
.ineschr 1 ; 1x 8KB CHR data
|
||||||
|
.inesmap 0 ; mapper 0 = NROM, no bank swapping
|
||||||
|
.inesmir 1 ; background mirroring
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
.bank 0
|
||||||
|
.org $C000
|
||||||
|
RESET:
|
||||||
|
SEI ; disable IRQs
|
||||||
|
CLD ; disable decimal mode
|
||||||
|
LDX #$40
|
||||||
|
STX $4017 ; disable APU frame IRQ
|
||||||
|
LDX #$FF
|
||||||
|
TXS ; Set up stack
|
||||||
|
INX ; now X = 0
|
||||||
|
STX $2000 ; disable NMI
|
||||||
|
STX $2001 ; disable rendering
|
||||||
|
STX $4010 ; disable DMC IRQs
|
||||||
|
|
||||||
|
vblankwait1: ; First wait for vblank to make sure PPU is ready
|
||||||
|
BIT $2002
|
||||||
|
BPL vblankwait1
|
||||||
|
|
||||||
|
clrmem:
|
||||||
|
LDA #$00
|
||||||
|
STA $0000, x
|
||||||
|
STA $0100, x
|
||||||
|
STA $0200, x
|
||||||
|
STA $0400, x
|
||||||
|
STA $0500, x
|
||||||
|
STA $0600, x
|
||||||
|
STA $0700, x
|
||||||
|
LDA #$FE
|
||||||
|
STA $0300, x
|
||||||
|
INX
|
||||||
|
BNE clrmem
|
||||||
|
|
||||||
|
vblankwait2: ; Second wait for vblank, PPU is ready after this
|
||||||
|
BIT $2002
|
||||||
|
BPL vblankwait2
|
||||||
|
|
||||||
|
|
||||||
|
LDA #%11111111 ;intensify blues
|
||||||
|
STA $2001
|
||||||
|
|
||||||
|
Forever:
|
||||||
|
JMP Forever ;jump back to Forever, infinite loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NMI:
|
||||||
|
RTI
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.bank 1
|
||||||
|
.org $FFFA ;first of the three vectors starts here
|
||||||
|
.dw NMI ;when an NMI happens (once per frame if enabled) the
|
||||||
|
;processor will jump to the label NMI:
|
||||||
|
.dw RESET ;when the processor first turns on or is reset, it will jump
|
||||||
|
;to the label RESET:
|
||||||
|
.dw 0 ;external interrupt IRQ is not used in this tutorial
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
.bank 2
|
||||||
|
.org $0000
|
||||||
|
.incbin "mario.chr" ;includes 8KB graphics file from SMB1
|
||||||
2
background/background.bat
Normal file
2
background/background.bat
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
NESASM3 background.asm
|
||||||
|
pause
|
||||||
7
background/background.fns
Normal file
7
background/background.fns
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
; background.asm
|
||||||
|
Forever = $C042
|
||||||
|
vblankwait1 = $C014
|
||||||
|
vblankwait2 = $C038
|
||||||
|
clrmem = $C019
|
||||||
|
RESET = $C000
|
||||||
|
NMI = $C045
|
||||||
BIN
background/background.nes
Normal file
BIN
background/background.nes
Normal file
Binary file not shown.
92
palette/palette.asm
Normal file
92
palette/palette.asm
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
.inesprg 1 ; 1x 16KB PRG code
|
||||||
|
.ineschr 1 ; 1x 8KB CHR data
|
||||||
|
.inesmap 0 ; mapper 0 = NROM, no bank swapping
|
||||||
|
.inesmir 1 ; background mirroring
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
.bank 0
|
||||||
|
.org $C000
|
||||||
|
RESET:
|
||||||
|
SEI ; disable IRQs
|
||||||
|
CLD ; disable decimal mode
|
||||||
|
LDX #$40
|
||||||
|
STX $4017 ; disable APU frame IRQ
|
||||||
|
LDX #$FF
|
||||||
|
TXS ; Set up stack
|
||||||
|
INX ; now X = 0
|
||||||
|
STX $2000 ; disable NMI
|
||||||
|
STX $2001 ; disable rendering
|
||||||
|
STX $4010 ; disable DMC IRQs
|
||||||
|
|
||||||
|
vblankwait1: ; First wait for vblank to make sure PPU is ready
|
||||||
|
BIT $2002
|
||||||
|
BPL vblankwait1
|
||||||
|
|
||||||
|
clrmem:
|
||||||
|
LDA #$00
|
||||||
|
STA $0000, x
|
||||||
|
STA $0100, x
|
||||||
|
STA $0200, x
|
||||||
|
STA $0400, x
|
||||||
|
STA $0500, x
|
||||||
|
STA $0600, x
|
||||||
|
STA $0700, x
|
||||||
|
LDA #$FE
|
||||||
|
STA $0300, x
|
||||||
|
INX
|
||||||
|
BNE clrmem
|
||||||
|
|
||||||
|
vblankwait2: ; Second wait for vblank, PPU is ready after this
|
||||||
|
BIT $2002
|
||||||
|
BPL vblankwait2
|
||||||
|
|
||||||
|
; get ready to write to the palettes in the PPU
|
||||||
|
LDA $2002 ; read PPU status to reset the high/low byte
|
||||||
|
LDA #$3F ; load the high byte of the addres #3F10
|
||||||
|
STA $2006 ; store that high byte
|
||||||
|
LDA #$10 ; load the low byte of the addres #3F10
|
||||||
|
STA $2006 ; store that low byte
|
||||||
|
|
||||||
|
; a succinct way of defining colors for pushing into the palettes
|
||||||
|
PaletteData:
|
||||||
|
.db $0F,$31,$32,$33,$0F,$35,$36,$37,$0F,$39,$3A,$3B,$0F,$3D,$3E,$0F
|
||||||
|
.db $0F,$1C,$15,$14,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C
|
||||||
|
; using a loop, load the values stored in PaletteData into the background and sprite palettes
|
||||||
|
LDX #$00
|
||||||
|
LoadPalettesLoop:
|
||||||
|
LDA PaletteData, x
|
||||||
|
STA $2007 ; store the value of the Accumulator in the next memory slot in the PPU (referred to by this 'port' located at $2007)
|
||||||
|
INX ; incrementing
|
||||||
|
CPX #$20 ; is X == 32?
|
||||||
|
BNE LoadPalettesLoop
|
||||||
|
|
||||||
|
Forever:
|
||||||
|
JMP Forever ;jump back to Forever, infinite loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NMI:
|
||||||
|
RTI
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.bank 1
|
||||||
|
.org $FFFA ;first of the three vectors starts here
|
||||||
|
.dw NMI ;when an NMI happens (once per frame if enabled) the
|
||||||
|
;processor will jump to the label NMI:
|
||||||
|
.dw RESET ;when the processor first turns on or is reset, it will jump
|
||||||
|
;to the label RESET:
|
||||||
|
.dw 0 ;external interrupt IRQ is not used in this tutorial
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
.bank 2
|
||||||
|
.org $0000
|
||||||
|
.incbin "mario.chr" ;includes 8KB graphics file from SMB1
|
||||||
9
palette/palette.fns
Normal file
9
palette/palette.fns
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
; palette.asm
|
||||||
|
Forever = $C077
|
||||||
|
LoadPalettesLoop = $C06C
|
||||||
|
PaletteData = $C04A
|
||||||
|
vblankwait1 = $C014
|
||||||
|
vblankwait2 = $C038
|
||||||
|
clrmem = $C019
|
||||||
|
RESET = $C000
|
||||||
|
NMI = $C07A
|
||||||
BIN
palette/palette.nes
Normal file
BIN
palette/palette.nes
Normal file
Binary file not shown.
Reference in New Issue
Block a user