Advertisement
Guest User

Untitled

a guest
Sep 26th, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.87 KB | None | 0 0
  1. .enum $0000 ;;start variables at ram location 0
  2.  
  3. spritedir .dsb 1 ; .rs 1 means reserve one byte of space
  4. spritenumber .dsb 1
  5.  
  6. newbuttons .dsb 1
  7. oldbuttons .dsb 1
  8. justpressed .dsb 1
  9.  
  10. screennumber .dsb 1
  11. oldscreen .dsb 1
  12. palettenumber .dsb 1
  13. string1 .dsb 1
  14. string2 .dsb 1
  15. string3 .dsb 1
  16. tempval .dsb 1
  17.  
  18.  
  19. ppumask .dsb 1
  20.  
  21. gamestate .dsb 1
  22. playspritesloadcheck .dsb 1
  23. titlespritesloadcheck .dsb 1
  24. cursorx .dsb 1
  25. cursory .dsb 1
  26.  
  27. .ende
  28.  
  29. stateselect = $0
  30. stateplay = $1
  31.  
  32. spriteram = $0200
  33. ; ----------------------------------------------------
  34.  
  35. .ORG $7ff0
  36. Header: ; 16 byte .NES header (iNES format)
  37. .DB "NES", $1a
  38. .DB $02 ; size of PRG ROM in 16kb units
  39. .DB $01 ; size of CHR ROM in 8kb units
  40. .DB #%00000000 ; mapper 0
  41. .DB #%00000000 ; mapper 0
  42. .DB $00
  43. .DB $00
  44. .DB $00
  45. .DB $00
  46. .DB $00
  47. .DB $00
  48. .DB $00
  49. .DB $00
  50.  
  51. .ORG $8000
  52.  
  53. ; ----------------------------------------------------
  54.  
  55. Reset: ; reset routine
  56. SEI
  57. CLD
  58. LDX #$00
  59. STX $2000
  60. STX $2001
  61. DEX
  62. TXS
  63. LDX #0
  64. TXA
  65. ClearMemory:
  66. STA 0, X
  67. STA $100, X
  68. STA $200, X
  69. STA $300, X
  70. STA $400, X
  71. STA $500, X
  72. STA $600, X
  73. STA $700, X
  74. STA $800, X
  75. STA $900, X
  76. INX
  77. BNE ClearMemory
  78.  
  79. ; ----------------------------------------------------
  80.  
  81. LDA #$00 ; setting up variables
  82. STA screennumber
  83. STA palettenumber
  84.  
  85.  
  86. LDA #00
  87. sta playspritesloadcheck
  88. sta titlespritesloadcheck
  89.  
  90. LDA #01
  91. STA tempval
  92.  
  93. LDA #01
  94. STA string1
  95. LDA #02
  96. STA string2
  97. LDA #03
  98. STA string3
  99.  
  100. LDA #$10
  101. STA cursorx
  102. LDA #$7f
  103. STA #cursory
  104.  
  105.  
  106.  
  107.  
  108. LDA #stateselect
  109. STA gamestate
  110.  
  111. ; ----------------------------------------------------
  112.  
  113. LDX #$02 ; warm up
  114. WarmUp:
  115. BIT $2002
  116. BPL WarmUp
  117. DEX
  118. BNE WarmUp
  119.  
  120. LDA #$3F
  121. STA $2006
  122. LDA #$00
  123. STA $2006
  124. TAX
  125. LoadPal: ; load palette
  126. LDA palette, x
  127. STA $2007
  128. INX
  129. CPX #$20
  130. BNE LoadPal
  131.  
  132. LDA #$20
  133. STA $2006
  134. LDA #$00
  135. STA $2006
  136.  
  137. LDY #$04 ; clear nametables
  138. ClearName:
  139. LDX #$00
  140. LDA #$00
  141. PPULoop:
  142. STA $2007
  143. DEX
  144. BNE PPULoop
  145.  
  146. DEY
  147. BNE ClearName
  148.  
  149.  
  150.  
  151.  
  152. ; ----------------------------------------------------
  153.  
  154. LDA #<pic0 ; load low byte of first picture
  155. STA $10
  156. LDA #>pic0 ; load high byte of first picture
  157. STA $11
  158.  
  159. ; ----------------------------------------------------
  160. JSR DrawScreen ; draw initial nametable
  161. JSR LoadScreen
  162. JSR Vblank ; turn on screen
  163.  
  164. ; ----------------------------------------------------
  165.  
  166. InfLoop: ; loop forever, program now controlled by NMI routine
  167.  
  168. JMP InfLoop
  169.  
  170. ; ----------------------------------------------------
  171.  
  172. LoadNewPalette:
  173. LDX palettenumber ; load palette lookup value
  174. LDY #$00
  175. LDA #$3F
  176. STA $2006
  177. LDA #$00
  178. STA $2006
  179. LoadNewPal: ; load palette
  180. LDA palette, x
  181. STA $2007
  182. INX
  183. INY
  184. CPY #$10
  185. BNE LoadNewPal
  186. RTS
  187.  
  188. ; ----------------------------------------------------
  189.  
  190. DrawScreen:
  191.  
  192. LDA #$20 ; set to beginning of first nametable
  193. STA $2006
  194. LDA #$00
  195. STA $2006
  196.  
  197. LDY #$00
  198. LDX #$04
  199.  
  200. NameLoop: ; loop to draw entire nametable
  201. LDA ($10),y
  202. STA $2007
  203. INY
  204. BNE NameLoop
  205. INC $11
  206. DEX
  207. BNE NameLoop
  208.  
  209.  
  210.  
  211. RTS
  212.  
  213. ; ----------------------------------------------------
  214.  
  215. Vblank: ; turn on the screen and start the party
  216. BIT $2002
  217. BPL Vblank
  218.  
  219. LDA #%10000000
  220. STA $2000
  221. LDA #%00011110
  222. STA $2001
  223. STA ppumask
  224.  
  225. RTS
  226.  
  227. ; ----------------------------------------------------
  228.  
  229. LoadScreen:
  230.  
  231. LDA #%00000000 ; disable NMI's and screen display
  232. STA $2000
  233. LDA #%00000000
  234. STA $2001
  235.  
  236. LDA screennumber
  237.  
  238. Test0:
  239. CMP #0 ; compare screennumber to find out which picture / palette to load
  240. BNE Test1
  241. LDA #<pic0 ; load low byte of picture
  242. STA $10
  243. LDA #>pic0 ; load high byte of picture
  244. STA $11
  245. LDA #$00
  246. STA palettenumber ; set palette lookup location
  247. RTS
  248. Test1:
  249. CMP #0 ; compare screennumber to find out which picture / palette to load
  250. BNE donepic
  251. LDA #<pic1 ; load low byte of picture
  252. STA $10
  253. LDA #>pic1 ; load high byte of picture
  254. STA $11
  255. LDA #$00
  256. STA palettenumber ; set palette lookup location
  257. RTS
  258.  
  259. donepic:
  260.  
  261. STA palettenumber
  262.  
  263.  
  264. RTS
  265.  
  266. ; ----------------------------------------------------
  267.  
  268. ControllerTest:
  269.  
  270. LDA newbuttons
  271. STA oldbuttons
  272.  
  273. LDX #$00
  274. LDA #$01 ; strobe joypad
  275. STA $4016
  276. LDA #$00
  277. STA $4016
  278. ConLoop:
  279. LDA $4016 ; check the state of each button
  280. LSR
  281. ROR newbuttons
  282. INX
  283. CPX #$08
  284. bne ConLoop
  285.  
  286. LDA oldbuttons ; invert bits
  287. EOR #$FF
  288. AND newbuttons
  289. STA justpressed
  290.  
  291. LDA screennumber ; save old screen number for later compare
  292. STA oldscreen
  293.  
  294. ;button ( 0 0 0 0 0 0 0 0 )
  295. ;layout ( R L D U St Sl B A )
  296.  
  297. RTS
  298.  
  299. ; ----------------------------------------------------
  300.  
  301.  
  302.  
  303. ; ----------------------------------------------------
  304.  
  305. NMI:
  306. JSR ControllerTest ; check for user input
  307.  
  308. gameengine:
  309. LDA gamestate
  310. CMP #stateselect
  311. BEQ enginestateselect ;display title screen
  312.  
  313. LDA gamestate
  314. CMP #stateplay
  315. BEQ enginestateplay ;use button held controls
  316.  
  317. gameenginedone:
  318.  
  319. JSR stringwritetest
  320.  
  321. LDA #00
  322. STA $2005
  323. LDA #00
  324. STA $2005
  325.  
  326. RTI
  327. IRQ:
  328. RTI
  329.  
  330. ; ----------------------------------------------------
  331.  
  332. enginestateselect:
  333.  
  334.  
  335.  
  336. LDA titlespritesloadcheck
  337. BNE skiptitlespriteload
  338. JSR loadtitlesprites
  339.  
  340. skiptitlespriteload:
  341.  
  342.  
  343.  
  344. JSR titlecontrols
  345. JSR spritechangecheck
  346. JSR spritemovecheck
  347. JSR updatesprites
  348.  
  349.  
  350. jmp gameenginedone
  351.  
  352.  
  353. enginestateplay:
  354. LDA #%10000000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  355. STA $2000
  356. LDA #%00010000
  357. STA $2001
  358.  
  359. LDA playspritesloadcheck
  360. BNE skipplayspriteload
  361. JSR loadplaysprites
  362. skipplayspriteload:
  363. JSR playcontrols
  364. JSR spritechangecheck
  365. jsr spritemovecheck
  366. JSR updatesprites
  367. jmp gameenginedone
  368.  
  369.  
  370.  
  371. palette: ; palette data
  372. .db $0F,$20,$24,$20,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$01,$11,$21 ; palette 0
  373. .db $0F,$20,$20,$30,$0F,$05,$26,$30,$0F,$13,$23,$33,$0F,$1C,$2B,$39 ; palette 1
  374.  
  375. speed:
  376. .db $01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04
  377. .db $01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04
  378. .db $01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04
  379. .db $01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04,$01,$02,$03,$04
  380.  
  381. playsprites:
  382. ;vert tile attr horiz
  383. .db $08, $20, $00, $a4
  384. .db $08, $20, $00, $c9
  385. .db $08, $20, $00, $84
  386. .db $10, $20, $00, $88
  387. .db $10, $20, $00, $e5
  388. .db $18, $20, $00, $20
  389. .db $18, $20, $00, $31
  390. .db $20, $20, $00, $17
  391. .db $28, $20, $00, $6e
  392. .db $28, $20, $00, $89
  393. .db $30, $20, $00, $6b
  394. .db $38, $20, $00, $e1
  395. .db $38, $20, $00, $5a
  396. .db $38, $20, $00, $bd
  397. .db $40, $20, $00, $90
  398. .db $40, $20, $00, $bf
  399. .db $48, $20, $00, $53
  400. .db $48, $20, $00, $63
  401. .db $48, $20, $00, $9d
  402. .db $50, $20, $00, $e9
  403. .db $50, $20, $00, $f3
  404. .db $58, $20, $00, $13
  405. .db $60, $20, $00, $53
  406. .db $60, $20, $00, $88
  407. .db $68, $20, $00, $76
  408. .db $68, $20, $00, $bb
  409. .db $68, $20, $00, $f6
  410. .db $70, $20, $00, $dd
  411. .db $70, $20, $00, $df
  412. .db $78, $20, $00, $86
  413. .db $78, $20, $00, $1d
  414. .db $80, $20, $00, $e1
  415. .db $80, $20, $00, $ca
  416. .db $80, $20, $00, $99
  417. .db $88, $20, $00, $c3
  418. .db $88, $20, $00, $5e
  419. .db $90, $20, $00, $1f
  420. .db $98, $20, $00, $1e
  421. .db $98, $20, $00, $99
  422. .db $98, $20, $00, $e2
  423. .db $a0, $20, $00, $3d
  424. .db $a0, $20, $00, $a2
  425. .db $a8, $20, $00, $24
  426. .db $b0, $20, $00, $ec
  427. .db $b0, $20, $00, $09
  428. .db $b0, $20, $00, $16
  429. .db $b8, $20, $00, $aa
  430. .db $b8, $20, $00, $5b
  431. .db $c0, $20, $00, $54
  432. .db $c0, $20, $00, $fa
  433. .db $c0, $20, $00, $74
  434. .db $c8, $20, $00, $c9
  435. .db $c8, $20, $00, $0b
  436. .db $d0, $20, $00, $a9
  437. .db $d0, $20, $00, $37
  438. .db $d0, $20, $00, $e2
  439. .db $d8, $20, $00, $74
  440. .db $d8, $20, $00, $1d
  441. .db $d8, $20, $00, $85
  442. .db $e0, $20, $00, $d1
  443. .db $e0, $20, $00, $f4
  444. .db $e8, $20, $00, $da
  445. .db $e8, $20, $00, $31
  446. .db $e8, $20, $00, $12
  447.  
  448. ;-------------------------------
  449.  
  450. loadplaysprites:
  451. ldx #0
  452. -
  453. lda playsprites,x ;load sprites
  454. sta spriteram,x ;copy to RAM
  455. sta $0200,x ;copy to DMA location
  456. inx
  457. bne -
  458. lda #01
  459. sta playspritesloadcheck
  460. RTS
  461.  
  462. loadtitlesprites:
  463.  
  464.  
  465. LDA #cursory
  466. STA $0200 ; put spritein center ($7f) of screen vert
  467.  
  468. LDA #tempval
  469. STA $0201 ; tile number = 0
  470.  
  471. LDA #$00
  472. STA $0202 ; color = 0, no flipping
  473.  
  474. LDA #cursorx
  475. STA $0203 ; put sprite on left of screen ($10) of screen horiz
  476.  
  477.  
  478. lda #01
  479. sta titlespritesloadcheck
  480. RTS
  481.  
  482.  
  483. lda #01
  484. sta titlespritesloadcheck
  485. RTS
  486.  
  487.  
  488. ;-------------------------------
  489. ; sprite update subroutine start
  490.  
  491. updatesprites:
  492.  
  493. LDA #$00
  494. STA $2003 ; set the low byte (00) of the RAM address
  495. LDA #$02
  496. STA $4014 ; set the high byte (02) of the RAM address, start the transfer
  497. RTS
  498. ; Sprite update subroutine end
  499. ;-----------------------------
  500.  
  501.  
  502. ;-----------------------------------------
  503. ; Sprite direction check subroutines start
  504. spritemovecheck
  505.  
  506. LDA spritedir
  507.  
  508. test0
  509. CMP #0
  510. BNE test1
  511. JMP done
  512. test1
  513. CMP #1
  514. BNE test2
  515. JSR up
  516. JMP done
  517. test2
  518. CMP #2
  519. BNE test3
  520. JSR down
  521. JMP done
  522. test3
  523. CMP #3
  524. BNE test4
  525. JSR left
  526. JMP done
  527. test4
  528. CMP #4
  529. JSR right
  530. JMP done
  531.  
  532. done
  533. RTS
  534.  
  535.  
  536. ;------------------------------
  537. ; Sprite move subroutines start
  538. up
  539. LDX #0
  540. LDY #0
  541. -
  542. CLC
  543. LDA spriteram,x
  544. SBC speed,y
  545. STA spriteram,x
  546. STA $0200,x
  547. INY
  548. INX
  549. INX
  550. INX
  551. INX
  552. CPX #0
  553. BNE -
  554. RTS
  555.  
  556. down
  557. LDX #0
  558. LDY #0
  559. -
  560. CLC
  561. LDA spriteram,x
  562. ADC speed,y
  563. STA spriteram,x
  564. STA $0200,x
  565. INY
  566. INX
  567. INX
  568. INX
  569. INX
  570. CPX #0
  571. BNE -
  572. RTS
  573.  
  574. right:
  575. LDX #0
  576. LDY #0
  577. -
  578. CLC
  579. LDA spriteram+3,x
  580. ADC speed,y
  581. STA spriteram+3,x
  582. STA $0203,x
  583. INY
  584. INX
  585. INX
  586. INX
  587. INX
  588. CPX #0
  589. BNE -
  590. RTS
  591.  
  592. left
  593. LDX #0
  594. LDY #0
  595. -
  596. CLC
  597. LDA spriteram+3,x
  598. SBC speed,y
  599. STA spriteram+3,x
  600. STA $0203,x
  601. INY
  602. INX
  603. INX
  604. INX
  605. INX
  606. CPX #0
  607. BNE -
  608. RTS
  609.  
  610. ; Sprite direction subroutines end
  611. ;---------------------------------
  612.  
  613.  
  614.  
  615. ;-----------------------------------------
  616. ; Sprite change check subroutines start
  617. spritechangecheck
  618.  
  619. LDA spritenumber
  620.  
  621. testa
  622. CMP #0
  623. BNE testb
  624. JSR SprNum0
  625. JMP end
  626. testb
  627. CMP #1
  628. BNE end
  629. JSR SprNum1
  630. JMP end
  631.  
  632. end:
  633. RTS
  634. ;------------------
  635.  
  636.  
  637. ;------------------
  638. SprNum0:
  639. CMP #0
  640. BNE SprNum1
  641.  
  642. ldx #0
  643. ldy #0
  644. -
  645. lda string1 ;,y
  646. sta $201,x
  647. iny
  648. inx
  649. inx
  650. inx
  651. inx
  652. bne -
  653. JMP SprChangeover
  654. ;------------------
  655. SprNum1:
  656. CMP #1
  657. BNE SprChangeover
  658.  
  659. ldx #0
  660. ldy #0
  661. -
  662. lda string2 ;,y
  663. sta $201,x
  664. iny
  665. inx
  666. inx
  667. inx
  668. inx
  669. bne -
  670. JMP SprChangeover
  671.  
  672. SprChangeover:
  673. RTS
  674.  
  675. ;-------------------------------
  676.  
  677.  
  678. titlecontrols:
  679.  
  680. checkup:
  681. LDA #%00010000
  682. AND justpressed
  683. BEQ checkdown
  684.  
  685. LDA spriteram
  686. SEC
  687. SBC #$10
  688. STA spriteram
  689. STA $0200
  690.  
  691. LDA tempval
  692. SEC
  693. SBC #16
  694. STA tempval
  695. STA string1
  696.  
  697. checkdown:
  698. LDA #%00100000
  699. AND justpressed
  700. BEQ checkleft
  701. LDA spriteram
  702. clc
  703. ADC #$10
  704. STA spriteram
  705. STA $0200
  706.  
  707. LDA tempval
  708. CLC
  709. ADC #16
  710. STA tempval
  711. STA string1
  712.  
  713.  
  714.  
  715.  
  716. checkleft:
  717. LDA #%01000000
  718. AND justpressed
  719. beq checkright
  720.  
  721. LDA spriteram+3
  722. sec
  723. SBC #16
  724. STA spriteram+3
  725. STA $0203
  726. LDA tempval
  727. SEC
  728. SBC #1
  729. STA tempval
  730. STA string1
  731.  
  732. checkright:
  733. LDA #%10000000
  734. AND justpressed
  735. BEQ checkselect
  736. LDA spriteram+3
  737. clc
  738. ADC #16
  739. STA spriteram+3
  740. STA $0203
  741.  
  742. LDA tempval
  743. CLC
  744. ADC #1
  745. STA tempval
  746. STA string1
  747.  
  748.  
  749. checkselect:
  750. LDA #%00000100
  751. AND justpressed
  752. BEQ checkstart
  753. LDA tempval
  754. STA string1
  755.  
  756. checkstart:
  757. LDA #%00001000
  758. AND justpressed
  759. BEQ selectcontrolsdone
  760. LDA #stateplay
  761. STA gamestate
  762.  
  763. selectcontrolsdone:
  764.  
  765. RTS
  766.  
  767.  
  768. playcontrols:
  769.  
  770. playcheckup:
  771. LDA #%00010000
  772. AND justpressed
  773. BEQ playcheckdown
  774. LDA #1
  775. STA spritedir
  776.  
  777. playcheckdown:
  778. LDA #%00100000
  779. AND justpressed
  780. BEQ playcheckleft
  781. LDA #2
  782. STA spritedir
  783.  
  784. playcheckleft:
  785. LDA #%01000000
  786. AND justpressed
  787. beq playcheckright
  788. LDA #3
  789. STA spritedir
  790.  
  791. playcheckright:
  792. LDA #%10000000
  793. AND justpressed
  794. BEQ playcheckselect
  795. LDA #4
  796. STA spritedir
  797.  
  798.  
  799. playcheckselect:
  800. LDA #%00000100
  801. AND justpressed
  802. BEQ playcheckstart
  803.  
  804.  
  805. playcheckstart:
  806. LDA #%00001000
  807. AND justpressed
  808. BEQ playchecksdone
  809.  
  810.  
  811. playchecksdone:
  812.  
  813. RTS
  814.  
  815. stringwritetest:
  816.  
  817. LDA #$20 ; set to beginning of first nametable
  818. STA $2006
  819. LDA #$e1
  820. STA $2006
  821. LDA tempval
  822. STA $2007
  823. RTS
  824.  
  825. ;---------------------------------------------
  826.  
  827. ; include picture data
  828.  
  829. pic0:
  830. .INCBIN "entry.nam"
  831. pic1:
  832. .INCBIN "blank.nam"
  833. ;----------------------------------------------------
  834.  
  835. .ORG $fffa ; vectors
  836. .DW NMI
  837. .DW Reset
  838. .DW IRQ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement