Previous 199869 Revisions Next

r34476 Sunday 18th January, 2015 at 19:13:12 UTC by Luca Bruno
luaengine: add memory writers

Add methods for memory writing, similarly to existing readers.

Signed-off-by: Luca Bruno <lucab@debian.org>
[src/emu]luaengine.c luaengine.h

trunk/src/emu/luaengine.c
r242987r242988
537537}
538538
539539//-------------------------------------------------
540//  mem_write - templated memory writer for <sign>,<size>
541//  -> manager:machine().devices[":maincpu"].spaces["program"]:write_u16(0xC000, 0xF00D)
542//-------------------------------------------------
543
544template <typename T>
545int lua_engine::lua_addr_space::l_mem_write(lua_State *L)
546{
547   address_space &sp = luabridge::Stack<address_space &>::get(L, 1);
548   luaL_argcheck(L, lua_isnumber(L, 2), 2, "address (integer) expected");
549   luaL_argcheck(L, lua_isnumber(L, 3), 3, "value (integer) expected");
550   offs_t address = lua_tounsigned(L, 2);
551   T val = lua_tounsigned(L, 3);
552
553   switch(sizeof(val) * 8) {
554      case 8:
555         sp.write_byte(address, val);
556         break;
557      case 16:
558         if ((address & 1) == 0) {
559            sp.write_word(address, val);
560         } else {
561            sp.read_word_unaligned(address, val);
562         }
563         break;
564      case 32:
565         if ((address & 3) == 0) {
566            sp.write_dword(address, val);
567         } else {
568            sp.write_dword_unaligned(address, val);
569         }
570         break;
571      case 64:
572         if ((address & 7) == 0) {
573            sp.write_qword(address, val);
574         } else {
575            sp.write_qword_unaligned(address, val);
576         }
577         break;
578      default:
579         break;
580   }
581
582   return 0;
583}
584
585//-------------------------------------------------
540586//  screen_height - return screen visible height
541587//  -> manager:machine().screens[":screen"]:height()
542588//-------------------------------------------------
r242987r242988
924970            .addCFunction ("read_u32", &lua_addr_space::l_mem_read<UINT32>)
925971            .addCFunction ("read_i64", &lua_addr_space::l_mem_read<INT64>)
926972            .addCFunction ("read_u64", &lua_addr_space::l_mem_read<UINT64>)
973            .addCFunction ("write_i8", &lua_addr_space::l_mem_write<INT8>)
974            .addCFunction ("write_u8", &lua_addr_space::l_mem_write<UINT8>)
975            .addCFunction ("write_i16", &lua_addr_space::l_mem_write<INT16>)
976            .addCFunction ("write_u16", &lua_addr_space::l_mem_write<UINT16>)
977            .addCFunction ("write_i32", &lua_addr_space::l_mem_write<INT32>)
978            .addCFunction ("write_u32", &lua_addr_space::l_mem_write<UINT32>)
979            .addCFunction ("write_i64", &lua_addr_space::l_mem_write<INT64>)
980            .addCFunction ("write_u64", &lua_addr_space::l_mem_write<UINT64>)
927981         .endClass()
928982         .deriveClass <address_space, lua_addr_space> ("addr_space")
929983            .addFunction("name", &address_space::name)
trunk/src/emu/luaengine.h
r242987r242988
112112   static luabridge::LuaRef l_dev_get_memspaces(const device_t *d);
113113   struct lua_addr_space {
114114      template<typename T> int l_mem_read(lua_State *L);
115      template<typename T> int l_mem_write(lua_State *L);
115116   };
116117   static luabridge::LuaRef l_machine_get_screens(const running_machine *r);
117118   struct lua_screen {


Previous 199869 Revisions Next


© 1997-2024 The MAME Team