background colors
This commit is contained in:
parent
e58a6330d9
commit
db9827a299
11
helloppu/consts.inc
Executable file
11
helloppu/consts.inc
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Constants for PPU registers mapped from addresses $2000 to $2007
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
PPU_CTRL = $2000
|
||||||
|
PPU_MASK = $2001
|
||||||
|
PPU_STATUS = $2002
|
||||||
|
OAM_ADDR = $2003
|
||||||
|
OAM_DATA = $2004
|
||||||
|
PPU_SCROLL = $2005
|
||||||
|
PPU_ADDR = $2006
|
||||||
|
PPU_DATA = $2007
|
13
helloppu/header.inc
Normal file
13
helloppu/header.inc
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; The iNES header (contains a total of 16 bytes with the header flags)
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
.segment "HEADER"
|
||||||
|
.byte $4E,$45,$53,$1A ; 4 bytes with the characters 'N','E','S','\n'
|
||||||
|
.byte $02 ; How many 16KB of PRG-ROM we'll use (=32KB)
|
||||||
|
.byte $01 ; How many 8KB of CHR-ROM we'll use (=8KB)
|
||||||
|
.byte %00000000 ; Horz mirroring, no battery, mapper 0
|
||||||
|
.byte %00000000 ; mapper 0, playchoice, NES 2.0
|
||||||
|
.byte $00 ; No PRG-RAM
|
||||||
|
.byte $00 ; NTSC TV format
|
||||||
|
.byte $00 ; Extra flags for TV format and PRG-RAM
|
||||||
|
.byte $00,$00,$00,$00,$00 ; Unused padding to complete 16 bytes of header
|
@ -1,99 +1,62 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
.include "consts.inc"
|
||||||
;; Constants for PPU registers mapped from addresses $2000 to $2007
|
.include "header.inc"
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
.include "reset.inc"
|
||||||
PPU_CTRL = $2000
|
|
||||||
PPU_MASK = $2001
|
|
||||||
PPU_STATUS = $2002
|
|
||||||
OAM_ADDR = $2003
|
|
||||||
OAM_DATA = $2004
|
|
||||||
PPU_SCROLL = $2005
|
|
||||||
PPU_ADDR = $2006
|
|
||||||
PPU_DATA = $2007
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; The iNES header (contains a total of 16 bytes with the flags at $7F00)
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
.segment "HEADER"
|
|
||||||
.byte $4E,$45,$53,$1A ; 4 bytes with the characters 'N','E','S','\n'
|
|
||||||
.byte $02 ; How many 16KB of PRG-ROM we'll use (=32KB)
|
|
||||||
.byte $01 ; How many 8KB of CHR-ROM we'll use (=8KB)
|
|
||||||
.byte %00000000 ; Horz mirroring, no battery, mapper 0
|
|
||||||
.byte %00000000 ; mapper 0, playchoice, NES 2.0
|
|
||||||
.byte $00 ; No PRG-RAM
|
|
||||||
.byte $00 ; NTSC TV format
|
|
||||||
.byte $00 ; Extra flags for TV format and PRG-RAM
|
|
||||||
.byte $00,$00,$00,$00,$00 ; Unused padding to complete 16 bytes of header
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; PRG-ROM code located at $8000
|
;; PRG-ROM code located at $8000
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
.segment "CODE"
|
.segment "CODE"
|
||||||
|
|
||||||
|
.proc LoadPalette
|
||||||
|
ldy #0
|
||||||
|
LoopPalette: ;unnamed label
|
||||||
|
lda PaletteData,y ; lookup byte in ROM
|
||||||
|
sta PPU_DATA ; set the value to send to PPU_DATA,
|
||||||
|
; will auto increment PPU_ADDR
|
||||||
|
|
||||||
|
iny
|
||||||
|
cpy #32
|
||||||
|
bne LoopPalette ; loop to previous label
|
||||||
|
|
||||||
|
rts ;return from subroutine
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Reset handler (called when the NES resets or powers on)
|
;; Reset handler (called when the NES resets or powers on)
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
Reset:
|
Reset:
|
||||||
sei ; Disable all IRQ interrupts
|
INIT_NES
|
||||||
cld ; Clear decimal mode (not supported by the NES)
|
|
||||||
ldx #$FF
|
|
||||||
txs ; Initialize the stack pointer at address $FF
|
|
||||||
|
|
||||||
inx ; Increment X, causing a rolloff from $FF to $00
|
|
||||||
stx PPU_CTRL ; disable NMI
|
|
||||||
stx PPU_MASK ; disable rendering
|
|
||||||
stx $4010 ; disable DMC IRQs
|
|
||||||
|
|
||||||
lda #$40
|
|
||||||
sta $4017 ; disable APU frame IRQ
|
|
||||||
|
|
||||||
Wait1stVBlank:
|
|
||||||
bit PPU_STATUS
|
|
||||||
bpl Wait1stVBlank
|
|
||||||
|
|
||||||
txa ; A = 0
|
|
||||||
|
|
||||||
ClearRAM:
|
|
||||||
sta $0000,x ; Zero RAM addresses from $0000 to $00FF
|
|
||||||
sta $0100,x ; Zero RAM addresses from $0100 to $01FF
|
|
||||||
sta $0200,x ; Zero RAM addresses from $0200 to $02FF
|
|
||||||
sta $0300,x ; Zero RAM addresses from $0300 to $03FF
|
|
||||||
sta $0400,x ; Zero RAM addresses from $0400 to $04FF
|
|
||||||
sta $0500,x ; Zero RAM addresses from $0500 to $05FF
|
|
||||||
sta $0600,x ; Zero RAM addresses from $0600 to $06FF
|
|
||||||
sta $0700,x ; Zero RAM addresses from $0700 to $07FF
|
|
||||||
inx
|
|
||||||
bne ClearRAM
|
|
||||||
|
|
||||||
Wait2ndVBlank:
|
|
||||||
bit PPU_STATUS
|
|
||||||
bpl Wait2ndVBlank ; bit-7 is 1
|
|
||||||
|
|
||||||
Main:
|
Main:
|
||||||
ldx #$3F
|
bit PPU_STATUS ; reset the latch
|
||||||
stx PPU_ADDR
|
ldx #$3F
|
||||||
ldx #$00
|
stx PPU_ADDR
|
||||||
stx PPU_ADDR
|
ldx #$00
|
||||||
|
stx PPU_ADDR
|
||||||
|
|
||||||
lda #$25
|
jsr LoadPalette ;jump to subroutine
|
||||||
sta PPU_DATA
|
|
||||||
|
|
||||||
lda %00011110
|
lda #%00011110
|
||||||
sta PPU_MASK
|
sta PPU_MASK
|
||||||
|
|
||||||
LoopForever:
|
LoopForever:
|
||||||
jmp LoopForever
|
jmp LoopForever
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; NMI interrupt handler
|
;; NMI interrupt handler
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
NMI:
|
NMI:
|
||||||
rti ; Return from interrupt
|
rti ; Return from interrupt
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; IRQ interrupt handler
|
;; IRQ interrupt handler
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
IRQ:
|
IRQ:
|
||||||
rti ; Return from interrupt
|
rti ; Return from interrupt
|
||||||
|
|
||||||
|
PaletteData:
|
||||||
|
.byte $0F,$2A,$0C,$3A, $0F,$2A,$0C,$3A, $0F,$2A,$0C,$3A, $0F,$2A,$0C,$3A ; background
|
||||||
|
.byte $0F,$10,$00,$26, $0F,$10,$00,$26, $0F,$10,$00,$26, $0F,$10,$00,$26 ; sprite
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Vectors with the addresses of the handlers that we always add at $FFFA
|
;; Vectors with the addresses of the handlers that we always add at $FFFA
|
||||||
|
38
helloppu/reset.inc
Normal file
38
helloppu/reset.inc
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
.macro INIT_NES
|
||||||
|
sei ; Disable all IRQ interrupts
|
||||||
|
cld ; Clear decimal mode (not supported by the NES)
|
||||||
|
ldx #$FF
|
||||||
|
txs ; Initialize the stack pointer at address $FF
|
||||||
|
|
||||||
|
inx ; Increment X, causing a rolloff from $FF to $00
|
||||||
|
stx PPU_CTRL ; disable NMI
|
||||||
|
stx PPU_MASK ; disable rendering
|
||||||
|
stx $4010 ; disable DMC IRQs
|
||||||
|
|
||||||
|
lda #$40
|
||||||
|
sta $4017 ; disable APU frame IRQ
|
||||||
|
|
||||||
|
Wait1stVBlank:
|
||||||
|
bit PPU_STATUS
|
||||||
|
bpl Wait1stVBlank
|
||||||
|
|
||||||
|
txa ; A = 0
|
||||||
|
|
||||||
|
ClearRAM:
|
||||||
|
sta $0000,x ; Zero RAM addresses from $0000 to $00FF
|
||||||
|
sta $0100,x ; Zero RAM addresses from $0100 to $01FF
|
||||||
|
sta $0200,x ; Zero RAM addresses from $0200 to $02FF
|
||||||
|
sta $0300,x ; Zero RAM addresses from $0300 to $03FF
|
||||||
|
sta $0400,x ; Zero RAM addresses from $0400 to $04FF
|
||||||
|
sta $0500,x ; Zero RAM addresses from $0500 to $05FF
|
||||||
|
sta $0600,x ; Zero RAM addresses from $0600 to $06FF
|
||||||
|
sta $0700,x ; Zero RAM addresses from $0700 to $07FF
|
||||||
|
inx
|
||||||
|
bne ClearRAM
|
||||||
|
|
||||||
|
Wait2ndVBlank:
|
||||||
|
bit PPU_STATUS
|
||||||
|
bpl Wait2ndVBlank ; bit-7 is 1
|
||||||
|
|
||||||
|
|
||||||
|
.endmacro
|
Loading…
Reference in New Issue
Block a user