2222; Define the include guard and the current hardware.inc version 
2323; (do this after the RGBDS version check since the `def` syntax depends on it) 
2424def HARDWARE_INC equ  1 
25- def HARDWARE_INC_VERSION equs  "5.2 .0" 
25+ def HARDWARE_INC_VERSION equs  "5.3 .0" 
2626
2727; Usage: rev_Check_hardware_inc <min_ver> 
2828; Examples: 
@@ -76,6 +76,14 @@ def B_JOYP_RIGHT  equ 0 ; 0 = Right is pressed  (if reading Control Pad) [ro]
7676    def JOYP_LEFT   equ  1  << B_JOYP_LEFT 
7777    def JOYP_RIGHT  equ  1  << B_JOYP_RIGHT 
7878
79+ ; SGB command packet transfer uses for JOYP bits 
80+ def B_JOYP_SGB_ONE  equ  5  ; 0 = sending 1 bit 
81+ def B_JOYP_SGB_ZERO equ  4  ; 0 = sending 0 bit 
82+     def JOYP_SGB_START  equ %00_00_0000  ; start SGB packet transfer 
83+     def JOYP_SGB_ONE    equ %00_01_0000  ; send 1 bit 
84+     def JOYP_SGB_ZERO   equ %00_10_0000  ; send 0 bit 
85+     def JOYP_SGB_FINISH equ %00_11_0000  ; finish SGB packet transfer 
86+ 
7987; Combined input byte, with Control Pad in high nybble (conventional order) 
8088def B_PAD_DOWN   equ  7 
8189def B_PAD_UP     equ  6 
@@ -96,7 +104,6 @@ def B_PAD_A      equ 0
96104    def PAD_B        equ  1  << B_PAD_B 
97105    def PAD_A        equ  1  << B_PAD_A 
98106
99- 
100107; Combined input byte, with Control Pad in low nybble (swapped order) 
101108def B_PAD_SWAP_START  equ  7 
102109def B_PAD_SWAP_SELECT equ  6 
@@ -222,7 +229,7 @@ def AUD1ENV_PACE equ %00000_111 ; how long between envelope iterations
222229                                ; (in 64 Hz ticks, ~15.6 ms apart) [r/w] 
223230
224231; -- AUD1LOW / NR13 ($FF13) --------------------------------------------------- 
225- ; Audio channel 1 period (low 8 bits) [r/w ] 
232+ ; Audio channel 1 period (low 8 bits) [wo ] 
226233def rAUD1LOW equ  $ FF13 
227234
228235; -- AUD1HIGH / NR14 ($FF14) -------------------------------------------------- 
@@ -266,7 +273,7 @@ def AUD2ENV_PACE equ %00000_111 ; how long between envelope iterations
266273                                ; (in 64 Hz ticks, ~15.6 ms apart) [r/w] 
267274
268275; -- AUD2LOW / NR23 ($FF18) --------------------------------------------------- 
269- ; Audio channel 2 period (low 8 bits) [r/w ] 
276+ ; Audio channel 2 period (low 8 bits) [wo ] 
270277def rAUD2LOW equ  $ FF18 
271278
272279; -- AUD2HIGH / NR24 ($FF19) -------------------------------------------------- 
@@ -304,7 +311,7 @@ def AUD3LEVEL_VOLUME equ %0_11_00000 ; volume level [r/w]
304311    def AUD3LEVEL_25   equ %0_11_00000  ; 25% 
305312
306313; -- AUD3LOW / NR33 ($FF1D) --------------------------------------------------- 
307- ; Audio channel 3 period (low 8 bits) [r/w ] 
314+ ; Audio channel 3 period (low 8 bits) [wo ] 
308315def rAUD3LOW equ  $ FF1D 
309316
310317; -- AUD3HIGH / NR34 ($FF1E) -------------------------------------------------- 
@@ -927,15 +934,18 @@ def TILE_HEIGHT equ  8 ; height of tile in pixels
927934def TILE_SIZE   equ  16  ; size of tile in bytes (2 bits/pixel) 
928935
929936def COLOR_SIZE equ  2  ; size of color in bytes (little-endian BGR555) 
930-     def B_COLOR_RED   equ   0  ; bits 4-0 
931-     def B_COLOR_GREEN equ   5  ; bits 9-5 
932-     def B_COLOR_BLUE  equ  10  ; bits 14-10 
937+ def PAL_COLORS equ  4  ; colors per palette 
938+ def PAL_SIZE   equ COLOR_SIZE  *  PAL_COLORS  ; size of palette in bytes 
939+ 
940+ def COLOR_CH_WIDTH equ  5  ; bits per RGB color channel 
941+ def COLOR_CH_MAX   equ ( 1  << COLOR_CH_WIDTH)  -   1 
942+     def B_COLOR_RED   equ COLOR_CH_WIDTH  *   0  ; bits 4-0 
943+     def B_COLOR_GREEN equ COLOR_CH_WIDTH  *   1  ; bits 9-5 
944+     def B_COLOR_BLUE  equ COLOR_CH_WIDTH  *   2  ; bits 14-10 
933945        def COLOR_RED        equ %000_11111   ; for the low byte 
934946        def COLOR_GREEN_LOW  equ %111_00000   ; for the low byte 
935947        def COLOR_GREEN_HIGH equ %0_00000_11  ; for the high byte 
936948        def COLOR_BLUE       equ %0_11111_00  ; for the high byte 
937- def PAL_COLORS equ  4  ; colors per palette 
938- def PAL_SIZE   equ COLOR_SIZE  *  PAL_COLORS  ; size of palette in bytes 
939949
940950; (DMG only) grayscale shade indexes for BGP, OBP0, and OBP1 
941951def SHADE_WHITE equ  %00 
@@ -1032,6 +1042,22 @@ def B_BOOTUP_B_AGB equ 0
10321042    def BOOTUP_B_CGB equ  0  << B_BOOTUP_B_AGB 
10331043    def BOOTUP_B_AGB equ  1  << B_BOOTUP_B_AGB 
10341044
1045+ ; Register C = CPU qualifier 
1046+ def BOOTUP_C_DMG equ  $ 13 
1047+ def BOOTUP_C_SGB equ  $ 14 
1048+ def BOOTUP_C_CGB equ  $ 00  ; CGB or AGB 
1049+ 
1050+ ; Register D = color qualifier 
1051+ def BOOTUP_D_MONO  equ  $ 00  ; DMG, MGB, SGB, or CGB or AGB in DMG mode 
1052+ def BOOTUP_D_COLOR equ  $ FF  ; CGB or AGB 
1053+ 
1054+ ; Register E = CPU qualifier (distinguishes DMG variants) 
1055+ def BOOTUP_E_DMG0        equ  $ C1 
1056+ def BOOTUP_E_DMG         equ  $ C8 
1057+ def BOOTUP_E_SGB         equ  $ 00 
1058+ def BOOTUP_E_CGB_DMGMODE equ  $ 08  ; CGB or AGB in DMG mode 
1059+ def BOOTUP_E_CGB         equ  $ 56  ; CGB or AGB 
1060+ 
10351061
10361062;****************************************************************************** 
10371063; Aliases 
0 commit comments