diff options
author | Norbert Lange | 2009-08-24 17:51:47 +0000 |
---|---|---|
committer | Norbert Lange | 2009-08-24 17:51:47 +0000 |
commit | 917d4b78b36d6c5a5c25a03e7ee6a1c1b6a85fd5 (patch) | |
tree | e652563203a00f8acecfaafbf93c64dbfbd13f25 /engines/sci/engine/kmisc.cpp | |
parent | 5f87d5090cfcb34cda3c1f5d430e0865344d7366 (diff) | |
parent | dd7868acc2512c9761d892e67a4837f4dc38bdc0 (diff) | |
download | scummvm-rg350-917d4b78b36d6c5a5c25a03e7ee6a1c1b6a85fd5.tar.gz scummvm-rg350-917d4b78b36d6c5a5c25a03e7ee6a1c1b6a85fd5.tar.bz2 scummvm-rg350-917d4b78b36d6c5a5c25a03e7ee6a1c1b6a85fd5.zip |
Merge with trunk
svn-id: r43701
Diffstat (limited to 'engines/sci/engine/kmisc.cpp')
-rw-r--r-- | engines/sci/engine/kmisc.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index 2f0072ec67..90ae88b73f 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -63,14 +63,27 @@ reg_t kHaveMouse(EngineState *s, int funct_nr, int argc, reg_t *argv) { return make_reg(0, -1); } +enum kMemoryInfoFunc { + K_MEMORYINFO_LARGEST_HEAP_BLOCK = 0, // Largest heap block available + K_MEMORYINFO_FREE_HEAP = 1, // Total free heap memory + K_MEMORYINFO_LARGEST_HUNK_BLOCK = 2, // Largest available hunk memory block + K_MEMORYINFO_FREE_HUNK = 3, // Amount of free DOS paragraphs + K_MEMORYINFO_TOTAL_HUNK = 4 // Total amount of hunk memory (SCI01) +}; + reg_t kMemoryInfo(EngineState *s, int funct_nr, int argc, reg_t *argv) { + uint16 size = 0x7fff; // Must not be 0xffff, or some memory calculations will overflow + switch (argv[0].offset) { - case 0: // Total free heap memory - case 1: // Largest heap block available - case 2: // Largest available hunk memory block - case 3: // Total amount of hunk memory - case 4: // Amount of free DOS paragraphs- SCI01 - return make_reg(0, 0x7fff); // Must not be 0xffff, or some memory calculations will overflow + case K_MEMORYINFO_LARGEST_HEAP_BLOCK: + // In order to prevent "Memory fragmented" dialogs from + // popping up in some games, we must return FREE_HEAP - 2 here. + return make_reg(0, size - 2); + case K_MEMORYINFO_FREE_HEAP: + case K_MEMORYINFO_LARGEST_HUNK_BLOCK: + case K_MEMORYINFO_FREE_HUNK: + case K_MEMORYINFO_TOTAL_HUNK: + return make_reg(0, size); default: warning("Unknown MemoryInfo operation: %04x", argv[0].offset); |