Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ----------------------------------------------------
- ; galleryNES - version 0.1
- ; Copyright 2009 Don Miller
- ; For more information, visit: http://www.no-carrier.com
- ; This program is free software: you can redistribute it and/or modify
- ; it under the terms of the GNU General Public License as published by
- ; the Free Software Foundation, either version 3 of the License, or
- ; (at your option) any later version.
- ; This program is distributed in the hope that it will be useful,
- ; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ; GNU General Public License for more details.
- ; You should have received a copy of the GNU General Public License
- ; along with this program. If not, see <http://www.gnu.org/licenses/>.
- ; ----------------------------------------------------
- .enum $0000 ;;start variables at ram location 0
- NewButtons .dsb 1
- OldButtons .dsb 1
- justpressed .dsb 1
- ScreenNumber .dsb 1
- OldScreen .dsb 1
- palettenumber .dsb 1
- animationtoggle .dsb 1
- nametableflag .dsb 1
- framenumber .dsb 1
- framecounter .dsb 1
- .ende
- ; ----------------------------------------------------
- .ORG $7ff0
- Header: ; 16 byte .NES header (iNES format)
- .DB "NES", $1a
- .DB $02 ; size of PRG ROM in 16kb units
- .DB $01 ; size of CHR ROM in 8kb units
- .DB #%00000000 ; mapper 0
- .DB #%00000000 ; mapper 0
- .DB $00
- .DB $00
- .DB $00
- .DB $00
- .DB $00
- .DB $00
- .DB $00
- .DB $00
- .ORG $8000
- ; ----------------------------------------------------
- Reset: ; reset routine
- SEI
- CLD
- LDX #$00
- STX $2000
- STX $2001
- DEX
- TXS
- LDX #0
- TXA
- ClearMemory:
- STA 0, X
- STA $100, X
- STA $200, X
- STA $300, X
- STA $400, X
- STA $500, X
- STA $600, X
- STA $700, X
- STA $800, X
- STA $900, X
- INX
- BNE ClearMemory
- ; ----------------------------------------------------
- LDA #$00 ; setting up variables
- STA ScreenNumber
- STA palettenumber
- STA animationtoggle
- STA nametableflag
- LDA #$08
- STA framecounter
- ; ----------------------------------------------------
- LDX #$02 ; warm up
- WarmUp:
- BIT $2002
- BPL WarmUp
- DEX
- BNE WarmUp
- LDA #$3F
- STA $2006
- LDA #$00
- STA $2006
- TAX
- LoadPal: ; load palette
- LDA palette, x
- STA $2007
- INX
- CPX #$10
- BNE LoadPal
- LDA #$20
- STA $2006
- LDA #$00
- STA $2006
- LDY #$04 ; clear nametables
- ClearName:
- LDX #$00
- LDA #$00
- PPULoop:
- STA $2007
- DEX
- BNE PPULoop
- DEY
- BNE ClearName
- ; ----------------------------------------------------
- LDA #<pic0 ; load low byte of first picture
- STA $10
- LDA #>pic0 ; load high byte of first picture
- STA $11
- JSR DrawScreen ; draw first nametable
- LDA #<pica ; load low byte of second picture
- STA $10
- LDA #>pica ; load high byte of second picture
- STA $11
- JSR DrawScreen2 ; draw second nametable
- JSR Vblank ; turn on screen
- ; ----------------------------------------------------
- InfLoop: ; loop forever, program now controlled by NMI routine
- JMP InfLoop
- ; ----------------------------------------------------
- LoadNewPalette:
- LDX palettenumber ; load palette lookup value
- LDY #$00
- LDA #$3F
- STA $2006
- LDA #$00
- STA $2006
- LoadNewPal: ; load palette
- LDA palette, x
- STA $2007
- INX
- INY
- CPY #$10
- BNE LoadNewPal
- RTS
- ; ----------------------------------------------------
- DrawScreen:
- LDA #$20 ; set to beginning of first nametable
- STA $2006
- LDA #$00
- STA $2006
- LDY #$00
- LDX #$04
- NameLoop: ; loop to draw entire nametable
- LDA ($10),y
- STA $2007
- INY
- BNE NameLoop
- INC $11
- DEX
- BNE NameLoop
- RTS
- ; ----------------------------------------------------
- DrawScreen2:
- LDA #$2C ; set to beginning of first nametable
- STA $2006
- LDA #$00
- STA $2006
- LDY #$00
- LDX #$04
- NameLoop2: ; loop to draw entire nametable
- LDA ($10),y
- STA $2007
- INY
- BNE NameLoop2
- INC $11
- DEX
- BNE NameLoop2
- RTS
- ; ----------------------------------------------------
- Vblank: ; turn on the screen and start the party
- BIT $2002
- BPL Vblank
- LDX #$00
- STX $2005
- STX $2005
- LDA #%10001010
- STA $2000
- LDA #%00001110
- STA $2001
- RTS
- ; ----------------------------------------------------
- LoadScreen:
- LDA #%00000000 ; disable NMI's and screen display
- STA $2000
- LDA #%00000000
- STA $2001
- LDA ScreenNumber
- Test0:
- CMP #0 ; compare ScreenNumber to find out which picture / palette to load
- BNE Test1
- LDA #<pic0 ; load low byte of picture
- STA $10
- LDA #>pic0 ; load high byte of picture
- STA $11
- LDA #$00
- STA palettenumber ; set palette lookup location
- RTS
- Test1:
- CMP #1
- BNE Test2
- LDA #<pic1
- STA $10
- LDA #>pic1
- STA $11
- LDA #$10
- STA palettenumber
- RTS
- Test2:
- CMP #2
- BNE Test3
- LDA #<pic2
- STA $10
- LDA #>pic2
- STA $11
- LDA #$20
- STA palettenumber
- RTS
- Test3:
- CMP #3
- BNE Test4
- LDA #<pic3
- STA $10
- LDA #>pic3
- STA $11
- LDA #$30
- STA palettenumber
- RTS
- Test4:
- CMP #4
- BNE Test5
- LDA #<pic4
- STA $10
- LDA #>pic4
- STA $11
- LDA #$40
- STA palettenumber
- RTS
- Test5:
- CMP #5
- BNE Test6
- LDA #<pic5
- STA $10
- LDA #>pic5
- STA $11
- LDA #$50
- STA palettenumber
- RTS
- Test6:
- CMP #6
- BNE Test7
- LDA #<pic6
- STA $10
- LDA #>pic6
- STA $11
- LDA #$60
- STA palettenumber
- RTS
- Test7:
- CMP #7
- BNE Test8
- LDA #<pic7
- STA $10
- LDA #>pic7
- STA $11
- LDA #$70
- STA palettenumber
- RTS
- Test8:
- CMP #8
- BNE Test9
- LDA #<pic8
- STA $10
- LDA #>pic8
- STA $11
- LDA #$80
- STA palettenumber
- RTS
- Test9:
- LDA #<pic9
- STA $10
- LDA #>pic9
- STA $11
- LDA #$90
- STA palettenumber
- RTS
- ; ----------------------------------------------------
- animation:
- DEC framecounter
- BNE noanimation
- LDA nametableflag
- CMP #$0
- BNE flip
- LDA #%10001010 ;switch to first name table
- STA $2000
- LDA #$1
- STA nametableflag
- flip:
- LDA #%10001000 ;switch to second name table
- STA $2000
- LDA framenumber
- STA framecounter
- noanimation:
- jmp animationover
- ; ----------------------------------------------------
- ControllerTest:
- LDA NewButtons
- STA OldButtons
- LDX #$00
- LDA #$01 ; strobe joypad
- STA $4016
- LDA #$00
- STA $4016
- ConLoop:
- LDA $4016 ; check the state of each button
- LSR
- ROR NewButtons
- INX
- CPX #$08
- bne ConLoop
- LDA OldButtons ; invert bits
- EOR #$FF
- AND NewButtons
- STA justpressed
- LDA ScreenNumber ; save old screen number for later compare
- STA OldScreen
- CheckLeft:
- LDA #%01000000
- AND justpressed
- BEQ CheckRight
- CheckRight:
- LDA #%10000000
- AND justpressed
- BEQ Checkup
- Checkup:
- LDA #%00010000
- AND justpressed
- BEQ Checkdown
- LDA #%10001000 ;switch to first name table
- STA $2000
- Checkdown:
- LDA #%00100000
- AND justpressed
- BEQ CheckSelect
- LDA #%10001010 ;switch to second name table
- STA $2000
- CheckSelect:
- LDA #%00000100
- AND justpressed
- BEQ CheckStart
- CheckStart:
- LDA #%00001000
- AND justpressed
- BEQ CheckB
- lda animationtoggle
- eor #$01
- sta animationtoggle
- CheckB:
- LDA #%00000010
- AND justpressed
- BEQ CheckA
- CheckA:
- LDA #%00000001
- AND justpressed
- BEQ EndDrawChk
- ; ----------------------------------------------------
- EndDrawChk:
- LDA ScreenNumber ; has screen number changed? if not, skip redraw
- CMP OldScreen
- BEQ CheckOver
- JSR LoadScreen ; turn off and load new screen data
- JSR LoadNewPalette ; load new palette
- JSR DrawScreen ; draw new screen
- JSR DrawScreen2 ; draw new screen
- JSR Vblank ; turn the screen back on
- CheckOver:
- RTS
- ; ----------------------------------------------------
- NMI:
- JSR ControllerTest ; check for user input
- lda animationtoggle
- beq skipanimation
- jmp animation
- skipanimation:
- animationover:
- RTI
- IRQ:
- RTI
- ; ----------------------------------------------------
- palette: ; palette data
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 0 - aligns with pic0.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 1 - aligns with pic1.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 2 - aligns with pic2.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 3 - aligns with pic3.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 4 - aligns with pic4.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 5 - aligns with pic5.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 6 - aligns with pic6.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 7 - aligns with pic7.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 8 - aligns with pic8.nam below
- .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 9 - aligns with pic9.nam below
- ; ----------------------------------------------------
- ; include picture data
- pic0:
- .INCBIN "pic0.nam"
- pic1:
- .INCBIN "pic1.nam"
- pic2:
- .INCBIN "pic2.nam"
- pic3:
- .INCBIN "pic3.nam"
- pic4:
- .INCBIN "pic4.nam"
- pic5:
- .INCBIN "pic5.nam"
- pic6:
- .INCBIN "pic6.nam"
- pic7:
- .INCBIN "pic7.nam"
- pic8:
- .INCBIN "pic8.nam"
- pic9:
- .INCBIN "pic9.nam"
- pica:
- .INCBIN "pica.nam"
- picb:
- .INCBIN "picb.nam"
- picc:
- .INCBIN "picc.nam"
- picd:
- .INCBIN "picd.nam"
- pice:
- .INCBIN "pice.nam"
- picf:
- .INCBIN "picf.nam"
- picg:
- .INCBIN "picg.nam"
- pich:
- .INCBIN "pich.nam"
- pici:
- .INCBIN "pici.nam"
- picj:
- .INCBIN "picj.nam"
- ; ----------------------------------------------------
- .incbin "nesanimation.chr" ;includes 8KB graphics file
- ; ----------------------------------------------------
- .ORG $fffa ; vectors
- .DW NMI
- .DW Reset
- .DW IRQ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement