From: <lu...@us...> - 2009-02-08 12:22:27
|
Revision: 1644 http://desmume.svn.sourceforge.net/desmume/?rev=1644&view=rev Author: luigi__ Date: 2009-02-08 11:49:56 +0000 (Sun, 08 Feb 2009) Log Message: ----------- The output sound buffer is now zeroed out before mixing, that prevents noise when the SPU is disabled. Cleaned up the SPU read/write funcs (removed useless switch statements). Modified Paths: -------------- trunk/desmume/src/SPU.cpp Modified: trunk/desmume/src/SPU.cpp =================================================================== --- trunk/desmume/src/SPU.cpp 2009-02-08 05:55:07 UTC (rev 1643) +++ trunk/desmume/src/SPU.cpp 2009-02-08 11:49:56 UTC (rev 1644) @@ -307,44 +307,6 @@ { addr &= 0xFFF; - if (addr < 0x500) - { - switch (addr & 0xF) - { - case 0x0: - // LOG("Sound Channel %d Control Register long read\n", (addr >> 4) & 0xF); - return T1ReadLong(MMU.ARM7_REG, addr); - case 0x4: - // LOG("Sound Channel %d Data Source Register long read\n"); - return T1ReadLong(MMU.ARM7_REG, addr); - case 0x8: - // LOG("Sound Channel %d Timer/Loop Start Register long read\n", (addr >> 4) & 0xF); - return T1ReadLong(MMU.ARM7_REG, addr); - case 0xC: - // LOG("Sound Channel %d Length Register long read\n", (addr >> 4) & 0xF); - return T1ReadLong(MMU.ARM7_REG, addr); - default: - return T1ReadLong(MMU.ARM7_REG, addr); - } - } - else - { - switch (addr & 0x1F) - { - case 0x000: - // LOG("Sound Control Register long read\n"); - return T1ReadLong(MMU.ARM7_REG, addr); - case 0x004: - // LOG("Sound Bias Register long read\n"); - return T1ReadLong(MMU.ARM7_REG, addr); - case 0x008: - // LOG("Sound Capture 0/1 Control Register long read: %08X\n"); - return T1ReadLong(MMU.ARM7_REG, addr); - default: - return T1ReadLong(MMU.ARM7_REG, addr); - } - } - return T1ReadLong(MMU.ARM7_REG, addr); } @@ -388,70 +350,7 @@ { SPU_core->WriteByte(addr,val); if(SPU_user) SPU_user->WriteByte(addr,val); - - switch (addr & 0xF) - { - case 0x0: - //LOG("Sound Channel %d Volume write: %02X\n", (addr >> 4) & 0xF, val); - break; - case 0x1: - //LOG("Sound Channel %d Data Shift/Hold write: %02X\n",(addr >> 4) & 0xF, val); - break; - case 0x2: - //LOG("Sound Channel %d Panning write: %02X\n",(addr >> 4) & 0xF, val); - break; - case 0x3: - break; - case 0x4: - case 0x5: - case 0x6: - case 0x7: - //LOG("Sound Channel %d Data Source Register write: %08X %02X\n",(addr >> 4) & 0xF, addr, val); - break; - case 0x8: - //LOG("Sound Channel Timer(Low byte) write: %08X - %02X\n", addr, val); - break; - case 0x9: - //LOG("Sound Channel Timer(High byte) write: %08X - %02X\n", addr, val); - break; - case 0xA: - //LOG("Sound Channel Loop Start(Low byte) write: %08X - %02X\n", addr, val); - break; - case 0xB: - //LOG("Sound Channel Loop Start(High byte) write: %08X - %02X\n", addr, val); - break; - case 0xC: - case 0xD: - case 0xE: - case 0xF: - //LOG("Sound Channel %d Length Register write: %08X %02X\n",(addr >> 4) & 0xF, addr, val); - break; - default: - LOG("Unsupported Sound Register byte write: %08X %02X\n", addr, val); - break; - } } - else - { - switch (addr & 0x1F) - { - case 0x000: - case 0x001: - //LOG("Sound Control Register write: %08X %02X\n", addr, val); - break; - case 0x004: - case 0x005: - //LOG("Sound Bias Register write: %08X %02X\n", addr, val); - break; - case 0x008: - //LOG("Sound Capture 0 Control Register write: %02X\n", val); - break; - case 0x009: - //LOG("Sound Capture 1 Control Register write: %02X\n", val); - break; - default: break; - } - } T1WriteByte(MMU.ARM7_REG, addr, val); } @@ -498,49 +397,7 @@ { SPU_core->WriteWord(addr,val); if(SPU_user) SPU_user->WriteWord(addr,val); - - switch (addr & 0xF) - { - case 0x0: - //LOG("Sound Channel %d Volume/data shift/hold write: %04X\n", (addr >> 4) & 0xF, val); - break; - case 0x2: - //LOG("Sound Channel %d Panning/Wave Duty/Repeat Mode/Format/Start write: %04X\n", (addr >> 4) & 0xF, val); - break; - case 0x4: - case 0x6: - //LOG("Sound Channel %d Data Source Register write: %08X %04X\n",(addr >> 4) & 0xF, addr, val); - break; - case 0x8: - //LOG("Sound Channel %d Timer Register write: %04X\n", (addr >> 4) & 0xF, val); - break; - case 0xA: - //LOG("Sound Channel %d Loop start Register write: %04X\n", (addr >> 4) & 0xF, val); - break; - case 0xC: - case 0xE: - // LOG("Sound Channel %d Length Register write: %08X %04X\n",(addr >> 4) & 0xF, addr, val); - break; - default: - // LOG("Unsupported Sound Register word write: %08X %02X\n", addr, val); - break; - } } - else - { - switch (addr & 0x1F) - { - case 0x000: - // LOG("Sound Control Register write: %04X\n", val); - break; - case 0x004: - // LOG("Sound Bias Register write: %04X\n", val); - break; - case 0x008: - // LOG("Sound Capture 0/1 Control Register write: %04X\n", val); - break; - } - } T1WriteWord(MMU.ARM7_REG, addr, val); } @@ -588,38 +445,7 @@ { SPU_core->WriteLong(addr,val); if(SPU_user) SPU_user->WriteLong(addr,val); - - switch (addr & 0xF) - { - case 0x0: - //LOG("Sound Channel %d long write: %08X\n", (addr >> 4) & 0xF, val); - break; - case 0x4: - //LOG("Sound Channel %d Data Source Register long write: %08X\n", (addr >> 4) & 0xF, val); - break; - case 0x8: - //LOG("Sound Channel %d Timer/Loop Start Register write: - %08X\n", (addr >> 4) & 0xF, val); - break; - case 0xC: - //LOG("Sound Channel %d Length Register long write: %08X\n", (addr >> 4) & 0xF, val); - break; - } } - else - { - switch (addr & 0x1F) - { - case 0x000: - //LOG("Sound Control Register write: %08X\n", val); - break; - case 0x004: - //LOG("Sound Bias Register write: %08X\n", val); - break; - case 0x008: - //LOG("Sound Capture 0/1 Control Register write: %08X\n", val); - break; - } - } T1WriteLong(MMU.ARM7_REG, addr, val); } @@ -1135,7 +961,10 @@ u8 vol; if(actuallyMix) + { memset(SPU->sndbuf, 0, length*4*2); + memset(SPU->outbuf, 0, length*2*2); + } // If the sound speakers are disabled, don't output audio if(!(T1ReadWord(MMU.ARM7_REG, 0x304) & 0x01)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |