blob: 0b702b2a6bdccd3b906f46407d72f683f0941287 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
.segment "CODE"
;; Global variables used throughout the code base.
.scope Globals
;;;
;; Argument values reserved for passing arguments to functions in memory.
zp_arg0 = $00
zp_arg1 = $01
zp_arg2 = $02
zp_arg3 = $03
;; zp_arg4 = $04
;;;
;; Random values that can be used inside of functions for temporary values
;; so `zp_argX` variables are not overwritten as often.
zp_tmp0 = $05
zp_tmp1 = $06
zp_tmp2 = $07
zp_tmp3 = $08
;;;
;; Reserve a byte of memory for preserving indices on memory. This is needed
;; whenever the `x` and `y` registers might not be reliable because of
;; underlying `jsr` calls that might tamper with their values. Sometimes
;; saving the value in memory is enough instead of playing with the stack.
zp_idx = $09
;; Flags that manage the state of the game.
;;
;; | Bit | Short name | Meaning when set |
;; |-----+------------+-------------------------------------------------------------|
;; | 7 | render | Game logic is over, block main code until NMI code is over. |
;; | 6 | ppu | PPU registers have to be touched |
;; | 5-4 | - | Unused |
;; | 3 | paused | Game is in pause state |
;; | 2 | title over | We are transitioning from title to game |
;; | 1-0 | game | 0: title; 1: game; 2: game over, 3: game over (coin) |
zp_flags = $20
;; Current level of the game.
zp_level = $24
;; The level "kind". Note that `zp_level` can go on forever, but the level
;; "kind" repeats every 8 waves. Hence, this is just a cached version of
;; masking `zp_level`.
zp_level_kind = $25
.endscope
|