• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Development: ipatix' High Quality Sound Mixer | V2.1 released!

ipatix

Sound Expert
145
Posts
15
Years
Emerald itself without modifications only uses a max of 5 sounds at the same time which doesn't produce that much noise (the more channels, the more noisy it gets) and you only hear it if you listen very carefully.
 
28
Posts
20
Years
  • Seen Sep 4, 2020
I don't suppose you have a disassembly of the original sound engine or the bios one do you?
 

ipatix

Sound Expert
145
Posts
15
Years
I can provide one tomorrow. I won't write another documentation though.

Edit: Sry, didn't get enough time today, I'll so it as soon as possible.

Edit 2: There we go:

Code:
ROM:082F4E20 ; =============== S U B R O U T I N E =======================================
ROM:082F4E20
ROM:082F4E20
ROM:082F4E20 entry
ROM:082F4E20
ROM:082F4E20 ARG_FRAME_LENGTH=  0
ROM:082F4E20 ARG_CHN_LEFT    =  4
ROM:082F4E20 ARG_BUFFER_POS  =  8
ROM:082F4E20 ARG_ABS_LOOP_OFFSET=  0xC
ROM:082F4E20 ARG_LOOP_MODE   =  0x10
ROM:082F4E20 ARG_SCAN_LIMIT  =  0x14
ROM:082F4E20 ARG_VAR_AREA    =  0x18
ROM:082F4E20
ROM:082F4E20                 LDRB    R3, [R0,#5]
ROM:082F4E22                 CMP     R3, #0
ROM:082F4E24                 BEQ     clear_buffer
ROM:082F4E26                 ADR     R1, do_reverb
ROM:082F4E28                 BX      R1 ; do_reverb
ROM:082F4E28 ; ---------------------------------------------------------------------------
ROM:082F4E2A                 DCB    0
ROM:082F4E2B                 DCB    0
ROM:082F4E2C ; ---------------------------------------------------------------------------
ROM:082F4E2C                 CODE32
ROM:082F4E2C
ROM:082F4E2C do_reverb                               ; CODE XREF: entry+8j
ROM:082F4E2C                                         ; DATA XREF: entry+6o
ROM:082F4E2C                 CMP     R4, #2
ROM:082F4E30                 ADDEQ   R7, R0, #0x350
ROM:082F4E34                 ADDNE   R7, R5, R8
ROM:082F4E38                 MOV     R4, R8
ROM:082F4E3C
ROM:082F4E3C reverb_loop                             ; CODE XREF: entry+54j
ROM:082F4E3C                 LDRSB   R0, [R5,R6]
ROM:082F4E40                 LDRSB   R1, [R5]
ROM:082F4E44                 ADD     R0, R0, R1
ROM:082F4E48                 LDRSB   R1, [R7,R6]
ROM:082F4E4C                 ADD     R0, R0, R1
ROM:082F4E50                 LDRSB   R1, [R7],#1
ROM:082F4E54                 ADD     R0, R0, R1
ROM:082F4E58                 MUL     R1, R0, R3
ROM:082F4E5C                 MOV     R0, R1,ASR#9
ROM:082F4E60                 TST     R0, #0x80
ROM:082F4E64                 ADDNE   R0, R0, #1
ROM:082F4E68                 STRB    R0, [R5,R6]
ROM:082F4E6C                 STRB    R0, [R5],#1
ROM:082F4E70                 SUBS    R4, R4, #1
ROM:082F4E74                 BGT     reverb_loop
ROM:082F4E78                 ADR     R0, (loop_setup+1)
ROM:082F4E7C                 BX      R0 ; loop_setup
ROM:082F4E80 ; ---------------------------------------------------------------------------
ROM:082F4E80                 CODE16
ROM:082F4E80
ROM:082F4E80 clear_buffer                            ; CODE XREF: entry+4j
ROM:082F4E80                 MOVS    R0, #0
ROM:082F4E82                 MOV     R1, R8
ROM:082F4E84                 ADDS    R6, R6, R5
ROM:082F4E86                 LSRS    R1, R1, #3
ROM:082F4E88                 BCC     clear_buffer_align_8
ROM:082F4E8A                 STMIA   R5!, {R0}
ROM:082F4E8C                 STMIA   R6!, {R0}
ROM:082F4E8E
ROM:082F4E8E clear_buffer_align_8                    ; CODE XREF: entry+68j
ROM:082F4E8E                 LSRS    R1, R1, #1
ROM:082F4E90                 BCC     clear_buffer_align_16
ROM:082F4E92                 STMIA   R5!, {R0}
ROM:082F4E94                 STMIA   R6!, {R0}
ROM:082F4E96                 STMIA   R5!, {R0}
ROM:082F4E98                 STMIA   R6!, {R0}
ROM:082F4E9A
ROM:082F4E9A clear_buffer_align_16                   ; CODE XREF: entry+70j
ROM:082F4E9A                                         ; entry+8Cj
ROM:082F4E9A                 STMIA   R5!, {R0}
ROM:082F4E9C                 STMIA   R6!, {R0}
ROM:082F4E9E                 STMIA   R5!, {R0}
ROM:082F4EA0                 STMIA   R6!, {R0}
ROM:082F4EA2                 STMIA   R5!, {R0}
ROM:082F4EA4                 STMIA   R6!, {R0}
ROM:082F4EA6                 STMIA   R5!, {R0}
ROM:082F4EA8                 STMIA   R6!, {R0}
ROM:082F4EAA                 SUBS    R1, #1
ROM:082F4EAC                 BGT     clear_buffer_align_16
ROM:082F4EAE
ROM:082F4EAE loop_setup                              ; CODE XREF: entry+5Cj
ROM:082F4EAE                                         ; DATA XREF: entry+58o
ROM:082F4EAE                 LDR     R4, [SP,#ARG_VAR_AREA]
ROM:082F4EB0                 LDR     R0, [R4,#0x18]
ROM:082F4EB2                 MOV     R12, R0
ROM:082F4EB4                 LDRB    R0, [R4,#6]
ROM:082F4EB6                 ADDS    R4, #0x50
ROM:082F4EB8
ROM:082F4EB8 channel_main_loop                       ; CODE XREF: entry+3A0j
ROM:082F4EB8                 STR     R0, [SP,#ARG_CHN_LEFT]
ROM:082F4EBA                 LDR     R3, [R4,#0x24]
ROM:082F4EBC                 LDR     R0, [SP,#ARG_SCAN_LIMIT]
ROM:082F4EBE                 CMP     R0, #0
ROM:082F4EC0                 BEQ     channel_begin
ROM:082F4EC2                 LDR     R1, =0x4000006
ROM:082F4EC4                 LDRB    R1, [R1]
ROM:082F4EC6                 CMP     R1, #0xA0
ROM:082F4EC8                 BCS     scanline_vblank
ROM:082F4ECA                 ADDS    R1, #0xE4
ROM:082F4ECC
ROM:082F4ECC scanline_vblank                         ; CODE XREF: entry+A8j
ROM:082F4ECC                 CMP     R1, R0
ROM:082F4ECE                 BCC     channel_begin
ROM:082F4ED0                 B       mixer_end
ROM:082F4ED0 ; ---------------------------------------------------------------------------
ROM:082F4ED2                 DCB    0
ROM:082F4ED3                 DCB    0
ROM:082F4ED4 vcount_reg                              ; DATA XREF: entry+A2r
ROM:082F4ED4                 DCD 0x4000006
ROM:082F4ED8 ; ---------------------------------------------------------------------------
ROM:082F4ED8
ROM:082F4ED8 channel_begin                           ; CODE XREF: entry+A0j
ROM:082F4ED8                                         ; entry+AEj
ROM:082F4ED8                 LDRB    R6, [R4]
ROM:082F4EDA                 MOVS    R0, #0xC7
ROM:082F4EDC                 TST     R0, R6
ROM:082F4EDE                 BNE     channel_status_check
ROM:082F4EE0                 B       channel_check_processed_channels
ROM:082F4EE2 ; ---------------------------------------------------------------------------
ROM:082F4EE2
ROM:082F4EE2 channel_status_check                    ; CODE XREF: entry+BEj
ROM:082F4EE2                 MOVS    R0, #0x80
ROM:082F4EE4                 TST     R0, R6
ROM:082F4EE6                 BEQ     channel_envelope_handler
ROM:082F4EE8                 MOVS    R0, #0x40
ROM:082F4EEA                 TST     R0, R6
ROM:082F4EEC                 BNE     channel_stop_func
ROM:082F4EEE                 MOVS    R6, #3
ROM:082F4EF0                 STRB    R6, [R4]
ROM:082F4EF2                 MOVS    R0, R3
ROM:082F4EF4                 ADDS    R0, #0x10
ROM:082F4EF6                 LDR     R1, [R4,#0x18]
ROM:082F4EF8                 ADDS    R0, R0, R1
ROM:082F4EFA                 STR     R0, [R4,#0x28]
ROM:082F4EFC                 LDR     R0, [R3,#0xC]
ROM:082F4EFE                 SUBS    R0, R0, R1
ROM:082F4F00                 STR     R0, [R4,#0x18]
ROM:082F4F02                 MOVS    R5, #0
ROM:082F4F04                 STRB    R5, [R4,#9]
ROM:082F4F06                 STR     R5, [R4,#0x1C]
ROM:082F4F08                 LDRB    R2, [R3,#3]
ROM:082F4F0A                 MOVS    R0, #0xC0
ROM:082F4F0C                 TST     R0, R2
ROM:082F4F0E                 BEQ     channel_adsr_attack_handler
ROM:082F4F10                 MOVS    R0, #0x10
ROM:082F4F12                 ORRS    R6, R0
ROM:082F4F14                 STRB    R6, [R4]
ROM:082F4F16                 B       channel_adsr_attack_handler
ROM:082F4F18 ; ---------------------------------------------------------------------------
ROM:082F4F18
ROM:082F4F18 channel_envelope_handler                ; CODE XREF: entry+C6j
ROM:082F4F18                 LDRB    R5, [R4,#9]
ROM:082F4F1A                 MOVS    R0, #4
ROM:082F4F1C                 TST     R0, R6
ROM:082F4F1E                 BEQ     channel_adsr_no_echo
ROM:082F4F20                 LDRB    R0, [R4,#0xD]
ROM:082F4F22                 SUBS    R0, #1
ROM:082F4F24                 STRB    R0, [R4,#0xD]
ROM:082F4F26                 BHI     channel_vol_calc
ROM:082F4F28
ROM:082F4F28 channel_stop_func                       ; CODE XREF: entry+CCj
ROM:082F4F28                                         ; entry+124j
ROM:082F4F28                 MOVS    R0, #0
ROM:082F4F2A                 STRB    R0, [R4]
ROM:082F4F2C                 B       channel_check_processed_channels
ROM:082F4F2E ; ---------------------------------------------------------------------------
ROM:082F4F2E
ROM:082F4F2E channel_adsr_no_echo                    ; CODE XREF: entry+FEj
ROM:082F4F2E                 MOVS    R0, #0x40
ROM:082F4F30                 TST     R0, R6
ROM:082F4F32                 BEQ     channel_adsr_no_release
ROM:082F4F34                 LDRB    R0, [R4,#7]
ROM:082F4F36                 MULS    R5, R0
ROM:082F4F38                 LSRS    R5, R5, #8
ROM:082F4F3A                 LDRB    R0, [R4,#0xC]
ROM:082F4F3C                 CMP     R5, R0
ROM:082F4F3E                 BHI     channel_vol_calc
ROM:082F4F40
ROM:082F4F40 channel_adsr_check_echo_disabled        ; CODE XREF: entry+144j
ROM:082F4F40                 LDRB    R5, [R4,#0xC]
ROM:082F4F42                 CMP     R5, #0
ROM:082F4F44                 BEQ     channel_stop_func
ROM:082F4F46                 MOVS    R0, #4
ROM:082F4F48                 ORRS    R6, R0
ROM:082F4F4A                 STRB    R6, [R4]
ROM:082F4F4C                 B       channel_vol_calc
ROM:082F4F4E ; ---------------------------------------------------------------------------
ROM:082F4F4E
ROM:082F4F4E channel_adsr_no_release                 ; CODE XREF: entry+112j
ROM:082F4F4E                 MOVS    R2, #3
ROM:082F4F50                 ANDS    R2, R6
ROM:082F4F52                 CMP     R2, #2
ROM:082F4F54                 BNE     channel_adsr_no_decay
ROM:082F4F56                 LDRB    R0, [R4,#5]
ROM:082F4F58                 MULS    R5, R0
ROM:082F4F5A                 LSRS    R5, R5, #8
ROM:082F4F5C                 LDRB    R0, [R4,#6]
ROM:082F4F5E                 CMP     R5, R0
ROM:082F4F60                 BHI     channel_vol_calc
ROM:082F4F62                 MOVS    R5, R0
ROM:082F4F64                 BEQ     channel_adsr_check_echo_disabled
ROM:082F4F66                 SUBS    R6, #1
ROM:082F4F68                 STRB    R6, [R4]
ROM:082F4F6A                 B       channel_vol_calc
ROM:082F4F6C ; ---------------------------------------------------------------------------
ROM:082F4F6C
ROM:082F4F6C channel_adsr_no_decay                   ; CODE XREF: entry+134j
ROM:082F4F6C                 CMP     R2, #3
ROM:082F4F6E                 BNE     channel_vol_calc
ROM:082F4F70
ROM:082F4F70 channel_adsr_attack_handler             ; CODE XREF: entry+EEj
ROM:082F4F70                                         ; entry+F6j
ROM:082F4F70                 LDRB    R0, [R4,#4]
ROM:082F4F72                 ADDS    R5, R5, R0
ROM:082F4F74                 CMP     R5, #0xFF
ROM:082F4F76                 BCC     channel_vol_calc
ROM:082F4F78                 MOVS    R5, #0xFF
ROM:082F4F7A                 SUBS    R6, #1
ROM:082F4F7C                 STRB    R6, [R4]
ROM:082F4F7E
ROM:082F4F7E channel_vol_calc                        ; CODE XREF: entry+106j
ROM:082F4F7E                                         ; entry+11Ej ...
ROM:082F4F7E                 STRB    R5, [R4,#9]
ROM:082F4F80                 LDR     R0, [SP,#ARG_VAR_AREA]
ROM:082F4F82                 LDRB    R0, [R0,#7]
ROM:082F4F84                 ADDS    R0, #1
ROM:082F4F86                 MULS    R0, R5
ROM:082F4F88                 LSRS    R5, R0, #4
ROM:082F4F8A                 LDRB    R0, [R4,#2]
ROM:082F4F8C                 MULS    R0, R5
ROM:082F4F8E                 LSRS    R0, R0, #8
ROM:082F4F90                 STRB    R0, [R4,#0xA]
ROM:082F4F92                 LDRB    R0, [R4,#3]
ROM:082F4F94                 MULS    R0, R5
ROM:082F4F96                 LSRS    R0, R0, #8
ROM:082F4F98                 STRB    R0, [R4,#0xB]
ROM:082F4F9A                 MOVS    R0, #0x10
ROM:082F4F9C                 ANDS    R0, R6
ROM:082F4F9E                 STR     R0, [SP,#ARG_LOOP_MODE]
ROM:082F4FA0                 BEQ     channel_setup_mixing
ROM:082F4FA2                 MOVS    R0, R3
ROM:082F4FA4                 ADDS    R0, #0x10
ROM:082F4FA6                 LDR     R1, [R3,#8]
ROM:082F4FA8                 ADDS    R0, R0, R1
ROM:082F4FAA                 STR     R0, [SP,#ARG_ABS_LOOP_OFFSET]
ROM:082F4FAC                 LDR     R0, [R3,#0xC]
ROM:082F4FAE                 SUBS    R0, R0, R1
ROM:082F4FB0                 STR     R0, [SP,#ARG_LOOP_MODE]
ROM:082F4FB2
ROM:082F4FB2 channel_setup_mixing                    ; CODE XREF: entry+180j
ROM:082F4FB2                 LDR     R5, [SP,#ARG_BUFFER_POS]
ROM:082F4FB4                 LDR     R2, [R4,#0x18]
ROM:082F4FB6                 LDR     R3, [R4,#0x28]
ROM:082F4FB8                 ADR     R0, channel_mixing
ROM:082F4FBA                 BX      R0 ; channel_mixing
ROM:082F4FBC                 CODE32
ROM:082F4FBC
ROM:082F4FBC channel_mixing                          ; DATA XREF: entry+198o
ROM:082F4FBC                 STR     R8, [SP,#ARG_FRAME_LENGTH]
ROM:082F4FC0                 LDR     R9, [R4,#0x1C]
ROM:082F4FC4                 LDRB    R10, [R4,#0xA]
ROM:082F4FC8                 LDRB    R11, [R4,#0xB]
ROM:082F4FCC                 LDRB    R0, [R4,#1]
ROM:082F4FD0                 TST     R0, #0x30
ROM:082F4FD4                 BEQ     channel_uncompressed_mixing
ROM:082F4FD8                 BL      channel_compressed_mixing
ROM:082F4FDC                 B       channel_var_freq_mixing_store_fine_pos
ROM:082F4FE0 ; ---------------------------------------------------------------------------
ROM:082F4FE0
ROM:082F4FE0 channel_uncompressed_mixing             ; CODE XREF: entry+1B4j
ROM:082F4FE0                 MOV     R10, R10,LSL#16
ROM:082F4FE4                 MOV     R11, R11,LSL#16
ROM:082F4FE8                 LDRB    R0, [R4,#1]
ROM:082F4FEC                 TST     R0, #8
ROM:082F4FF0                 BEQ     channel_var_freq_mixing
ROM:082F4FF4
ROM:082F4FF4 channel_fixed_freq_mixing_loop          ; CODE XREF: entry+284j
ROM:082F4FF4                 CMP     R2, #4
ROM:082F4FF8                 BLE     channel_fixed_freq_mixing_fetch_last
ROM:082F4FFC                 SUBS    R2, R2, R8
ROM:082F5000                 MOVGT   R9, #0
ROM:082F5004                 BGT     channel_fixed_freq_mixing_fetch_samples
ROM:082F5008                 MOV     R9, R8
ROM:082F500C                 ADD     R2, R2, R8
ROM:082F5010                 SUB     R8, R2, #4
ROM:082F5014                 SUB     R9, R9, R8
ROM:082F5018                 ANDS    R2, R2, #3
ROM:082F501C                 MOVEQ   R2, #4
ROM:082F5020
ROM:082F5020 channel_fixed_freq_mixing_fetch_samples ; CODE XREF: entry+1E4j
ROM:082F5020                                         ; entry+238j
ROM:082F5020                 LDR     R6, [R5]
ROM:082F5024                 LDR     R7, [R5,#0x630]
ROM:082F5028
ROM:082F5028 channel_fixed_load_new_samples          ; CODE XREF: entry+228j
ROM:082F5028                 LDRSB   R0, [R3],#1
ROM:082F502C                 MUL     R1, R10, R0
ROM:082F5030                 BIC     R1, R1, #0xFF0000
ROM:082F5034                 ADD     R6, R1, R6,ROR#8
ROM:082F5038                 MUL     R1, R11, R0
ROM:082F503C                 BIC     R1, R1, #0xFF0000
ROM:082F5040                 ADD     R7, R1, R7,ROR#8
ROM:082F5044                 ADDS    R5, R5, #0x40000000
ROM:082F5048                 BCC     channel_fixed_load_new_samples
ROM:082F504C                 STR     R7, [R5,#0x630]
ROM:082F5050                 STR     R6, [R5],#4
ROM:082F5054                 SUBS    R8, R8, #4
ROM:082F5058                 BGT     channel_fixed_freq_mixing_fetch_samples
ROM:082F505C                 ADDS    R8, R8, R9
ROM:082F5060                 BEQ     channel_mixing_store_pos
ROM:082F5064
ROM:082F5064 channel_fixed_freq_mixing_fetch_last    ; CODE XREF: entry+1D8j
ROM:082F5064                 LDR     R6, [R5]
ROM:082F5068                 LDR     R7, [R5,#0x630]
ROM:082F506C
ROM:082F506C channel_fixed_load_last_samples         ; CODE XREF: entry+274j
ROM:082F506C                 LDRSB   R0, [R3],#1
ROM:082F5070                 MUL     R1, R10, R0
ROM:082F5074                 BIC     R1, R1, #0xFF0000
ROM:082F5078                 ADD     R6, R1, R6,ROR#8
ROM:082F507C                 MUL     R1, R11, R0
ROM:082F5080                 BIC     R1, R1, #0xFF0000
ROM:082F5084                 ADD     R7, R1, R7,ROR#8
ROM:082F5088                 SUBS    R2, R2, #1
ROM:082F508C                 BEQ     channel_fixed_freq_loop_handler
ROM:082F5090
ROM:082F5090 channel_fixed_freq_count_sample         ; CODE XREF: entry+2C8j
ROM:082F5090                 ADDS    R5, R5, #0x40000000
ROM:082F5094                 BCC     channel_fixed_load_last_samples
ROM:082F5098                 STR     R7, [R5,#0x630]
ROM:082F509C                 STR     R6, [R5],#4
ROM:082F50A0                 SUBS    R8, R8, #4
ROM:082F50A4                 BGT     channel_fixed_freq_mixing_loop
ROM:082F50A8                 B       channel_mixing_store_pos
ROM:082F50AC ; ---------------------------------------------------------------------------
ROM:082F50AC
ROM:082F50AC channel_var_freq_mixing_loop_handler    ; CODE XREF: entry+348j
ROM:082F50AC                 LDR     R0, [SP,#ARG_VAR_AREA]
ROM:082F50B0                 CMP     R0, #0
ROM:082F50B4                 BEQ     channel_var_freq_mixing_stop_channel
ROM:082F50B8                 LDR     R3, [SP,#ARG_SCAN_LIMIT]
ROM:082F50BC                 RSB     LR, R2, #0
ROM:082F50C0
ROM:082F50C0 channel_var_freq_mixing_set_loop        ; CODE XREF: entry+2ACj
ROM:082F50C0                 ADDS    R2, R0, R2
ROM:082F50C4                 BGT     channel_var_freq_mixing_fetch_next
ROM:082F50C8                 SUB     LR, LR, R0
ROM:082F50CC                 B       channel_var_freq_mixing_set_loop
ROM:082F50D0 ; ---------------------------------------------------------------------------
ROM:082F50D0
ROM:082F50D0 channel_var_freq_mixing_stop_channel    ; CODE XREF: entry+294j
ROM:082F50D0                 LDMFD   SP!, {R4,R12}
ROM:082F50D4                 MOV     R2, #0
ROM:082F50D8                 B       channel_fixed_freq_stop_mixing
ROM:082F50DC ; ---------------------------------------------------------------------------
ROM:082F50DC
ROM:082F50DC channel_fixed_freq_loop_handler         ; CODE XREF: entry+26Cj
ROM:082F50DC                 LDR     R2, [SP,#ARG_LOOP_MODE]
ROM:082F50E0                 CMP     R2, #0
ROM:082F50E4                 LDRNE   R3, [SP,#ARG_ABS_LOOP_OFFSET]
ROM:082F50E8                 BNE     channel_fixed_freq_count_sample
ROM:082F50EC
ROM:082F50EC channel_fixed_freq_stop_mixing          ; CODE XREF: entry+2B8j
ROM:082F50EC                 STRB    R2, [R4]
ROM:082F50F0                 MOV     R0, R5,LSR#30
ROM:082F50F4                 BIC     R5, R5, #0xC0000000
ROM:082F50F8                 RSB     R0, R0, #3
ROM:082F50FC                 MOV     R0, R0,LSL#3
ROM:082F5100                 MOV     R6, R6,ROR R0
ROM:082F5104                 MOV     R7, R7,ROR R0
ROM:082F5108                 STR     R7, [R5,#0x630]
ROM:082F510C                 STR     R6, [R5],#4
ROM:082F5110                 B       channel_mixing_exit_func
ROM:082F5114 ; ---------------------------------------------------------------------------
ROM:082F5114
ROM:082F5114 channel_var_freq_mixing                 ; CODE XREF: entry+1D0j
ROM:082F5114                 STMFD   SP!, {R4,R12}
ROM:082F5118                 LDR     R1, [R4,#0x20]
ROM:082F511C                 MUL     R4, R12, R1
ROM:082F5120                 LDRSB   R0, [R3]
ROM:082F5124                 LDRSB   R1, [R3,#1]!
ROM:082F5128                 SUB     R1, R1, R0
ROM:082F512C
ROM:082F512C channel_var_freq_mixing_loop            ; CODE XREF: entry+374j
ROM:082F512C                 LDR     R6, [R5]
ROM:082F5130                 LDR     R7, [R5,#0x630]
ROM:082F5134
ROM:082F5134 channel_var_freq_mixing_resampling      ; CODE XREF: entry+364j
ROM:082F5134                 MUL     LR, R9, R1
ROM:082F5138                 ADD     LR, R0, LR,ASR#23
ROM:082F513C                 MUL     R12, R10, LR
ROM:082F5140                 BIC     R12, R12, #0xFF0000
ROM:082F5144                 ADD     R6, R12, R6,ROR#8
ROM:082F5148                 MUL     R12, R11, LR
ROM:082F514C                 BIC     R12, R12, #0xFF0000
ROM:082F5150                 ADD     R7, R12, R7,ROR#8
ROM:082F5154                 ADD     R9, R9, R4
ROM:082F5158                 MOVS    LR, R9,LSR#23
ROM:082F515C                 BEQ     channel_var_freq_mixing_count
ROM:082F5160                 BIC     R9, R9, #0x3F800000
ROM:082F5164                 SUBS    R2, R2, LR
ROM:082F5168                 BLE     channel_var_freq_mixing_loop_handler
ROM:082F516C                 SUBS    LR, LR, #1
ROM:082F5170                 ADDEQ   R0, R0, R1
ROM:082F5174
ROM:082F5174 channel_var_freq_mixing_fetch_next      ; CODE XREF: entry+2A4j
ROM:082F5174                 LDRNESB R0, [R3,LR]!
ROM:082F5178                 LDRSB   R1, [R3,#1]!
ROM:082F517C                 SUB     R1, R1, R0
ROM:082F5180
ROM:082F5180 channel_var_freq_mixing_count           ; CODE XREF: entry+33Cj
ROM:082F5180                 ADDS    R5, R5, #0x40000000
ROM:082F5184                 BCC     channel_var_freq_mixing_resampling
ROM:082F5188                 STR     R7, [R5,#0x630]
ROM:082F518C                 STR     R6, [R5],#4
ROM:082F5190                 SUBS    R8, R8, #4
ROM:082F5194                 BGT     channel_var_freq_mixing_loop
ROM:082F5198                 SUB     R3, R3, #1
ROM:082F519C                 LDMFD   SP!, {R4,R12}
ROM:082F51A0
ROM:082F51A0 channel_var_freq_mixing_store_fine_pos  ; CODE XREF: entry+1BCj
ROM:082F51A0                 STR     R9, [R4,#0x1C]
ROM:082F51A4
ROM:082F51A4 channel_mixing_store_pos                ; CODE XREF: entry+240j
ROM:082F51A4                                         ; entry+288j
ROM:082F51A4                 STR     R2, [R4,#0x18]
ROM:082F51A8                 STR     R3, [R4,#0x28]
ROM:082F51AC
ROM:082F51AC channel_mixing_exit_func                ; CODE XREF: entry+2F0j
ROM:082F51AC                 LDR     R8, [SP,#ARG_FRAME_LENGTH]
ROM:082F51B0                 ADR     R0, (channel_check_processed_channels+1)
ROM:082F51B4                 BX      R0 ; channel_check_processed_channels
ROM:082F51B8                 CODE16
ROM:082F51B8
ROM:082F51B8 channel_check_processed_channels        ; CODE XREF: entry+C0j
ROM:082F51B8                                         ; entry+10Cj
ROM:082F51B8                                         ; DATA XREF: ...
ROM:082F51B8                 LDR     R0, [SP,#ARG_CHN_LEFT]
ROM:082F51BA                 SUBS    R0, #1
ROM:082F51BC                 BLE     mixer_end
ROM:082F51BE                 ADDS    R4, #0x40
ROM:082F51C0                 B       channel_main_loop
ROM:082F51C2 ; ---------------------------------------------------------------------------
ROM:082F51C2
ROM:082F51C2 mixer_end                               ; CODE XREF: entry+B0j
ROM:082F51C2                                         ; entry+39Cj
ROM:082F51C2                 LDR     R0, [SP,#ARG_VAR_AREA]
ROM:082F51C4                 LDR     R3, =0x68736D53
ROM:082F51C6                 STR     R3, [R0]
ROM:082F51C8                 ADD     SP, SP, #0x1C
ROM:082F51CA                 POP     {R0-R7}
ROM:082F51CC                 MOV     R8, R0
ROM:082F51CE                 MOV     R9, R1
ROM:082F51D0                 MOV     R10, R2
ROM:082F51D2                 MOV     R11, R3
ROM:082F51D4                 POP     {R3}
ROM:082F51D6                 BX      R3
ROM:082F51D6 ; End of function entry
ROM:082F51D6
ROM:082F51D6 ; ---------------------------------------------------------------------------
ROM:082F51D8 dword_82F51D8   DCD 0x68736D53          ; DATA XREF: entry+3A4r
ROM:082F51DC                 CODE32
ROM:082F51DC
ROM:082F51DC ; =============== S U B R O U T I N E =======================================
ROM:082F51DC
ROM:082F51DC
ROM:082F51DC channel_compressed_mixing               ; CODE XREF: entry+1B8p
ROM:082F51DC
ROM:082F51DC ARG_FRAME_COUNT = -0xC
ROM:082F51DC ARG_LOOP_MODE   =  0x10
ROM:082F51DC
ROM:082F51DC                 LDR     R6, [R4,#0x24]  ; load wave offset to R6
ROM:082F51E0                 LDRB    R0, [R4]
ROM:082F51E4                 TST     R0, #0x20
ROM:082F51E8                 BNE     setup_compressed_mixing_frequency
ROM:082F51EC                 ORR     R0, R0, #0x20   ; if compresson or
ROM:082F51EC                                         ; reverse playback
ROM:082F51EC                                         ; not enabled yet,
ROM:082F51EC                                         ; set it up here
ROM:082F51F0                 STRB    R0, [R4]
ROM:082F51F4                 LDRB    R0, [R4,#1]
ROM:082F51F8                 TST     R0, #0x10
ROM:082F51FC                 BEQ     determine_compression
ROM:082F5200                 LDR     R1, [R6,#0xC]   ; R1 = sample amount
ROM:082F5204                 ADD     R1, R1, R6,LSL#1
ROM:082F5208                 ADD     R1, R1, #0x20
ROM:082F520C                 SUB     R3, R1, R3
ROM:082F5210                 STR     R3, [R4,#0x28]  ; reverse playback sample location
ROM:082F5214
ROM:082F5214 determine_compression                   ; CODE XREF: channel_compressed_mixing+20j
ROM:082F5214                 LDRH    R0, [R6]
ROM:082F5218                 CMP     R0, #0
ROM:082F521C                 BEQ     setup_compressed_mixing_frequency
ROM:082F5220                 SUB     R3, R3, R6
ROM:082F5224                 SUB     R3, R3, #0x10
ROM:082F5228                 STR     R3, [R4,#0x28]
ROM:082F522C
ROM:082F522C setup_compressed_mixing_frequency       ; CODE XREF: channel_compressed_mixing+Cj
ROM:082F522C                                         ; channel_compressed_mixing+40j
ROM:082F522C                 STMFD   SP!, {R8,R12,LR}
ROM:082F5230                 MOV     R10, R10,LSL#16
ROM:082F5234                 MOV     R11, R11,LSL#16
ROM:082F5238                 LDR     R1, [R4,#0x20]
ROM:082F523C                 LDRB    R0, [R4,#1]
ROM:082F5240                 TST     R0, #8
ROM:082F5244                 MOVNE   R8, #0x800000
ROM:082F5248                 MULEQ   R8, R12, R1
ROM:082F524C                 LDRH    R0, [R6]
ROM:082F5250                 CMP     R0, #0
ROM:082F5254                 BEQ     uncomressed_mixing_reverse_check
ROM:082F5258                 MOV     R0, #0xFF000000
ROM:082F525C                 STR     R0, [R4,#0x3C]
ROM:082F5260                 LDRB    R0, [R4,#1]
ROM:082F5264                 TST     R0, #0x10
ROM:082F5268                 BNE     compressed_mixing_reverse_init
ROM:082F526C                 BL      bdpcm_decoder
ROM:082F5270                 MOV     R0, R1
ROM:082F5274                 ADD     R3, R3, #1
ROM:082F5278                 BL      bdpcm_decoder
ROM:082F527C                 SUB     R1, R1, R0
ROM:082F5280
ROM:082F5280 compressed_mixing_load_samples          ; CODE XREF: channel_compressed_mixing+128j
ROM:082F5280                 LDR     R6, [R5]
ROM:082F5284                 LDR     R7, [R5,#0x630]
ROM:082F5288
ROM:082F5288 compressed_mixing_loop                  ; CODE XREF: channel_compressed_mixing+110j
ROM:082F5288                 MUL     LR, R9, R1
ROM:082F528C                 ADD     LR, R0, LR,ASR#23
ROM:082F5290                 MUL     R12, R10, LR
ROM:082F5294                 BIC     R12, R12, #0xFF0000
ROM:082F5298                 ADD     R6, R12, R6,ROR#8
ROM:082F529C                 MUL     R12, R11, LR
ROM:082F52A0                 BIC     R12, R12, #0xFF0000
ROM:082F52A4                 ADD     R7, R12, R7,ROR#8
ROM:082F52A8                 ADD     R9, R9, R8
ROM:082F52AC                 MOVS    LR, R9,LSR#23
ROM:082F52B0                 BEQ     compressed_mixing_count_current_sample
ROM:082F52B4                 BIC     R9, R9, #0x3F800000
ROM:082F52B8                 SUBS    R2, R2, LR
ROM:082F52BC                 BLE     compressed_mixing_end_handler
ROM:082F52C0                 SUBS    LR, LR, #1
ROM:082F52C4                 BNE     compressed_mixing_fetch_next
ROM:082F52C8                 ADD     R0, R0, R1
ROM:082F52CC                 B       compressed_mixing_fetch_delta
ROM:082F52D0 ; ---------------------------------------------------------------------------
ROM:082F52D0
ROM:082F52D0 compressed_mixing_fetch_next            ; CODE XREF: channel_compressed_mixing+E8j
ROM:082F52D0                                         ; channel_compressed_mixing+150j
ROM:082F52D0                 ADD     R3, R3, LR
ROM:082F52D4                 BL      bdpcm_decoder
ROM:082F52D8                 MOV     R0, R1
ROM:082F52DC
ROM:082F52DC compressed_mixing_fetch_delta           ; CODE XREF: channel_compressed_mixing+F0j
ROM:082F52DC                 ADD     R3, R3, #1
ROM:082F52E0                 BL      bdpcm_decoder
ROM:082F52E4                 SUB     R1, R1, R0
ROM:082F52E8
ROM:082F52E8 compressed_mixing_count_current_sample  ; CODE XREF: channel_compressed_mixing+D4j
ROM:082F52E8                 ADDS    R5, R5, #0x40000000
ROM:082F52EC                 BCC     compressed_mixing_loop
ROM:082F52F0                 STR     R7, [R5,#0x630]
ROM:082F52F4                 STR     R6, [R5],#4
ROM:082F52F8                 LDR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F52FC                 SUBS    R6, R6, #4
ROM:082F5300                 STR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F5304                 BGT     compressed_mixing_load_samples
ROM:082F5308                 SUB     R3, R3, #1
ROM:082F530C                 B       special_mixing_return
ROM:082F5310 ; ---------------------------------------------------------------------------
ROM:082F5310
ROM:082F5310 compressed_mixing_end_handler           ; CODE XREF: channel_compressed_mixing+E0j
ROM:082F5310                 LDR     R0, [SP,#0xC+ARG_LOOP_MODE]
ROM:082F5314                 CMP     R0, #0
ROM:082F5318                 BEQ     compressed_mixing_stop_and_return
ROM:082F531C                 LDR     R3, [R4,#0x24]
ROM:082F5320                 LDR     R3, [R3,#8]
ROM:082F5324                 RSB     LR, R2, #0
ROM:082F5328
ROM:082F5328 compressed_mixing_loop_handler          ; CODE XREF: channel_compressed_mixing+158j
ROM:082F5328                 ADDS    R2, R2, R0
ROM:082F532C                 BGT     compressed_mixing_fetch_next
ROM:082F5330                 SUB     LR, LR, R0
ROM:082F5334                 B       compressed_mixing_loop_handler
ROM:082F5338 ; ---------------------------------------------------------------------------
ROM:082F5338
ROM:082F5338 compressed_mixing_reverse_init          ; CODE XREF: channel_compressed_mixing+8Cj
ROM:082F5338                 SUB     R3, R3, #1
ROM:082F533C                 BL      bdpcm_decoder
ROM:082F5340                 MOV     R0, R1
ROM:082F5344                 SUB     R3, R3, #1
ROM:082F5348                 BL      bdpcm_decoder
ROM:082F534C                 SUB     R1, R1, R0
ROM:082F5350
ROM:082F5350 compressed_mixing_reverse_load_samples  ; CODE XREF: channel_compressed_mixing+1F8j
ROM:082F5350                 LDR     R6, [R5]
ROM:082F5354                 LDR     R7, [R5,#0x630]
ROM:082F5358
ROM:082F5358 compressed_mixing_reverse_loop          ; CODE XREF: channel_compressed_mixing+1E0j
ROM:082F5358                 MUL     LR, R9, R1
ROM:082F535C                 ADD     LR, R0, LR,ASR#23
ROM:082F5360                 MUL     R12, R10, LR
ROM:082F5364                 BIC     R12, R12, #0xFF0000
ROM:082F5368                 ADD     R6, R12, R6,ROR#8
ROM:082F536C                 MUL     R12, R11, LR
ROM:082F5370                 BIC     R12, R12, #0xFF0000
ROM:082F5374                 ADD     R7, R12, R7,ROR#8
ROM:082F5378                 ADD     R9, R9, R8
ROM:082F537C                 MOVS    LR, R9,LSR#23
ROM:082F5380                 BEQ     compressed_mixing_reverse_count_sample
ROM:082F5384                 BIC     R9, R9, #0x3F800000
ROM:082F5388                 SUBS    R2, R2, LR
ROM:082F538C                 BLE     compressed_mixing_stop_and_return
ROM:082F5390                 SUBS    LR, LR, #1
ROM:082F5394                 BNE     compressed_mixing_reverse_fetch_next
ROM:082F5398                 ADD     R0, R0, R1
ROM:082F539C                 B       compressed_mixing_reverse_seekback
ROM:082F53A0 ; ---------------------------------------------------------------------------
ROM:082F53A0
ROM:082F53A0 compressed_mixing_reverse_fetch_next    ; CODE XREF: channel_compressed_mixing+1B8j
ROM:082F53A0                 SUB     R3, R3, LR
ROM:082F53A4                 BL      bdpcm_decoder
ROM:082F53A8                 MOV     R0, R1
ROM:082F53AC
ROM:082F53AC compressed_mixing_reverse_seekback      ; CODE XREF: channel_compressed_mixing+1C0j
ROM:082F53AC                 SUB     R3, R3, #1
ROM:082F53B0                 BL      bdpcm_decoder
ROM:082F53B4                 SUB     R1, R1, R0
ROM:082F53B8
ROM:082F53B8 compressed_mixing_reverse_count_sample  ; CODE XREF: channel_compressed_mixing+1A4j
ROM:082F53B8                 ADDS    R5, R5, #0x40000000
ROM:082F53BC                 BCC     compressed_mixing_reverse_loop
ROM:082F53C0                 STR     R7, [R5,#0x630]
ROM:082F53C4                 STR     R6, [R5],#4
ROM:082F53C8                 LDR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F53CC                 SUBS    R6, R6, #4
ROM:082F53D0                 STR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F53D4                 BGT     compressed_mixing_reverse_load_samples
ROM:082F53D8                 ADD     R3, R3, #2
ROM:082F53DC                 B       special_mixing_return
ROM:082F53E0 ; ---------------------------------------------------------------------------
ROM:082F53E0
ROM:082F53E0 uncomressed_mixing_reverse_check        ; CODE XREF: channel_compressed_mixing+78j
ROM:082F53E0                 LDRB    R0, [R4,#1]
ROM:082F53E4                 TST     R0, #0x10
ROM:082F53E8                 BEQ     special_mixing_return
ROM:082F53EC                 LDRSB   R0, [R3,#-1]!
ROM:082F53F0                 LDRSB   R1, [R3,#-1]
ROM:082F53F4                 SUB     R1, R1, R0
ROM:082F53F8
ROM:082F53F8 uncompressed_mixing_reverse_load_samples
ROM:082F53F8                                         ; CODE XREF: channel_compressed_mixing+284j
ROM:082F53F8                 LDR     R6, [R5]
ROM:082F53FC                 LDR     R7, [R5,#0x630]
ROM:082F5400
ROM:082F5400 uncompressed_mixing_reverse_loop        ; CODE XREF: channel_compressed_mixing+26Cj
ROM:082F5400                 MUL     LR, R9, R1
ROM:082F5404                 ADD     LR, R0, LR,ASR#23
ROM:082F5408                 MUL     R12, R10, LR
ROM:082F540C                 BIC     R12, R12, #0xFF0000
ROM:082F5410                 ADD     R6, R12, R6,ROR#8
ROM:082F5414                 MUL     R12, R11, LR
ROM:082F5418                 BIC     R12, R12, #0xFF0000
ROM:082F541C                 ADD     R7, R12, R7,ROR#8
ROM:082F5420                 ADD     R9, R9, R8
ROM:082F5424                 MOVS    LR, R9,LSR#23
ROM:082F5428                 BEQ     uncompressed_mixing_reverse_count
ROM:082F542C                 BIC     R9, R9, #0x3F800000
ROM:082F5430                 SUBS    R2, R2, LR
ROM:082F5434                 BLE     compressed_mixing_stop_and_return
ROM:082F5438                 LDRSB   R0, [R3,-LR]!
ROM:082F543C                 LDRSB   R1, [R3,#-1]
ROM:082F5440                 SUB     R1, R1, R0
ROM:082F5444
ROM:082F5444 uncompressed_mixing_reverse_count       ; CODE XREF: channel_compressed_mixing+24Cj
ROM:082F5444                 ADDS    R5, R5, #0x40000000
ROM:082F5448                 BCC     uncompressed_mixing_reverse_loop
ROM:082F544C                 STR     R7, [R5,#0x630]
ROM:082F5450                 STR     R6, [R5],#4
ROM:082F5454                 LDR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F5458                 SUBS    R6, R6, #4
ROM:082F545C                 STR     R6, [SP,#0xC+ARG_FRAME_COUNT]
ROM:082F5460                 BGT     uncompressed_mixing_reverse_load_samples
ROM:082F5464                 ADD     R3, R3, #1
ROM:082F5468
ROM:082F5468 special_mixing_return                   ; CODE XREF: channel_compressed_mixing+130j
ROM:082F5468                                         ; channel_compressed_mixing+200j ...
ROM:082F5468                 LDMFD   SP!, {R8,R12,PC}
ROM:082F546C ; ---------------------------------------------------------------------------
ROM:082F546C
ROM:082F546C compressed_mixing_stop_and_return       ; CODE XREF: channel_compressed_mixing+13Cj
ROM:082F546C                                         ; channel_compressed_mixing+1B0j ...
ROM:082F546C                 MOV     R2, #0
ROM:082F5470                 STRB    R2, [R4]
ROM:082F5474                 MOV     R0, R5,LSR#30
ROM:082F5478                 BIC     R5, R5, #0xC0000000
ROM:082F547C                 RSB     R0, R0, #3
ROM:082F5480                 MOV     R0, R0,LSL#3
ROM:082F5484                 MOV     R6, R6,ROR R0
ROM:082F5488                 MOV     R7, R7,ROR R0
ROM:082F548C                 STR     R7, [R5,#0x630]
ROM:082F5490                 STR     R6, [R5],#4
ROM:082F5494                 LDMFD   SP!, {R8,R12,PC}
ROM:082F5494 ; End of function channel_compressed_mixing
ROM:082F5494
ROM:082F5498
ROM:082F5498 ; =============== S U B R O U T I N E =======================================
ROM:082F5498
ROM:082F5498
ROM:082F5498 bdpcm_decoder                           ; CODE XREF: channel_compressed_mixing+90p
ROM:082F5498                                         ; channel_compressed_mixing+9Cp ...
ROM:082F5498                 STMFD   SP!, {R0,R2,R5-R7,LR}
ROM:082F549C                 MOV     R0, R3,LSR#6
ROM:082F54A0                 LDR     R1, [R4,#0x3C]
ROM:082F54A4                 CMP     R0, R1
ROM:082F54A8                 BEQ     bdpcm_decoder_return
ROM:082F54AC                 STR     R0, [R4,#0x3C]
ROM:082F54B0                 MOV     R1, #0x21
ROM:082F54B4                 MUL     R2, R1, R0
ROM:082F54B8                 LDR     R1, [R4,#0x24]
ROM:082F54BC                 ADD     R2, R2, R1
ROM:082F54C0                 ADD     R2, R2, #0x10
ROM:082F54C4                 LDR     R5, =0x3001300
ROM:082F54C8                 LDR     R6, =delta_table_686C5C
ROM:082F54CC                 MOV     R7, #0x40
ROM:082F54D0                 LDRB    LR, [R2],#1
ROM:082F54D4                 STRB    LR, [R5],#1
ROM:082F54D8                 LDRB    R1, [R2],#1
ROM:082F54DC                 B       bdpcm_decoder_lsb
ROM:082F54E0 ; ---------------------------------------------------------------------------
ROM:082F54E0
ROM:082F54E0 bdpcm_decoder_msb                       ; CODE XREF: bdpcm_decoder+70j
ROM:082F54E0                 LDRB    R1, [R2],#1
ROM:082F54E4                 MOV     R0, R1,LSR#4
ROM:082F54E8                 LDRSB   R0, [R6,R0]
ROM:082F54EC                 ADD     LR, LR, R0
ROM:082F54F0                 STRB    LR, [R5],#1
ROM:082F54F4
ROM:082F54F4 bdpcm_decoder_lsb                       ; CODE XREF: bdpcm_decoder+44j
ROM:082F54F4                 AND     R0, R1, #0xF
ROM:082F54F8                 LDRSB   R0, [R6,R0]
ROM:082F54FC                 ADD     LR, LR, R0
ROM:082F5500                 STRB    LR, [R5],#1
ROM:082F5504                 SUBS    R7, R7, #2
ROM:082F5508                 BGT     bdpcm_decoder_msb
ROM:082F550C
ROM:082F550C bdpcm_decoder_return                    ; CODE XREF: bdpcm_decoder+10j
ROM:082F550C                 LDR     R5, =0x3001300
ROM:082F5510                 AND     R0, R3, #0x3F
ROM:082F5514                 LDRSB   R1, [R5,R0]
ROM:082F5518                 LDMFD   SP!, {R0,R2,R5-R7,PC}
ROM:082F5518 ; End of function bdpcm_decoder
ROM:082F5518
ROM:082F5518 ; ---------------------------------------------------------------------------
ROM:082F551C decoder_buffer  DCD 0x3001300           ; DATA XREF: bdpcm_decoder+2Cr
ROM:082F551C                                         ; bdpcm_decoder:bdpcm_decoder_returnr
ROM:082F5520 delta_lookup_table DCD delta_table_686C5C ; DATA XREF: bdpcm_decoder+30r

I didn't dump the BIOS code because I don't see a reason in doing it. Iirc it uses a less optimized code and is slower and doesn't support certain features like the cry playback and the reverse playback.
 
Last edited:

ipatix

Sound Expert
145
Posts
15
Years
What do you mean by "music player"?

Do you mean the whole sound engine?
Do you mean the song data decoder?
 
457
Posts
10
Years
  • Age 28
  • Seen Apr 9, 2024
Hmm... what assembly program we should use to insert the routine?
(It didn't insert well when I used karatekid's thumb and asm program)
 

ipatix

Sound Expert
145
Posts
15
Years
I used devkitpro/devkitARM's assembler (arm-none-eabias, arm-none-eabi-objcopy) and inserted it via hex editor. On Unix compatible systems you could use "dd" to copy the data directly to the target file.
 
457
Posts
10
Years
  • Age 28
  • Seen Apr 9, 2024
I used devkitpro/devkitARM's assembler (arm-none-eabias, arm-none-eabi-objcopy) and inserted it via hex editor. On Unix compatible systems you could use "dd" to copy the data directly to the target file.

Do you have a video tutorial on how to insert the routine? Well, it is the first time I'll be using devkitARM (only for this).
 

ipatix

Sound Expert
145
Posts
15
Years
No but you might look for any general purpose ASM tutorial where Assembler usage is explained.
 

ipatix

Sound Expert
145
Posts
15
Years
I personally don't see a lot of sense of doing so even though it wouldn't be very hard.
You might try looking up the right offsets for Ruby yourself.
 

Joexv

ManMadeOfGouda joexv.github.io
1,037
Posts
11
Years
Im getting an error when compiling your routine:
hqmusics.asm:296: Error: non-constant expression in ".if" statement
Any help would be greatly appreciated.

EDIT: Nevermind i removed all the if statements and rmoved code that didn't apply to my rom and it worked.
 
Last edited:

ipatix

Sound Expert
145
Posts
15
Years
I fixed the error. I somehow forgot to put a "==1" behind the "ALLOW_PAUSE" which most likely caused the issue. I haven't tried to assemble it myself though.
 

jiangzhengwenjzw

now working on katam
181
Posts
11
Years
  • Seen today
I have a question about editing ".equ USED_GAME, GAME_BPED".
If I use firered U, then should the line be ".equ USED_GAME, GAME_BPRE"?
 
76
Posts
15
Years
  • Age 31
  • Seen Aug 8, 2021
As someone who is 100% uneducated in ASM, is there any way I can use this without taking months to learn ASM?
 
17
Posts
8
Years
hai, I like to insert this "high quality mixer" thing to my rom hack, but the problem is IDK how to insert it :(

I have already use the devkitARM -objcopy- but the result is "file format not recognized"

how to compile and then insert it? do you think my the code format must be .asm
 

BluRose

blu rass
811
Posts
9
Years
hai, I like to insert this "high quality mixer" thing to my rom hack, but the problem is IDK how to insert it :(

I have already use the devkitARM -objcopy- but the result is "file format not recognized"

how to compile and then insert it? do you think my the code format must be .asm
so idk how you're compiling this, probably with like make or something
you can also use the compiler from this tut to achieve the same result
just drag the .txt/.asm/.s/.whatever file onto the thumb.bat file and it will output your compiled routine

or you could even run it using command prompt from the file path and then do
Code:
thumb [routinename].[filetype] [outputroutinename].bin
i.e.
Code:
thumb hqmixer.asm hqmixer.bin
 
Back
Top