View difference between Paste ID: Z785aqBB and L9jJBWxU
SHOW: | | - or go back to the newest paste.
1
;HEADER, VARIABLE, AND CONSTANTS HERE
2
;-----------------------------------------------------------
3
;; DECLARE CONSTANTS
4
;-----------------------------------------------------------
5
STATETITLE     = $00  ; displaying title screen
6
STATEPLAYING   = $01  ; begin game
7
STATEGAMEOVER  = $02  ; displaying game over screen
8
STATEPAUSE     = $03  ; display pause screen
9
;MORE CONSTANTS
10
11
;RESET, CLRMEM, AND VLANKS
12
13
;-----------------------------------------------------------  
14
;---------------Load Some Initial Values--------------------
15
;-----------------------------------------------------------
16
  JSR ResetValues
17
18
;LOAD PALETTES
19
20
;-----------------------------------------------------------
21
;---------------------LOAD BACKGROUND-----------------------
22
;-----------------------------------------------------------
23
  LDA #STATETITLE
24
  STA gamestate    
25
  JSR LoadBackground
26
;LOAD ATTRIBUTES (THIS WILL BE MOVING ONCE I GET EVERYTHING WORKING)
27
28
  LDA #%10010000   ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
29
  STA $2000          
30
  JSR EnablePPU 
31
32
;-----------------------------------------------------------
33
;-----------------------NMI ROUTINE-------------------------
34
;-----------------------------------------------------------
35
NMI:
36
  LDA #$00
37
  STA $2003       ; set the low byte (00) of the RAM address
38
 
39
  LDA #$02
40
  STA $4014       ; set the high byte (02) of the RAM address, start the transfer
41
 
42
  ;SOME NMI CODE
43
  JSR UpdateColor      ;;Update the Sprite Palette Color for new beer color
44
  ;SOME NMI CODE
45
46
  LDA #$00        ;;tell the ppu there is no background scrolling
47
  STA $2005
48
  STA $2005
49
50
;;;;;;;;;;;;;;;;;;GAME ENGINE;;;;;;;;;;;;;;;;;;;;;;;;;
51
52
GameEngine:  
53
  LDA gamestate
54
  CMP #STATETITLE
55
  BEQ EngineTitle    ;;game is displaying title screen
56
    
57
  LDA gamestate
58
  CMP #STATEGAMEOVER
59
  BEQ EngineGameOver  ;;game is displaying ending screen
60
 
61
  LDA gamestate
62
  CMP #STATEPLAYING
63
  BEQ EnginePlaying   ;;game is playing
64
 
65
  LDA gamestate
66
  CMP #STATEPAUSE
67
  BEQ EnginePause     ;;game is paused
68
 
69
GameEngineDone:
70
  RTI
71
 
72
EngineTitle:  
73
  LDA #$01
74
  STA ChangeColor
75
  LDA #$29
76
  STA attribute_RAM
77
   
78
  LDA buttons1_pressed       ; player 1 - start
79
  AND #%00010000  ; only look at bit 5
80
  BEQ GameEngineDone
81
    JSR StartEnginePlaying
82
    ;SOME CODE TO RESET VARIABLES
83
84
  JMP GameEngineDone
85
86
;;;;;;;;;
87
 
88
EngineGameOver:
89
  LDA buttons1_pressed       ; player 1 - start
90
  AND #%00010000  ; only look at bit 5
91
  BEQ GameEngineDone
92
    JSR StartTitle
93
94
  JMP GameEngineDone
95
 
96
;;;;;;;;;;;
97
 
98
EnginePlaying:   
99
   ;SOME GAME PLAY CODE
100
  JSR handle_input
101
  JSR CheckGameOver                ;Go to Game Over Subroutine to see if the clock is 00, if yes, then display game over screen and disable sprites
102
  EnginePlayingDone:
103
  JMP GameEngineDone  
104
 
105
;;;;;;;;;;;;;
106
 
107
EnginePause:  
108
  LDA buttons1_pressed     ; player 1 - start
109
  AND #%00010000  ; only look at bit 5
110
  BEQ GameEngineDone
111
    LDA #STATEPLAYING
112
    STA gamestate
113
    
114
 JMP GameEngineDone
115
116
117
;-----------------------------------------------------------  
118
;------------------START ENGINE PLAYING---------------------
119
;-----------------------------------------------------------
120
StartEnginePlaying:
121
    
122
  LDA #STATEPLAYING
123
  STA gamestate
124
    JSR DisablePPU
125
    JSR LoadBackground
126
    JSR EnablePPU
127
128
StartEnginePlayingDone:
129
  RTS
130
 
