DEFINE_LUA_FUNCTION(memory_setregister, "cpu_dot_registername_string,value")
| 2031 | } |
| 2032 | //DEFINE_LUA_FUNCTION(memory_setregister, "cpu_dot_registername_string,value") |
| 2033 | static int memory_setregister(lua_State *L) |
| 2034 | { |
| 2035 | const char* qualifiedRegisterName = luaL_checkstring(L,1); |
| 2036 | unsigned long value = (unsigned long)(luaL_checkinteger(L,2)); |
| 2037 | lua_settop(L,0); |
| 2038 | for(size_t cpu = 0; cpu < sizeof(cpuToRegisterMaps)/sizeof(*cpuToRegisterMaps); cpu++) |
| 2039 | { |
| 2040 | cpuToRegisterMap ctrm = cpuToRegisterMaps[cpu]; |
| 2041 | int cpuNameLen = strlen(ctrm.cpuName); |
| 2042 | if(!strnicmp(qualifiedRegisterName, ctrm.cpuName, cpuNameLen)) |
| 2043 | { |
| 2044 | qualifiedRegisterName += cpuNameLen; |
| 2045 | for(int reg = 0; ctrm.rpmap[reg].dataSize; reg++) |
| 2046 | { |
| 2047 | registerPointerMap rpm = ctrm.rpmap[reg]; |
| 2048 | if(!stricmp(qualifiedRegisterName, rpm.registerName)) |
| 2049 | { |
| 2050 | switch(rpm.dataSize) |
| 2051 | { default: |
| 2052 | case 1: *(unsigned char*)rpm.pointer = (unsigned char)(value & 0xFF); break; |
| 2053 | case 2: *(unsigned short*)rpm.pointer = (unsigned short)(value & 0xFFFF); break; |
| 2054 | case 4: *(unsigned long*)rpm.pointer = value; break; |
| 2055 | } |
| 2056 | return 0; |
| 2057 | } |
| 2058 | } |
| 2059 | return 0; |
| 2060 | } |
| 2061 | } |
| 2062 | return 0; |
| 2063 | } |
| 2064 | |
| 2065 | // Forces a stack trace and returns the string |
| 2066 | static const char *CallLuaTraceback(lua_State *L) { |
nothing calls this directly
no test coverage detected