aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/imuse_digi/dimuse.h10
-rw-r--r--scumm/imuse_digi/dimuse_bndmgr.h3
-rw-r--r--scumm/imuse_digi/dimuse_codecs.cpp26
-rw-r--r--scumm/imuse_digi/dimuse_sndmgr.cpp3
-rw-r--r--scumm/imuse_digi/dimuse_tables.cpp35
-rw-r--r--scumm/player_v2a.cpp16
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