add capture registers to soundview; emulate remainder of spu mixing functionality; add "advanced spu" sound configuration and --spu-advanced=1 to unlock new features, since they are running a little slow right now.
This commit is contained in:
parent
6f04d2be74
commit
ce0342e702
|
@ -1,7 +1,8 @@
|
|||
0.9.5 -> 0.9.6 (r3075-r3209-r3xxx)
|
||||
0.9.5 -> 0.9.6 (r3075-r3303-r3xxx)
|
||||
|
||||
General/Core:
|
||||
bug: emulate keypad interrupt
|
||||
bug: spu overhaul, add capture support
|
||||
bug: fix dma address reloading
|
||||
bug: fix rom close memory corruption
|
||||
bug: fix div and sqrt busy flag bug
|
||||
|
@ -9,9 +10,16 @@ General/Core:
|
|||
bug: fix lid savestate desync
|
||||
bug: fix texcache memory GB explosion when games use tons of tiny 3d sprites
|
||||
bug: fix huge rerecording movie file handle leak
|
||||
bug: fix EXXXXXXX cheat codes
|
||||
bug: fix EXXXXXXX cheat codes and some add/edit/save/load bugs
|
||||
bug: add 8MBit flash emulation
|
||||
bug: fix firmware booted-from-card flag
|
||||
bug: fix some failures to wake
|
||||
bug: fix some rtc calendar logic
|
||||
bug: op_bkpt emulation
|
||||
bug: correctly emulate POWCNT1 and POWCNT2
|
||||
bug: corrections to bootup stack configuration
|
||||
bug: protect bios from being overwritten
|
||||
bug: initialize save data to 0xFF instead of 0x00
|
||||
enh: support devkitpro argv
|
||||
enh: add gbaslot-rom commandline
|
||||
|
||||
|
@ -23,6 +31,7 @@ Windows:
|
|||
bug: more fixes to multi-gamepads
|
||||
bug: cheat windows robustification
|
||||
bug: fix that sticky pause state when resetting and loading roms
|
||||
bug: dont crash when no sound device is available
|
||||
enh: dont screensave while using gamepad
|
||||
enh: add EPX and EPX1.5X resize filters
|
||||
enh: add a japanese translation which will soon be stale like the others
|
||||
|
@ -30,10 +39,12 @@ Windows:
|
|||
enh: add "lockdown" window mode to keep window safe from fast stylus action
|
||||
enh: add alt+enter fullscreen command
|
||||
enh: add card eject command
|
||||
enh: add ddraw software mode forcer
|
||||
|
||||
Linux/OSX:
|
||||
bug: fix building for nosse2 systems
|
||||
bug: fix --num-cores
|
||||
bug: fix occasional touchscreen failures
|
||||
enh: add --nojoy=1 to fix laptops with accelerometers
|
||||
|
||||
|
||||
|
|
|
@ -466,6 +466,7 @@ extern struct TCommonSettings {
|
|||
, micMode(InternalNoise)
|
||||
, spuInterpolationMode(SPUInterpolation_Linear)
|
||||
, manualBackupType(0)
|
||||
, spu_advanced(false)
|
||||
{
|
||||
strcpy(ARM9BIOS, "biosnds9.bin");
|
||||
strcpy(ARM7BIOS, "biosnds7.bin");
|
||||
|
@ -522,6 +523,7 @@ extern struct TCommonSettings {
|
|||
int manualBackupType;
|
||||
|
||||
bool spu_muteChannels[16];
|
||||
bool spu_advanced;
|
||||
|
||||
struct _ShowGpu {
|
||||
_ShowGpu() : main(true), sub(true) {}
|
||||
|
|
|
@ -443,7 +443,7 @@ u8 SPU_struct::ReadByte(u32 addr)
|
|||
//SOUNDCNT
|
||||
case 0x500: return regs.mastervol;
|
||||
case 0x501:
|
||||
return (regs.ctl_left)|(regs.ctl_right<<2)|(regs.ctl_ch1<<4)|(regs.ctl_ch2<<5)|(regs.masteren<<7);
|
||||
return (regs.ctl_left)|(regs.ctl_right<<2)|(regs.ctl_ch1bypass<<4)|(regs.ctl_ch3bypass<<5)|(regs.masteren<<7);
|
||||
case 0x502: return 0;
|
||||
case 0x503: return 0;
|
||||
|
||||
|
@ -456,7 +456,7 @@ u8 SPU_struct::ReadByte(u32 addr)
|
|||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509: {
|
||||
u32 which = 0x509-addr;
|
||||
u32 which = addr-0x508;
|
||||
return regs.cap[which].add
|
||||
| (regs.cap[which].source<<1)
|
||||
| (regs.cap[which].oneshot<<2)
|
||||
|
@ -552,8 +552,8 @@ void SPU_struct::WriteByte(u32 addr, u8 val)
|
|||
case 0x501:
|
||||
regs.ctl_left = (val>>0)&3;
|
||||
regs.ctl_right = (val>>2)&3;
|
||||
regs.ctl_ch1 = (val>>4)&1;
|
||||
regs.ctl_ch2 = (val>>5)&1;
|
||||
regs.ctl_ch1bypass = (val>>4)&1;
|
||||
regs.ctl_ch3bypass = (val>>5)&1;
|
||||
regs.masteren = (val>>7)&1;
|
||||
for(int i=0;i<16;i++)
|
||||
KeyProbe(i);
|
||||
|
@ -570,13 +570,14 @@ void SPU_struct::WriteByte(u32 addr, u8 val)
|
|||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509: {
|
||||
u32 which = 0x509-addr;
|
||||
u32 which = addr-0x508;
|
||||
regs.cap[which].add = BIT0(val);
|
||||
regs.cap[which].source = BIT1(val);
|
||||
regs.cap[which].oneshot = BIT2(val);
|
||||
regs.cap[which].bits8 = BIT3(val);
|
||||
regs.cap[which].active = BIT7(val);
|
||||
ProbeCapture(which);
|
||||
break;
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
|
@ -940,6 +941,7 @@ template<int CHANNELS> FORCEINLINE static void SPU_Mix(SPU_struct* SPU, channel_
|
|||
case 1: MixLR(SPU, chan, data); break;
|
||||
case 2: MixR(SPU, chan, data); break;
|
||||
}
|
||||
SPU->lastdata = data;
|
||||
}
|
||||
|
||||
//WORK
|
||||
|
@ -1006,71 +1008,136 @@ FORCEINLINE static void _SPU_ChanUpdate(const bool actuallyMix, SPU_struct* cons
|
|||
}
|
||||
}
|
||||
|
||||
//ENTER
|
||||
static void SPU_MixAudio(bool actuallyMix, SPU_struct *SPU, int length)
|
||||
//ENTERNEW
|
||||
static void SPU_MixAudio_Advanced(bool actuallyMix, SPU_struct *SPU, int length)
|
||||
{
|
||||
if(actuallyMix)
|
||||
//the advanced spu function correctly handles all sound control mixing options, as well as capture
|
||||
//this code is not entirely optimal, as it relies on sort of manhandling the core mixing functions
|
||||
//in order to get the results it needs.
|
||||
|
||||
//THIS IS MAX HACKS!!!!
|
||||
//AND NEEDS TO BE REWRITTEN ALONG WITH THE DEEPEST PARTS OF THE SPU
|
||||
//ONCE WE KNOW THAT IT WORKS
|
||||
|
||||
//BIAS gets ignored since our spu is still not bit perfect,
|
||||
//and it doesnt matter for purposes of capture
|
||||
|
||||
//-----------DEBUG CODE
|
||||
bool skipcap = false;
|
||||
//-----------------
|
||||
|
||||
s32 samp0[2];
|
||||
|
||||
//believe it or not, we are going to do this one sample at a time.
|
||||
//like i said, it is slower.
|
||||
for(int samp=0;samp<length;samp++)
|
||||
{
|
||||
memset(SPU->sndbuf, 0, length*4*2);
|
||||
memset(SPU->outbuf, 0, length*2*2);
|
||||
}
|
||||
SPU->sndbuf[0] = 0;
|
||||
SPU->sndbuf[1] = 0;
|
||||
SPU->buflength = 1;
|
||||
|
||||
//we used to bail out if speakers were disabled.
|
||||
//this is technically wrong. sound may still be captured, or something.
|
||||
//in all likelihood, any game doing this probably master disabled the SPU also
|
||||
//so, optimization of this case is probably not necessary.
|
||||
//later, we'll just silence the output
|
||||
bool speakers = T1ReadWord(MMU.ARM7_REG, 0x304) & 0x01;
|
||||
|
||||
//we used to use master enable here, and do nothing if audio is disabled.
|
||||
//now, master enable is emulated better..
|
||||
//but for a speed optimization we will still do it
|
||||
if(!SPU->regs.masteren) return;
|
||||
|
||||
u8 vol = SPU->regs.mastervol;
|
||||
s32 chanout[16];
|
||||
s32 submix[32];
|
||||
|
||||
//generate each channel, and helpfully mix it at the same time
|
||||
for(int i=0;i<16;i++)
|
||||
{
|
||||
channel_struct *chan = &SPU->channels[i];
|
||||
|
||||
if (chan->status != CHANSTAT_PLAY)
|
||||
continue;
|
||||
|
||||
if (chan->status == CHANSTAT_PLAY)
|
||||
{
|
||||
SPU->bufpos = 0;
|
||||
SPU->buflength = length;
|
||||
|
||||
// Mix audio
|
||||
_SPU_ChanUpdate(!CommonSettings.spu_muteChannels[i] && actuallyMix, SPU, chan);
|
||||
//_SPU_ChanUpdate(actuallyMix, SPU, chan);
|
||||
bool domix = actuallyMix && !CommonSettings.spu_muteChannels[i];
|
||||
bool bypass = false;
|
||||
if(i==1 && SPU->regs.ctl_ch1bypass) bypass=true;
|
||||
if(i==3 && SPU->regs.ctl_ch3bypass) bypass=true;
|
||||
|
||||
//save our old mix accumulators so we can generate a clean panned sample
|
||||
s32 save[] = {SPU->sndbuf[0],SPU->sndbuf[1]};
|
||||
SPU->sndbuf[0] = SPU->sndbuf[1] = 0;
|
||||
|
||||
//get channel's next output sample.
|
||||
_SPU_ChanUpdate(domix, SPU, chan);
|
||||
chanout[i] = SPU->lastdata >> chan->datashift;
|
||||
|
||||
//save the panned results
|
||||
submix[i*2] = SPU->sndbuf[0];
|
||||
submix[i*2+1] = SPU->sndbuf[1];
|
||||
|
||||
//restore the old mix accumulator
|
||||
SPU->sndbuf[0] = save[0];
|
||||
SPU->sndbuf[1] = save[1];
|
||||
|
||||
//mix in this sample, unless we were bypassing it
|
||||
if(!bypass)
|
||||
{
|
||||
SPU->sndbuf[0] += submix[i*2];
|
||||
SPU->sndbuf[1] += submix[i*2+1];
|
||||
}
|
||||
|
||||
//TODO - a lot of capture and output modes are not supported.
|
||||
//this works in starfy, but not in nsmb, which requires the other modes.
|
||||
//so, we'll have to support it soon
|
||||
|
||||
#ifdef ENABLE_SOUND_CAPTURE
|
||||
|
||||
bool skipcap = false;
|
||||
#ifdef _MSC_VER
|
||||
if(GetAsyncKeyState(VK_SHIFT)) skipcap=true;
|
||||
#endif
|
||||
|
||||
static FILE* test = NULL;
|
||||
if(!test) test = fopen("d:\\raw.raw","wb");
|
||||
if(SPU==SPU_core)
|
||||
}
|
||||
else
|
||||
{
|
||||
chanout[i] = 0;
|
||||
submix[i*2] = 0;
|
||||
submix[i*2+1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 mixout[2] = {SPU->sndbuf[0],SPU->sndbuf[1]};
|
||||
s32 sndout[2];
|
||||
s32 capout[2];
|
||||
|
||||
//create SPU output
|
||||
switch(SPU->regs.ctl_left)
|
||||
{
|
||||
case SPU_struct::REGS::LOM_LEFT_MIXER: sndout[0] = mixout[0]; break;
|
||||
case SPU_struct::REGS::LOM_CH1: sndout[0] = submix[1*2+0]; break;
|
||||
case SPU_struct::REGS::LOM_CH3: sndout[0] = submix[3*2+0]; break;
|
||||
case SPU_struct::REGS::LOM_CH1_PLUS_CH3: sndout[0] = submix[1*2+0] + submix[3*2+0]; break;
|
||||
}
|
||||
switch(SPU->regs.ctl_right)
|
||||
{
|
||||
case SPU_struct::REGS::ROM_RIGHT_MIXER: sndout[1] = mixout[1]; break;
|
||||
case SPU_struct::REGS::ROM_CH1: sndout[1] = submix[1*2+1]; break;
|
||||
case SPU_struct::REGS::ROM_CH3: sndout[1] = submix[3*2+1]; break;
|
||||
case SPU_struct::REGS::ROM_CH1_PLUS_CH3: sndout[1] = submix[1*2+1] + submix[3*2+1]; break;
|
||||
}
|
||||
|
||||
|
||||
//generate capture output ("capture bugs" from gbatek are not emulated)
|
||||
if(SPU->regs.cap[0].source==0)
|
||||
capout[0] = mixout[0]; //cap0 = L-mix
|
||||
else if(SPU->regs.cap[0].add)
|
||||
capout[0] = chanout[0] + chanout[1]; //cap0 = ch0+ch1
|
||||
else capout[0] = chanout[0]; //cap0 = ch0
|
||||
|
||||
if(SPU->regs.cap[1].source==0)
|
||||
capout[1] = mixout[1]; //cap1 = R-mix
|
||||
else if(SPU->regs.cap[1].add)
|
||||
capout[1] = chanout[2] + chanout[3]; //cap1 = ch2+ch3
|
||||
else capout[1] = chanout[2]; //cap1 = ch2
|
||||
|
||||
//write the output sample where it is supposed to go
|
||||
SPU->sndbuf[samp*2+0] = sndout[0];
|
||||
SPU->sndbuf[samp*2+1] = sndout[1];
|
||||
if(samp==0) {
|
||||
samp0[0] = SPU->sndbuf[samp*2+0];
|
||||
samp0[1] = SPU->sndbuf[samp*2+1];
|
||||
}
|
||||
|
||||
for(int capchan=0;capchan<2;capchan++)
|
||||
{
|
||||
if(SPU->regs.cap[capchan].runtime.running)
|
||||
{
|
||||
SPU_struct::REGS::CAP& cap = SPU->regs.cap[capchan];
|
||||
for(int i=0;i<length;i++)
|
||||
{
|
||||
s32 sample = SPU->sndbuf[i*2+capchan];
|
||||
s32 sample = capout[capchan];
|
||||
//s32 sample = 0;
|
||||
u32 last = sputrunc(cap.runtime.sampcnt);
|
||||
cap.runtime.sampcnt += SPU->channels[1+2*capchan].sampinc;
|
||||
u32 curr = sputrunc(cap.runtime.sampcnt);
|
||||
for(u32 j=last+1;j<=curr;j++)
|
||||
for(u32 j=last;j<curr;j++)
|
||||
{
|
||||
u32 multiplier;
|
||||
|
||||
|
@ -1087,7 +1154,6 @@ static void SPU_MixAudio(bool actuallyMix, SPU_struct *SPU, int length)
|
|||
s16 sample16 = sample;
|
||||
if(skipcap) _MMU_write16<1,MMU_AT_DMA>(cap.runtime.curdad,0);
|
||||
else _MMU_write16<1,MMU_AT_DMA>(cap.runtime.curdad,sample16);
|
||||
if(capchan==0) fwrite(&sample16,2,1,test);
|
||||
cap.runtime.curdad+=2;
|
||||
multiplier = 2;
|
||||
}
|
||||
|
@ -1096,14 +1162,64 @@ static void SPU_MixAudio(bool actuallyMix, SPU_struct *SPU, int length)
|
|||
cap.runtime.curdad = cap.dad;
|
||||
cap.runtime.sampcnt -= cap.len*multiplier;
|
||||
}
|
||||
} //sampinc loop
|
||||
} //if capchan running
|
||||
} //capchan loop
|
||||
} //main sample loop
|
||||
|
||||
SPU->sndbuf[0] = samp0[0];
|
||||
SPU->sndbuf[1] = samp0[1];
|
||||
}
|
||||
|
||||
//ENTER
|
||||
static void SPU_MixAudio(bool actuallyMix, SPU_struct *SPU, int length)
|
||||
{
|
||||
if(actuallyMix)
|
||||
{
|
||||
memset(SPU->sndbuf, 0, length*4*2);
|
||||
memset(SPU->outbuf, 0, length*2*2);
|
||||
}
|
||||
|
||||
//we used to use master enable here, and do nothing if audio is disabled.
|
||||
//now, master enable is emulated better..
|
||||
//but for a speed optimization we will still do it
|
||||
if(!SPU->regs.masteren) return;
|
||||
|
||||
bool advanced = CommonSettings.spu_advanced ;
|
||||
|
||||
//branch here so that slow computers don't have to take the advanced (slower) codepath.
|
||||
//it remainds to be seen exactly how much slower it is
|
||||
//if it isnt much slower then we should refactor everything to be simpler, once it is working
|
||||
if(advanced && SPU == SPU_core)
|
||||
{
|
||||
SPU_MixAudio_Advanced(actuallyMix, SPU, length);
|
||||
}
|
||||
else
|
||||
{
|
||||
//non-advanced mode
|
||||
for(int i=0;i<16;i++)
|
||||
{
|
||||
channel_struct *chan = &SPU->channels[i];
|
||||
|
||||
if (chan->status != CHANSTAT_PLAY)
|
||||
continue;
|
||||
|
||||
SPU->bufpos = 0;
|
||||
SPU->buflength = length;
|
||||
|
||||
// Mix audio
|
||||
_SPU_ChanUpdate(!CommonSettings.spu_muteChannels[i] && actuallyMix, SPU, chan);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
//we used to bail out if speakers were disabled.
|
||||
//this is technically wrong. sound may still be captured, or something.
|
||||
//in all likelihood, any game doing this probably master disabled the SPU also
|
||||
//so, optimization of this case is probably not necessary.
|
||||
//later, we'll just silence the output
|
||||
bool speakers = T1ReadWord(MMU.ARM7_REG, 0x304) & 0x01;
|
||||
|
||||
u8 vol = SPU->regs.mastervol;
|
||||
|
||||
// convert from 32-bit->16-bit
|
||||
if(actuallyMix && speakers)
|
||||
|
@ -1377,8 +1493,8 @@ void spu_savestate(EMUFILE* os)
|
|||
write8le(spu->regs.mastervol,os);
|
||||
write8le(spu->regs.ctl_left,os);
|
||||
write8le(spu->regs.ctl_right,os);
|
||||
write8le(spu->regs.ctl_ch1,os);
|
||||
write8le(spu->regs.ctl_ch2,os);
|
||||
write8le(spu->regs.ctl_ch1bypass,os);
|
||||
write8le(spu->regs.ctl_ch3bypass,os);
|
||||
write8le(spu->regs.masteren,os);
|
||||
write16le(spu->regs.soundbias,os);
|
||||
|
||||
|
@ -1462,8 +1578,8 @@ bool spu_loadstate(EMUFILE* is, int size)
|
|||
read8le(&spu->regs.mastervol,is);
|
||||
read8le(&spu->regs.ctl_left,is);
|
||||
read8le(&spu->regs.ctl_right,is);
|
||||
read8le(&spu->regs.ctl_ch1,is);
|
||||
read8le(&spu->regs.ctl_ch2,is);
|
||||
read8le(&spu->regs.ctl_ch1bypass,is);
|
||||
read8le(&spu->regs.ctl_ch3bypass,is);
|
||||
read8le(&spu->regs.masteren,is);
|
||||
read16le(&spu->regs.soundbias,is);
|
||||
}
|
||||
|
@ -1491,6 +1607,7 @@ bool spu_loadstate(EMUFILE* is, int size)
|
|||
if(version<4)
|
||||
{
|
||||
spu->regs.mastervol = T1ReadByte(MMU.ARM7_REG, 0x500) & 0x7F;
|
||||
spu->regs.masteren = BIT15(T1ReadWord(MMU.ARM7_REG, 0x500));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -111,6 +111,7 @@ public:
|
|||
u32 bufpos;
|
||||
u32 buflength;
|
||||
s32 *sndbuf;
|
||||
s32 lastdata; //the last sample that a channel generated
|
||||
s16 *outbuf;
|
||||
u32 bufsize;
|
||||
channel_struct channels[16];
|
||||
|
@ -121,18 +122,28 @@ public:
|
|||
: mastervol(0)
|
||||
, ctl_left(0)
|
||||
, ctl_right(0)
|
||||
, ctl_ch1(0)
|
||||
, ctl_ch2(0)
|
||||
, ctl_ch1bypass(0)
|
||||
, ctl_ch3bypass(0)
|
||||
, masteren(0)
|
||||
, soundbias(0)
|
||||
{}
|
||||
|
||||
u8 mastervol;
|
||||
u8 ctl_left, ctl_right;
|
||||
u8 ctl_ch1, ctl_ch2;
|
||||
u8 ctl_ch1bypass, ctl_ch3bypass;
|
||||
u8 masteren;
|
||||
u16 soundbias;
|
||||
|
||||
enum LeftOutputMode
|
||||
{
|
||||
LOM_LEFT_MIXER=0, LOM_CH1=1, LOM_CH3=2, LOM_CH1_PLUS_CH3=3
|
||||
};
|
||||
|
||||
enum RightOutputMode
|
||||
{
|
||||
ROM_RIGHT_MIXER=0, ROM_CH1=1, ROM_CH3=2, ROM_CH1_PLUS_CH3=3
|
||||
};
|
||||
|
||||
struct CAP {
|
||||
CAP()
|
||||
: add(0), source(0), oneshot(0), bits8(0), active(0), dad(0), len(0)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* commandline.cpp
|
||||
|
||||
Copyright (C) 2009 DeSmuME team
|
||||
Copyright (C) 2009-2010 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
||||
|
@ -75,6 +75,7 @@ void CommandLine::loadCommonOptions()
|
|||
{ "bios-arm9", 0, 0, G_OPTION_ARG_FILENAME, &_bios_arm9, "Uses the arm9 bios provided at the specified path", "BIOS_ARM9_PATH"},
|
||||
{ "bios-arm7", 0, 0, G_OPTION_ARG_FILENAME, &_bios_arm7, "Uses the arm7 bios provided at the specified path", "BIOS_ARM7_PATH"},
|
||||
{ "bios-swi", 0, 0, G_OPTION_ARG_INT, &_bios_swi, "Uses SWI from the provided bios files", "BIOS_SWI"},
|
||||
{ "spu-advanced", 0, 0, G_OPTION_ARG_INT, &_spu_advanced, "Uses advanced SPU capture functions", "SPU_ADVANCED"},
|
||||
{ "num-cores", 0, 0, G_OPTION_ARG_INT, &_num_cores, "Override numcores detection and use this many", "NUM_CORES"},
|
||||
{ "scanline-filter-a", 0, 0, G_OPTION_ARG_INT, &scanline_filter_a, "Intensity of fadeout for scanlines filter (edge) (default 2)", "SCANLINE_FILTER_A"},
|
||||
{ "scanline-filter-b", 0, 0, G_OPTION_ARG_INT, &scanline_filter_b, "Intensity of fadeout for scanlines filter (corner) (default 4)", "SCANLINE_FILTER_B"},
|
||||
|
@ -112,7 +113,7 @@ bool CommandLine::parse(int argc,char **argv)
|
|||
if(_bios_arm9) { CommonSettings.UseExtBIOS = true; strcpy(CommonSettings.ARM9BIOS,_bios_arm9); }
|
||||
if(_bios_arm7) { CommonSettings.UseExtBIOS = true; strcpy(CommonSettings.ARM7BIOS,_bios_arm7); }
|
||||
if(_bios_swi) CommonSettings.SWIFromBIOS = true;
|
||||
if(_bios_swi) CommonSettings.SWIFromBIOS = true;
|
||||
if(_spu_advanced) CommonSettings.spu_advanced = true;
|
||||
|
||||
if (argc == 2)
|
||||
nds_file = argv[1];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* commandline.h
|
||||
|
||||
Copyright (C) 2009 DeSmuME team
|
||||
Copyright (C) 2009-2010 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
||||
|
@ -80,6 +80,7 @@ private:
|
|||
char* _gbaslot_rom;
|
||||
char* _bios_arm9, *_bios_arm7;
|
||||
int _bios_swi;
|
||||
int _spu_advanced;
|
||||
int _num_cores;
|
||||
};
|
||||
|
||||
|
|
|
@ -2369,6 +2369,8 @@ int _main()
|
|||
FrameLimit = GetPrivateProfileBool("FrameLimit", "FrameLimit", true, IniName);
|
||||
CommonSettings.showGpu.main = GetPrivateProfileInt("Display", "MainGpu", 1, IniName) != 0;
|
||||
CommonSettings.showGpu.sub = GetPrivateProfileInt("Display", "SubGpu", 1, IniName) != 0;
|
||||
CommonSettings.spu_advanced = GetPrivateProfileBool("Sound", "SpuAdvanced", false, IniName);
|
||||
|
||||
lostFocusPause = GetPrivateProfileBool("Focus", "BackgroundPause", false, IniName);
|
||||
|
||||
//Get Ram-Watch values
|
||||
|
@ -2638,17 +2640,17 @@ int _main()
|
|||
SPU_SetSynchMode(snd_synchmode,snd_synchmethod);
|
||||
}
|
||||
|
||||
CommonSettings.DebugConsole = GetPrivateProfileBool("Emulation", "DebugConsole", FALSE, IniName);
|
||||
CommonSettings.EnsataEmulation = GetPrivateProfileBool("Emulation", "EnsataEmulation", FALSE, IniName);
|
||||
CommonSettings.UseExtBIOS = GetPrivateProfileBool("BIOS", "UseExtBIOS", FALSE, IniName);
|
||||
CommonSettings.DebugConsole = GetPrivateProfileBool("Emulation", "DebugConsole", false, IniName);
|
||||
CommonSettings.EnsataEmulation = GetPrivateProfileBool("Emulation", "EnsataEmulation", false, IniName);
|
||||
CommonSettings.UseExtBIOS = GetPrivateProfileBool("BIOS", "UseExtBIOS", false, IniName);
|
||||
GetPrivateProfileString("BIOS", "ARM9BIOSFile", "bios9.bin", CommonSettings.ARM9BIOS, 256, IniName);
|
||||
GetPrivateProfileString("BIOS", "ARM7BIOSFile", "bios7.bin", CommonSettings.ARM7BIOS, 256, IniName);
|
||||
CommonSettings.SWIFromBIOS = GetPrivateProfileBool("BIOS", "SWIFromBIOS", FALSE, IniName);
|
||||
CommonSettings.PatchSWI3 = GetPrivateProfileBool("BIOS", "PatchSWI3", FALSE, IniName);
|
||||
CommonSettings.SWIFromBIOS = GetPrivateProfileBool("BIOS", "SWIFromBIOS", false, IniName);
|
||||
CommonSettings.PatchSWI3 = GetPrivateProfileBool("BIOS", "PatchSWI3", false, IniName);
|
||||
|
||||
CommonSettings.UseExtFirmware = GetPrivateProfileBool("Firmware", "UseExtFirmware", FALSE, IniName);
|
||||
CommonSettings.UseExtFirmware = GetPrivateProfileBool("Firmware", "UseExtFirmware", false, IniName);
|
||||
GetPrivateProfileString("Firmware", "FirmwareFile", "firmware.bin", CommonSettings.Firmware, 256, IniName);
|
||||
CommonSettings.BootFromFirmware = GetPrivateProfileBool("Firmware", "BootFromFirmware", FALSE, IniName);
|
||||
CommonSettings.BootFromFirmware = GetPrivateProfileBool("Firmware", "BootFromFirmware", false, IniName);
|
||||
|
||||
video.currentfilter = GetPrivateProfileInt("Video", "Filter", video.NONE, IniName);
|
||||
FilterUpdate(MainWindow->getHWnd(),false);
|
||||
|
@ -5835,6 +5837,9 @@ static LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam
|
|||
SendDlgItemMessage(hDlg, IDC_SLVOLUME, TBM_SETPOS, TRUE, sndvolume);
|
||||
SoundSettings_updateVolumeReadout(hDlg);
|
||||
|
||||
// Set spu advanced
|
||||
CheckDlgItem(hDlg,IDC_SPU_ADVANCED,CommonSettings.spu_advanced);
|
||||
|
||||
timerid = SetTimer(hDlg, 1, 500, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -5909,9 +5914,12 @@ static LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam
|
|||
|
||||
//write interpolation type
|
||||
CommonSettings.spuInterpolationMode = (SPUInterpolationMode)SendDlgItemMessage(hDlg, IDC_SPU_INTERPOLATION_CB, CB_GETCURSEL, 0, 0);
|
||||
//SPU_SetInterpolationMode(CommonSettings.spuInterpolationMode);
|
||||
WritePrivateProfileInt("Sound","SPUInterpolation",(int)CommonSettings.spuInterpolationMode, IniName);
|
||||
|
||||
//write spu advanced
|
||||
CommonSettings.spu_advanced = IsDlgCheckboxChecked(hDlg,IDC_SPU_ADVANCED);
|
||||
WritePrivateProfileBool("Sound","SpuAdvanced",CommonSettings.spu_advanced,IniName);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
case IDCANCEL:
|
||||
|
|
|
@ -351,10 +351,18 @@
|
|||
#define IDC_USEPHYSICAL 1019
|
||||
#define IDC_SPLIT1 1021
|
||||
#define IDC_PATCHSWI3 1022
|
||||
#define IDC_CAP0_ADD 1023
|
||||
#define IDC_CAP0_CURDAD 1024
|
||||
#define IDC_CAP1_ADD 1025
|
||||
#define IDC_SPU_ADVANCED 1025
|
||||
#define IDC_CAP1_CURDAD 1026
|
||||
#define IDC_DEFAULT 1027
|
||||
#define IDC_3DCORE 1028
|
||||
#define IDC_SNDCTRL_ENABLE 1028
|
||||
#define IDC_TXT_COMPILED 1029
|
||||
#define IDC_SNDCTRL_CH1NOMIX 1029
|
||||
#define IDC_TXT_VERSION 1030
|
||||
#define IDC_SNDCTRL_CH3NOMIX 1030
|
||||
#define IDC_ADDONS_LIST 1033
|
||||
#define IDC_ADDONS_INFO 1034
|
||||
#define IDC_BBROWSE 1035
|
||||
|
@ -392,11 +400,22 @@
|
|||
#define IDC_SNUMBER 1071
|
||||
#define IDC_CHECK1 1074
|
||||
#define IDC_CHECK2 1075
|
||||
#define IDC_CAP0_SRC 1075
|
||||
#define IDC_CHECK3 1076
|
||||
#define IDC_CAP0_ONESHOT 1076
|
||||
#define IDC_CHECK4 1077
|
||||
#define IDC_CAP0_TYPE 1077
|
||||
#define IDC_CAP0_ACTIVE 1078
|
||||
#define IDC_CHECK10 1079
|
||||
#define IDC_CAP0_RUNNING 1079
|
||||
#define IDC_CHECK6 1080
|
||||
#define IDC_CAP1_SRC 1080
|
||||
#define IDC_CAP1_ONESHOT 1081
|
||||
#define IDC_CHECK7 1082
|
||||
#define IDC_CAP1_TYPE 1082
|
||||
#define IDC_CHECK8 1083
|
||||
#define IDC_CAP1_ACTIVE 1083
|
||||
#define IDC_CAP1_RUNNING 1084
|
||||
#define IDC_CHECK9 1088
|
||||
#define IDM_FIRMSETTINGS 1100
|
||||
#define IDD_FIRMSETTINGS 1101
|
||||
|
@ -609,6 +628,24 @@
|
|||
#define IDC_SOUND5POSLEN 1451
|
||||
#define IDC_SOUND6POSLEN 1452
|
||||
#define IDC_SOUND7POSLEN 1453
|
||||
#define IDC_CAP0_DAD 1454
|
||||
#define IDC_CAP0_CTRL 1455
|
||||
#define IDC_CAP0_SRCTEXT 1456
|
||||
#define IDC_CAP0_TYPETEXT 1457
|
||||
#define IDC_CAP0_LEN 1458
|
||||
#define IDC_SOUND0POSLEN7 1459
|
||||
#define IDC_CAP1_DAD 1459
|
||||
#define IDC_CAP1_CTRL 1460
|
||||
#define IDC_CAP1_SRCTEXT 1461
|
||||
#define IDC_CAP1_TYPETEXT 1462
|
||||
#define IDC_CAP1_LEN 1463
|
||||
#define IDC_SNDCTRL_CTRL 1464
|
||||
#define IDC_SNDCTRL_VOL 1465
|
||||
#define IDC_SNDCTRL_BIAS 1466
|
||||
#define IDC_SNDCTRL_LEFTOUT 1467
|
||||
#define IDC_SNDCTRL_LEFTOUTTEXT 1468
|
||||
#define IDC_SNDCTRL_RIGHTOUT 1469
|
||||
#define IDC_SNDCTRL_RIGHTOUTTEXT 1470
|
||||
#define IDC_SOUND0MUTE 2001
|
||||
#define IDC_SOUND1MUTE 2002
|
||||
#define IDC_SOUND2MUTE 2003
|
||||
|
@ -627,29 +664,81 @@
|
|||
#define IDC_INTERPOLATECOLOR 4464
|
||||
#define IDC_GI_FATSIZE 4465
|
||||
#define IDC_3DSETTINGS_EDGEMARK 4465
|
||||
#define ID_LABEL_HK1 4465
|
||||
#define IDC_GI_ICONTITLEOFS 4466
|
||||
#define IDC_3DSETTINGS_FOG 4466
|
||||
#define ID_LABEL_HK2 4466
|
||||
#define IDC_GI_USEDROMSIZE 4467
|
||||
#define ID_LABEL_HK3 4467
|
||||
#define ID_LABEL_HK4 4468
|
||||
#define IDC_GI_ICON 4469
|
||||
#define ID_LABEL_HK5 4469
|
||||
#define IDC_GI_TITLE 4470
|
||||
#define ID_LABEL_HK6 4470
|
||||
#define IDC_GI_TITLEEN 4471
|
||||
#define ID_LABEL_HK7 4471
|
||||
#define IDC_GI_TITLEFR 4472
|
||||
#define ID_LABEL_HK8 4472
|
||||
#define IDC_GI_TITLEGE 4473
|
||||
#define ID_LABEL_HK9 4473
|
||||
#define IDC_GI_TITLEIT 4474
|
||||
#define ID_LABEL_HK10 4474
|
||||
#define IDC_GI_TITLESP 4475
|
||||
#define ID_LABEL_HK11 4475
|
||||
#define IDC_GI_MAKERCODE 4476
|
||||
#define ID_LABEL_HK12 4476
|
||||
#define IDC_GI_TITLEJP 4477
|
||||
#define ID_LABEL_HK13 4477
|
||||
#define IDC_GI_CHIPSIZE 4478
|
||||
#define ID_LABEL_HK14 4478
|
||||
#define IDC_GI_ARM9START 4479
|
||||
#define ID_LABEL_HK15 4479
|
||||
#define IDC_GI_ARM9ENTRY 4480
|
||||
#define ID_LABEL_HK16 4480
|
||||
#define IDC_GI_ARM9ROM 4481
|
||||
#define ID_LABEL_HK17 4481
|
||||
#define IDC_GI_ARM9SIZE 4482
|
||||
#define ID_LABEL_HK18 4482
|
||||
#define IDC_GI_ARM7ROM 4483
|
||||
#define ID_LABEL_HK19 4483
|
||||
#define IDC_GI_ARM7ENTRY 4484
|
||||
#define ID_LABEL_HK20 4484
|
||||
#define IDC_GI_ARM7START 4485
|
||||
#define ID_LABEL_HK21 4485
|
||||
#define IDC_GI_ARM7SIZE 4486
|
||||
#define ID_LABEL_HK22 4486
|
||||
#define IDC_GI_FNTOFS 4487
|
||||
#define ID_LABEL_HK23 4487
|
||||
#define IDC_GI_FNTSIZE 4488
|
||||
#define ID_LABEL_HK24 4488
|
||||
#define ID_LABEL_HK25 4489
|
||||
#define ID_LABEL_HK26 4490
|
||||
#define ID_LABEL_HK27 4491
|
||||
#define ID_LABEL_HK28 4492
|
||||
#define ID_LABEL_HK29 4493
|
||||
#define ID_LABEL_HK30 4494
|
||||
#define ID_LABEL_HK31 4495
|
||||
#define ID_LABEL_HK32 4496
|
||||
#define ID_LABEL_HK33 4497
|
||||
#define ID_LABEL_HK34 4498
|
||||
#define ID_LABEL_HK35 4499
|
||||
#define ID_LABEL_HK36 4500
|
||||
#define ID_LABEL_HK37 4501
|
||||
#define ID_LABEL_HK38 4502
|
||||
#define ID_LABEL_HK39 4503
|
||||
#define ID_LABEL_HK40 4504
|
||||
#define ID_LABEL_HK41 4505
|
||||
#define ID_LABEL_HK42 4506
|
||||
#define ID_LABEL_HK43 4507
|
||||
#define ID_LABEL_HK44 4508
|
||||
#define ID_LABEL_HK45 4509
|
||||
#define ID_LABEL_HK46 4510
|
||||
#define ID_LABEL_HK47 4511
|
||||
#define ID_LABEL_HK48 4512
|
||||
#define ID_LABEL_HK49 4513
|
||||
#define ID_LABEL_HK50 4514
|
||||
#define ID_LABEL_HK51 4515
|
||||
#define ID_LABEL_HK52 4516
|
||||
#define IDD_MICROPHONE 5000
|
||||
#define IDM_MICROPHONESETTINGS 5001
|
||||
#define IDC_MICSAMPLEBROWSE 5003
|
||||
|
@ -808,59 +897,6 @@
|
|||
#define IDM_RENDER_HQ2XS 60081
|
||||
#define IDM_RENDER_LQ2X 60082
|
||||
#define IDM_RENDER_LQ2XS 60083
|
||||
#define ID_LABEL_HK1 70001
|
||||
#define ID_LABEL_HK2 70002
|
||||
#define ID_LABEL_HK3 70003
|
||||
#define ID_LABEL_HK4 70004
|
||||
#define ID_LABEL_HK5 70005
|
||||
#define ID_LABEL_HK6 70006
|
||||
#define ID_LABEL_HK7 70007
|
||||
#define ID_LABEL_HK8 70008
|
||||
#define ID_LABEL_HK9 70009
|
||||
#define ID_LABEL_HK10 70010
|
||||
#define ID_LABEL_HK11 70011
|
||||
#define ID_LABEL_HK12 70012
|
||||
#define ID_LABEL_HK13 70013
|
||||
#define ID_LABEL_HK14 70014
|
||||
#define ID_LABEL_HK15 70015
|
||||
#define ID_LABEL_HK16 70016
|
||||
#define ID_LABEL_HK17 70017
|
||||
#define ID_LABEL_HK18 70018
|
||||
#define ID_LABEL_HK19 70019
|
||||
#define ID_LABEL_HK20 70020
|
||||
#define ID_LABEL_HK21 70021
|
||||
#define ID_LABEL_HK22 70022
|
||||
#define ID_LABEL_HK23 70023
|
||||
#define ID_LABEL_HK24 70024
|
||||
#define ID_LABEL_HK25 70025
|
||||
#define ID_LABEL_HK26 70026
|
||||
#define ID_LABEL_HK27 70027
|
||||
#define ID_LABEL_HK28 70028
|
||||
#define ID_LABEL_HK29 70029
|
||||
#define ID_LABEL_HK30 70030
|
||||
#define ID_LABEL_HK31 70031
|
||||
#define ID_LABEL_HK32 70032
|
||||
#define ID_LABEL_HK33 70033
|
||||
#define ID_LABEL_HK34 70034
|
||||
#define ID_LABEL_HK35 70035
|
||||
#define ID_LABEL_HK36 70036
|
||||
#define ID_LABEL_HK37 70037
|
||||
#define ID_LABEL_HK38 70038
|
||||
#define ID_LABEL_HK39 70039
|
||||
#define ID_LABEL_HK40 70040
|
||||
#define ID_LABEL_HK41 70041
|
||||
#define ID_LABEL_HK42 70042
|
||||
#define ID_LABEL_HK43 70043
|
||||
#define ID_LABEL_HK44 70044
|
||||
#define ID_LABEL_HK45 70045
|
||||
#define ID_LABEL_HK46 70046
|
||||
#define ID_LABEL_HK47 70047
|
||||
#define ID_LABEL_HK48 70048
|
||||
#define ID_LABEL_HK49 70049
|
||||
#define ID_LABEL_HK50 70050
|
||||
#define ID_LABEL_HK51 70051
|
||||
#define ID_LABEL_HK52 70052
|
||||
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
@ -868,7 +904,7 @@
|
|||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 121
|
||||
#define _APS_NEXT_COMMAND_VALUE 40074
|
||||
#define _APS_NEXT_CONTROL_VALUE 1022
|
||||
#define _APS_NEXT_CONTROL_VALUE 1026
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (C) 2006 yopyop
|
||||
yopyop156@ifrance.com
|
||||
yopyop156.ifrance.com
|
||||
/* soundView.cpp
|
||||
|
||||
Copyright (C) 2009-2010 DeSmuME team
|
||||
|
||||
This file is part of DeSmuME
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
|||
#include <windowsx.h>
|
||||
#include <commctrl.h>
|
||||
#include "soundView.h"
|
||||
#include "winutil.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
|
@ -204,6 +205,96 @@ void SoundView_Refresh()
|
|||
SetDlgItemText(hDlg, IDC_SOUND0TMR+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0POSLEN+chanId, buf);
|
||||
}
|
||||
} //chan loop
|
||||
|
||||
//ctrl
|
||||
{
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_ENABLE,SPU_core->regs.masteren!=0);
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_CH1NOMIX,SPU_core->regs.ctl_ch1bypass!=0);
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_CH3NOMIX,SPU_core->regs.ctl_ch3bypass!=0);
|
||||
|
||||
sprintf(buf,"%04X",_MMU_ARM7_read16(0x04000500));
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%04X",_MMU_ARM7_read16(0x04000504));
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_BIAS,buf);
|
||||
|
||||
sprintf(buf,"%02X",SPU_core->regs.mastervol);
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_VOL,buf);
|
||||
|
||||
sprintf(buf,"%01X",SPU_core->regs.ctl_left);
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_LEFTOUT,buf);
|
||||
|
||||
sprintf(buf,"%01X",SPU_core->regs.ctl_right);
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_RIGHTOUT,buf);
|
||||
|
||||
static const char* leftouttext[] = {"L-Mix","Ch1","Ch3","Ch1+3"};
|
||||
static const char* rightouttext[] = {"R-Mix","Ch1","Ch3","Ch1+3"};
|
||||
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_LEFTOUTTEXT,leftouttext[SPU_core->regs.ctl_left]);
|
||||
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_RIGHTOUTTEXT,rightouttext[SPU_core->regs.ctl_right]);
|
||||
|
||||
}
|
||||
|
||||
//cap0
|
||||
{
|
||||
SPU_struct::REGS::CAP& cap = SPU_core->regs.cap[0];
|
||||
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ADD,cap.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_SRC,cap.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ONESHOT,cap.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_TYPE,cap.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ACTIVE,cap.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_RUNNING,cap.runtime.running!=0);
|
||||
|
||||
if(cap.source) SetDlgItemText(hDlg,IDC_CAP0_SRCTEXT,"Ch2");
|
||||
else SetDlgItemText(hDlg,IDC_CAP0_SRCTEXT,"L-Mix");
|
||||
|
||||
if(cap.bits8) SetDlgItemText(hDlg,IDC_CAP0_TYPETEXT,"Pcm8");
|
||||
else SetDlgItemText(hDlg,IDC_CAP0_TYPETEXT,"Pcm16");
|
||||
|
||||
sprintf(buf,"%02X",_MMU_ARM7_read08(0x04000508));
|
||||
SetDlgItemText(hDlg,IDC_CAP0_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.dad);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_DAD,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.len);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_LEN,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.runtime.curdad);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_CURDAD,buf);
|
||||
}
|
||||
|
||||
//cap1
|
||||
{
|
||||
SPU_struct::REGS::CAP& cap = SPU_core->regs.cap[1];
|
||||
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ADD,cap.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_SRC,cap.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ONESHOT,cap.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_TYPE,cap.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ACTIVE,cap.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_RUNNING,cap.runtime.running!=0);
|
||||
|
||||
if(cap.source) SetDlgItemText(hDlg,IDC_CAP1_SRCTEXT,"Ch3"); //maybe call it "Ch3(+2)" if it fits
|
||||
else SetDlgItemText(hDlg,IDC_CAP1_SRCTEXT,"R-Mix");
|
||||
|
||||
if(cap.bits8) SetDlgItemText(hDlg,IDC_CAP1_TYPETEXT,"Pcm8");
|
||||
else SetDlgItemText(hDlg,IDC_CAP1_TYPETEXT,"Pcm16");
|
||||
|
||||
sprintf(buf,"%02X",_MMU_ARM7_read08(0x04000509));
|
||||
SetDlgItemText(hDlg,IDC_CAP1_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.dad);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_DAD,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.len);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_LEN,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.runtime.curdad);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_CURDAD,buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue