Advertisement
Guest User

Untitled

a guest
Oct 21st, 2015
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.70 KB | None | 0 0
  1. ;================;
  2. ; Pause Menu MODDED ;
  3. ;================;
  4.  
  5. !Freespace = $1596F8 ; x1000 bytes (minimum).
  6. !Scr = $0F ; How dark the screen is when pausing.
  7. ; (00-0F, where 00 = complete blackness, 0F = normal brightness).
  8.  
  9. !Palette = $39 ;Palette of Menu.
  10. ;Palette 8 = $31 ; Sandy-ish Yellow.
  11. ;Palette 9 = $33 ; Grey
  12. ;Palette A = $35 ; Bright Yellow.
  13. ;Palette B = $37 ; Blue.
  14. ;Palette C = $39 ; Red.
  15. ;Palette D = $3B ; Green.
  16. ;Palette E = $3D ; Dark grey.
  17. ;Palette F = $3F ;
  18. ; DON'T USE ANYTHING ELSE.
  19.  
  20. ;================;
  21. ; Pause Code ;
  22. ;================;
  23.  
  24. header
  25. lorom
  26.  
  27. org $818F ; SNES ($00/818F), PC [x00038F]
  28. JSL ShowPauseMenu ; Hijack APU I/O Port, run every frame.
  29. NOP #2 ; Terminate last 2 bytes.
  30.  
  31. org $8463 ; SNES ($00/8463], PC [x000663]
  32. JSL ChangeOAM ; Hijack Sprite DMA.
  33. NOP ; Terminate last byte.
  34.  
  35. org $A233 ; (LDA $13D4 : EOR #$01 : STA $13D4)
  36. INC $13D4 ; Don't flip $13D4 - $13D4 == 02.
  37. NOP #5 ; Terminate 5 unneeded bytes.
  38.  
  39. org $806B ; Hijack Interrupt routine.
  40. JSL UpdateOAM ; OAM is updated here.
  41.  
  42. org $800A ;\ Clear OAM RIGHT at the beginning of the game.
  43. JSL ClearOAM ; | STZ $2140
  44. NOP #2 ;/ STZ $2141
  45. org $FFD7
  46. db $0C, $03,$01,$33
  47.  
  48. ;===========================;
  49. org !Freespace ;
  50. !CodeSize = Ending-Routine ;
  51. db "STAR" ;
  52. dw !CodeSize-$01 ;
  53. dw !CodeSize-$01^$FFFF ;
  54. Routine: ;
  55. ;===========================;
  56.  
  57. ;FORMAT:
  58.  
  59. ;Y = Size of table - 1.
  60. ;X = Position tiles get draw to on menu.
  61. ;A = Table.
  62.  
  63. ;Store A to $00 in 16-bit mode.
  64. ;Jump to "Draw"
  65.  
  66. ;LDY #$02 ; Table size (-1).
  67. ;LDX #$20 ; Position.
  68. ;REP #$20 ; 16-bit mode.
  69. ;LDA #Tbl ; Table.
  70. ;STA $00 ; Store to $00.
  71. ;SEP #$20 ; Return to 8-bit mode.
  72. ;JSR Draw ; Draw tile data to pause menu.
  73.  
  74. ;==================;
  75. ; Main Menu Code ;
  76. ;==================;
  77.  
  78. MenuPtr:
  79. dw Main ; 00
  80. dw Main ; 01
  81. dw Main ; 02
  82. dw Main ; 03
  83.  
  84. ;==========;
  85. ;Main Menu ;
  86. ;==========;
  87.  
  88. Main:
  89. RTS
  90. ;=======================;
  91. ; Option Pointer Code ;
  92. ;=======================;
  93.  
  94. OptionPtr:
  95. dw Option1 ; 00
  96.  
  97. Option1:
  98. RTS
  99.  
  100. MenuBGTilemap:
  101. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ;\
  102. db $06, $06, $06, $06, $06, $06, $06, $00, $01, $02, $03, $04, $05 ; |
  103. db $06, $06, $06, $06, $06, $2B, $06, $10, $11, $12, $13, $14, $15 ; |
  104. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ; | Tilemap for Menu.
  105. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ; | Customisable.
  106. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ; | (75 tiles).
  107. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ; |
  108. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ; |
  109. db $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06, $06 ;/
  110.  
  111. ;==================;
  112. ; DisplayPause ;
  113. ;==================;
  114.  
  115. NotPaused:
  116. RTL
  117. ShowPauseMenu:
  118. LDA $13D4 ;\
  119. BEQ NotPaused ;/ If not pausing, terminate.
  120. CMP #$01 ;\
  121. BNE NoBackUpGFX ;/ If $13D4 == 02, execute pausing.
  122. LDA #!Scr ;\
  123. STA $0DAE ;/ Darken the screen.
  124. LDA #$70 ;\
  125. STA $4304 ; |
  126. LDA #$81 ; | DMA -> VRAM.
  127. STA $4300 ; |
  128. LDA #$39 ; |
  129. STA $4301 ; |
  130. REP #$20 ; |
  131. LDA #$7000 ; | Destination = Sprite VRAM.
  132. STA $2116 ; |
  133. LDA #$1000 ; |
  134. STA $4302 ; |
  135. LDA #$800 ; |
  136. STA $4305 ; |
  137. SEP #$20 ; | Accum = 8 bit.
  138. LDA #$01 ; |
  139. STA $420B ; |
  140. PHK ; | Pull program bank.
  141. PLA ; | As current bank.
  142. STA $4304 ; |
  143. LDA #$01 ; |
  144. STA $4300 ; |
  145. LDA #$18 ; |
  146. STA $4301 ; |
  147. REP #$20 ; | Accum = 16 bit.
  148. LDA #$7000 ; | Destination = Sprite VRAM.
  149. STA $2116 ; |
  150. LDA #Tilemap ; | Get .bin file ..
  151. STA $4302 ; | As tilemap in DMA.
  152. LDA #$800 ; |
  153. STA $4305 ; |
  154. SEP #$20 ; | Accum = 8 bit.
  155. LDA #$01 ; |
  156. STA $420B ; |
  157. LDA #$00 ; | Initiate:
  158. STA $7006FF ; | Main Menu Pointer,
  159. STA $7006FE ; | Option Pointer,
  160. INC $13D4 ;/ $13D4 == 03.
  161. NoBackUpGFX:
  162. LDA $13D4 ;\
  163. CMP #$3 ; | If $13D4 != 03 (i.e. unpausing initially)..
  164. BEQ RestoreGFX ; |
  165. RTL ;/ Return.
  166. RestoreGFX: LDA #$70 ;\
  167. STA $4304 ; |
  168. LDA #$01 ; |
  169. STA $4300 ; |
  170. LDA #$18 ; |
  171. STA $4301 ; |
  172. REP #$20 ; | Accum = 16 bit.
  173. LDA #$6FFE ; | Destination = Sprite VRAM.
  174. STA $2116 ; |
  175. LDA $2139 ; |
  176. LDA #$1000 ; |
  177. STA $4302 ; | Restore all DMA register stuff back.
  178. LDA #$800 ; |
  179. STA $4305 ; |
  180. SEP #$20 ; | Accum = 8 bit.
  181. LDA #$01 ; |
  182. STA $420B ; |
  183. STZ $13D4 ; | After restoring index, $13D4 == 0, unpaused.
  184. LDA #$0F ; |
  185. STA $0DAE ; | Restore screen brightness.
  186. RTL ;/
  187.  
  188. ;==================;
  189. ; Clear Next OAM ;
  190. ;==================;
  191.  
  192. Clear2ndOAM:
  193. PHX ;\ Preserve X.
  194. PHP ;/ And the nvmxdizc register.
  195. REP #$30 ;\ Accum = 16 bit.
  196. LDX #$0000 ; |
  197. LDA #$FFFF ; |
  198. - STA $700700,x ; |
  199. INX ; |
  200. INX ; |
  201. CPX #$1FF ; | Loop if X < 512.
  202. BCC - ; |
  203. LDA #$0000 ; |
  204. - STA $700700,x ; |
  205. INX ; |
  206. INX ; |
  207. CPX #$220 ; | Loop if X < 544.
  208. BCC - ; |
  209. SEP #$30 ; | Accum = 8 bit.
  210. LDX #$75 ; | Maximum tile size for background.
  211. - LDA MenuBGTilemap,x ; | Load current tile.
  212. STA $700600,x ; | Draw to menu RAM..
  213. DEX ; |
  214. BPL - ; | Until all tiles are drawn.
  215. PLP ; | Pull the envmxdizc register.
  216. PLX ; | Pull X.
  217. RTS ;/ End.
  218. DrawMenu:
  219. PHB ;\ Push data bank.
  220. PHP ; | Pull the nvmxdizc register.
  221. SEP #$30 ; | Accumulator = 8 bit.
  222. LDA #$70 ; |
  223. PHA ; |
  224. PLB ; | Data bank = $70.
  225. LDA #$37 ; |!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  226. STA $00 ; | X Position.
  227. LDA #$48 ; |!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  228. STA $01 ; | Y Position.
  229. REP #$10 ; | Accumulator = 16 bit.
  230. LDX #$0000 ; |
  231. LDY #$0000 ; |
  232. loop2: LDA $00 ; |
  233. STA $0700,x ; |
  234. INX ; |
  235. CLC ; |
  236. ADC #$08 ; |
  237. STA $00 ; |
  238. LDA $01 ; |
  239. STA $0700,x ; |
  240. INX ; |
  241. LDA $00 ; | If Y Position ..
  242. CMP #$A8 ; | < A8..
  243. BCC + ; | Branch.
  244. LDA $01 ; |
  245. CLC ; |
  246. ADC #$08 ; | X Pos + 8.
  247. STA $01 ; |
  248. LDA #$40 ; |
  249. STA $00 ; |
  250. + ; |
  251. LDA $0600,y ; |
  252. INY ; |
  253. STA $0700,x ; |
  254. INX ; |
  255. LDA #!Palette ; | YXPPCCCT byte.
  256. STA $0700,x ; | Priority should be maximum.
  257. INX ; |
  258. CPY #$0075 ; | Add YXPPCCCT byte for all tiles.
  259. BCC loop2 ; | Repeat loop.
  260. PLP ; | Pull nvmxdizc register ..
  261. PLB ; | And data bank..
  262. RTS ;/ And terminate.
  263.  
  264. ;=============;
  265. ; Draw Data ;
  266. ;=============;
  267. Draw:
  268. LDA ($00),y ;\ Get Tilemaps indexed by tile size.
  269. STA $700600,x ; | Store into Pause RAM.
  270. DEX ; | Decrease current position by 1.
  271. DEY ; | Decrease tile to draw.
  272. BPL Draw ; | If != 0, loop.
  273. RTS ;/ TODO: Make a better code.
  274.  
  275. ;=============;
  276. ; Change OAM ;
  277. ;=============;
  278. ChangeOAM:
  279. LDY $13D4 ;\
  280. BEQ + ; | If $13D4 == 0, branch.
  281. LDY #$70 ; |
  282. STY $4304 ; |
  283. LDA #$0700 ; |
  284. STA $4302 ; |
  285. + LDY #$01 ; | Restore hacked code.
  286. STY $420B ; |
  287. RTL ;/
  288.  
  289. ;=============;
  290. ; Update OAM ;
  291. ;=============;
  292. UpdateOAM:
  293. LDA $13D4 ;\
  294. BEQ + ; | If $13D4 == 0, branch.
  295. LDA $10 ; |
  296. BEQ $FC ; | Chocolate Island 2 Infinite Loop.
  297. JSR Clear2ndOAM ; |
  298. PHB ; |
  299. PHK ; | Make this our data bank.
  300. PLB ; |
  301. LDA $7006FF ; | Use $7006FF ..
  302. ASL A ; | *2
  303. TAX ; | -> X.
  304. JSR (MenuPtr,x) ; | As a pointer.
  305. PLB ; | Restore data bank.
  306. JSR DrawMenu ; | Draw menu tilemap.
  307. RTL ;/ Terminate.
  308. + LDA $10 ;\
  309. BEQ $FC ;/ Chocolate Island 2 Infinite Loop.
  310. PHB ;\
  311. PHK ; | Make this our program bank.
  312. PLB ; |
  313. PLB ; | Useless code.
  314. RTL ;/
  315. ;===========;
  316. ; ClearOAM ;
  317. ;===========;
  318.  
  319. ClearOAM:
  320. CLC ;\ Carry flag = set.
  321. XCE ; | Exchange with emulation bit.
  322. JSR Clear2ndOAM ; |
  323. SEC ; |
  324. XCE ; |
  325. STZ $2140 ; | Restore previously hacked code.
  326. STZ $2141 ; |
  327. LDA #$00 ; | Clear out:
  328. STA $7006FF ; | Menu Pointer.
  329. STA $7006FE ; | Option Pointer.
  330. RTL ;/
  331.  
  332. Tilemap:
  333. incbin Tilemaps.bin ; Get tilemap file.
  334.  
  335. ;========;
  336. ; EOF ;
  337. Ending: ;
  338. ;========;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement