Advertisement
Guest User

NES Assembly derp

a guest
Oct 13th, 2014
609
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.12 KB | None | 0 0
  1. .inesprg 1 ; 1 PRG Bank
  2. .ineschr 1 ; 1 CHR Bank
  3. .inesmap 0 ; Mapper 0 used
  4. .inesmir 1 ; Mirroring enabled
  5.  
  6. .rsset $0000 ; Variables start from $0000
  7. pointerLo .rs 1 ; Hi/Lo bytes for background data pointers
  8. pointerHi .rs 1
  9. counterLo .rs 1 ; Hi/Lo bytes for 16 bit counter
  10. counterHi .rs 1
  11.  
  12. .bank 0 ; PRG Bank
  13. .org $8000 ; starts from $8000
  14. RESET: ; Reset routine
  15. SEI
  16. CLD
  17. LDX #$40
  18. STX $4017
  19. LDX #$FF
  20. TXS
  21. INX
  22. STX $2000 ; Disable NMI
  23. STX $2001 ; Disable rendering
  24. STX $4010 ; Disable DPCM
  25.  
  26. VBwait1: ; First PPU warm up wait
  27. BIT $2002
  28. BPL VBwait1
  29.  
  30. ClearMem: ;Clear internal memory $0000 - $07FF
  31. LDA #$00
  32. STA $0000, x
  33. STA $0100, x
  34. STA $0200, x
  35. STA $0300, x
  36. STA $0400, x
  37. STA $0500, x
  38. STA $0600, x
  39. STA $0700, x
  40. DEX
  41. CPX #$00
  42. BNE ClearMem
  43.  
  44. VBwait2: ; Second PPU warm up wait
  45. BIT $2002
  46. BPL VBwait2
  47.  
  48. LDA $2002 ; Reset PPU Hi/Lo latch
  49. LDA #$3F ; Store Hi/Lo bytes of the palette address
  50. STA $2006
  51. LDA #$00
  52. STA $2006
  53. LDX #$00
  54.  
  55. PaletteLoad1: ; Load palettes
  56. LDA palette, x
  57. STA $2007
  58. INX
  59. CPX #$1F
  60. BNE PaletteLoad1
  61.  
  62. SetBg: ; Set up information for NMI to update background
  63. LDA LOW(background)
  64. STA pointerLo
  65. LDA HIGH(background)
  66. STA pointerHi
  67.  
  68. LDA #$01 ; Enable NMI flag
  69. STA $1E
  70.  
  71. LDA #%10001000 ; Enable NMI
  72. STA $2000
  73. LDA #$00
  74. STA $2005
  75. STA $2005
  76.  
  77. MainLoop: ; Main loop
  78. JMP MainLoop
  79.  
  80. ReadP1: ; Set up controller reading
  81. LDA #$01
  82. STA $4016
  83. LDA #$00
  84. STA $4016
  85. LDX #$08
  86.  
  87. ReadP1Loop: ; Read each button and roll them to ZP $1F
  88. LDA $4016
  89. AND #$01
  90. LSR A
  91. ROL $1F
  92. DEX
  93. BNE ReadP1Loop
  94. RTS
  95.  
  96. NMI:
  97. PHA ; Push Accumulator, X register and Y register to Stack
  98. TXA
  99. PHA
  100. TYA
  101. PHA
  102. LDX $1E
  103. CPX #$01
  104. BNE FlagClear ; Check if NMI flag $1E is set
  105.  
  106. FlagSet: ; Set up background update
  107. LDA #$00 ; Disable Rendering
  108. STA $2001
  109.  
  110. LDA $2002 ; Reset PPU Hi/Lo latch
  111. LDA #$20 ; Store Hi/Lo bytes of the background nametables
  112. STA $2006
  113. LDA #$00
  114. STA $2006
  115. LDY #$00
  116. LDX #$04
  117.  
  118. LDA #%00001000 ; Disable NMI
  119. STA $2000
  120.  
  121. BgLoop: ; 16 bit loop for drawing background and loading attributes
  122. LDA (pointerLo), y
  123. STA $2007
  124. INY
  125. BNE BgLoop
  126. INC pointerHi
  127. DEX
  128. BNE BgLoop
  129.  
  130. LDA #$00
  131. STA $1E ; Clear NMI flag
  132. LDA #%10001000 ; Enable NMI
  133. STA $2000
  134. JMP ExitNMI ; End NMI
  135.  
  136. FlagClear: ; Read controller and draw background
  137. LDA #%00011110 ; Enable rendering
  138. STA $2001
  139. LDA #$00
  140. STA $2005
  141. STA $2005
  142.  
  143. ExitNMI:
  144. JSR ReadP1
  145. PLA ; Pull Accumulator, X register and Y register from Stack
  146. TAY
  147. PLA
  148. TAX
  149. PLA
  150. RTI ; End NMI
  151.  
  152. background:
  153. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  154. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  155. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  156. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  157. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  158. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  159. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  160. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  161. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  162. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  163. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  164. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  165. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  166. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  167. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  168. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  169. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  170. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  171. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  172. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  173. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  174. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  175. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  176. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  177. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  178. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  179. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  180. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  181. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  182. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  183. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  184. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  185. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  186. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  187. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  188. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  189. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  190. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  191. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  192. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  193. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  194. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  195. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  196. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  197. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  198. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  199. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  200. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  201. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  202. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  203. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  204. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  205. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  206. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  207. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  208. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  209. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  210. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  211. .db $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
  212. .db $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
  213.  
  214. attributes:
  215. .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  216. .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  217.  
  218. palette:
  219. .db $0F,$31,$21,11
  220. .db $0F,$31,$21,11
  221. .db $0F,$31,$21,11
  222. .db $0F,$31,$21,11
  223. .db $0F,$31,$21,11
  224. .db $0F,$31,$21,11
  225. .db $0F,$31,$21,11
  226. .db $0F,$31,$21,11
  227.  
  228. .bank 1
  229. .org $FFFA
  230. .dw NMI
  231. .dw RESET
  232. .dw 0
  233.  
  234. .bank 2
  235. .org $0000
  236. .incbin "Font.chr"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement