Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .inesprg 1
- .ineschr 1
- .inesmap 0
- .inesmir 1
- .org $0000
- AddrLow: .rs 1
- AddrHigh: .rs 1
- nametable: .rs 1
- scroll: .rs 1
- .bank 0
- .org $C000
- ;---constants---
- sprite_RAM = $0200
- controller_RAM = $4016
- speed = $01
- ;---------------
- RESET:
- sei
- cld
- ldx #$40
- stx $4017
- ldx #$FF
- txs
- inx
- stx $2000
- stx $2001
- stx $4010
- vblankwait1: ;wait for first 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: ;ppu is ready after second vblank
- bit $2002
- bpl vblankwait2
- ;---sprites, controllers---
- load_palettes:
- lda $2002
- lda #$3F
- sta $2006
- lda #$00
- sta $2006
- ldx #$00
- load_palettes_loop:
- lda palette,x
- sta $2007
- inx
- cpx #$20
- bne load_palettes_loop
- load_sprites:
- ldx #$00
- load_sprites_loop:
- lda sprite,x
- sta sprite_RAM,x
- inx
- cpx #$20
- bne load_sprites_loop
- lda $2002 ;read PPU to reset latch
- lda #$20
- sta $2006 ; write the high byte of $2000 address (NT 0)
- lda #$00
- sta $2006 ; write the low byte of $2000 address
- lda #low(nametable0)
- sta AddrLow
- lda #high(nametable0)
- sta AddrHigh
- ldy #$00 ;start at background row 0
- ldx #$08
- FillNametablesLoop:
- lda [AddrLow],y ;load data from address
- sta $2007
- iny
- bne FillNametablesLoop
- inc AddrHigh
- dex
- bne FillNametablesLoop
- lda #low(nametable0)
- sta AddrLow
- lda #high(nametable0)
- sta AddrHigh
- ;make PPU render properly next frame
- lda #%10010000 ;enable NMI, sprites from pattern 0, backgrounds from pattern 1
- sta $2000
- lda #%00011110 ;enable sprites, enable background
- sta $2001
- ;(meta sprite code)
- Forever:
- jmp Forever
- NMI:
- inc scroll
- NTSwapCheck: ;swap nametables
- lda scroll
- bne NTSwapCheckDone
- NTSwap:
- lda nametable
- eor #$01
- sta nametable
- NTSwapCheckDone:
- lda #$00
- sta $2003 ;set low byte (00) of ram address
- lda #$02
- sta $4014 ;set high byte (02) of address, start transfer
- ;run other game graphics updating code here
- lda #$00
- sta $2006 ;clean up PPU registers
- sta $2006
- lda scroll
- sta $2005 ;horiz scroll
- lda #$00
- sta $2005 ;no verti scroll
- ;Make PPU render properly next frame
- lda #%10010000 ;enable NMI, sprites from pattern 0, backgrounds from pattern 1
- sta $2000
- lda #%00011110 ;enable sprites, enable background
- sta $2001
- ;(controller code)
- rti
- .bank 1
- .org $E000
- ;(pallete, sprite, and background data)
- .org $FFFA
- .dw NMI
- .dw RESET
- .dw 0
- .bank 2
- .org $0000
- .incbin "background.chr"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement