-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathhardware_compat.inc
More file actions
573 lines (473 loc) · 19.3 KB
/
hardware_compat.inc
File metadata and controls
573 lines (473 loc) · 19.3 KB
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
;******************************************************************************
; Deprecated Game Boy hardware constant definitions for backwards compatibility
; https://github.com/gbdev/hardware.inc
;******************************************************************************
; To the extent possible under law, the authors of this work have
; waived all copyright and related or neighboring rights to the work.
; See https://creativecommons.org/publicdomain/zero/1.0/ for details.
; SPDX-License-Identifier: CC0-1.0
; If this file was already included, don't do it again
if !def(HARDWARE_COMPAT_INC)
; Check for hardware.inc to have been previously included
if !def(HARDWARE_INC)
fail "'hardware_compat.inc' requires 'hardware.inc'"
endc
; Define the include guard
; (do this after the hardware.inc check since the `def` syntax depends on it)
def HARDWARE_COMPAT_INC equ 1
;******************************************************************************
; Memory-mapped registers ($FFxx range)
;******************************************************************************
def JOYPB_GET_BTN equ B_JOYP_GET_BUTTONS
def JOYPB_GET_DPAD equ B_JOYP_GET_CTRL_PAD
def JOYPF_GET equ JOYP_GET
def JOYP_GET_BTN equ JOYP_GET_BUTTONS
def JOYP_GET_DPAD equ JOYP_GET_CTRL_PAD
def JOYPB_START equ B_JOYP_START
def JOYPB_SELECT equ B_JOYP_SELECT
def JOYPB_B equ B_JOYP_B
def JOYPB_A equ B_JOYP_A
def JOYPB_DOWN equ B_JOYP_DOWN
def JOYPB_UP equ B_JOYP_UP
def JOYPB_LEFT equ B_JOYP_LEFT
def JOYPB_RIGHT equ B_JOYP_RIGHT
def JOYPF_INPUTS equ JOYP_INPUTS
def JOYPF_START equ JOYP_START
def JOYPF_SELECT equ JOYP_SELECT
def JOYPF_B equ JOYP_B
def JOYPF_A equ JOYP_A
def JOYPF_DOWN equ JOYP_DOWN
def JOYPF_UP equ JOYP_UP
def JOYPF_LEFT equ JOYP_LEFT
def JOYPF_RIGHT equ JOYP_RIGHT
def PADB_DOWN equ B_PAD_DOWN
def PADB_UP equ B_PAD_UP
def PADB_LEFT equ B_PAD_LEFT
def PADB_RIGHT equ B_PAD_RIGHT
def PADB_START equ B_PAD_START
def PADB_SELECT equ B_PAD_SELECT
def PADB_B equ B_PAD_B
def PADB_A equ B_PAD_A
def PADF_DOWN equ PAD_DOWN
def PADF_UP equ PAD_UP
def PADF_LEFT equ PAD_LEFT
def PADF_RIGHT equ PAD_RIGHT
def PADF_START equ PAD_START
def PADF_SELECT equ PAD_SELECT
def PADF_B equ PAD_B
def PADF_A equ PAD_A
def PADB_SWAP_START equ B_PAD_SWAP_START
def PADB_SWAP_SELECT equ B_PAD_SWAP_SELECT
def PADB_SWAP_B equ B_PAD_SWAP_B
def PADB_SWAP_A equ B_PAD_SWAP_A
def PADB_SWAP_DOWN equ B_PAD_SWAP_DOWN
def PADB_SWAP_UP equ B_PAD_SWAP_UP
def PADB_SWAP_LEFT equ B_PAD_SWAP_LEFT
def PADB_SWAP_RIGHT equ B_PAD_SWAP_RIGHT
def PADF_SWAP_START equ PAD_SWAP_START
def PADF_SWAP_SELECT equ PAD_SWAP_SELECT
def PADF_SWAP_B equ PAD_SWAP_B
def PADF_SWAP_A equ PAD_SWAP_A
def PADF_SWAP_DOWN equ PAD_SWAP_DOWN
def PADF_SWAP_UP equ PAD_SWAP_UP
def PADF_SWAP_LEFT equ PAD_SWAP_LEFT
def PADF_SWAP_RIGHT equ PAD_SWAP_RIGHT
def SCB_START equ B_SC_START
def SCB_SPEED equ B_SC_SPEED
def SCB_SOURCE equ B_SC_SOURCE
def SCF_START equ SC_START
def SCF_SPEED equ SC_SPEED
def SCF_SOURCE equ SC_SOURCE
def TACB_START equ B_TAC_START
def TACF_STOP equ TAC_STOP
def TACF_START equ TAC_START
def TACF_CLOCK equ TAC_CLOCK
def TACF_4KHZ equ TAC_4KHZ
def TACF_262KHZ equ TAC_262KHZ
def TACF_65KHZ equ TAC_65KHZ
def TACF_16KHZ equ TAC_16KHZ
def IFB_JOYPAD equ B_IF_JOYPAD
def IFB_SERIAL equ B_IF_SERIAL
def IFB_TIMER equ B_IF_TIMER
def IFB_STAT equ B_IF_STAT
def IFB_VBLANK equ B_IF_VBLANK
def IFF_JOYPAD equ IF_JOYPAD
def IFF_SERIAL equ IF_SERIAL
def IFF_TIMER equ IF_TIMER
def IFF_STAT equ IF_STAT
def IFF_VBLANK equ IF_VBLANK
def AUD1SWEEPF_TIME equ AUD1SWEEP_TIME
def AUD1SWEEPB_DIR equ B_AUD1SWEEP_DIR
def AUD1SWEEPF_DIR equ AUD1SWEEP_DIR
def AUD1LENF_DUTY equ AUD1LEN_DUTY
def AUD1LENF_TIMER equ AUD1LEN_TIMER
def AUD1ENVF_INIT_VOL equ AUD1ENV_INIT_VOLUME
def AUD1ENVB_DIR equ B_AUD1ENV_DIR
def AUD1ENVF_DIR equ AUD1ENV_DIR
def AUD1ENVF_PACE equ AUD1ENV_PACE
def AUD1HIGHB_RESTART equ B_AUD1HIGH_RESTART
def AUD1HIGHB_LEN_ENABLE equ B_AUD1HIGH_LEN_ENABLE
def AUD1HIGHF_PERIOD_HIGH equ AUD1HIGH_PERIOD_HIGH
def AUD2LENF_DUTY equ AUD2LEN_DUTY
def AUD2LENF_TIMER equ AUD2LEN_TIMER
def AUD2ENVF_INIT_VOL equ AUD2ENV_INIT_VOLUME
def AUD2ENVB_DIR equ B_AUD2ENV_DIR
def AUD2ENVF_DIR equ AUD2ENV_DIR
def AUD2ENVF_PACE equ AUD2ENV_PACE
def AUD2HIGHB_RESTART equ B_AUD2HIGH_RESTART
def AUD2HIGHB_LEN_ENABLE equ B_AUD2HIGH_LEN_ENABLE
def AUD2HIGHF_PERIOD_HIGH equ AUD2HIGH_PERIOD_HIGH
def AUD3ENAB_ENABLE equ B_AUD3ENA_ENABLE
def AUD3LEVELF_VOLUME equ AUD3LEVEL_VOLUME
def AUD3HIGHB_RESTART equ B_AUD3HIGH_RESTART
def AUD3HIGHB_LEN_ENABLE equ B_AUD3HIGH_LEN_ENABLE
def AUD3HIGHF_PERIOD_HIGH equ AUD3HIGH_PERIOD_HIGH
def AUD4LENF_TIMER equ AUD4LEN_TIMER
def AUD4ENVF_INIT_VOL equ AUD4ENV_INIT_VOLUME
def AUD4ENVB_DIR equ B_AUD4ENV_DIR
def AUD4ENVF_DIR equ AUD4ENV_DIR
def AUD4ENVF_PACE equ AUD4ENV_PACE
def AUD4POLYF_SHIFT equ AUD4POLY_SHIFT
def AUD4POLYB_WIDTH equ B_AUD4POLY_WIDTH
def AUD4POLYF_DIV equ AUD4POLY_DIV
def AUD4GOB_RESTART equ B_AUD4GO_RESTART
def AUD4GOB_LEN_ENABLE equ B_AUD4GO_LEN_ENABLE
def AUDVOLB_VIN_LEFT equ B_AUDVOL_VIN_LEFT
def AUDVOLF_LEFT equ AUDVOL_LEFT
def AUDVOLB_VIN_RIGHT equ B_AUDVOL_VIN_RIGHT
def AUDVOLF_RIGHT equ AUDVOL_RIGHT
def AUDTERMB_4_LEFT equ B_AUDTERM_4_LEFT
def AUDTERMB_3_LEFT equ B_AUDTERM_3_LEFT
def AUDTERMB_2_LEFT equ B_AUDTERM_2_LEFT
def AUDTERMB_1_LEFT equ B_AUDTERM_1_LEFT
def AUDTERMB_4_RIGHT equ B_AUDTERM_4_RIGHT
def AUDTERMB_3_RIGHT equ B_AUDTERM_3_RIGHT
def AUDTERMB_2_RIGHT equ B_AUDTERM_2_RIGHT
def AUDTERMB_1_RIGHT equ B_AUDTERM_1_RIGHT
def AUDENAB_ENABLE equ B_AUDENA_ENABLE
def AUDENAB_ENABLE_CH4 equ B_AUDENA_ENABLE_CH4
def AUDENAB_ENABLE_CH3 equ B_AUDENA_ENABLE_CH3
def AUDENAB_ENABLE_CH2 equ B_AUDENA_ENABLE_CH2
def AUDENAB_ENABLE_CH1 equ B_AUDENA_ENABLE_CH1
def AUDENAF_CH4_OFF equ AUDENA_CH4_OFF
def AUDENAF_CH4_ON equ AUDENA_CH4_ON
def AUDENAF_CH3_OFF equ AUDENA_CH3_OFF
def AUDENAF_CH3_ON equ AUDENA_CH3_ON
def AUDENAF_CH2_OFF equ AUDENA_CH2_OFF
def AUDENAF_CH2_ON equ AUDENA_CH2_ON
def AUDENAF_CH1_OFF equ AUDENA_CH1_OFF
def AUDENAF_CH1_ON equ AUDENA_CH1_ON
def LCDCB_ON equ B_LCDC_ENABLE
def LCDCB_WIN9C00 equ B_LCDC_WIN_MAP
def LCDCB_WINON equ B_LCDC_WINDOW
def LCDCB_BLKS equ B_LCDC_BLOCKS
def LCDCB_BG9C00 equ B_LCDC_BG_MAP
def LCDCB_OBJ16 equ B_LCDC_OBJ_SIZE
def LCDCB_OBJON equ B_LCDC_OBJS
def LCDCB_BGON equ B_LCDC_BG
def LCDCB_PRION equ B_LCDC_PRIO
def LCDCF_OFF equ LCDC_OFF
def LCDCF_ON equ LCDC_ON
def LCDCF_WIN9800 equ LCDC_WIN_9800
def LCDCF_WIN9C00 equ LCDC_WIN_9C00
def LCDCF_WINOFF equ LCDC_WIN_OFF
def LCDCF_WINON equ LCDC_WIN_ON
def LCDCF_BLKS equ LCDC_BLOCKS
def LCDCF_BLK21 equ LCDC_BLOCK21
def LCDCF_BLK01 equ LCDC_BLOCK01
def LCDCF_BG9800 equ LCDC_BG_9800
def LCDCF_BG9C00 equ LCDC_BG_9C00
def LCDCF_OBJ8 equ LCDC_OBJ_8
def LCDCF_OBJ16 equ LCDC_OBJ_16
def LCDCF_OBJOFF equ LCDC_OBJ_OFF
def LCDCF_OBJON equ LCDC_OBJ_ON
def LCDCF_BGOFF equ LCDC_BG_OFF
def LCDCF_BGON equ LCDC_BG_ON
def LCDCF_PRIOFF equ LCDC_PRIO_OFF
def LCDCF_PRION equ LCDC_PRIO_ON
def STATB_LYC equ B_STAT_LYC
def STATB_MODE10 equ B_STAT_MODE_2
def STATB_MODE01 equ B_STAT_MODE_1
def STATB_MODE00 equ B_STAT_MODE_0
def STATB_LYCF equ B_STAT_LYCF
def STATB_BUSY equ B_STAT_BUSY
def STATF_LYC equ STAT_LYC
def STATF_MODE10 equ STAT_MODE_2
def STATF_MODE01 equ STAT_MODE_1
def STATF_MODE00 equ STAT_MODE_0
def STATF_LYCF equ STAT_LYCF
def STATF_BUSY equ STAT_BUSY
def STATF_MODE equ STAT_MODE
def STATF_HBL equ STAT_HBLANK
def STATF_VBL equ STAT_VBLANK
def STATF_OAM equ STAT_OAM
def STATF_LCD equ STAT_LCD
def SYSF_MODE equ SYS_MODE
def SYSF_CGB equ SYS_CGB
def SYSF_DMG equ SYS_DMG
def SYSF_PGB1 equ SYS_PGB1
def SYSF_PGB2 equ SYS_PGB2
def SPDB_DBLSPEED equ B_SPD_DOUBLE
def SPDB_PREPARE equ B_SPD_PREPARE
def SPDF_DBLSPEED equ SPD_DOUBLE
def SPDF_PREPARE equ SPD_PREPARE
def BANKB_ON equ B_BANK_ON
def BANKF_ON equ BANK_ON
def BANKF_OFF equ BANK_OFF
def VDMA_LENB_MODE equ B_VDMA_LEN_MODE
def VDMA_LENF_MODE equ VDMA_LEN_MODE
def VDMA_LENF_MODE_GP equ VDMA_LEN_MODE_GENERAL
def VDMA_LENF_MODE_HBL equ VDMA_LEN_MODE_HBLANK
def VDMA_LENB_BUSY equ B_VDMA_LEN_BUSY
def VDMA_LENF_BUSY equ VDMA_LEN_BUSY
def VDMA_LENF_NO equ VDMA_LEN_NO
def VDMA_LENF_YES equ VDMA_LEN_YES
def VDMA_LENB_SIZE equ VDMA_LEN_SIZE
def RPF_READ equ RP_READ
def RPF_DISREAD equ RP_DISABLE
def RPF_ENREAD equ RP_ENABLE
def RPB_DATAIN equ B_RP_DATA_IN
def RPB_LED_ON equ B_RP_LED_ON
def RPF_DATAIN equ RP_DATA_IN
def RPF_LED_ON equ RP_LED_ON
def RPF_WRITE_LO equ RP_WRITE_LOW
def RPF_WRITE_HI equ RP_WRITE_HIGH
def BGPIB_AUTOINC equ B_BGPI_AUTOINC
def BGPIF_AUTOINC equ BGPI_AUTOINC
def BGPIF_INDEX equ BGPI_INDEX
def OBPIB_AUTOINC equ B_OBPI_AUTOINC
def OBPIF_AUTOINC equ OBPI_AUTOINC
def OBPIF_INDEX equ OBPI_INDEX
def OPRIB_PRI equ B_OPRI_PRIORITY
def OPRIF_PRI equ OPRI_PRIORITY
def WBKF_BANK equ WBK_BANK
def PCM12F_CH2 equ PCM12_CH2
def PCM12F_CH1 equ PCM12_CH1
def PCM34F_CH4 equ PCM34_CH4
def PCM34F_CH3 equ PCM34_CH3
def IEB_JOYPAD equ B_IE_JOYPAD
def IEB_SERIAL equ B_IE_SERIAL
def IEB_TIMER equ B_IE_TIMER
def IEB_STAT equ B_IE_STAT
def IEB_VBLANK equ B_IE_VBLANK
def IEF_JOYPAD equ IE_JOYPAD
def IEF_SERIAL equ IE_SERIAL
def IEF_TIMER equ IE_TIMER
def IEF_STAT equ IE_STAT
def IEF_VBLANK equ IE_VBLANK
;******************************************************************************
; Cartridge registers (MBC)
;******************************************************************************
def CART_SRAM_DISABLE equ RAMG_SRAM_DISABLE
def CART_SRAM_ENABLE equ RAMG_SRAM_ENABLE
def RTC_S equ RAMB_RTC_S
def RTC_M equ RAMB_RTC_M
def RTC_H equ RAMB_RTC_H
def RTC_DL equ RAMB_RTC_DL
def RTC_DH equ RAMB_RTC_DH
def RTC_DHB_CARRY equ B_RAMB_RTC_DH_CARRY
def RTC_DHB_HALT equ B_RAMB_RTC_DH_HALT
def RTC_DHB_HIGH equ B_RAMB_RTC_DH_HIGH
def RTC_DHF_CARRY equ RAMB_RTC_DH_CARRY
def RTC_DHF_HALT equ RAMB_RTC_DH_HALT
def RTC_DHF_HIGH equ RAMB_RTC_DH_HIGH
def CARTB_RUMBLE_ON equ B_RAMB_RUMBLE
def CARTF_RUMBLE_ON equ RAMB_RUMBLE
def CART_RUMBLE_OFF equ RAMB_RUMBLE_OFF
def CART_RUMBLE_ON equ RAMB_RUMBLE_ON
;******************************************************************************
; Screen-related constants
;******************************************************************************
def SCRN_X equ SCREEN_WIDTH_PX
def SCRN_Y equ SCREEN_HEIGHT_PX
def SCRN_X_B equ SCREEN_WIDTH
def SCRN_Y_B equ SCREEN_HEIGHT
def SCRN_B equ SCREEN_AREA
def SCRN_VX equ TILEMAP_WIDTH_PX
def SCRN_VY equ TILEMAP_HEIGHT_PX
def SCRN_VX_B equ TILEMAP_WIDTH
def SCRN_VY_B equ TILEMAP_HEIGHT
def SCRN_V_B equ TILEMAP_AREA
def TILE_X equ TILE_WIDTH
def TILE_Y equ TILE_HEIGHT
def TILE_B equ TILE_SIZE
def COLOR_B equ COLOR_SIZE
def COLORF_GREEN_LOW equ COLOR_GREEN_LOW
def COLORF_RED equ COLOR_RED
def COLORF_BLUE equ COLOR_BLUE
def COLORF_GREEN_HIGH equ COLOR_GREEN_HIGH
def PAL_B equ PAL_SIZE
def _SCRN0 equ TILEMAP0
def _SCRN1 equ TILEMAP1
;******************************************************************************
; OBJ-related constants
;******************************************************************************
def OAMB_PRI equ B_OAM_PRIO
def OAMB_YFLIP equ B_OAM_YFLIP
def OAMB_XFLIP equ B_OAM_XFLIP
def OAMB_PAL1 equ B_OAM_PAL1
def OAMB_BANK1 equ B_OAM_BANK1
def OAMF_PALMASK equ OAM_PALETTE
def OAMF_PRI equ OAM_PRIO
def OAMF_YFLIP equ OAM_YFLIP
def OAMF_XFLIP equ OAM_XFLIP
def OAMF_PAL0 equ OAM_PAL0
def OAMF_PAL1 equ OAM_PAL1
def OAMF_BANK0 equ OAM_BANK0
def OAMF_BANK1 equ OAM_BANK1
def OBJ_B equ OBJ_SIZE
def OAM_B equ OAM_SIZE
;******************************************************************************
; Boot-up register values
;******************************************************************************
def BOOTUPB_B_AGB equ B_BOOTUP_B_AGB
;******************************************************************************
; Aliases
;******************************************************************************
def P1F_GET_BTN equ JOYP_GET_BTN
def P1F_GET_DPAD equ JOYP_GET_DPAD
def P1F_GET_NONE equ JOYP_GET_NONE
def P1F_5 equ JOYP_GET_DPAD
def P1F_4 equ JOYP_GET_BTN
def P1F_3 equ JOYPF_DOWN
def P1F_2 equ JOYPF_UP
def P1F_1 equ JOYPF_LEFT
def P1F_0 equ JOYPF_RIGHT
def KEY0F_MODE equ SYSF_MODE
def KEY0F_CGB equ SYSF_CGB
def KEY0F_DMG equ SYSF_DMG
def KEY0F_PGB1 equ SYSF_PGB1
def KEY0F_PGB2 equ SYSF_PGB2
def KEY1F_DBLSPEED equ SPDF_DBLSPEED
def KEY1F_PREPARE equ SPDF_PREPARE
def HDMA5B_MODE equ VDMA_LENB_MODE
def HDMA5F_MODE_GP equ VDMA_LENF_MODE_GP
def HDMA5F_MODE_HBL equ VDMA_LENF_MODE_HBL
def HDMA5F_BUSY equ VDMA_LENF_BUSY
def BCPSB_AUTOINC equ BGPIB_AUTOINC
def BCPSF_AUTOINC equ BGPIF_AUTOINC
def OCPSB_AUTOINC equ OBPIB_AUTOINC
def OCPSF_AUTOINC equ OBPIF_AUTOINC
def rSMBK equ rWBK
;******************************************************************************
; Memory regions
;******************************************************************************
; Prefer RGBASM and RGBLINK features instead of these values.
; Note that the value of `STARTOF(<section_type>)` is determined at link time.
def _ROM equ $0000 ; $0000-$3FFF / $0000-$7FFF (prefer `STARTOF(ROM0)`)
def _ROMBANK equ $4000 ; $4000-$7FFF (prefer `STARTOF(ROMX)`)
def _VRAM equ $8000 ; $8000-$9FFF (prefer `STARTOF(VRAM)`)
def _SRAM equ $A000 ; $A000-$BFFF (prefer `STARTOF(SRAM)`)
def _RAM equ $C000 ; $C000-$CFFF / $C000-$DFFF (prefer `STARTOF(WRAM0)`)
def _RAMBANK equ $D000 ; $D000-$DFFF (prefer `STARTOF(WRAMX)`)
def _OAMRAM equ $FE00 ; $FE00-$FE9F (prefer `STARTOF(OAM)`)
def _IO equ $FF00 ; $FF00-$FF7F, $FFFF (prefer `ldh [c]` to `ld [_IO+c]`)
def _HRAM equ $FF80 ; $FF80-$FFFE (prefer `STARTOF(HRAM)`)
;******************************************************************************
; Cartridge header
;******************************************************************************
; Prefer RGBFIX instead of these values.
; Zero-filled space can be reserved for fixable header values like this:
;
; SECTION "Cartridge header", ROM0[$0100]
; nop :: jp $0150 ; Entry point ($0100-$0104)
; ds $150 - @, $00 ; Header ($0104-$014FF) filled with $00s for RGBFIX to populate
; -- Nintendo logo ($0104-$0133) ----------------------------------------------
; Prefer `rgbfix -f/--fix-spec l` for the official logo, or `rgbfix -L <logo_file>` for a custom one
MACRO NINTENDO_LOGO
db $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
db $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
db $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E
ENDM
; -- CGB compatibility code ($0143) -------------------------------------------
def CART_COMPATIBLE_DMG equ $00 ; default value if header is zero-filled
def CART_COMPATIBLE_DMG_GBC equ $80 ; prefer `rgbfix -c/--color-compatible`
def CART_COMPATIBLE_GBC equ $C0 ; prefer `rgbfix -C/--color-only`
; -- SGB flag ($0146) ---------------------------------------------------------
def CART_INDICATOR_GB equ $00 ; default value if header is zero-filled
def CART_INDICATOR_SGB equ $03 ; prefer `rgblink -s/--sgb-compatible`
; -- Cartridge type ($0147) ---------------------------------------------------
; Prefer `rgblink -m/--mbc_type <mbc_type>`
def CART_ROM equ $00
def CART_ROM_MBC1 equ $01
def CART_ROM_MBC1_RAM equ $02
def CART_ROM_MBC1_RAM_BAT equ $03
def CART_ROM_MBC2 equ $05
def CART_ROM_MBC2_BAT equ $06
def CART_ROM_RAM equ $08
def CART_ROM_RAM_BAT equ $09
def CART_ROM_MMM01 equ $0B
def CART_ROM_MMM01_RAM equ $0C
def CART_ROM_MMM01_RAM_BAT equ $0D
def CART_ROM_MBC3_BAT_RTC equ $0F
def CART_ROM_MBC3_RAM_BAT_RTC equ $10
def CART_ROM_MBC3 equ $11
def CART_ROM_MBC3_RAM equ $12
def CART_ROM_MBC3_RAM_BAT equ $13
def CART_ROM_MBC5 equ $19
def CART_ROM_MBC5_RAM equ $1A
def CART_ROM_MBC5_RAM_BAT equ $1B
def CART_ROM_MBC5_RUMBLE equ $1C
def CART_ROM_MBC5_RAM_RUMBLE equ $1D
def CART_ROM_MBC5_RAM_BAT_RUMBLE equ $1E
def CART_ROM_MBC7_RAM_BAT_GYRO equ $22
def CART_ROM_POCKET_CAMERA equ $FC
def CART_ROM_BANDAI_TAMA5 equ $FD
def CART_ROM_HUDSON_HUC3 equ $FE
def CART_ROM_HUDSON_HUC1 equ $FF
; -- ROM size ($0148) ---------------------------------------------------------
; Prefer `rgbfix -p/--pad_value <pad_value>`, which pads to the smallest valid size
def CART_ROM_32KB equ $00 ; 2 banks
def CART_ROM_64KB equ $01 ; 4 banks
def CART_ROM_128KB equ $02 ; 8 banks
def CART_ROM_256KB equ $03 ; 16 banks
def CART_ROM_512KB equ $04 ; 32 banks
def CART_ROM_1024KB equ $05 ; 64 banks
def CART_ROM_2048KB equ $06 ; 128 banks
def CART_ROM_4096KB equ $07 ; 256 banks
def CART_ROM_8192KB equ $08 ; 512 banks
def CART_ROM_1152KB equ $52 ; 72 banks
def CART_ROM_1280KB equ $53 ; 80 banks
def CART_ROM_1536KB equ $54 ; 96 banks
; -- SRAM size ($0149) --------------------------------------------------------
; Prefer `rgbfix -r/--ram_size <ram_size>`
def CART_SRAM_NONE equ 0 ; none
def CART_SRAM_2KB equ 1 ; 1 incomplete bank (homebrew only)
def CART_SRAM_8KB equ 2 ; 1 bank
def CART_SRAM_32KB equ 3 ; 4 banks
def CART_SRAM_128KB equ 4 ; 16 banks
; -- Destination code ($014A) -------------------------------------------------
def CART_DEST_JAPANESE equ $00 ; default value if header is zero-filled
def CART_DEST_NON_JAPANESE equ $01 ; prefer `rgbfix -j/--non-japanese`
;******************************************************************************
; Deprecated constants
;******************************************************************************
def AUDLENF_DUTY equ AUD1LENF_DUTY
def AUDLEN_DUTY_12_5 equ AUD1LEN_DUTY_12_5
def AUDLEN_DUTY_25 equ AUD1LEN_DUTY_25
def AUDLEN_DUTY_50 equ AUD1LEN_DUTY_50
def AUDLEN_DUTY_75 equ AUD1LEN_DUTY_75
def AUDLENF_TIMER equ AUD1LENF_TIMER
def AUDENVF_INIT_VOL equ AUD1ENVF_INIT_VOL
def AUDENVB_DIR equ AUD1ENVB_DIR
def AUDENVF_DIR equ AUD1ENVF_DIR
def AUDENV_DOWN equ AUD1ENV_DOWN
def AUDENV_UP equ AUD1ENV_UP
def AUDENVF_PACE equ AUD1ENVF_PACE
def AUDHIGHB_RESTART equ AUD1HIGHB_RESTART
def AUDHIGHB_LEN_ENABLE equ AUD1HIGHB_LEN_ENABLE
def AUDHIGH_RESTART equ AUD1HIGH_RESTART
def AUDHIGH_LENGTH_OFF equ AUD1HIGH_LENGTH_OFF
def AUDHIGH_LENGTH_ON equ AUD1HIGH_LENGTH_ON
def AUDHIGHF_PERIOD_HIGH equ AUD1HIGHF_PERIOD_HIGH
def LCDCB_BG8000 equ LCDCB_BLKS
def LCDCF_BG8800 equ LCDCF_BLK21
def LCDCF_BG8000 equ LCDCF_BLK01
def IEB_HILO equ IEB_JOYPAD
def IEF_HILO equ IEF_JOYPAD
def IEF_LCDC equ IEF_STAT
def sizeof_OAM_ATTRS equ OBJ_B
def _VRAM8000 equ _VRAM
def _VRAM8800 equ _VRAM + $800
def _VRAM9000 equ _VRAM + $1000
endc ; HARDWARE_COMPAT_INC