This commit is contained in:
2023-02-20 18:42:26 +01:00
commit 1a6dfc60b0
8 changed files with 186 additions and 0 deletions

76
background/background.asm Normal file
View 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

View File

@@ -0,0 +1,2 @@
NESASM3 background.asm
pause

View 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

Binary file not shown.

BIN
mario.chr Normal file

Binary file not shown.

92
palette/palette.asm Normal file
View 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
View 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

Binary file not shown.