Advertisement
Guest User

Untitled

a guest
Aug 8th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. NewButtons = $c1
  3. OldButtons = $c2
  4. JustPressed = $c3
  5.  
  6. SongNumber = $c4
  7. OldSong = $c5
  8.  
  9. LoadAddy = $90E1
  10. InitAddy = $AC00
  11. PlayAddy = $AC03
  12.  
  13. ;       ----------------------------------------------------
  14.  
  15.         .ORG $7ff0
  16. Header:                         ; 16 byte .NES header (iNES format)
  17.     .DB "NES", $1a
  18.     .DB $02                 ; size of PRG ROM in 16kb units
  19.     .DB $01         ; size of CHR ROM in 8kb units
  20.     .DB #%00000000      ; mapper 0
  21.     .DB #%00000000      ; mapper 0
  22.         .DB $00
  23.         .DB $00
  24.         .DB $00
  25.         .DB $00
  26.         .DB $00
  27.         .DB $00
  28.         .DB $00
  29.         .DB $00
  30.  
  31. ;       ----------------------------------------------------
  32.  
  33.         .org LoadAddy
  34.         .incbin "mm5.nsf"      ; NSF filename
  35.        
  36.         .org $fa00              ; start of code
  37.  
  38. ;       ----------------------------------------------------
  39.  
  40. Reset:                          ; reset routine
  41.         SEI
  42.         CLD
  43.     LDX #$00
  44.     STX $2000
  45.     STX $2001
  46.     DEX
  47.     TXS
  48.     LDX #0
  49.     TXA
  50. ClearMemory:
  51.     STA 0, X
  52.     STA $100, X
  53.     STA $200, X
  54.     STA $300, X
  55.     STA $400, X
  56.     STA $500, X
  57.     STA $600, X
  58.     STA $700, X
  59.         STA $800, X
  60.         STA $900, X
  61.         INX
  62.     BNE ClearMemory
  63.  
  64. ;       ----------------------------------------------------
  65.  
  66.     LDX #$02                ; warm up
  67. WarmUp:
  68.     BIT $2002
  69.     BPL WarmUp
  70.     DEX
  71.     BNE WarmUp
  72.  
  73.         LDA #$3F
  74.     STA $2006
  75.     LDA #$00
  76.     STA $2006
  77.         TAX
  78. LoadPal:                        ; load palette
  79.         LDA palette, x
  80.         STA $2007
  81.         INX
  82.         CPX #$20
  83.         BNE LoadPal
  84.  
  85.     LDA #$20
  86.     STA $2006
  87.     LDA #$00
  88.     STA $2006
  89.  
  90.     LDY #$04                ; clear nametables
  91. ClearName:
  92.     LDX #$00
  93.     LDA #$00
  94. PPULoop:
  95.     STA $2007
  96.     DEX
  97.     BNE PPULoop
  98.  
  99.     DEY
  100.     BNE ClearName
  101.  
  102. ;       ----------------------------------------------------
  103.  
  104.         LDA #$00                ; set up variables
  105.         STA SongNumber
  106.         LDA #$00
  107.         STA Play
  108.  
  109. ;       ----------------------------------------------------
  110.  
  111.         JSR DrawScreen          ; draw initial nametable
  112.         JSR InitSprites
  113.         JSR InitMusic
  114.         JSR Vblank              ; turn on screen
  115.  
  116. ;       ----------------------------------------------------
  117.  
  118. InfLoop:                        ; loop forever, program now controlled by NMI routine
  119.  
  120.         JMP InfLoop
  121.  
  122. ;       ----------------------------------------------------
  123.  
  124. InitMusic:
  125.  
  126.     lda #$00
  127.     ldx #$00
  128. Clear_Sound:
  129.     sta $4000,x
  130.     inx
  131.     cpx #$0F
  132.     bne Clear_Sound
  133.  
  134.     lda #$10
  135.     sta $4010
  136.     lda #$00
  137.     sta $4011
  138.     sta $4012
  139.     STA $4013
  140.  
  141.     lda #%00001111
  142.     STA $4015
  143.  
  144.     lda #$C0
  145.     STA $4017
  146.  
  147.     LDA SongNumber      ; song number
  148.     ldx #$00        ; 00 for NTSC or $01 for PAL
  149.     jsr InitAddy        ; init address
  150.     rts
  151.  
  152. ;       ----------------------------------------------------
  153.  
  154. DrawScreen:
  155.  
  156.         LDA #<pic              ; load low byte of first picture
  157.         STA $10
  158.         LDA #>pic              ; load high byte of first picture
  159.         STA $11
  160.  
  161.     LDA #$20                ; set to beginning of first nametable
  162.         STA $2006
  163.         LDA #$00
  164.         STA $2006
  165.  
  166.         LDY #$00
  167.         LDX #$04
  168.  
  169. NameLoop:                       ; loop to draw entire nametable
  170.         LDA ($10),y
  171.         STA $2007
  172.         INY
  173.         BNE NameLoop
  174.         INC $11
  175.         DEX
  176.         BNE NameLoop
  177.  
  178.         RTS
  179.  
  180. ;       ----------------------------------------------------
  181.  
  182. InitSprites:
  183.       LDA #$ff
  184.       LDX #$00
  185. ClearSprites:
  186.       STA $500, x
  187.       INX
  188.       BNE ClearSprites
  189.  
  190.       LDA #$00
  191.       STA $2003                 ; set the low byte (00) of the RAM address
  192.       LDA #$05
  193.       STA $4014                 ; set the high byte (05) of the RAM address
  194.  
  195. LoadSprites:
  196.       LDX #$00
  197. LoadSpritesLoop:
  198.       LDA sprites, x            ; load data from address
  199.       STA $0500, x              ; store into RAM address
  200.       INX
  201.       CPX #4
  202.       BNE LoadSpritesLoop
  203.       RTS
  204.  
  205. sprites:
  206.            ;vert tile attr horiz
  207.         .db $37, $2D, $00, $17  ; sprite
  208.  
  209. ;       ----------------------------------------------------
  210.  
  211. UpdateSprites:
  212.         LDA #$00
  213.         STA $2003
  214.         LDA #$05
  215.         STA $4014
  216.         RTS
  217.  
  218. ;       ----------------------------------------------------
  219.  
  220. ChangeSprite:
  221.         LDX SongNumber
  222.         LDA Line,x
  223.         STA $0500
  224.         RTS
  225.  
  226. Line:
  227.         .db $37,$47,$57,$67,$77,$87,$97,$A7,$B7,$C7
  228.  
  229. ;       ----------------------------------------------------
  230.  
  231. Vblank:                         ; turn on the screen and start the party
  232.     BIT $2002
  233.     BPL Vblank
  234.  
  235.         LDX #$00
  236.         STX $2005
  237.         STX $2005
  238.  
  239.     LDA #%10001000
  240.     STA $2000
  241.         LDA #%00011110
  242.     STA $2001
  243.  
  244.         RTS
  245.  
  246. ;       ----------------------------------------------------
  247.  
  248. ControllerTest:
  249.  
  250.         LDA NewButtons
  251.     STA OldButtons
  252.  
  253.         LDX #$00
  254.     LDA #$01        ; strobe joypad
  255.     STA $4016
  256.     LDA #$00
  257.     STA $4016
  258. ConLoop:
  259.     LDA $4016       ; check the state of each button
  260.     LSR
  261.     ROR NewButtons
  262.         INX
  263.         CPX #$08
  264.         bne ConLoop
  265.  
  266.     LDA OldButtons          ; invert bits
  267.     EOR #$FF
  268.     AND NewButtons
  269.     STA JustPressed
  270.  
  271.     LDA SongNumber          ; save old song number for later compare
  272.     STA OldSong
  273.  
  274. CheckA:
  275.     LDA #%00000001
  276.     AND JustPressed
  277.     BEQ CheckDown
  278.  
  279.  
  280. CheckDown:
  281.     LDA #%00100000
  282.     AND JustPressed
  283.     BEQ CheckUp
  284.  
  285.     INC SongNumber          ; increment song number here
  286.         LDA SongNumber
  287.     CMP #2                  ; equal to total # of songs +1, starting from 0
  288.     BNE CheckUp
  289.     LDA #0
  290.     STA SongNumber
  291.  
  292. CheckUp:
  293.     LDA #%00010000
  294.     AND JustPressed
  295.     BEQ EndDrawChk
  296.  
  297.         DEC SongNumber          ; decrement song number here
  298.         BPL EndDrawChk
  299.     LDA #1                  ; equal to total # of songs, starting from 0
  300.     STA SongNumber
  301.  
  302. EndDrawChk:
  303.     LDA SongNumber          ; has song number changed? if so, load next song
  304.     CMP OldSong
  305.     BEQ CheckOver
  306.     JSR ChangeSprite
  307.         JSR InitMusic
  308.  
  309. CheckOver:
  310.  
  311.         RTS
  312.  
  313. ;       ----------------------------------------------------
  314.  
  315. NMI:
  316.         JSR UpdateSprites
  317.         JSR ControllerTest      ; check for user input
  318.         IF Play>0
  319.             jsr PlayAddy        ; init address
  320.             RTI
  321.         ELSE
  322.             RTI
  323.         ENDIF
  324.        
  325.        
  326.         ;jsr PlayAddy            ; play the music
  327.  
  328.         ;RTI
  329. IRQ:
  330.         RTI
  331.  
  332. ;       ----------------------------------------------------
  333.  
  334. palette:                        ; palette data
  335.         .byte $0F,$10,$20,$30,$0F,$10,$20,$30,$0F,$10,$20,$30,$0F,$10,$20,$30
  336.         .byte $0F,$10,$20,$30,$0F,$10,$20,$30,$0F,$10,$20,$30,$0F,$10,$20,$30
  337.  
  338. ;       ----------------------------------------------------
  339.  
  340. pic:
  341.         .INCBIN "screen.nam"
  342.  
  343. ;       ----------------------------------------------------
  344.  
  345.     .ORG $fffa              ; vectors
  346.     .DW NMI
  347.     .DW Reset
  348.     .DW IRQ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement