trunk/src/emu/luaengine.c
| r242987 | r242988 | |
| 537 | 537 | } |
| 538 | 538 | |
| 539 | 539 | //------------------------------------------------- |
| 540 | // mem_write - templated memory writer for <sign>,<size> |
| 541 | // -> manager:machine().devices[":maincpu"].spaces["program"]:write_u16(0xC000, 0xF00D) |
| 542 | //------------------------------------------------- |
| 543 | |
| 544 | template <typename T> |
| 545 | int 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 | //------------------------------------------------- |
| 540 | 586 | // screen_height - return screen visible height |
| 541 | 587 | // -> manager:machine().screens[":screen"]:height() |
| 542 | 588 | //------------------------------------------------- |
| r242987 | r242988 | |
| 924 | 970 | .addCFunction ("read_u32", &lua_addr_space::l_mem_read<UINT32>) |
| 925 | 971 | .addCFunction ("read_i64", &lua_addr_space::l_mem_read<INT64>) |
| 926 | 972 | .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>) |
| 927 | 981 | .endClass() |
| 928 | 982 | .deriveClass <address_space, lua_addr_space> ("addr_space") |
| 929 | 983 | .addFunction("name", &address_space::name) |