diff options
-rw-r--r-- | scumm/imuse_digi/dimuse.h | 10 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse_bndmgr.h | 3 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse_codecs.cpp | 26 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse_sndmgr.cpp | 3 | ||||
-rw-r--r-- | scumm/imuse_digi/dimuse_tables.cpp | 35 | ||||
-rw-r--r-- | scumm/player_v2a.cpp | 16 |
6 files changed, 86 insertions, 7 deletions
diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h index 1fb7a977a4..e8b5dd8cbe 100644 --- a/scumm/imuse_digi/dimuse.h +++ b/scumm/imuse_digi/dimuse.h @@ -144,6 +144,15 @@ struct imuse_ft_music_table { char name[30]; }; +#ifdef __PALM_OS__ +extern imuse_music_map *_digStateMusicMap; +extern const imuse_music_table *_digStateMusicTable; +extern const imuse_music_table *_comiStateMusicTable; +extern const imuse_music_table *_comiSeqMusicTable; +extern const imuse_music_table *_digSeqMusicTable; +extern const imuse_ft_music_table *_ftStateMusicTable; +extern const imuse_ft_music_table *_ftSeqMusicTable; +#else extern imuse_music_map _digStateMusicMap[]; extern const imuse_music_table _digStateMusicTable[]; extern const imuse_music_table _digSeqMusicTable[]; @@ -151,6 +160,7 @@ extern const imuse_music_table _comiStateMusicTable[]; extern const imuse_music_table _comiSeqMusicTable[]; extern const imuse_ft_music_table _ftStateMusicTable[]; extern const imuse_ft_music_table _ftSeqMusicTable[]; +#endif } // End of namespace Scumm diff --git a/scumm/imuse_digi/dimuse_bndmgr.h b/scumm/imuse_digi/dimuse_bndmgr.h index 1473816728..11dd678b2b 100644 --- a/scumm/imuse_digi/dimuse_bndmgr.h +++ b/scumm/imuse_digi/dimuse_bndmgr.h @@ -88,6 +88,9 @@ namespace BundleCodecs { uint32 decode12BitsSample(byte *src, byte **dst, uint32 size); void initializeImcTables(); +#ifdef __PALM_OS__ +void releaseImcTables(); +#endif int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 input_size); } // End of namespace BundleCodecs diff --git a/scumm/imuse_digi/dimuse_codecs.cpp b/scumm/imuse_digi/dimuse_codecs.cpp index 5d3e1f78f2..5b88d8369e 100644 --- a/scumm/imuse_digi/dimuse_codecs.cpp +++ b/scumm/imuse_digi/dimuse_codecs.cpp @@ -44,12 +44,15 @@ uint32 decode12BitsSample(byte *src, byte **dst, uint32 size) { return s_size; } -static byte _destImcTable[93]; -static uint32 _destImcTable2[5697]; - #ifdef __PALM_OS__ +static byte *_destImcTable = NULL; // save 23k of memory ! +static uint32 *_destImcTable2 = NULL; + static const int16 *imcTable; #else +static byte _destImcTable[93]; +static uint32 _destImcTable2[5697]; + static const int16 imcTable[] = { 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D, @@ -119,9 +122,22 @@ static const byte imxShortTable[] = { 0, 0, 1, 3, 7, 15, 31, 63 }; +#ifdef __PALM_OS__ +void releaseImcTables() { + free(_destImcTable); + free(_destImcTable2); +} +#endif + void initializeImcTables() { int32 destTablePos = 0; int32 imcTable1Pos = 0; + +#ifdef __PALM_OS__ + if (!_destImcTable) _destImcTable = (byte *)calloc(93, sizeof(byte)); + if (!_destImcTable2) _destImcTable2 = (uint32 *)calloc(5697, sizeof(uint32)); +#endif + do { byte put = 1; int32 tableValue = ((imcTable[imcTable1Pos] * 4) / 7) / 2; @@ -687,11 +703,11 @@ int32 decompressCodec(int32 codec, byte *comp_input, byte *comp_output, int32 in #ifdef __PALM_OS__ #include "scumm_globals.h" -_GINIT(BundleCodecs) +_GINIT(DimuseCodecs) _GSETPTR(Scumm::BundleCodecs::imcTable, GBVARS_IMCTABLE_INDEX, int16, GBVARS_SCUMM) _GEND -_GRELEASE(BundleCodecs) +_GRELEASE(DimuseCodecs) _GRELEASEPTR(GBVARS_IMCTABLE_INDEX, GBVARS_SCUMM) _GEND diff --git a/scumm/imuse_digi/dimuse_sndmgr.cpp b/scumm/imuse_digi/dimuse_sndmgr.cpp index 0ad7dfabde..6554b0ae0d 100644 --- a/scumm/imuse_digi/dimuse_sndmgr.cpp +++ b/scumm/imuse_digi/dimuse_sndmgr.cpp @@ -43,6 +43,9 @@ ImuseDigiSndMgr::~ImuseDigiSndMgr() { closeSound(&_sounds[l]); } delete _cacheBundleDir; +#ifdef __PALM_OS__ + BundleCodecs::releaseImcTables(); +#endif } void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) { diff --git a/scumm/imuse_digi/dimuse_tables.cpp b/scumm/imuse_digi/dimuse_tables.cpp index d9f5fa9301..78e5e00564 100644 --- a/scumm/imuse_digi/dimuse_tables.cpp +++ b/scumm/imuse_digi/dimuse_tables.cpp @@ -23,6 +23,15 @@ namespace Scumm { +#ifdef __PALM_OS__ +imuse_music_map *_digStateMusicMap; +const imuse_music_table *_digStateMusicTable; +const imuse_music_table *_comiStateMusicTable; +const imuse_music_table *_comiSeqMusicTable; +const imuse_music_table *_digSeqMusicTable; +const imuse_ft_music_table *_ftStateMusicTable; +const imuse_ft_music_table *_ftSeqMusicTable; +#else imuse_music_map _digStateMusicMap[] = { {0, 0, 0, 0, 0, 0 }, {1, 0, 0, 0, 0, 0 }, @@ -579,5 +588,31 @@ const imuse_ft_music_table _ftSeqMusicTable[] = { {52, "bornbad", 2, 127, "seqCredits" }, {-1, "", 0, 0, "" } }; +#endif } // End of namespace Scumm + +#ifdef __PALM_OS__ +#include "scumm_globals.h" + +_GINIT(DimuseTables) +_GSETPTR(Scumm::_digStateMusicMap, GBVARS_DIGSTATEMUSICMAP_INDEX, Scumm::imuse_music_map , GBVARS_SCUMM) +_GSETPTR(Scumm::_digStateMusicTable, GBVARS_DIGSTATEMUSICTABLE_INDEX, Scumm::imuse_music_table , GBVARS_SCUMM) +_GSETPTR(Scumm::_comiStateMusicTable, GBVARS_COMISTATEMUSICTABLE_INDEX, Scumm::imuse_music_table , GBVARS_SCUMM) +_GSETPTR(Scumm::_comiSeqMusicTable, GBVARS_COMISEQMUSICTABLE_INDEX, Scumm::imuse_music_table , GBVARS_SCUMM) +_GSETPTR(Scumm::_digSeqMusicTable, GBVARS_DIGSEQMUSICTABLE_INDEX, Scumm::imuse_music_table , GBVARS_SCUMM) +_GSETPTR(Scumm::_ftStateMusicTable, GBVARS_FTSTATEMUSICTABLE_INDEX, Scumm::imuse_ft_music_table , GBVARS_SCUMM) +_GSETPTR(Scumm::_ftSeqMusicTable, GBVARS_FTSEQMUSICTABLE_INDEX, Scumm::imuse_ft_music_table , GBVARS_SCUMM) +_GEND + +_GRELEASE(DimuseTables) +_GRELEASEPTR(GBVARS_DIGSTATEMUSICMAP_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_DIGSTATEMUSICTABLE_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_COMISTATEMUSICTABLE_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_COMISEQMUSICTABLE_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_DIGSEQMUSICTABLE_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_FTSTATEMUSICTABLE_INDEX , GBVARS_SCUMM) +_GRELEASEPTR(GBVARS_FTSEQMUSICTABLE_INDEX , GBVARS_SCUMM) +_GEND + +#endif
\ No newline at end of file diff --git a/scumm/player_v2a.cpp b/scumm/player_v2a.cpp index 90d5ae47c4..e5515f4945 100644 --- a/scumm/player_v2a.cpp +++ b/scumm/player_v2a.cpp @@ -29,12 +29,18 @@ namespace Scumm { #define BASE_FREQUENCY 3579545 -static uint32 CRCtable[256]; +#ifdef __PALM_OS__ +static uint32 *CRCtable = NULL; +#else +static uint32 CRCtable[256]; +#endif + static void InitCRC (void) { const uint32 poly = 0xEDB88320; int i, j; uint32 n; + for (i = 0; i < 256; i++) { n = i; @@ -1151,6 +1157,9 @@ Player_V2A::Player_V2A(ScummEngine *scumm) { _scumm = scumm; _system = scumm->_system; +#ifdef __PALM_OS__ + if (!CRCtable) CRCtable = (uint32 *)calloc(256, sizeof(uint32)); +#endif InitCRC(); for (i = 0; i < V2A_MAXSLOTS; i++) { @@ -1164,6 +1173,9 @@ Player_V2A::Player_V2A(ScummEngine *scumm) { Player_V2A::~Player_V2A() { delete _mod; +#ifdef __PALM_OS__ + free(CRCtable); +#endif } void Player_V2A::setMasterVolume (int vol) { @@ -1255,4 +1267,4 @@ int Player_V2A::getSoundStatus(int nr) const { return 0; } -} // End of namespace Scumm +} // End of namespace Scumm
\ No newline at end of file |