diff options
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/kernel.cpp | 16 | ||||
-rw-r--r-- | engines/sci/engine/kernel.h | 15 | ||||
-rw-r--r-- | engines/sci/engine/kmisc.cpp | 43 |
3 files changed, 33 insertions, 41 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index d7f200ee77..a0968c70ba 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -34,6 +34,19 @@ namespace Sci { +enum KernelFunctionType { + KF_NEW = 1, + KF_NONE = -1, /**< No mapping, but name is known */ + KF_TERMINATOR = -42 /**< terminates kfunct_mappers */ +}; + +struct SciKernelFunction { + KernelFunctionType type; + const char *name; + kfunct *fun; /* The actual function */ + const char *signature; /* kfunct signature */ +}; + static int sci_max_allowed_unknown_kernel_functions[] = { 0, 0x72, // SCI0 @@ -382,6 +395,9 @@ int script_map_kernel(EngineState *s) { kernel_compile_signature(&(s->_kfuncTable[functnr].signature)); ++mapped; break; + case KF_TERMINATOR: + error("Unexpectedly encountered KF_TERMINATOR"); + break; } } // for all functions requesting to be mapped diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 65d79a5da4..da3dca9ec4 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -303,21 +303,6 @@ struct kfunct_sig_pair_t { }; -enum { - KF_NEW = 1, - KF_NONE = -1, /* No mapping, but name is known */ - KF_TERMINATOR = -42 /* terminates kfunct_mappers */ -}; - -struct SciKernelFunction { - int type; /* KF_* */ - const char *name; - kfunct *fun; /* The actual function */ - const char *signature; /* kfunct signature */ -}; - -extern SciKernelFunction kfunct_mappers[]; - // New kernel functions diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index 84c45a205a..396fba72e2 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -93,19 +93,8 @@ reg_t kMemoryInfo(EngineState *s, int funct_nr, int argc, reg_t *argv) { // kfunct_mappers below doubles for unknown kfunctions reg_t k_Unknown(EngineState *s, int funct_nr, int argc, reg_t *argv) { - if (funct_nr >= SCI_MAPPED_UNKNOWN_KFUNCTIONS_NR) { - warning("Unhandled Unknown function %04x", funct_nr); - return NULL_REG; - } else { - switch (kfunct_mappers[funct_nr].type) { - case KF_NEW: - return kfunct_mappers[funct_nr].fun(s, funct_nr, argc, argv); - case KF_NONE: - default: - warning("Unhandled Unknown function %04x", funct_nr); - return NULL_REG; - } - } + warning("Unhandled Unknown function %04x", funct_nr); + return NULL_REG; } reg_t kFlushResources(EngineState *s, int funct_nr, int argc, reg_t *argv) { @@ -122,10 +111,12 @@ reg_t kSetDebug(EngineState *s, int funct_nr, int argc, reg_t *argv) { return s->r_acc; } -#define _K_NEW_GETTIME_TICKS 0 -#define _K_NEW_GETTIME_TIME_12HOUR 1 -#define _K_NEW_GETTIME_TIME_24HOUR 2 -#define _K_NEW_GETTIME_DATE 3 +enum { + _K_NEW_GETTIME_TICKS = 0, + _K_NEW_GETTIME_TIME_12HOUR = 1, + _K_NEW_GETTIME_TIME_24HOUR = 2, + _K_NEW_GETTIME_DATE = 3 +}; reg_t kGetTime(EngineState *s, int funct_nr, int argc, reg_t *argv) { tm loc_time; @@ -175,12 +166,14 @@ reg_t kGetTime(EngineState *s, int funct_nr, int argc, reg_t *argv) { return make_reg(0, retval); } -#define K_MEMORY_ALLOCATE_CRITICAL 1 -#define K_MEMORY_ALLOCATE_NONCRITICAL 2 -#define K_MEMORY_FREE 3 -#define K_MEMORY_MEMCPY 4 -#define K_MEMORY_PEEK 5 -#define K_MEMORY_POKE 6 +enum { + K_MEMORY_ALLOCATE_CRITICAL = 1, + K_MEMORY_ALLOCATE_NONCRITICAL = 2, + K_MEMORY_FREE = 3, + K_MEMORY_MEMCPY = 4, + K_MEMORY_PEEK = 5, + K_MEMORY_POKE = 6 +}; reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) { switch (UKPV(0)) { @@ -256,11 +249,9 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) { } reg_t kstub(EngineState *s, int funct_nr, int argc, reg_t *argv) { - int i; - sciprintf("Unimplemented syscall: %s[%x](", s->_kernelNames[funct_nr].c_str(), funct_nr); - for (i = 0; i < argc; i++) { + for (int i = 0; i < argc; i++) { sciprintf(PREG, PRINT_REG(argv[i])); if (i + 1 < argc) sciprintf(", "); } |