Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .inesprg 2
- .ineschr 0
- .inesmir 0
- .inesmap 0
- .code
- .bank 0
- .org $8000
- Reset_Routine:
- cld ; clear decimal flag
- sei ; disable interrupts
- lda #%00000000 ; disable vblank interrupts by clearing
- sta $2000 ; the most significant bit of $2000
- ; *** WAIT 2 VBLANKS ***
- WaitV1:
- lda $2002 ; give the PPU a little time to initialize
- bpl WaitV1 ; by waiting for a vblank
- WaitV2:
- lda $2002 ; wait for a second vblank to be safe
- bpl WaitV2 ; and now the PPU should be initialized
- ; *** CLEAR SOUND REGISTERS ***
- lda #$00 ; clear all the sound registers by setting
- ldx #$00 ; everything to 0 in the Clear_Sound loop
- Clear_Sound:
- sta $4000,x ; store accumulator at $4000 offset by x
- inx ; increment x
- cpx #$0F ; compare x to $0F
- bne Clear_Sound ; branch back to Clear_Sound if x != $0F
- lda #$10 ; load accumulator with $10
- sta $4010 ; store accumulator in $4010
- lda #$00 ; load accumulator with 0
- sta $4011 ; clear these 3 registers that are
- sta $4012 ; associated with the delta modulation
- sta $4013 ; channel of the NES
- ; *** ENABLE SOUND CHANNELS ***
- lda #%00001111 ; enable all sound channels except
- sta $4015 ; the delta modulation channel
- ; *** RESET FRAME COUNTER AND CLOCK DIVIDER ***
- lda #$C0 ; synchronize the sound playback routine
- sta $4017 ; to the internal timing of the NES
- ; *** SET SONG # & PAL/NTSC SETTING ***
- lda #$00 ; replace dashes with song number
- ldx #$00 ; replace with $00 for NTSC or $01 for PAL
- jsr $BE34 ; replace dashes with init address
- ; *** ENABLE VBLANK NMI ***
- lda #%10000000 ; enable vblank interrupts by setting the
- sta $2000 ; most significant bit of $2000
- loop:
- jmp loop
- NMI_Routine:
- lda $2002 ; read $2002 to reset the vblank flag
- lda #%00000000 ; clear the first PPU control register
- sta $2000 ; writing 0 to it
- lda #%10000000 ; reenable vblank interrupts by setting
- sta $2000 ; the most significant bit of $2000
- jsr $F2D0 ; replace dashes with play address
- rti ; return from interrupt routine
- IRQ_Routine:
- rti ; return from interrupt routine
- .bank 1
- .org $BDC4 ; replace dashes with load address MINUS $80
- .incbin "SMB.nsf" ; include NSF tune
- .bank 3
- .org $FFFA ;ditto
- .dw NMI_Routine ; setup the NMI vector at $FFFA
- .dw Reset_Routine ; setup the Reset vector at $FFFC
- .dw IRQ_Routine ; setup the IRQ vector at $FFFE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement