Advertisement
Guest User

Untitled

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