Advertisement
Guest User

Untitled

a guest
Jan 28th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.94 KB | None | 0 0
  1. .inesprg 1 ; 1x 16KB PRG code
  2. .ineschr 1 ; 1x 8KB CHR data
  3. .inesmap 0 ; mapper 0 = NROM, no bank swapping
  4. .inesmir 1 ; background mirroring
  5.  
  6.  
  7. ;;;;;;;;;;;;;;;
  8.  
  9. variables:
  10. .rsset $0000 ;put starting location at 0000
  11. .rs score1 1 ;reserve 1 byte for var score1 at $0000
  12. .rs score2 1 ;reserve 1 byte for var score2 at $0001
  13. .rs marioflip 1 ;reserve 1 byte for var at $0002
  14.  
  15. ;;;;;;;;;;;;;;;;;;
  16.  
  17.  
  18. .bank 0
  19. .org $C000
  20. RESET:
  21. SEI ; disable IRQs
  22. CLD ; disable decimal mode
  23. LDX #$40
  24. STX $4017 ; disable APU frame IRQ
  25. LDX #$FF
  26. TXS ; Set up stack
  27. INX ; now X = 0
  28. STX $2000 ; disable NMI
  29. STX $2001 ; disable rendering
  30. STX $4010 ; disable DMC IRQs
  31.  
  32. VAR SETTING
  33. STX marioflip ;store 0 in var
  34.  
  35. vblankwait1: ; First wait for vblank to make sure PPU is ready
  36. BIT $2002
  37. BPL vblankwait1
  38.  
  39. clrmem:
  40. LDA #$00
  41. STA $0000, x
  42. STA $0100, x
  43. STA $0300, x
  44. STA $0400, x
  45. STA $0500, x
  46. STA $0600, x
  47. STA $0700, x
  48. LDA #$FE
  49. STA $0200, x ;move all sprites off screen
  50. INX
  51. BNE clrmem
  52.  
  53. vblankwait2: ; Second wait for vblank, PPU is ready after this
  54. BIT $2002
  55. BPL vblankwait2
  56.  
  57.  
  58.  
  59. ; ************** NEW CODE ****************
  60. LoadPalettes:
  61. LDA $2002 ; read PPU status to reset the high/low latch
  62. LDA #$3F
  63. STA $2006 ; write the high byte of $3F00 address
  64. LDA #$00
  65. STA $2006 ; write the low byte of $3F00 address
  66. LDX #$00
  67. LoadPalettesLoop:
  68. LDA palette, x ;load palette byte
  69. STA $2007 ;write to PPU
  70. INX ;set index to next byte
  71. CPX #$20
  72. BNE LoadPalettesLoop ;if x = $20, 32 bytes copied, all done
  73.  
  74. LDX #$00
  75. LoadSprites:
  76. LDA sprites, x ;load sprite byte
  77. STA $0200, x ;write to PPU
  78. INX ;set index to next byte
  79. CPX #$10
  80. BNE LoadSprites ;if x = $10, 16 bytes copied, all done
  81.  
  82. LoadBackground:
  83. LDA $2002 ; read PPU status to reset the high/low latch
  84. LDA #$20
  85. STA $2006 ; write the high byte of $2000 address
  86. LDA #$00
  87. STA $2006 ; write the low byte of $2000 address
  88. LDX #$00 ; start out at 0
  89. LDY #$00
  90.  
  91. LoadBackgroundLoop:
  92. LDA nametable, x ; load data from address (background + the value in x)
  93. STA $2007 ; write to PPU
  94. INX ; X = X + 1
  95. CPX #$00 ; Compare X to hex $00, decimal 256 - copying 256 bytes
  96. BNE LoadBackgroundLoop ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  97. ; if compare was equal to 128, keep going down
  98.  
  99.  
  100. LoadAttribute:
  101. LDA $2002 ; read PPU status to reset the high/low latch
  102. LDA #$23
  103. STA $2006 ; write the high byte of $23C0 address
  104. LDA #$C0
  105. STA $2006 ; write the low byte of $23C0 address
  106. LDX #$00 ; start out at 0
  107.  
  108. LoadAttributeLoop:
  109. LDA attribute, x ; load data from address (attribute + the value in x)
  110. STA $2007 ; write to PPU
  111. INX ; X = X + 1
  112. CPX #$08 ; Compare X to hex $08, decimal 8 - copying 8 bytes
  113. BNE LoadAttributeLoop
  114.  
  115. LDA #%10010000 ; NMI: enable sprites & backgrounds
  116. STA $2000
  117.  
  118. LDA #%00011110 ; enable sprites & background rendering
  119. STA $2001
  120.  
  121. LDA #$00 ;no scrolling at the end of NMI
  122. STA $2005
  123. STA $2005
  124.  
  125. Forever:
  126.  
  127. JMP Forever ;jump back to Forever, infinite loop
  128.  
  129.  
  130.  
  131. NMI:
  132. LDA #$00
  133. STA $2003 ; set the low byte (00) of the RAM address
  134. LDA #$02
  135. STA $4014 ; set the high byte (02) of the RAM address, start the transfer
  136.  
  137. jmp controllerlatch
  138.  
  139. controllerlatch:
  140. LDA #$01
  141. STA $4016
  142. LDA #$00
  143. STA $4016 ; tell both the controllers to latch buttons
  144.  
  145. readA:
  146. LDA $4016 ; player 1 - A
  147. AND #%00000001
  148. ;BEQ A_skip
  149. A_skip:
  150.  
  151. readB:
  152. LDA $4016 ; player 1 - B
  153. AND #%00000001
  154. ;BEQ B_skip
  155. B_skip:
  156.  
  157. readSELECT:
  158. LDA $4016 ; player 1 - Select
  159. AND #%00000001
  160. ;BEQ SELECT_skip
  161. SELECT_skip:
  162.  
  163. readSTART:
  164. LDA $4016 ; player 1 - Start
  165. AND #%00000001
  166. ;BEQ START_skip
  167. START_skip:
  168.  
  169. readUP:
  170. LDA $4016 ; player 1 - Up
  171. AND #%00000001
  172. ;BEQ UP_skip
  173. UP_skip:
  174.  
  175. readDOWN:
  176. LDA $4016 ; player 1 - Down
  177. AND #%00000001
  178. ;BEQ DOWN_skip
  179. DOWN_skip:
  180.  
  181. readLEFT:
  182. LDA $4016 ; player 1 - Left
  183. AND #%00000001
  184. BEQ LEFT_skip
  185.  
  186. ;under here it is pressed
  187. LDA #%01000000 ;here flip sprites
  188. STA $202
  189. STA $206
  190. STA $20A
  191. STA $20E
  192.  
  193. CPY #$01
  194. BEQ skipReposition
  195. LDA $207 ;;;;
  196. SEC
  197. SBC #$08
  198. STA $207
  199.  
  200. LDA $20F
  201. SEC
  202. SBC #$08
  203. STA $20F ;;;;
  204.  
  205. LDA $203
  206. CLC
  207. ADC #$08
  208. STA $203 ;;;;
  209.  
  210. LDA $20B
  211. CLC
  212. ADC #$08
  213. STA $20B ;;;;
  214.  
  215. INY
  216. skipReposition:
  217.  
  218. LDX #$00 ;reset x counter
  219. LDA #$01
  220. STA marioflip ;set bool var for sprites flipping to 1
  221.  
  222. LDA $0203 ; load sprite X (horizontal) position
  223. SEC ; make sure the carry flag is set
  224. SBC #$01 ; A = A + 1
  225. STA $0203 ; save sprite X (horizontal) position
  226.  
  227. LDA $0207 ; load sprite X (horizontal) position
  228. SEC ; make sure the carry flag is set
  229. SBC #$01 ; A = A + 1
  230. STA $0207 ; save sprite X (horizontal) position
  231.  
  232. LDA $020B ; load sprite X (horizontal) position
  233. SEC ; make sure the carry flag is set
  234. SBC #$01 ; A = A + 1
  235. STA $020B ; save sprite X (horizontal) position
  236.  
  237. LDA $020F ; load sprite X (horizontal) position
  238. SEC ; make sure the carry flag is set
  239. SBC #$01 ; A = A + 1
  240. STA $020F ; save sprite X (horizontal) position
  241. LEFT_skip:
  242.  
  243. readRIGHT:
  244. LDA $4016 ; player 1 - Right
  245. AND #%00000001
  246. BEQ RIGHT_skip
  247.  
  248. ;under here it is pressed
  249. LDA #%00000000 ;here flip sprites
  250. STA $202
  251. STA $206
  252. STA $20A
  253. STA $20E
  254.  
  255. CPX #$01
  256. BEQ skipReposition2
  257. LDA marioflip ;bool var for sprite flip
  258. CMP #$00
  259. BEQ skipReposition2
  260. LDA $207 ;;;;
  261. CLC
  262. ADC #$08
  263. STA $207
  264.  
  265. LDA $20F
  266. CLC
  267. ADC #$08
  268. STA $20F ;;;;
  269.  
  270. LDA $203
  271. SEC
  272. SBC #$08
  273. STA $203 ;;;;
  274.  
  275. LDA $20B
  276. SEC
  277. SBC #$08
  278. STA $20B ;;;;
  279.  
  280. INX
  281. skipReposition2:
  282.  
  283. LDY #$00 ;reset y counter
  284. LDA #$01
  285. STA marioflip ;set bool var for sprites flipping to 1
  286.  
  287. LDA $0203 ; load sprite X (horizontal) position
  288. CLC ; make sure the carry flag is set
  289. ADC #$01 ; A = A + 1
  290. STA $0203 ; save sprite X (horizontal) position
  291.  
  292. LDA $0207 ; load sprite X (horizontal) position
  293. CLC ; make sure the carry flag is set
  294. ADC #$01 ; A = A + 1
  295. STA $0207 ; save sprite X (horizontal) position
  296.  
  297. LDA $020B ; load sprite X (horizontal) position
  298. CLC ; make sure the carry flag is set
  299. ADC #$01 ; A = A + 1
  300. STA $020B ; save sprite X (horizontal) position
  301.  
  302. LDA $020F ; load sprite X (horizontal) position
  303. CLC ; make sure the carry flag is set
  304. ADC #$01 ; A = A + 1
  305. STA $020F ; save sprite X (horizontal) position
  306. RIGHT_skip:
  307.  
  308. RTI ; return from interrupt
  309.  
  310. ;;;;;;;;;;;;;;
  311.  
  312.  
  313.  
  314. .bank 1
  315. .org $E000
  316. palette:
  317. .db $29,$16,$22,$38,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C ;background palette
  318. .db $0F,$17,$36,$08,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C ;sprite palette
  319.  
  320. sprites:
  321. .db $80, $32, $00, $80 ;sprite 0
  322. .db $80, $33, $00, $88 ;sprite 1
  323. .db $88, $34, $00, $80 ;sprite 2
  324. .db $88, $35, $00, $88 ;sprite 3
  325.  
  326. nametable: ;all background in 1 screen
  327. .db $55,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 ;;row 1
  328. .db $55,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 ;;all sky ($24 = sky)
  329. .db $24,$19,$15,$0A,$22,$0E,$1B,$24,$01,$24,$1C,$1D,$0A,$1B,$1D,$24 ;;row 2
  330. .db $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 ;;all sky
  331. .db $24,$24,$24,$24,$45,$45,$24,$24,$45,$45,$45,$45,$45,$45,$24,$24 ;;row 3
  332. .db $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$53,$54,$24,$24 ;;some brick tops
  333. .db $24,$24,$24,$24,$47,$47,$24,$24,$47,$47,$47,$47,$47,$47,$24,$24 ;;row 4
  334. .db $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$55,$56,$24,$24 ;;brick bottoms
  335. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  336. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  337. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  338. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  339. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  340. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  341. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  342. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  343. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  344. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  345. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  346. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  347. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  348. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  349. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  350. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  351. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  352. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  353. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  354. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  355. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  356. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  357. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  358. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  359. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  360. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  361. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  362. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  363. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  364. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  365. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  366. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  367. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  368. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  369. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  370. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  371. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  372. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  373. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  374. .db $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25 ;;floor
  375.  
  376. attribute: ;nametable's attribute
  377. .db %00000000, %00010000, %0010000, %00010000, %00000000, %00000000, %00000000, %00110000
  378.  
  379.  
  380. .org $FFFA ;first of the three vectors starts here
  381. .dw NMI ;when an NMI happens (once per frame if enabled) the
  382. ;processor will jump to the label NMI:
  383. .dw RESET ;when the processor first turns on or is reset, it will jump
  384. ;to the label RESET:
  385. .dw 0 ;external interrupt IRQ is not used in this tutorial
  386.  
  387.  
  388. ;;;;;;;;;;;;;;
  389.  
  390.  
  391. .bank 2
  392. .org $0000
  393. .incbin "mario.chr" ;includes 8KB graphics file from SMB1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement