Skip to content

Commit 306d149

Browse files
committed
Update hardware.inc to 5.2.0
1 parent d9ae564 commit 306d149

2 files changed

Lines changed: 56 additions & 35 deletions

File tree

audio/engine.asm

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,28 @@ _InitSound::
1414
push bc
1515
push af
1616
call MusicOff
17+
1718
ld hl, rAUDVOL ; channel control registers
1819
xor a
19-
ld [hli], a ; rAUDVOL ; volume/vin
20+
ld [hli], a ; rAUDVOL ; volume/vin
2021
ld [hli], a ; rAUDTERM ; sfx channels
2122
ld a, $80 ; all channels on
22-
ld [hli], a ; rAUDENA ; music channels
23+
ld [hli], a ; rAUDENA ; music channels
2324

24-
ld hl, rAUD1SWEEP ; sound channel registers
25+
ld hl, AUD1RAM ; sound channel registers
2526
ld e, NUM_MUSIC_CHANS
2627
.clearsound
27-
; sound channel 1 2 3 4
28+
; channel AUD1RAM, AUD2RAM, AUD3RAM, AUD4RAM
2829
xor a
29-
ld [hli], a ; rAUD1SWEEP, rNR20, rAUD3ENA, rNR40 ; sweep = 0
30+
ld [hli], a ; rAUD1SWEEP, unused, rAUD3ENA, unused ; sweep = 0
3031

31-
ld [hli], a ; rAUD1LEN, rAUD2LEN, rAUD3LEN, rAUD4LEN ; length/wavepattern = 0
32+
ld [hli], a ; rAUD1LEN, rAUD2LEN, rAUD3LEN, rAUD4LEN ; length/wavepattern = 0
3233
ld a, $8
33-
ld [hli], a ; rAUD1ENV, rAUD2ENV, rAUD3LEVEL, rAUD4ENV ; envelope = 0
34+
ld [hli], a ; rAUD1ENV, rAUD2ENV, rAUD3LEVEL, rAUD4ENV ; envelope = 0
3435
xor a
35-
ld [hli], a ; rAUD1LOW, rAUD2LOW, rAUD3LOW, rAUD4POLY ; frequency lo = 0
36+
ld [hli], a ; rAUD1LOW, rAUD2LOW, rAUD3LOW, rAUD4POLY ; frequency lo = 0
3637
ld a, $80
37-
ld [hli], a ; rAUD1HIGH, rAUD2HIGH, rAUD3HIGH, rAUD4GO ; restart sound (freq hi = 0)
38+
ld [hli], a ; rAUD1HIGH, rAUD2HIGH, rAUD3HIGH, rAUD4GO ; restart sound (freq hi = 0)
3839
dec e
3940
jr nz, .clearsound
4041

@@ -293,7 +294,7 @@ UpdateChannels:
293294
ldh a, [rAUDENA]
294295
and %10001110 ; ch1 off
295296
ldh [rAUDENA], a
296-
ld hl, rAUD1SWEEP
297+
ld hl, AUD1RAM
297298
call ClearChannel
298299
ret
299300

@@ -353,7 +354,7 @@ UpdateChannels:
353354
ldh a, [rAUDENA]
354355
and %10001101 ; ch2 off
355356
ldh [rAUDENA], a
356-
ld hl, rAUD2LEN - 1 ; there is no rNR20
357+
ld hl, AUD2RAM
357358
call ClearChannel
358359
ret
359360

@@ -399,7 +400,7 @@ UpdateChannels:
399400
ldh a, [rAUDENA]
400401
and %10001011 ; ch3 off
401402
ldh [rAUDENA], a
402-
ld hl, rAUD3ENA
403+
ld hl, AUD3RAM
403404
call ClearChannel
404405
ret
405406

@@ -491,7 +492,7 @@ endr
491492
ldh a, [rAUDENA]
492493
and %10000111 ; ch4 off
493494
ldh [rAUDENA], a
494-
ld hl, rAUD4LEN - 1 ; there is no rNR40
495+
ld hl, AUD4RAM
495496
call ClearChannel
496497
ret
497498

@@ -2798,13 +2799,14 @@ ChannelPointers:
27982799

27992800
ClearChannels::
28002801
; runs ClearChannel for all 4 channels
2801-
ld hl, rAUDVOL
2802+
ld hl, rAUDVOL ; channel control registers
28022803
xor a
2803-
ld [hli], a
2804-
ld [hli], a
2805-
ld a, $80
2806-
ld [hli], a
2807-
ld hl, rAUD1SWEEP
2804+
ld [hli], a ; rAUDVOL ; volume/vin
2805+
ld [hli], a ; rAUDTERM ; sfx channels
2806+
ld a, $80 ; all channels on
2807+
ld [hli], a ; rAUDENA ; music channels
2808+
ld hl, AUD1RAM
2809+
28082810
ld e, NUM_MUSIC_CHANS
28092811
.loop
28102812
call ClearChannel
@@ -2813,20 +2815,20 @@ ClearChannels::
28132815
ret
28142816

28152817
ClearChannel:
2816-
; input: hl = beginning hw sound register (rAUD1SWEEP, rNR20, rAUD3ENA, rNR40)
2818+
; input: hl = beginning hw sound register (AUD1RAM, AUD2RAM, AUD3RAM, AUD4RAM)
28172819
; output: 00 00 80 00 80
28182820

2819-
; sound channel 1 2 3 4
2821+
; channel AUD1RAM, AUD2RAM, AUD3RAM, AUD4RAM
28202822
xor a
2821-
ld [hli], a ; rAUD1SWEEP, rNR20, rAUD3ENA, rNR40 ; sweep = 0
2823+
ld [hli], a ; rAUD1SWEEP, unused, rAUD3ENA, unused ; sweep = 0
28222824

2823-
ld [hli], a ; rAUD1LEN, rAUD2LEN, rAUD3LEN, rAUD4LEN ; length/wavepattern = 0
2825+
ld [hli], a ; rAUD1LEN, rAUD2LEN, rAUD3LEN, rAUD4LEN ; length/wavepattern = 0
28242826
ld a, $8
2825-
ld [hli], a ; rAUD1ENV, rAUD2ENV, rAUD3LEVEL, rAUD4ENV ; envelope = 0
2827+
ld [hli], a ; rAUD1ENV, rAUD2ENV, rAUD3LEVEL, rAUD4ENV ; envelope = 0
28262828
xor a
2827-
ld [hli], a ; rAUD1LOW, rAUD2LOW, rAUD3LOW, rAUD4POLY ; frequency lo = 0
2829+
ld [hli], a ; rAUD1LOW, rAUD2LOW, rAUD3LOW, rAUD4POLY ; frequency lo = 0
28282830
ld a, $80
2829-
ld [hli], a ; rAUD1HIGH, rAUD2HIGH, rAUD3HIGH, rAUD4GO ; restart sound (freq hi = 0)
2831+
ld [hli], a ; rAUD1HIGH, rAUD2HIGH, rAUD3HIGH, rAUD4GO ; restart sound (freq hi = 0)
28302832
ret
28312833

28322834
PlayTrainerEncounterMusic::

constants/hardware.inc

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ endc
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)
2424
def HARDWARE_INC equ 1
25-
def HARDWARE_INC_VERSION equs "5.1.0"
25+
def HARDWARE_INC_VERSION equs "5.2.0"
2626

2727
; Usage: rev_Check_hardware_inc <min_ver>
2828
; Examples:
@@ -66,7 +66,7 @@ def B_JOYP_DOWN equ 3 ; 0 = Down is pressed (if reading Control Pad) [ro]
6666
def B_JOYP_UP equ 2 ; 0 = Up is pressed (if reading Control Pad) [ro]
6767
def B_JOYP_LEFT equ 1 ; 0 = Left is pressed (if reading Control Pad) [ro]
6868
def B_JOYP_RIGHT equ 0 ; 0 = Right is pressed (if reading Control Pad) [ro]
69-
def JOYP_INPUTS equ %0000_1111
69+
def JOYP_INPUTS equ %0000_1111 ; bits equal to 0 indicate pressed (when reading inputs)
7070
def JOYP_START equ 1 << B_JOYP_START
7171
def JOYP_SELECT equ 1 << B_JOYP_SELECT
7272
def JOYP_B equ 1 << B_JOYP_B
@@ -422,8 +422,6 @@ def B_AUDENA_ENABLE_CH1 equ 0 ; 1 = channel 1 is running [ro]
422422

423423
; -- AUD3WAVE ($FF30-$FF3F) ---------------------------------------------------
424424
; Audio channel 3 wave pattern RAM [r/w]
425-
def _AUD3WAVERAM equ $FF30 ; $FF30-$FF3F
426-
427425
def rAUD3WAVE_0 equ $FF30
428426
def rAUD3WAVE_1 equ $FF31
429427
def rAUD3WAVE_2 equ $FF32
@@ -441,8 +439,6 @@ def rAUD3WAVE_D equ $FF3D
441439
def rAUD3WAVE_E equ $FF3E
442440
def rAUD3WAVE_F equ $FF3F
443441

444-
def AUD3WAVE_SIZE equ 16
445-
446442
; -- LCDC ($FF40) -------------------------------------------------------------
447443
; PPU graphics control
448444
def rLCDC equ $FF40
@@ -551,7 +547,7 @@ def rWY equ $FF4A
551547
; X coordinate of the Window's top-left pixel, plus 7 (7-166) [r/w]
552548
def rWX equ $FF4B
553549

554-
def WX_OFS equ 7 ; subtract this to get the actual Window Y coordinate
550+
def WX_OFS equ 7 ; subtract this to get the actual Window X coordinate
555551

556552
; -- SYS / KEY0 ($FF4C) -------------------------------------------------------
557553
; (CGB boot ROM only) CPU mode select
@@ -606,7 +602,7 @@ def rVDMA_SRC_LOW equ $FF52
606602
; (CGB only) VRAM DMA destination address (high 8 bits) [wo]
607603
def rVDMA_DEST_HIGH equ $FF53
608604

609-
; -- VDMA_DEST_LOW / HDMA3 ($FF54) --------------------------------------------
605+
; -- VDMA_DEST_LOW / HDMA4 ($FF54) --------------------------------------------
610606
; (CGB only) VRAM DMA destination address (low 8 bits) [wo]
611607
def rVDMA_DEST_LOW equ $FF54
612608

@@ -812,7 +808,7 @@ def rRTCREG equ $A000
812808

813809
; ** MBC5 only ****************************************************************
814810

815-
; -- ROMB0 ($2000-$3FFF) ------------------------------------------------------
811+
; -- ROMB0 ($2000-$2FFF) ------------------------------------------------------
816812
; ROM bank number low byte (bits 0-7) [wo]
817813
def rROMB0 equ $2000
818814

@@ -868,12 +864,14 @@ def RAMREG_ENABLE equ $40
868864
; Latch accelerometer start [wo]
869865
def rACCLATCH0 equ $A000
870866

867+
; Write $55 to ACCLATCH0 to erase the latched data
871868
def ACCLATCH0_START equ $55
872869

873870
; -- ACCLATCH1 ($Ax1x) --------------------------------------------------------
874871
; Latch accelerometer finish [wo]
875872
def rACCLATCH1 equ $A010
876873

874+
; Write $AA to ACCLATCH1 to latch the accelerometer and update ACCEL*
877875
def ACCLATCH1_FINISH equ $AA
878876

879877
; -- ACCELX0 ($Ax2x) ----------------------------------------------------------
@@ -903,6 +901,7 @@ def rEEPROM equ $A080
903901
; IR register [r/w]
904902
def rIRREG equ $A000
905903

904+
; whether the IR transmitter sees light
906905
def IR_LED_OFF equ $C0
907906
def IR_LED_ON equ $C1
908907

@@ -938,6 +937,12 @@ def COLOR_SIZE equ 2 ; size of color in bytes (little-endian BGR555)
938937
def PAL_COLORS equ 4 ; colors per palette
939938
def PAL_SIZE equ COLOR_SIZE * PAL_COLORS ; size of palette in bytes
940939

940+
; (DMG only) grayscale shade indexes for BGP, OBP0, and OBP1
941+
def SHADE_WHITE equ %00
942+
def SHADE_LIGHT equ %01
943+
def SHADE_DARK equ %10
944+
def SHADE_BLACK equ %11
945+
941946
; Tilemaps the BG or Window can read from (controlled by LCDC)
942947
def TILEMAP0 equ $9800 ; $9800-$9BFF
943948
def TILEMAP1 equ $9C00 ; $9C00-$9FFF
@@ -986,6 +991,20 @@ def OAM_COUNT equ 40 ; how many OBJs there are room for in OAM
986991
def OAM_SIZE equ OBJ_SIZE * OAM_COUNT
987992

988993

994+
;******************************************************************************
995+
; Audio channel RAM addresses
996+
;******************************************************************************
997+
998+
def AUD1RAM equ $FF10 ; $FF10-$FF14
999+
def AUD2RAM equ $FF15 ; $FF15-$FF19
1000+
def AUD3RAM equ $FF1A ; $FF1A-$FF1E
1001+
def AUD4RAM equ $FF1F ; $FF1F-$FF23
1002+
def AUDRAM_SIZE equ 5 ; size of each audio channel RAM in bytes
1003+
1004+
def _AUD3WAVERAM equ $FF30 ; $FF30-$FF3F
1005+
def AUD3WAVE_SIZE equ 16 ; size of wave pattern RAM in bytes
1006+
1007+
9891008
;******************************************************************************
9901009
; Interrupt vector addresses
9911010
;******************************************************************************

0 commit comments

Comments
 (0)