blob: 6879ffd8a7fa1e8775f8ff8cba5da7bfa949d322 (
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
; From http://bgb.bircd.org/pandocs.htm and https://github.com/tobiasvl/hardware.inc
GBC EQU $11
; MBC3
MBC3SRamEnable EQU $0000
MBC3RomBank EQU $2000
MBC3SRamBank EQU $4000
MBC3LatchClock EQU $6000
MBC3RTC EQU $a000
SRAM_DISABLE EQU $00
SRAM_ENABLE EQU $0a
NUM_SRAM_BANKS EQU 4
RTC_S EQU $08 ; Seconds 0-59 (0-3Bh)
RTC_M EQU $09 ; Minutes 0-59 (0-3Bh)
RTC_H EQU $0a ; Hours 0-23 (0-17h)
RTC_DL EQU $0b ; Lower 8 bits of Day Counter (0-FFh)
RTC_DH EQU $0c ; Upper 1 bit of Day Counter, Carry Bit, Halt Flag
; Bit 0 Most significant bit of Day Counter (Bit 8)
; Bit 6 Halt (0=Active, 1=Stop Timer)
; Bit 7 Day Counter Carry Bit (1=Counter Overflow)
; interrupt flags
INT_VBLANK EQU 0
INT_LCD_STAT EQU 1
INT_TIMER EQU 2
INT_SERIAL EQU 3
INT_JOYPAD EQU 4
; OAM attribute flags
OAM_PALETTE EQU %111
OAM_TILE_BANK EQU 3
OAM_OBP_NUM EQU 4 ; Non CGB Mode Only
OAM_X_FLIP EQU 5
OAM_Y_FLIP EQU 6
OAM_PRIORITY EQU 7 ; 0: OBJ above BG, 1: OBJ behind BG (colors 1-3)
; Hardware registers
rJOYP EQU $ff00 ; Joypad (R/W)
P15 EQU %00100000
JOY_BTNS_SELECT EQU P15
P14 EQU %00010000
JOY_DPAD_SELECT EQU P14
JOY_INPUT_MASK EQU %00001111
P13 EQU %00001000
P12 EQU %00000100
P11 EQU %00000010
P10 EQU %00000001
JOY_INPUT_DOWN EQU P13
JOY_INPUT_UP EQU P12
JOY_INPUT_LEFT EQU P11
JOY_INPUT_RIGHT EQU P10
JOY_INPUT_START EQU P13
JOY_INPUT_SELECT EQU P12
JOY_INPUT_B EQU P11
JOY_INPUT_A EQU P10
SNES_JOYPAD1 EQU $3 ; lower two bits
SNES_JOYPAD2 EQU $2 ; lower two bits
SNES_JOYPAD3 EQU $1 ; lower two bits
SNES_JOYPAD4 EQU $0 ; lower two bits
rSB EQU $ff01 ; Serial transfer data (R/W)
rSC EQU $ff02 ; Serial Transfer Control (R/W)
SC_START EQU $80
SC_INTERNAL EQU $01
SC_EXTERNAL EQU $00
rDIV EQU $ff04 ; Divider Register (R/W)
rTIMA EQU $ff05 ; Timer counter (R/W)
rTMA EQU $ff06 ; Timer Modulo (R/W)
rTAC EQU $ff07 ; Timer Control (R/W)
TAC_START EQU $04
TAC_STOP EQU $00
TAC_4096_HZ EQU $00
TAC_262144_HZ EQU $01
TAC_65536_HZ EQU $02
TAC_16384_HZ EQU $03
rIF EQU $ff0f ; Interrupt Flag (R/W)
rNR10 EQU $ff10 ; Channel 1 Sweep register (R/W)
rNR11 EQU $ff11 ; Channel 1 Sound length/Wave pattern duty (R/W)
rNR12 EQU $ff12 ; Channel 1 Volume Envelope (R/W)
rNR13 EQU $ff13 ; Channel 1 Frequency lo (Write Only)
rNR14 EQU $ff14 ; Channel 1 Frequency hi (R/W)
rNR21 EQU $ff16 ; Channel 2 Sound Length/Wave Pattern Duty (R/W)
rNR22 EQU $ff17 ; Channel 2 Volume Envelope (R/W)
rNR23 EQU $ff18 ; Channel 2 Frequency lo data (W)
rNR24 EQU $ff19 ; Channel 2 Frequency hi data (R/W)
rNR30 EQU $ff1a ; Channel 3 Sound on/off (R/W)
rNR31 EQU $ff1b ; Channel 3 Sound Length
rNR32 EQU $ff1c ; Channel 3 Select output level (R/W)
rNR33 EQU $ff1d ; Channel 3 Frequency's lower data (W)
rNR34 EQU $ff1e ; Channel 3 Frequency's higher data (R/W)
rNR41 EQU $ff20 ; Channel 4 Sound Length (R/W)
rNR42 EQU $ff21 ; Channel 4 Volume Envelope (R/W)
rNR43 EQU $ff22 ; Channel 4 Polynomial Counter (R/W)
rNR44 EQU $ff23 ; Channel 4 Counter/consecutive; Initial (R/W)
rNR50 EQU $ff24 ; Channel control / ON-OFF / Volume (R/W)
rNR51 EQU $ff25 ; Selection of Sound output terminal (R/W)
rNR52 EQU $ff26 ; Sound on/off
rLCDC EQU $ff40 ; LCD Control (R/W)
LCDC_OFF EQU %01111111 ; LCD Control Operation (and)
LCDC_ON EQU %10000000 ; LCD Control Operation (ld/or)
LCDC_ENABLE_F EQU 7
LCDC_WIN9800 EQU %10111111 ; Window Tile Map Display Select (and)
LCDC_WIN9C00 EQU %01000000 ; Window Tile Map Display Select (ld/or)
LCDC_WINSELECT EQU LCDC_WIN9C00
LCDC_WINOFF EQU %11011111 ; Window Display (and)
LCDC_WINON EQU %00100000 ; Window Display (ld/or)
LCDC_WINENABLE EQU LCDC_WINON
LCDC_BG8800 EQU %11101111 ; BG & Window Tile Data Select (and)
LCDC_BG8000 EQU %00010000 ; BG & Window Tile Data Select (ld/or)
LCDC_BGTILEDATA EQU LCDC_BG8000
LCDC_BG9800 EQU %11110111 ; BG Tile Map Display Select (and)
LCDC_BG9C00 EQU %00001000 ; BG Tile Map Display Select (ld/or)
LCDC_BGTILEMAP EQU LCDC_BG9C00
LCDC_OBJ8 EQU %11111011 ; OBJ Construction (and)
LCDC_OBJ16 EQU %00000100 ; OBJ Construction (ld/or)
LCDC_OBJSIZE EQU LCDC_OBJ16
LCDC_OBJOFF EQU %11111101 ; OBJ Display (and)
LCDC_OBJON EQU %00000010 ; OBJ Display (ld/or)
LCDC_OBJENABLE EQU LCDC_OBJON
LCDC_BGOFF EQU %11111110 ; BG Display (and)
LCDC_BGON EQU %00000001 ; BG Display (ld/or)
LCDC_BGENABLE EQU LCDC_BGON
rSTAT EQU $ff41 ; LCDC Status (R/W)
STAT_LYC EQU 6 ; LYC=LY Coincidence
STAT_MODE_OAM EQU 5 ; Mode 10 (OAM)
STAT_MODE_VBLANK EQU 4 ; Mode 01 (V-Blank)
STAT_MODE_HBLANK EQU 3 ; Mode 00 (H-Blank)
STAT_LYCFLAG EQU 2 ; 0:LYC<>LY, 1:LYC=LY
STAT_LCDC_STATUS EQU %00000011
STAT_ON_HBLANK EQU %00000000 ; H-Blank
STAT_ON_VBLANK EQU %00000001 ; V-Blank
STAT_ON_OAM EQU %00000010 ; OAM-RAM is used by system
STAT_ON_LCD EQU %00000011 ; Both OAM and VRAM used by system
STAT_BUSY EQU 1 ; When set, VRAM and OAM access is unsafe
rSCY EQU $ff42 ; Scroll Y (R/W)
rSCX EQU $ff43 ; Scroll X (R/W)
rLY EQU $ff44 ; LCDC Y-Coordinate (R)
LY_VBLANK EQU 145
rLYC EQU $ff45 ; LY Compare (R/W)
rDMA EQU $ff46 ; DMA Transfer and Start Address (W)
rBGP EQU $ff47 ; BG Palette Data (R/W) - Non CGB Mode Only
rOBP0 EQU $ff48 ; Object Palette 0 Data (R/W) - Non CGB Mode Only
rOBP1 EQU $ff49 ; Object Palette 1 Data (R/W) - Non CGB Mode Only
rWY EQU $ff4a ; Window Y Position (R/W)
rWX EQU $ff4b ; Window X Position minus 7 (R/W)
rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch
rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank
rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High
rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low
rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High
rHDMA4 EQU $ff54 ; CGB Mode Only - New DMA Destination, Low
rHDMA5 EQU $ff55 ; CGB Mode Only - New DMA Length/Mode/Start
rRP EQU $ff56 ; CGB Mode Only - Infrared Communications Port
rBGPI EQU $ff68 ; CGB Mode Only - Background Palette Index
rBGPD EQU $ff69 ; CGB Mode Only - Background Palette Data
rOBPI EQU $ff6a ; CGB Mode Only - Sprite Palette Index
rOBPD EQU $ff6b ; CGB Mode Only - Sprite Palette Data
rUNKNOWN1 EQU $ff6c ; (FEh) Bit 0 (Read/Write) - CGB Mode Only
rSVBK EQU $ff70 ; CGB Mode Only - WRAM Bank
rUNKNOWN2 EQU $ff72 ; (00h) - Bit 0-7 (Read/Write)
rUNKNOWN3 EQU $ff73 ; (00h) - Bit 0-7 (Read/Write)
rUNKNOWN4 EQU $ff74 ; (00h) - Bit 0-7 (Read/Write) - CGB Mode Only
rUNKNOWN5 EQU $ff75 ; (8Fh) - Bit 4-6 (Read/Write)
rUNKNOWN6 EQU $ff76 ; (00h) - Always 00h (Read Only)
rUNKNOWN7 EQU $ff77 ; (00h) - Always 00h (Read Only)
rIE EQU $ffff ; Interrupt Enable (R/W)
|