SegaPCM: real limit is 2MB
This commit is contained in:
parent
379b19a102
commit
69e3515757
|
@ -423,7 +423,7 @@ const void* DivPlatformSegaPCM::getSampleMem(int index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DivPlatformSegaPCM::getSampleMemCapacity(int index) {
|
size_t DivPlatformSegaPCM::getSampleMemCapacity(int index) {
|
||||||
return index == 0 ? 16777216 : 0;
|
return index == 0 ? 2097152 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DivPlatformSegaPCM::getSampleMemUsage(int index) {
|
size_t DivPlatformSegaPCM::getSampleMemUsage(int index) {
|
||||||
|
@ -465,7 +465,7 @@ void DivPlatformSegaPCM::reset() {
|
||||||
void DivPlatformSegaPCM::renderSamples(int sysID) {
|
void DivPlatformSegaPCM::renderSamples(int sysID) {
|
||||||
size_t memPos=0;
|
size_t memPos=0;
|
||||||
|
|
||||||
memset(sampleMem,0,16777216);
|
memset(sampleMem,0,2097152);
|
||||||
memset(sampleLoaded,0,256*sizeof(bool));
|
memset(sampleLoaded,0,256*sizeof(bool));
|
||||||
memset(sampleOffSegaPCM,0,256*sizeof(unsigned int));
|
memset(sampleOffSegaPCM,0,256*sizeof(unsigned int));
|
||||||
memset(sampleEndSegaPCM,0,256);
|
memset(sampleEndSegaPCM,0,256);
|
||||||
|
@ -482,7 +482,7 @@ void DivPlatformSegaPCM::renderSamples(int sysID) {
|
||||||
}
|
}
|
||||||
logV("- sample %d will be at %x with length %x",i,memPos,alignedSize);
|
logV("- sample %d will be at %x with length %x",i,memPos,alignedSize);
|
||||||
sampleLoaded[i]=true;
|
sampleLoaded[i]=true;
|
||||||
if (memPos>=16777216) break;
|
if (memPos>=2097152) break;
|
||||||
sampleOffSegaPCM[i]=memPos;
|
sampleOffSegaPCM[i]=memPos;
|
||||||
for (unsigned int j=0; j<alignedSize; j++) {
|
for (unsigned int j=0; j<alignedSize; j++) {
|
||||||
if (j>=sample->samples) {
|
if (j>=sample->samples) {
|
||||||
|
@ -491,10 +491,10 @@ void DivPlatformSegaPCM::renderSamples(int sysID) {
|
||||||
sampleMem[memPos++]=((unsigned char)sample->data8[j]+0x80);
|
sampleMem[memPos++]=((unsigned char)sample->data8[j]+0x80);
|
||||||
}
|
}
|
||||||
sampleEndSegaPCM[i]=((memPos+0xff)>>8)-1;
|
sampleEndSegaPCM[i]=((memPos+0xff)>>8)-1;
|
||||||
if (memPos>=16777216) break;
|
if (memPos>=2097152) break;
|
||||||
}
|
}
|
||||||
logV(" and it ends in %d",sampleEndSegaPCM[i]);
|
logV(" and it ends in %d",sampleEndSegaPCM[i]);
|
||||||
if (memPos>=16777216) break;
|
if (memPos>=2097152) break;
|
||||||
}
|
}
|
||||||
sampleMemLen=memPos;
|
sampleMemLen=memPos;
|
||||||
}
|
}
|
||||||
|
@ -522,10 +522,10 @@ int DivPlatformSegaPCM::init(DivEngine* p, int channels, int sugRate, const DivC
|
||||||
isMuted[i]=false;
|
isMuted[i]=false;
|
||||||
oscBuf[i]=new DivDispatchOscBuffer;
|
oscBuf[i]=new DivDispatchOscBuffer;
|
||||||
}
|
}
|
||||||
sampleMem=new unsigned char[16777216];
|
sampleMem=new unsigned char[2097152];
|
||||||
pcm.set_bank(segapcm_device::BANK_12M|segapcm_device::BANK_MASKF8);
|
pcm.set_bank(segapcm_device::BANK_12M|segapcm_device::BANK_MASKF8);
|
||||||
pcm.set_read([this](unsigned int addr) -> unsigned char {
|
pcm.set_read([this](unsigned int addr) -> unsigned char {
|
||||||
return sampleMem[addr&0xffffff];
|
return sampleMem[addr&0x1fffff];
|
||||||
});
|
});
|
||||||
setFlags(flags);
|
setFlags(flags);
|
||||||
reset();
|
reset();
|
||||||
|
|
Loading…
Reference in New Issue