Guest User

Untitled

a guest
Feb 27th, 2016
67
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ----------------------------------------------------
  2.  
  3. ; galleryNES - version 0.1
  4. ; Copyright 2009 Don Miller
  5. ; For more information, visit: http://www.no-carrier.com
  6.  
  7. ; This program is free software: you can redistribute it and/or modify
  8. ; it under the terms of the GNU General Public License as published by
  9. ; the Free Software Foundation, either version 3 of the License, or
  10. ; (at your option) any later version.
  11.  
  12. ; This program is distributed in the hope that it will be useful,
  13. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. ; GNU General Public License for more details.
  16.  
  17. ; You should have received a copy of the GNU General Public License
  18. ; along with this program. If not, see <http://www.gnu.org/licenses/>.
  19.  
  20. ; ----------------------------------------------------
  21.  
  22. .enum $0000 ;;start variables at ram location 0
  23.  
  24. NewButtons .dsb 1
  25. OldButtons .dsb 1
  26. justpressed .dsb 1
  27. screennumber .dsb 1
  28. palettenumber .dsb 1
  29. animationtoggle .dsb 1
  30. oldscreen .dsb 1
  31. nametabletoggle .dsb 1
  32. framenumber .dsb 1
  33. framecounter .dsb 1
  34. animation_timer .dsb 1
  35.  
  36. .ende
  37.  
  38.  
  39. ; ----------------------------------------------------
  40.  
  41. .ORG $7ff0
  42. Header: ; 16 byte .NES header (iNES format)
  43. .DB "NES", $1a
  44. .DB $02 ; size of PRG ROM in 16kb units
  45. .DB $01 ; size of CHR ROM in 8kb units
  46. .DB #%00000000 ; mapper 0
  47. .DB #%00000000 ; mapper 0
  48. .DB $00
  49. .DB $00
  50. .DB $00
  51. .DB $00
  52. .DB $00
  53. .DB $00
  54. .DB $00
  55. .DB $00
  56.  
  57. .ORG $8000
  58.  
  59. ; ----------------------------------------------------
  60.  
  61. Reset: ; reset routine
  62. SEI
  63. CLD
  64. LDX #$00
  65. STX $2000
  66. STX $2001
  67. DEX
  68. TXS
  69. LDX #0
  70. TXA
  71. ClearMemory:
  72. STA 0, X
  73. STA $100, X
  74. STA $200, X
  75. STA $300, X
  76. STA $400, X
  77. STA $500, X
  78. STA $600, X
  79. STA $700, X
  80. STA $800, X
  81. STA $900, X
  82. INX
  83. BNE ClearMemory
  84.  
  85. ; ----------------------------------------------------
  86.  
  87. LDA #$00 ; setting up variables
  88. STA screennumber
  89. STA palettenumber
  90. STA animationtoggle
  91. STA nametabletoggle
  92. STA animation_timer
  93.  
  94. LDA #$28
  95. STA framecounter
  96. STA framenumber
  97. ; ----------------------------------------------------
  98.  
  99. LDX #$02 ; warm up
  100. WarmUp:
  101. BIT $2002
  102. BPL WarmUp
  103. DEX
  104. BNE WarmUp
  105.  
  106. LDA #$3F
  107. STA $2006
  108. LDA #$00
  109. STA $2006
  110. TAX
  111. LoadPal: ; load palette
  112. LDA palette, x
  113. STA $2007
  114. INX
  115. CPX #$10
  116. BNE LoadPal
  117.  
  118. LDA #$20
  119. STA $2006
  120. LDA #$00
  121. STA $2006
  122.  
  123. LDY #$04 ; clear nametables
  124. ClearName:
  125. LDX #$00
  126. LDA #$00
  127. PPULoop:
  128. STA $2007
  129. DEX
  130. BNE PPULoop
  131.  
  132. DEY
  133. BNE ClearName
  134.  
  135. ; ----------------------------------------------------
  136.  
  137. LDA #<pic0 ; load low byte of first picture
  138. STA $10
  139. LDA #>pic0 ; load high byte of first picture
  140. STA $11
  141. JSR DrawScreen ; draw first nametable
  142. JSR Vblank ; turn on screen
  143.  
  144. ; ----------------------------------------------------
  145.  
  146. InfLoop: ; loop forever, program now controlled by NMI routine
  147.  
  148. JMP InfLoop
  149.  
  150. ; ----------------------------------------------------
  151.  
  152. LoadNewPalette:
  153. LDX palettenumber ; load palette lookup value
  154. LDY #$00
  155. LDA #$3F
  156. STA $2006
  157. LDA #$00
  158. STA $2006
  159. LoadNewPal: ; load palette
  160. LDA palette, x
  161. STA $2007
  162. INX
  163. INY
  164. CPY #$10
  165. BNE LoadNewPal
  166. RTS
  167.  
  168. ; ----------------------------------------------------
  169.  
  170. DrawScreen:
  171.  
  172. LDA nametabletoggle
  173. ; cmp #0
  174. BNE nametable2000
  175.  
  176. nametable2c00:
  177.  
  178. LDA #$2c ; set to beginning of first nametable
  179. STA $2006
  180. LDA #$00
  181. STA $2006
  182. jmp startdrawing
  183.  
  184. nametable2000:
  185.  
  186. LDA #$28 ; set to beginning of second nametable
  187. STA $2006
  188. LDA #$00
  189. STA $2006
  190. jmp startdrawing
  191.  
  192. startdrawing:
  193.  
  194. LDY #$00
  195. LDX #$04
  196.  
  197. NameLoop: ; loop to draw entire nametable
  198. LDA ($10),y
  199. STA $2007
  200. INY
  201. BNE NameLoop
  202. INC $11
  203. DEX
  204. BNE NameLoop
  205.  
  206. LDA nametabletoggle
  207. EOR #$01
  208. STA nametabletoggle
  209.  
  210. RTS
  211.  
  212. ; ----------------------------------------------------
  213.  
  214.  
  215.  
  216.  
  217.  
  218. ; ----------------------------------------------------
  219.  
  220. Vblank: ; turn on the screen and start the party
  221. BIT $2002
  222. BPL Vblank
  223.  
  224. LDX #$00
  225. STX $2005
  226. STX $2005
  227.  
  228.  
  229. LDA #%10001010
  230. STA $2000
  231. LDA #%00001110
  232. STA $2001
  233.  
  234. RTS
  235.  
  236. ; ----------------------------------------------------
  237.  
  238. LoadScreen:
  239.  
  240. LDA #%00000000 ; disable NMI's and screen display
  241. STA $2000
  242. LDA #%00000000
  243. STA $2001
  244.  
  245. LDA screennumber
  246.  
  247. Test0:
  248. CMP #0 ; compare screennumber to find out which picture / palette to load
  249. BNE Test1
  250. LDA #<pic0 ; load low byte of picture
  251. STA $10
  252. LDA #>pic0 ; load high byte of picture
  253. STA $11
  254. LDA #$00
  255. STA palettenumber ; set palette lookup location
  256. RTS
  257.  
  258. Test1:
  259. CMP #1
  260. BNE Test2
  261. LDA #<pic1
  262. STA $10
  263. LDA #>pic1
  264. STA $11
  265. LDA #$10
  266. STA palettenumber
  267. RTS
  268.  
  269. Test2:
  270. CMP #2
  271. BNE Test3
  272. LDA #<pic2
  273. STA $10
  274. LDA #>pic2
  275. STA $11
  276. LDA #$20
  277. STA palettenumber
  278. RTS
  279.  
  280. Test3:
  281. CMP #3
  282. BNE Test4
  283. LDA #<pic3
  284. STA $10
  285. LDA #>pic3
  286. STA $11
  287. LDA #$30
  288. STA palettenumber
  289. RTS
  290.  
  291. Test4:
  292. CMP #4
  293. BNE Test5
  294. LDA #<pic4
  295. STA $10
  296. LDA #>pic4
  297. STA $11
  298. LDA #$40
  299. STA palettenumber
  300. RTS
  301.  
  302. Test5:
  303. CMP #5
  304. BNE Test6
  305. LDA #<pic5
  306. STA $10
  307. LDA #>pic5
  308. STA $11
  309. LDA #$50
  310. STA palettenumber
  311. RTS
  312.  
  313. Test6:
  314. CMP #6
  315. BNE Test7
  316. LDA #<pic6
  317. STA $10
  318. LDA #>pic6
  319. STA $11
  320. LDA #$60
  321. STA palettenumber
  322. RTS
  323.  
  324. Test7:
  325. CMP #7
  326. BNE Test8
  327. LDA #<pic7
  328. STA $10
  329. LDA #>pic7
  330. STA $11
  331. LDA #$70
  332. STA palettenumber
  333. RTS
  334.  
  335. Test8:
  336. CMP #8
  337. BNE Test9
  338. LDA #<pic8
  339. STA $10
  340. LDA #>pic8
  341. STA $11
  342. LDA #$80
  343. STA palettenumber
  344. RTS
  345.  
  346. Test9:
  347. LDA #<pic9
  348. STA $10
  349. LDA #>pic9
  350. STA $11
  351. LDA #$90
  352. STA palettenumberx
  353. RTS
  354.  
  355.  
  356.  
  357.  
  358. ; ----------------------------------------------------
  359.  
  360. ControllerTest:
  361.  
  362. LDA NewButtons
  363. STA OldButtons
  364.  
  365. LDX #$00
  366. LDA #$01 ; strobe joypad
  367. STA $4016
  368. LDA #$00
  369. STA $4016
  370.  
  371. ConLoop:
  372. LDA $4016 ; check the state of each button
  373. LSR
  374. ROR NewButtons
  375. INX
  376. CPX #$08
  377. bne ConLoop
  378.  
  379. LDA OldButtons ; invert bits
  380. EOR #$FF
  381. AND NewButtons
  382. STA justpressed
  383.  
  384. CheckLeft:
  385. LDA #%01000000
  386. AND justpressed
  387. BEQ CheckRight
  388.  
  389. CheckRight:
  390. LDA #%10000000
  391. AND justpressed
  392. BEQ Checkup
  393.  
  394. Checkup:
  395. LDA #%00010000
  396. AND justpressed
  397. BEQ Checkdown
  398.  
  399. ; LDA #%10001000 ;switch to first name table
  400. ; STA $2000
  401.  
  402. Checkdown:
  403. LDA #%00100000
  404. AND justpressed
  405. BEQ CheckSelect
  406.  
  407. ; LDA #%10001010 ;switch to second name table
  408. ; STA $2000
  409.  
  410. CheckSelect:
  411. LDA #%00000100
  412. AND justpressed
  413. BEQ CheckStart
  414.  
  415. CheckStart:
  416. LDA #%00001000
  417. AND justpressed
  418. BEQ CheckB
  419.  
  420. lda animationtoggle
  421. eor #$01
  422. sta animationtoggle
  423.  
  424. CheckB:
  425. LDA #%00000010
  426. AND justpressed
  427. BEQ CheckA
  428.  
  429. CheckA:
  430. LDA #%00000001
  431. AND justpressed
  432.  
  433.  
  434. RTS
  435.  
  436. ;---------------------------------
  437.  
  438. animation:
  439.  
  440. lda animationtoggle
  441. ; cmp #$00
  442. beq done
  443.  
  444. inc animation_timer
  445. lda animation_timer
  446. cmp #$10 ; change this number to change the speed of the animation
  447. bne done
  448. lda #0
  449. sta animation_timer
  450. inc screennumber
  451. lda screennumber
  452. cmp #10
  453. bne done
  454. lda #0
  455. sta screennumber
  456.  
  457. done:
  458.  
  459. RTS
  460.  
  461.  
  462.  
  463. ; ----------------------------------------------------
  464.  
  465. NMI:
  466.  
  467. lda screennumber
  468. sta oldscreen
  469. JSR ControllerTest ; check for user input
  470.  
  471.  
  472. JSR animation
  473.  
  474. LDA screennumber ; has screen number changed? if not, skip redraw
  475. CMP oldscreen
  476. BEQ skip
  477.  
  478. JSR LoadScreen
  479. JSR LoadNewPalette ; load new palette
  480. JSR DrawScreen ; draw new screen
  481. JSR Vblank ; turn the screen back on
  482.  
  483.  
  484.  
  485. skip:
  486.  
  487. RTI
  488. IRQ:
  489. RTI
  490.  
  491. ; ----------------------------------------------------
  492.  
  493. palette: ; palette data
  494. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 0 - aligns with pic0.nam below
  495. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 1 - aligns with pic1.nam below
  496. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 2 - aligns with pic2.nam below
  497. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 3 - aligns with pic3.nam below
  498. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 4 - aligns with pic4.nam below
  499. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 5 - aligns with pic5.nam below
  500. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 6 - aligns with pic6.nam below
  501. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 7 - aligns with pic7.nam below
  502. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 8 - aligns with pic8.nam below
  503. .byte $0F,$30,$30,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 9 - aligns with pic9.nam below
  504.  
  505.  
  506.  
  507. ; ----------------------------------------------------
  508.  
  509. ; include picture data
  510.  
  511. pic0:
  512. .INCBIN "pic0.nam"
  513. pic1:
  514. .INCBIN "pic1.nam"
  515. pic2:
  516. .INCBIN "pic2.nam"
  517. pic3:
  518. .INCBIN "pic3.nam"
  519. pic4:
  520. .INCBIN "pic4.nam"
  521. pic5:
  522. .INCBIN "pic5.nam"
  523. pic6:
  524. .INCBIN "pic6.nam"
  525. pic7:
  526. .INCBIN "pic7.nam"
  527. pic8:
  528. .INCBIN "pic8.nam"
  529. pic9:
  530. .INCBIN "pic9.nam"
  531. pica:
  532. .INCBIN "pica.nam"
  533. picb:
  534. .INCBIN "picb.nam"
  535. picc:
  536. .INCBIN "picc.nam"
  537. picd:
  538. .INCBIN "picd.nam"
  539. pice:
  540. .INCBIN "pice.nam"
  541. picf:
  542. .INCBIN "picf.nam"
  543. picg:
  544. .INCBIN "picg.nam"
  545. pich:
  546. .INCBIN "pich.nam"
  547. pici:
  548. .INCBIN "pici.nam"
  549. picj:
  550. .INCBIN "picj.nam"
  551.  
  552. ; ----------------------------------------------------
  553.  
  554. .incbin "nesanimation.chr" ;includes 8KB graphics file
  555.  
  556. ; ----------------------------------------------------
  557.  
  558. .ORG $fffa ; vectors
  559. .DW NMI
  560. .DW Reset
  561. .DW IRQ
RAW Paste Data