From ce01837a8bef3d34da09d3be5d6f5234bac82412 Mon Sep 17 00:00:00 2001 From: cracyc Date: Sat, 13 Aug 2016 16:19:18 -0500 Subject: [PATCH] new not working --- Tandy/Memorex Video Information System MD-2500 luaengine: doh! (lay groundwork for a WIP too) (nw) --- scripts/target/mame/mess.lua | 1 + src/frontend/mame/luaengine.cpp | 17 ++-- src/frontend/mame/luaengine.h | 2 +- src/mame/drivers/vis.cpp | 152 ++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 6 files changed, 169 insertions(+), 7 deletions(-) create mode 100644 src/mame/drivers/vis.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 26c16be3e26..799f3f1cb68 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3035,6 +3035,7 @@ files { MAME_DIR .. "src/mame/includes/tandy2k.h", MAME_DIR .. "src/mame/machine/tandy2kb.cpp", MAME_DIR .. "src/mame/machine/tandy2kb.h", + MAME_DIR .. "src/mame/drivers/vis.cpp", } createMESSProjects(_target, _subtarget, "ultimachine") diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 0ccda19620e..c4ff85dee41 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -1252,7 +1252,7 @@ int lua_engine::lua_memory_region::l_region_write(lua_State *L) if(region.endianness() == ENDIANNESS_BIG) region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; else - region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; + region.base()[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; val >>= 8; } @@ -1317,7 +1317,7 @@ int lua_engine::lua_memory_share::l_share_write(lua_State *L) if(share.endianness() == ENDIANNESS_BIG) ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; else - ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; + ptr[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; val >>= 8; } @@ -1942,9 +1942,10 @@ lua_engine::~lua_engine() close(); } -void lua_engine::call_plugin(const char *data, const char *name) +const char *lua_engine::call_plugin(const char *data, const char *name) { std::string field("cb_"); + const char *ret = nullptr; field += name; lua_settop(m_lua_state, 0); lua_getfield(m_lua_state, LUA_REGISTRYINDEX, field.c_str()); @@ -1952,17 +1953,21 @@ void lua_engine::call_plugin(const char *data, const char *name) if(!lua_isfunction(m_lua_state, -1)) { lua_pop(m_lua_state, 1); - return; + return nullptr; } lua_pushstring(m_lua_state, data); int error; - if((error = lua_pcall(m_lua_state, 1, 0, 0)) != LUA_OK) + if((error = lua_pcall(m_lua_state, 1, 1, 0)) != LUA_OK) { if(error == LUA_ERRRUN) printf("%s\n", lua_tostring(m_lua_state, -1)); lua_pop(m_lua_state, 1); - return; + return nullptr; } + if(lua_isstring(m_lua_state, -1)) + ret = lua_tostring(m_lua_state, -1); + lua_pop(m_lua_state, 1); + return ret; } int lua_engine::l_emu_register_callback(lua_State *L) diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h index 4e18aefbfde..f07be2239d6 100644 --- a/src/frontend/mame/luaengine.h +++ b/src/frontend/mame/luaengine.h @@ -62,7 +62,7 @@ public: std::vector &get_menu() { return m_menu; } void attach_notifiers(); void on_frame_done(); - void call_plugin(const char *data, const char *name); + const char *call_plugin(const char *data, const char *name); private: struct hook { diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp new file mode 100644 index 00000000000..a84d9bb3d1d --- /dev/null +++ b/src/mame/drivers/vis.cpp @@ -0,0 +1,152 @@ +// license:BSD-3-Clause +// copyright-holders:Carl + +#include "emu.h" +#include "cpu/i86/i286.h" +#include "machine/at.h" +#include "bus/isa/isa_cards.h" + +class vis_state : public driver_device +{ +public: + vis_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_mb(*this, "mb") + { } + required_device m_maincpu; + required_device m_mb; + + DECLARE_READ8_MEMBER(sysctl_r); + DECLARE_WRITE8_MEMBER(sysctl_w); + DECLARE_READ8_MEMBER(unk_r); + DECLARE_WRITE8_MEMBER(unk_w); + DECLARE_READ8_MEMBER(unk2_r); + DECLARE_READ8_MEMBER(unk3_r); + DECLARE_READ8_MEMBER(cdrom_r); + DECLARE_WRITE8_MEMBER(cdrom_w); +protected: + void machine_reset() override; +private: + UINT8 m_sysctl; + UINT8 m_unkidx; + UINT8 m_unk[16]; + UINT8 m_cdcmd, m_cdstat; +}; + +void vis_state::machine_reset() +{ + m_cdcmd = 0; + m_cdstat = 0; + m_sysctl = 0; +} + +READ8_MEMBER(vis_state::unk_r) +{ + if(offset) + return m_unk[m_unkidx]; + return 0; +} + +WRITE8_MEMBER(vis_state::unk_w) +{ + if(offset) + m_unk[m_unkidx] = data; + else + m_unkidx = data & 0xf; +} + +READ8_MEMBER(vis_state::unk2_r) +{ + return 0x40; +} + +READ8_MEMBER(vis_state::unk3_r) +{ + return 0x00; +} + +// probably a mitsumi isa non-atapi cdrom controller, mcd.c in older linux versions +READ8_MEMBER(vis_state::cdrom_r) +{ + if(m_cdcmd) + { + if(offset) + { + int ret = m_cdstat; + m_cdstat = 0; + return ret; + } + else + { + m_cdcmd = 0; + return 0x80; + } + } + if(offset) + return 0; + else + return 0x20; +} + +WRITE8_MEMBER(vis_state::cdrom_w) +{ + if(!offset) + { + m_cdcmd = data; + m_cdstat = 4; + } +} + +READ8_MEMBER(vis_state::sysctl_r) +{ + return m_sysctl; +} + +WRITE8_MEMBER(vis_state::sysctl_w) +{ + if(BIT(data, 0) && !BIT(m_sysctl, 0)) + m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + //m_maincpu->set_input_line(INPUT_LINE_A20, BIT(data, 1) ? CLEAR_LINE : ASSERT_LINE); + m_sysctl = data; +} + +static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x000000, 0x09ffff) AM_RAM + AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000) + AM_RANGE(0x100000, 0x15ffff) AM_RAM + AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0026, 0x0027) AM_READWRITE8(unk_r, unk_w, 0xffff) + AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff) + AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff) + AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map) + AM_RANGE(0x0310, 0x0311) AM_READWRITE8(cdrom_r, cdrom_w, 0xffff) + AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff) +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( vis, vis_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", I80286, XTAL_12MHz ) + MCFG_CPU_PROGRAM_MAP(at16_map) + MCFG_CPU_IO_MAP(at16_io) + MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb) + MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown)) + + MCFG_DEVICE_ADD("mb", AT_MB, 0) + + MCFG_ISA16_SLOT_ADD("mb:isabus","vga", pc_isa16_cards, "clgd542x", true) +MACHINE_CONFIG_END + +ROM_START(vis) + ROM_REGION(0x100000,"bios", 0) + ROM_LOAD( "p513bk0b.bin", 0x00000, 0x80000, CRC(364e3f74) SHA1(04260ef1e65e482c9c49d25ace40e22487d6aab9)) + ROM_LOAD( "p513bk1b.bin", 0x80000, 0x80000, CRC(e18239c4) SHA1(a0262109e10a07a11eca43371be9978fff060bc5)) +ROM_END + +COMP ( 1992, vis, 0, 0, vis, 0, driver_device, 0, "Tandy/Memorex", "Video Information System MD-2500", MACHINE_NOT_WORKING ) + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 39d7101fcb8..c23d306db0d 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -36213,6 +36213,9 @@ wcombatk // 2002 wcombatu // 2002 xtrial // 2002 +@source:vis.cpp +vis + @source:vixen.cpp vixen // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index b60bb60c25f..7f29d7691d5 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -649,6 +649,7 @@ victor9k.cpp vidbrain.cpp vii.cpp vip.cpp +vis.cpp vixen.cpp vk100.cpp votrpss.cpp