131
;-----------------------------------------------------------  
132
;-----------------------START TITLE-------------------------
133
;-----------------------------------------------------------
134
StartTitle:
135
    
136
  LDA #STATETITLE
137
  STA gamestate
138
    JSR DisablePPU
139
    JSR LoadBackground
140
    JSR EnablePPU
141
142
StartTitleDone:
143
  RTS
144
145
;-----------------------------------------------------------  
146
;----------------------GAME OVER----------------------------
147
;-----------------------------------------------------------
148
CheckGameOver:
149
  LDA time1
150
  BNE CheckGameOverDone
151
 
152
      LDA time10
153
    BNE CheckGameOverDone
154
    
155
        LDA #STATEGAMEOVER
156
        STA gamestate
157
          JSR DisablePPU
158
          JSR LoadBackground
159
          JSR EnablePPU_nosprites
160
CheckGameOverDone:
161
  RTS
162
163
;-----------------------------------------------------------
164
;----------------------UPDATE COLOR-------------------------
165
;-----------------------------------------------------------
166
UpdateColor:
167
  LDA ChangeColor  ;make a variable in zero page and set it to #$01 whenever you want this color to change.
168
  CMP #$01      ;if it's not #$01, ignore this subroutine and go to End.
169
  BNE .End
170
  LDA $2002     ;changing the palette (and background tiles)
171
  LDA #$3F
172
  STA $2006
173
  LDA #$11              ;address of specific color you want to change
174
  STA $2006
175
  LDA attribute_RAM              ;value of new color you want to change it to.
176
  STA $2007
177
  LDA #$00
178
  STA ChangeColor
179
.End:
180
  RTS
181
182
;-----------------------------------------------------------
183
;---------------------LOAD BACKGROUND-----------------------
184
;-----------------------------------------------------------
185
LoadBackground:
186
  LDA $2002
187
  LDA #$20
188
  STA $2006             ; write the high byte of $2000 address
189
  LDA #$00
190
  STA $2006             ; write the low byte of $2000 address
191
  ;;;;;;
192
  LDA gamestate
193
  CMP #$02
194
  BEQ LoadGameOverBackground
195
 
196
  LDA gamestate
197
  CMP #$01
198
  BEQ LoadMainBackground
199
 
200
  LDA gamestate
201
  CMP #$00
202
  BEQ LoadTitleBackground
203
 
204
  JMP LoadBackGroundDone
205
 
206
LoadGameOverBackground:  
207
  LDA #LOW(GameOverScreen)
208
  STA AddrLow
209
  LDA #HIGH(GameOverScreen)
210
  STA AddrHigh  
211
  JMP StartBGLoading
212
 
213
LoadMainBackground:  
214
  LDA #LOW(MainScreen)
215
  STA AddrLow
216
  LDA #HIGH(MainScreen)
217
  STA AddrHigh  
218
  JMP StartBGLoading
219
220
LoadTitleBackground:  
221
  LDA #LOW(TitleScreen)
222
  STA AddrLow
223
  LDA #HIGH(TitleScreen)
224
  STA AddrHigh  
225
  JMP StartBGLoading
226
227
StartBGLoading:  
228
  LDX #$04              ; Loop X 4 times
229
  LDY #$00              ; Loop Y 256 times
230
LoadBackgroundsLoop:
231
  LDA [AddrLow],y
232
  STA $2007
233
  INY
234
  BNE LoadBackgroundsLoop
235
; Outer loop
236
  INC AddrHigh           ; increment high byte of address backg to next 256 byte chunk
237
  DEX                    ; one chunk done so X = X - 1.
238
  BNE LoadBackgroundsLoop   ; if X isn't zero, do again
239
  LoadBackGroundDone:  
240
  RTS
241
242
;-----------------------------------------------------------
243
;----------------------RESET VALUES---------------------------
244
;-----------------------------------------------------------  
245
ResetValues:
246
  LDA #$29
247
  STA attribute_RAM
248
  LDA #$00
249
  STA ChangeColor
250
;OTHER VARIABLES
251
  RTS
252
253
;-----------------------------------------------------------
254
;----------------------PPU----------------------------------
255
;-----------------------------------------------------------                        
256
EnablePPU:              
257
  LDA #%00011110   ; enable sprites, enable background, no clipping on left side
258
  STA $2001
259
  RTS
260
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
261
 
262
EnablePPU_nosprites:              
263
  LDA #%00001110   ; Disable sprites, enable background, no clipping on left side
264
  STA $2001
265
  RTS
266
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
267
268
DisablePPU:              
269
  LDA #$00
270
  STA $2001
271
  RTS