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 a new issue
	
	 tildearrow
						tildearrow