Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2015
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. ; constants
  2. SPRITES = $0200
  3. MAX_SPRITES = 10
  4.  
  5. ; joypad buttons
  6. A = %10000000
  7. B = %01000000
  8. SELECT = %00100000
  9. START = %00010000
  10. UP = %00001000
  11. DOWN = %00000100
  12. LEFT = %00000010
  13. RIGHT = %00000001
  14.  
  15. ; zero page variables
  16. .enum $0000
  17. nmis .dsb 1
  18. in_nmi .dsb 1
  19.  
  20. joypad_1 .dsb 1
  21. joypad_1_old .dsb 1
  22. joypad_1_pressed .dsb 1
  23. joypad_1_released .dsb 1
  24.  
  25. sprite_x .dsb 10
  26. sprite_y .dsb 10
  27. sprite_tile .dsb 10
  28. sprite_attrib .dsb 10
  29. sprite_moving .dsb 10
  30. sprite_was_moving .dsb 10
  31.  
  32. sprite_dir .dsb 10
  33. sprite_frame .dsb 10
  34. sprite_delay .dsb 10
  35.  
  36. index .dsw 1
  37. .ende
  38.  
  39. ; ines header
  40. .db "NES",$1a
  41. .db $01
  42. .db $01
  43. .db $00
  44. .dsb 9,$00
  45.  
  46. .base $c000
  47.  
  48. ; reset vector
  49. reset:
  50. sei
  51. cld
  52. ldx #$40
  53. stx $4017
  54. ldx #$ff
  55. txs
  56. inx
  57.  
  58. stx $2000
  59. stx $2001
  60. stx $4010
  61.  
  62. - bit $2002
  63. bpl -
  64.  
  65. - lda #$00
  66. sta $0000,x
  67. sta $0100,x
  68. sta $0300,x
  69. sta $0400,x
  70. sta $0500,x
  71. sta $0600,x
  72. sta $0700,x
  73. lda #$fe
  74. sta $0200, x
  75. inx
  76. bne -
  77.  
  78. - bit $2002
  79. bpl -
  80.  
  81. load_palettes:
  82. lda $2002
  83. lda #$3f
  84. sta $2006
  85. ldx #$00
  86. stx $2006
  87.  
  88. - lda palette,x
  89. sta $2007
  90. inx
  91. cpx #$20
  92. bne -
  93.  
  94. ; load title screen bg
  95. ldx #<title_bg
  96. ldy #>title_bg
  97. jsr draw_nametable
  98.  
  99. lda #%10001000
  100. sta $2000
  101. lda #%00011110
  102. sta $2001
  103.  
  104. jsr init_sprites
  105. jsr init_player
  106.  
  107. main_loop:
  108. jsr read_joypad
  109.  
  110. lda joypad_1_pressed
  111. and #START
  112. beq +
  113.  
  114. lda #$00
  115. sta sprite_moving+1
  116.  
  117. + jmp main_loop
  118.  
  119. wait_for_vblank:
  120. inc nmis
  121. - lda nmis
  122. bne -
  123.  
  124. rts
  125.  
  126. init_sprites:
  127. ldx #$00
  128. lda #$FE
  129. - sta sprite_y,x
  130. inx
  131. cpx #MAX_SPRITES
  132. bne -
  133.  
  134. rts
  135.  
  136. update_sprites:
  137. ldx #$00
  138. - lda sprite_y,x
  139. cmp #$EF
  140. beq update_next_sprite
  141.  
  142. lda sprite_moving,x
  143. bne move_sprite
  144.  
  145. ; sprite isn't moving, set tile to static frame based on direction
  146. ldy sprite_dir,x
  147. lda static_frame,y
  148. sta sprite_tile,x
  149. jmp update_next_sprite
  150.  
  151. move_sprite:
  152. ldy sprite_dir,x
  153.  
  154. ; horizontal position change
  155. lda movement_x,y
  156. clc
  157. adc sprite_x,x
  158. sta sprite_x,x
  159.  
  160. ; vertical position change
  161. lda movement_y,y
  162. clc
  163. adc sprite_y,x
  164. sta sprite_y,x
  165.  
  166. ; cycle animation frames
  167. lda sprite_delay,x
  168. cmp #$08
  169. beq delay_done
  170. inc sprite_delay,x
  171. jmp update_tile
  172.  
  173. delay_done:
  174. lda #$00
  175. sta sprite_delay,x
  176.  
  177. ; update frame
  178. lda sprite_frame,x
  179. cmp #$02
  180. beq reset_frame
  181. inc sprite_frame,x
  182. jmp update_tile
  183.  
  184. reset_frame:
  185. lda #$00
  186. sta sprite_frame,x
  187.  
  188. update_tile:
  189. ldy sprite_dir,x
  190. lda static_frame,y
  191. clc
  192. adc sprite_frame,x
  193. sta sprite_tile,x
  194.  
  195. update_next_sprite:
  196. inx
  197. cpx #MAX_SPRITES
  198. bne -
  199.  
  200. rts
  201.  
  202. copy_sprite_data:
  203. ldx #$00
  204. ldy #$00
  205. - lda sprite_y,x
  206. cmp #$EF
  207. beq copy_next_sprite
  208.  
  209. ; transfer sprite data from variables to oam copy
  210. sta SPRITES,y
  211. iny
  212. lda sprite_tile,x
  213. sta SPRITES,y
  214. iny
  215. lda sprite_attrib,x
  216. sta SPRITES,y
  217. iny
  218. lda sprite_x,x
  219. sta SPRITES,y
  220. iny
  221.  
  222. copy_next_sprite:
  223. inx
  224. cpx #MAX_SPRITES
  225. bne -
  226.  
  227. rts
  228.  
  229. read_joypad:
  230. lda joypad_1
  231. sta joypad_1_old
  232. lda #%01111111
  233. sta joypad_1
  234. sta $4016
  235. asl a
  236. sta $4016
  237.  
  238. - lda $4016
  239. and #$03
  240. cmp #$01
  241. ror joypad_1
  242. bcs -
  243.  
  244. lda joypad_1_old
  245. eor #$FF
  246. and joypad_1
  247. sta joypad_1_pressed
  248.  
  249. lda joypad_1
  250. eor #$FF
  251. and joypad_1_old
  252. sta joypad_1_released
  253.  
  254. rts
  255.  
  256. ; temporary, just get some sprites on screen
  257. init_player:
  258. lda #$10
  259. sta sprite_x
  260. sta sprite_y
  261. lda #$01
  262. sta sprite_tile
  263.  
  264. lda #$20
  265. sta sprite_x+1
  266. sta sprite_y+1
  267. lda #$00
  268. sta sprite_tile+1
  269. sta sprite_dir+1
  270. lda #$03
  271. sta sprite_dir+1
  272. lda #$01
  273. sta sprite_moving+1
  274.  
  275. rts
  276.  
  277. ; nmi routine
  278. nmi:
  279. pha
  280. txa
  281. pha
  282. tya
  283. pha
  284.  
  285. lda in_nmi
  286. bne +
  287.  
  288. jsr update_sprites
  289. jsr copy_sprite_data
  290.  
  291. ; oam transfer from copy ($0200)
  292. lda #$00
  293. sta $2003
  294. lda #$02
  295. sta $4014
  296.  
  297. + lda #$00
  298. sta nmis
  299.  
  300. pla
  301. tay
  302. pla
  303. tax
  304. pla
  305.  
  306. rti
  307.  
  308. ; irq unused
  309. irq:
  310. rti
  311.  
  312. ; bg/sprite palette data
  313. palette:
  314. .db $38,$18,$08,$0f,$38,$1a,$29,$0f,$38,$01,$11,$0f,$38,$00,$10,$20
  315. .db $38,$18,$26,$0f,$38,$02,$37,$0f,$38,$15,$27,$0f,$38,$18,$27,$20
  316.  
  317. static_frame:
  318. .db $00,$03,$06,$09
  319.  
  320. movement_x:
  321. .db $00,$01,$00,$01
  322. movement_y:
  323. .db $FF,$00,$01,$00
  324.  
  325. .include "nametables.asm"
  326.  
  327. ; interrupt vectors
  328. .org $fffa
  329. .dw nmi
  330. .dw reset
  331. .dw irq
  332.  
  333. ; chr-rom
  334. .incbin "tiles.chr"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement