Merge remote-tracking branch 'upstream/master'

This commit is contained in:
FakeShemp 2016-11-05 17:58:41 +01:00
commit 762deacab2
139 changed files with 1256 additions and 890 deletions

198
3rdparty/lua-linenoise/linenoise.c vendored Normal file
View File

@ -0,0 +1,198 @@
/* vim:sts=4 sw=4 expandtab
*/
/*
* Copyright (c) 2011-2015 Rob Hoelz <rob@hoelz.ro>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>
#include "linenoise.h"
#define LN_COMPLETION_TYPE "linenoiseCompletions*"
static int completion_func_ref;
static lua_State *completion_state;
static int handle_ln_error(lua_State *L)
{
lua_pushnil(L);
return 1;
}
static int handle_ln_ok(lua_State *L)
{
lua_pushboolean(L, 1);
return 1;
}
static void completion_callback_wrapper(const char *line, linenoiseCompletions *completions)
{
lua_State *L = completion_state;
lua_rawgeti(L, LUA_REGISTRYINDEX, completion_func_ref);
*((linenoiseCompletions **) lua_newuserdata(L, sizeof(linenoiseCompletions *))) = completions;
luaL_getmetatable(L, LN_COMPLETION_TYPE);
lua_setmetatable(L, -2);
lua_pushstring(L, line);
lua_pcall(L, 2, 0, 0);
}
static int l_linenoise(lua_State *L)
{
const char *prompt = luaL_checkstring(L, 1);
char *line;
completion_state = L;
line = linenoise(prompt);
completion_state = NULL;
if(! line) {
return handle_ln_error(L);
}
lua_pushstring(L, line);
free(line);
return 1;
}
static int lines_next(lua_State *L)
{
lua_pushcfunction(L, l_linenoise);
lua_pushvalue(L, lua_upvalueindex(1));
lua_call(L, 1, 1);
return 1;
}
static int l_lines(lua_State *L)
{
luaL_checkstring(L, 1);
lua_pushcclosure(L, lines_next, 1);
return 1;
}
static int l_historyadd(lua_State *L)
{
const char *line = luaL_checkstring(L, 1);
if(! linenoiseHistoryAdd(line)) {
return handle_ln_error(L);
}
return handle_ln_ok(L);
}
static int l_historysetmaxlen(lua_State *L)
{
int len = luaL_checkinteger(L, 1);
if(! linenoiseHistorySetMaxLen(len)) {
return handle_ln_error(L);
}
return handle_ln_ok(L);
}
static int l_historysave(lua_State *L)
{
const char *filename = luaL_checkstring(L, 1);
if(linenoiseHistorySave((char *) filename) < 0) {
return handle_ln_error(L);
}
return handle_ln_ok(L);
}
static int l_historyload(lua_State *L)
{
const char *filename = luaL_checkstring(L, 1);
if(linenoiseHistoryLoad((char *) filename) < 0) {
return handle_ln_error(L);
}
return handle_ln_ok(L);
}
static int l_clearscreen(lua_State *L)
{
linenoiseClearScreen();
return handle_ln_ok(L);
}
static int l_setcompletion(lua_State *L)
{
luaL_checktype(L, 1, LUA_TFUNCTION);
lua_pushvalue(L, 1);
completion_func_ref = luaL_ref(L, LUA_REGISTRYINDEX);
linenoiseSetCompletionCallback(completion_callback_wrapper);
return handle_ln_ok(L);
}
static int l_addcompletion(lua_State *L)
{
linenoiseCompletions *completions = *((linenoiseCompletions **) luaL_checkudata(L, 1, LN_COMPLETION_TYPE));
const char *entry = luaL_checkstring(L, 2);
linenoiseAddCompletion(completions, (char *) entry);
return handle_ln_ok(L);
}
luaL_Reg linenoise_funcs[] = {
{ "linenoise", l_linenoise },
{ "historyadd", l_historyadd },
{ "historysetmaxlen", l_historysetmaxlen },
{ "historysave", l_historysave },
{ "historyload", l_historyload },
{ "clearscreen", l_clearscreen },
{ "setcompletion", l_setcompletion},
{ "addcompletion", l_addcompletion },
/* Aliases for more consistent function names */
{ "addhistory", l_historyadd },
{ "sethistorymaxlen", l_historysetmaxlen },
{ "savehistory", l_historysave },
{ "loadhistory", l_historyload },
{ "line", l_linenoise },
{ "lines", l_lines },
{ NULL, NULL }
};
int luaopen_linenoise(lua_State *L)
{
lua_newtable(L);
luaL_newmetatable(L, LN_COMPLETION_TYPE);
lua_pushboolean(L, 0);
lua_setfield(L, -2, "__metatable");
lua_pop(L, 1);
#if LUA_VERSION_NUM > 501
luaL_setfuncs(L,linenoise_funcs,0);
#else
luaL_register(L, NULL, linenoise_funcs);
#endif
return 1;
}

View File

@ -1 +1,2 @@
build/
.vscode/

View File

@ -4,6 +4,8 @@ cmake_minimum_required(VERSION 2.6)
option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)
option(BUILD_TESTS "Build tests" OFF)
option(BUILD_PKGCONFIG "Build in PKGCONFIG mode" OFF)
set(BUILD_DEFINES "" CACHE STRING "Build defines")
if(MSVC)
@ -46,16 +48,25 @@ if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} STRLESS 3.1 AND ";${CMAKE_C
endif()
set_target_properties(pugixml PROPERTIES VERSION 1.7 SOVERSION 1)
get_target_property(PUGIXML_VERSION_STRING pugixml VERSION)
if(BUILD_PKGCONFIG)
# Install library into its own directory under LIBDIR
set(INSTALL_SUFFIX /pugixml-${PUGIXML_VERSION_STRING})
endif()
install(TARGETS pugixml EXPORT pugixml-config
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}${INSTALL_SUFFIX})
install(EXPORT pugixml-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml)
if(BUILD_PKGCONFIG)
configure_file(scripts/pugixml.pc.in ${PROJECT_BINARY_DIR}/pugixml.pc @ONLY)
install(FILES ${PROJECT_BINARY_DIR}/pugixml.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
endif()
if(BUILD_TESTS)
file(GLOB TEST_SOURCES tests/*.cpp)
file(GLOB FUZZ_SOURCES tests/fuzz_*.cpp)

View File

@ -25,7 +25,7 @@ The distribution contains library source, documentation (the guide you're readin
The complete pugixml source consists of three files - one source file, `pugixml.cpp`, and two header files, `pugixml.hpp` and `pugiconfig.hpp`. `pugixml.hpp` is the primary header which you need to include in order to use pugixml classes/functions. The rest of this guide assumes that `pugixml.hpp` is either in the current directory or in one of include directories of your projects, so that `#include "pugixml.hpp"` can find the header; however you can also use relative path (i.e. `#include "../libs/pugixml/src/pugixml.hpp"`) or include directory-relative path (i.e. `#include <xml/thirdparty/pugixml/src/pugixml.hpp>`).
The easiest way to build pugixml is to compile the source file, `pugixml.cpp`, along with the existing library/executable. This process depends on the method of building your application; for example, if you're using Microsoft Visual Studio footnote:[All trademarks used are properties of their respective owners.], Apple Xcode, Code::Blocks or any other IDE, just add `pugixml.cpp` to one of your projects. There are other building methods available, including building pugixml as a standalone static/shared library; link:manual/install.html#install.building[read the manual] for further information.
The easiest way to build pugixml is to compile the source file, `pugixml.cpp`, along with the existing library/executable. This process depends on the method of building your application; for example, if you're using Microsoft Visual Studio footnote:[All trademarks used are properties of their respective owners.], Apple Xcode, Code::Blocks or any other IDE, just add `pugixml.cpp` to one of your projects. There are other building methods available, including building pugixml as a standalone static/shared library; link:manual.html#install.building[read the manual] for further information.
[[dom]]
== Document object model

11
3rdparty/pugixml/scripts/pugixml.pc.in vendored Normal file
View File

@ -0,0 +1,11 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
includedir=${prefix}/include/pugixml-@PUGIXML_VERSION_STRING@
libdir=${exec_prefix}/lib/pugixml-@PUGIXML_VERSION_STRING@
Name: pugixml
Description: Light-weight, simple and fast XML parser for C++ with XPath support.
URL: http://pugixml.org/
Version: @PUGIXML_VERSION_STRING@
Cflags: -I${includedir}
Libs: -L${libdir} -lpugixml

View File

@ -72,6 +72,15 @@
# endif
#endif
// If C++ is 2011 or higher, add 'override' qualifiers
#ifndef PUGIXML_OVERRIDE
# if __cplusplus >= 201103
# define PUGIXML_OVERRIDE override
# else
# define PUGIXML_OVERRIDE
# endif
#endif
// Character interface macros
#ifdef PUGIXML_WCHAR_MODE
# define PUGIXML_TEXT(t) L ## t
@ -273,7 +282,7 @@ namespace pugi
// Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio
xml_writer_file(void* file);
virtual void write(const void* data, size_t size) override;
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
private:
void* file;
@ -288,7 +297,7 @@ namespace pugi
xml_writer_stream(std::basic_ostream<char, std::char_traits<char> >& stream);
xml_writer_stream(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& stream);
virtual void write(const void* data, size_t size) override;
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
private:
std::basic_ostream<char, std::char_traits<char> >* narrow_stream;
@ -1214,7 +1223,7 @@ namespace pugi
explicit xpath_exception(const xpath_parse_result& result);
// Get error message
virtual const char* what() const throw() override;
virtual const char* what() const throw() PUGIXML_OVERRIDE;
// Get parse result
const xpath_parse_result& result() const;

View File

@ -78,7 +78,7 @@ struct dummy_fixture {};
{ \
test_runner_##name(): test_runner(#name) {} \
\
virtual void run() \
virtual void run() PUGIXML_OVERRIDE \
{ \
test_runner_helper_##name helper; \
helper.run(); \

View File

@ -187,7 +187,7 @@ public:
this->setg(begin, begin, end);
}
typename std::basic_streambuf<T>::int_type underflow()
typename std::basic_streambuf<T>::int_type underflow() PUGIXML_OVERRIDE
{
return this->gptr() == this->egptr() ? std::basic_streambuf<T>::traits_type::eof() : std::basic_streambuf<T>::traits_type::to_int_type(*this->gptr());
}

View File

@ -798,7 +798,7 @@ struct test_walker: xml_tree_walker
#endif
}
virtual bool begin(xml_node& node)
virtual bool begin(xml_node& node) PUGIXML_OVERRIDE
{
log += STR("|");
log += depthstr();
@ -810,7 +810,7 @@ struct test_walker: xml_tree_walker
return ++call_count != stop_count && xml_tree_walker::begin(node);
}
virtual bool for_each(xml_node& node)
virtual bool for_each(xml_node& node) PUGIXML_OVERRIDE
{
log += STR("|");
log += depthstr();
@ -822,7 +822,7 @@ struct test_walker: xml_tree_walker
return ++call_count != stop_count && xml_tree_walker::end(node);
}
virtual bool end(xml_node& node)
virtual bool end(xml_node& node) PUGIXML_OVERRIDE
{
log += STR("|");
log += depthstr();

View File

@ -213,7 +213,7 @@ struct test_writer: xml_writer
{
std::basic_string<pugi::char_t> contents;
virtual void write(const void* data, size_t size)
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE
{
CHECK(size % sizeof(pugi::char_t) == 0);
contents.append(static_cast<const pugi::char_t*>(data), size / sizeof(pugi::char_t));
@ -604,7 +604,7 @@ TEST_XML_FLAGS(write_mixed, "<node><child1/><child2>pre<![CDATA[data]]>mid<!--co
#ifndef PUGIXML_NO_EXCEPTIONS
struct throwing_writer: pugi::xml_writer
{
virtual void write(const void*, size_t)
virtual void write(const void*, size_t) PUGIXML_OVERRIDE
{
throw std::runtime_error("write failed");
}

View File

@ -9,7 +9,7 @@ struct xml_writer_string: public pugi::xml_writer
{
std::string contents;
virtual void write(const void* data, size_t size);
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
std::string as_narrow() const;
std::basic_string<wchar_t> as_wide() const;

View File

@ -11,13 +11,8 @@ function dat.check(set, softlist)
return nil
end
local datpath
local function xml_parse()
local file = emu.file(lfs.env_replace(mame_manager:ui():options().entries.historypath:value():gsub("([^;]+)", "%1/hi2txt")), 1)
local ret = file:open(set .. ".xml")
local function xml_parse(file)
local table
if ret then
return nil
end
datpath = file:fullpath():gsub(".zip", "/")
local data = file:read(file:size())
data = data:match("<hi2txt>(.*)</ *hi2txt>")
@ -494,6 +489,9 @@ function dat.check(set, softlist)
if fld["line-ignore"] then
igncol, ignval = fld["line-ignore"]:match("([^:]*):(.*)")
end
if fld["field"] and not fld["column"] then -- ????
fld["column"] = fld["field"]
end
for num2, col in ipairs(fld["column"]) do
if not col["display"] or col["display"] == "always" then
if not col["src"] then
@ -501,7 +499,7 @@ function dat.check(set, softlist)
end
if not loopcnt and col["src"] ~= "index" then
table.insert(dat, 1, "for i = 1, #arr['" .. col["src"] .. "'] do")
table.insert(dat, 2, "index = arr['" .. col["src"] .. "'][i].index")
table.insert(dat, 2, "index = arr['" .. col["src"] .. "'][i].index or i - 1")
table.insert(dat, 3, "line = ''")
loopcnt = true
end
@ -768,10 +766,22 @@ function dat.check(set, softlist)
local ret = scrfile:open(set .. ".lua")
local script
if ret then
local xml = xml_parse()
function get_xml_table(fileset)
local file = emu.file(lfs.env_replace(mame_manager:ui():options().entries.historypath:value():gsub("([^;]+)", "%1/hi2txt")), 1)
local ret = file:open(fileset .. ".xml")
if ret then
return nil
end
local xml = xml_parse(file)
return xml
end
local xml = get_xml_table(set)
if not xml then
return nil
end
if xml.sameas then
xml = get_xml_table(xml.sameas[1].id)
end
local status
status, script = pcall(parse_table, xml)
if not status then

View File

@ -555,6 +555,7 @@ project "lualibs"
includedirs {
MAME_DIR .. "3rdparty",
MAME_DIR .. "3rdparty/linenoise-ng/include",
}
includedirs {
ext_includedir("lua"),
@ -564,6 +565,7 @@ project "lualibs"
files {
MAME_DIR .. "3rdparty/lua-zlib/lua_zlib.c",
MAME_DIR .. "3rdparty/luafilesystem/src/lfs.c",
MAME_DIR .. "3rdparty/lua-linenoise/linenoise.c",
}
end

View File

@ -266,7 +266,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
if (m_rtc_index >= 0)
{
m_rtc->address_w(m_rtc_index--);
m_rtc->data_w(machine().driver_data()->generic_space(), 0, byte);
m_rtc->data_w(machine().dummy_space(), 0, byte);
}
}
else
@ -290,7 +290,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
for (int i = 12; i >= 0; i--)
{
m_rtc->address_w(i);
transmit_byte(0xf0 | m_rtc->data_r(machine().driver_data()->generic_space(), 0));
transmit_byte(0xf0 | m_rtc->data_r(machine().dummy_space(), 0));
}
break;

View File

@ -141,18 +141,18 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::readz)
case 0: /* RTC RAM */
if (addr & 0x80)
/* RTC RAM page register */
reply = m_rtc->xram_r(machine().driver_data()->generic_space(),(addr & 0x1f) | 0x20);
reply = m_rtc->xram_r(machine().dummy_space(), (addr & 0x1f) | 0x20);
else
/* RTC RAM read */
reply = m_rtc->xram_r(machine().driver_data()->generic_space(),addr);
reply = m_rtc->xram_r(machine().dummy_space(), addr);
break;
case 1: /* RTC registers */
if (addr & 0x10)
/* register data */
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),1);
reply = m_rtc->rtc_r(machine().dummy_space(), 1);
else
/* register select */
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),0);
reply = m_rtc->rtc_r(machine().dummy_space(), 0);
break;
case 2: /* IDE registers set 1 (CS1Fx) */
if (m_tms9995_mode ? (!(addr & 1)) : (addr & 1))
@ -212,18 +212,18 @@ WRITE8_MEMBER(nouspikel_ide_interface_device::write)
case 0: /* RTC RAM */
if (addr & 0x80)
/* RTC RAM page register */
m_rtc->xram_w(machine().driver_data()->generic_space(),(addr & 0x1f) | 0x20, data);
m_rtc->xram_w(machine().dummy_space(), (addr & 0x1f) | 0x20, data);
else
/* RTC RAM write */
m_rtc->xram_w(machine().driver_data()->generic_space(),addr, data);
m_rtc->xram_w(machine().dummy_space(), addr, data);
break;
case 1: /* RTC registers */
if (addr & 0x10)
/* register data */
m_rtc->rtc_w(machine().driver_data()->generic_space(),1, data);
m_rtc->rtc_w(machine().dummy_space(), 1, data);
else
/* register select */
m_rtc->rtc_w(machine().driver_data()->generic_space(),0, data);
m_rtc->rtc_w(machine().dummy_space(), 0, data);
break;
case 2: /* IDE registers set 1 (CS1Fx) */
/*

View File

@ -1192,6 +1192,11 @@ void vaquerro_device::device_start()
save_item(NAME(m_sry));
save_item(NAME(m_a14));
save_item(NAME(m_dbin_level));
// FIXME: In rare occasions, the saved state is invalid and restoring
// may crash the emulated 99/8 (e.g. with invalid opcodes)
// Saving the wait state logic does not affect the operation, as it seems,
// so we leave it out.
}
void vaquerro_device::device_reset()

View File

@ -238,7 +238,7 @@ private:
// DRAM access
bool m_skdrcs;
// Holds the decoding result; essentially names the selected line
// Indicates the UP level of the GROMCLK
bool m_gromclk_up;
// Have we got the upper word of the address?

View File

@ -211,17 +211,40 @@
geneve_mapper_device::geneve_mapper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, GENEVE_MAPPER, "Geneve Gate Array", tag, owner, clock, "geneve_mapper", __FILE__), m_gromwaddr_LSB(false),
m_gromraddr_LSB(false), m_grom_address(0), m_video_waitstates(false),
m_extra_waitstates(false), m_ready_asserted(false), m_read_mode(false),
m_debug_no_ws(false), m_geneve_mode(false), m_direct_mode(false),
m_cartridge_size(0), m_cartridge_secondpage(false),
m_cartridge6_writable(false), m_cartridge7_writable(false),
m_turbo(false), m_genmod(false), m_timode(false), m_pfm_mode(0),
m_pfm_bank(0), m_pfm_output_enable(false), m_sram_mask(0), m_sram_val(0),
m_ready(*this), m_waitcount(0), m_ext_waitcount(0),
m_clock(nullptr), m_cpu(nullptr), m_pfm512(nullptr),
m_pfm512a(nullptr), m_sound(nullptr), m_keyboard(nullptr),
m_video(nullptr), m_peribox(nullptr), m_sram(*this, SRAM_PAR_TAG), m_dram(*this, DRAM_PAR_TAG)
m_gromraddr_LSB(false),
m_grom_address(0),
m_video_waitstates(false),
m_extra_waitstates(false),
m_ready_asserted(false),
m_read_mode(false),
m_debug_no_ws(false),
m_geneve_mode(false),
m_direct_mode(false),
m_cartridge_size(0),
m_cartridge_secondpage(false),
m_cartridge6_writable(false),
m_cartridge7_writable(false),
m_turbo(false),
m_genmod(false),
m_timode(false),
m_pfm_mode(0),
m_pfm_bank(0),
m_pfm_output_enable(false),
m_sram_mask(0),
m_sram_val(0),
m_ready(*this),
m_waitcount(0),
m_ext_waitcount(0),
m_clock(*owner, GCLOCK_TAG),
m_cpu(*owner, "maincpu"),
m_pfm512(*owner, PFM512_TAG),
m_pfm512a(*owner, PFM512A_TAG),
m_sound(*owner, TISOUNDCHIP_TAG),
m_keyboard(*owner, GKEYBOARD_TAG),
m_video(*owner, VDP_TAG),
m_peribox(*owner, PERIBOX_TAG),
m_sram(*this, SRAM_PAR_TAG),
m_dram(*this, DRAM_PAR_TAG)
{
m_eprom = nullptr;
}
@ -1384,19 +1407,7 @@ WRITE_LINE_MEMBER( geneve_mapper_device::pfm_output_enable )
void geneve_mapper_device::device_start()
{
// Get pointers
m_peribox = machine().device<peribox_device>(PERIBOX_TAG);
m_keyboard = machine().device<geneve_keyboard_device>(GKEYBOARD_TAG);
m_video = machine().device<v9938_device>(VDP_TAG);
m_sound = machine().device<sn76496_base_device>(TISOUNDCHIP_TAG);
m_clock = machine().device<mm58274c_device>(GCLOCK_TAG);
// PFM expansion
m_pfm512 = machine().device<at29c040_device>(PFM512_TAG);
m_pfm512a = machine().device<at29c040a_device>(PFM512A_TAG);
m_ready.resolve();
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
m_geneve_mode = false;
m_direct_mode = true;
@ -1416,6 +1427,13 @@ void geneve_mapper_device::device_start()
save_item(NAME(m_cartridge_secondpage));
save_item(NAME(m_cartridge6_writable));
save_item(NAME(m_cartridge7_writable));
save_pointer(NAME(m_map), 8);
save_item(NAME(m_decoded.function));
save_item(NAME(m_decoded.offset));
save_item(NAME(m_decoded.physaddr));
save_item(NAME(m_turbo));
save_item(NAME(m_genmod));
save_item(NAME(m_timode));
save_item(NAME(m_pfm_mode));
save_item(NAME(m_pfm_bank));
save_item(NAME(m_pfm_output_enable));

View File

@ -203,15 +203,15 @@ private:
int m_ext_waitcount;
// Devices
mm58274c_device* m_clock;
tms9995_device* m_cpu;
at29c040_device* m_pfm512;
at29c040a_device* m_pfm512a;
sn76496_base_device* m_sound;
required_device<mm58274c_device> m_clock;
required_device<tms9995_device> m_cpu;
required_device<at29c040_device> m_pfm512;
required_device<at29c040a_device> m_pfm512a;
required_device<sn76496_base_device> m_sound;
geneve_keyboard_device* m_keyboard;
v9938_device* m_video;
peribox_device* m_peribox;
required_device<geneve_keyboard_device> m_keyboard;
required_device<v9938_device> m_video;
required_device<peribox_device> m_peribox;
uint8_t* m_eprom;
required_device<ram_device> m_sram;
required_device<ram_device> m_dram;

View File

@ -71,8 +71,6 @@ void n2a03_device::device_start()
else
mintf = new mi_2a03_normal;
m_apu->set_tag_memory(tag());
init();
}

View File

@ -152,7 +152,7 @@ static const struct { const char *mnemonic; Adr adr; } table[]={
{ nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr },
};
CPU_DISASSEMBLE( sc61860 )
static offs_t internal_disasm_sc61860(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
const uint8_t *base_oprom = oprom;
int oper=*(oprom++);
@ -161,42 +161,42 @@ CPU_DISASSEMBLE( sc61860 )
switch(oper&0xc0) {
case 0x80:
sprintf(buffer,"%-6s%.2x",table[oper&0x80].mnemonic, oper&0x3f);
util::stream_format(stream,"%-6s%02x",table[oper&0x80].mnemonic, oper&0x3f);
break;
default:
switch(oper&0xe0) {
case 0xe0:
sprintf(buffer,"%-6s%.4x",table[oper&0xe0].mnemonic,
util::stream_format(stream,"%-6s%04x",table[oper&0xe0].mnemonic,
*(oprom++)|((oper&0x1f)<<8));
break;
default:
switch (table[oper].adr) {
case Ill: sprintf(buffer,"?%.2x",oper);break;
case Imp: sprintf(buffer,"%s",table[oper].mnemonic); break;
case Imm: sprintf(buffer,"%-6s%.2x",table[oper].mnemonic, *(oprom++)); break;
case Ill: util::stream_format(stream,"?%02x",oper);break;
case Imp: util::stream_format(stream,"%s",table[oper].mnemonic); break;
case Imm: util::stream_format(stream,"%-6s%02x",table[oper].mnemonic, *(oprom++)); break;
case ImmW:
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
break;
case Abs:
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
break;
case RelM:
adr=pc-*(oprom++);
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break;
case RelP:
adr=pc+*(oprom++);
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break;
case Ptc:
t=*(oprom++);
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
sprintf(buffer,"%-6s%.2x,%.4x",table[oper].mnemonic,t, adr);
util::stream_format(stream,"%-6s%02x,%04x",table[oper].mnemonic,t, adr);
break;
case Etc:
sprintf(buffer,"%-6s",table[oper].mnemonic);
util::stream_format(stream,"%-6s",table[oper].mnemonic);
/*H imm, abs */
/* abs */
break;
@ -208,3 +208,13 @@ CPU_DISASSEMBLE( sc61860 )
}
return oprom - base_oprom;
}
CPU_DISASSEMBLE(sc61860)
{
std::ostringstream stream;
offs_t result = internal_disasm_sc61860(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -222,7 +222,7 @@ static void InitDasm32010(void)
OpInizialized = 1;
}
CPU_DISASSEMBLE( tms32010 )
static offs_t internal_disasm_tms32010(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
int a, b, d, k, m, n, p, r, s, w; /* these can all be filled in by parsing an instruction */
@ -252,7 +252,7 @@ CPU_DISASSEMBLE( tms32010 )
}
if (op == -1)
{
sprintf(buffer, "dw %04Xh *(invalid op)", code);
util::stream_format(stream, "dw %04Xh *(invalid op)", code);
return cnt | DASMFLAG_SUPPORTED;
}
//buffertmp = buffer;
@ -306,7 +306,7 @@ CPU_DISASSEMBLE( tms32010 )
{
if (*cp == '%')
{
char num[20], *q;
char num[20];
cp++;
switch (*cp++)
{
@ -323,14 +323,22 @@ CPU_DISASSEMBLE( tms32010 )
default:
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
}
q = num; while (*q) *buffer++ = *q++;
*buffer = '\0';
stream << num;
}
else
{
*buffer++ = *cp++;
*buffer = '\0';
stream << *cp++;
}
}
return cnt | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(tms32010)
{
std::ostringstream stream;
offs_t result = internal_disasm_tms32010(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -387,7 +387,7 @@ static void InitDasm32025(void)
OpInizialized = 1;
}
CPU_DISASSEMBLE( tms32025 )
static offs_t internal_disasm_tms32025(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
int a, b, c, d, k, m, n, p, r, s, t, w; /* these can all be filled in by parsing an instruction */
@ -417,7 +417,7 @@ CPU_DISASSEMBLE( tms32025 )
}
if (op == -1)
{
sprintf(buffer,"???? dw %04Xh",code);
util::stream_format(stream, "???? dw %04Xh",code);
return cnt | DASMFLAG_SUPPORTED;
}
//buffertmp = buffer;
@ -474,7 +474,7 @@ CPU_DISASSEMBLE( tms32025 )
{
if (*cp == '%')
{
char num[30], *q;
char num[30];
cp++;
switch (*cp++)
{
@ -494,14 +494,22 @@ CPU_DISASSEMBLE( tms32025 )
default:
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
}
q = num; while (*q) *buffer++ = *q++;
*buffer = '\0';
stream << num;
}
else
{
*buffer++ = *cp++;
*buffer = '\0';
stream << *cp++;
}
}
return cnt | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(tms32025)
{
std::ostringstream stream;
offs_t result = internal_disasm_tms32025(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -367,7 +367,7 @@ static const tms7000_opcodeinfo opcodes[] = {
{0x00, "NOP", 23, 0 }
};
CPU_DISASSEMBLE( tms7000 )
static offs_t internal_disasm_tms7000(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
int opcode, i/*, size = 1*/;
int pos = 0;
@ -387,7 +387,7 @@ CPU_DISASSEMBLE( tms7000 )
uint16_t c;
int16_t d;
buffer += sprintf (buffer, "%s", opcodes[i].name);
util::stream_format(stream, "%s", opcodes[i].name);
j=opcodes[i].operand;
@ -398,39 +398,39 @@ CPU_DISASSEMBLE( tms7000 )
case DONE:
break;
case NONE:
buffer += sprintf (buffer, "%s", of[j].opstr[k]);
util::stream_format(stream, "%s", of[j].opstr[k]);
break;
case UI8:
a = (uint8_t)opram[pos++];
buffer += sprintf(buffer, of[j].opstr[k], (unsigned int)a);
util::stream_format(stream, of[j].opstr[k], (unsigned int)a);
break;
case I8:
b = (int8_t)opram[pos++];
buffer += sprintf (buffer, of[j].opstr[k], (int8_t)b);
util::stream_format(stream, of[j].opstr[k], (int8_t)b);
break;
case UI16:
c = (uint16_t)opram[pos++];
c <<= 8;
c += opram[pos++];
buffer += sprintf (buffer, of[j].opstr[k], (unsigned int)c);
util::stream_format(stream, of[j].opstr[k], (unsigned int)c);
break;
case I16:
d = (int16_t)opram[pos++];
d <<= 8;
d += opram[pos++];
buffer += sprintf (buffer, of[j].opstr[k], (signed int)d);
util::stream_format(stream, of[j].opstr[k], (signed int)d);
break;
case PCREL:
b = (int8_t)opram[pos++];
sprintf(tmpbuf, "$%04X", pc+2+k+b);
buffer += sprintf (buffer, of[j].opstr[k], tmpbuf);
util::stream_format(stream, of[j].opstr[k], tmpbuf);
break;
case PCABS:
c = (uint16_t)opram[pos++];
c <<= 8;
c += opram[pos++];
sprintf(tmpbuf, "$%04X", c);
buffer += sprintf (buffer, of[j].opstr[k], tmpbuf);
util::stream_format(stream, of[j].opstr[k], tmpbuf);
break;
case TRAP:
vector = 0xffff - ((0xff - opcode) * 2);
@ -443,6 +443,16 @@ CPU_DISASSEMBLE( tms7000 )
}
/* No Match */
strcpy (buffer, "Illegal Opcode");
stream << "Illegal Opcode";
return pos | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(tms7000)
{
std::ostringstream stream;
offs_t result = internal_disasm_tms7000(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -113,14 +113,13 @@ static const uint8_t ucom4_mnemonic[0x100] =
CPU_DISASSEMBLE(ucom4)
static offs_t internal_disasm_ucom4(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
int pos = 0;
uint8_t op = oprom[pos++];
uint8_t instr = ucom4_mnemonic[op];
char *dst = buffer;
dst += sprintf(dst, "%-4s ", s_mnemonics[instr]);
util::stream_format(stream,"%-4s ", s_mnemonics[instr]);
// opcode parameter
int bits = s_bits[instr];
@ -142,12 +141,22 @@ CPU_DISASSEMBLE(ucom4)
}
if (bits <= 4)
dst += sprintf(dst, "%d", param);
util::stream_format(stream, "%d", param);
else if (bits <= 8)
dst += sprintf(dst, "$%02X", param);
util::stream_format(stream, "$%02X", param);
else
dst += sprintf(dst, "$%03X", param);
util::stream_format(stream, "$%03X", param);
}
return pos | s_flags[instr] | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(ucom4)
{
std::ostringstream stream;
offs_t result = internal_disasm_ucom4(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -11,17 +11,6 @@
#include "emu.h"
#include <stdarg.h>
static char *output;
static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
{
va_list vl;
va_start(vl, fmt);
vsprintf(output, fmt, vl);
va_end(vl);
}
/*****************************************************************************/
static const char *reg[] =
@ -57,20 +46,16 @@ static const char *alu[] =
#define UNSP_DASM_OK ((OP2X ? 2 : 1) | DASMFLAG_SUPPORTED)
CPU_DISASSEMBLE( unsp )
static offs_t internal_disasm_unsp(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint16_t op = *(uint16_t *)oprom;
uint16_t imm16 = *(uint16_t *)(oprom + 2);
op = big_endianize_int16(op);
imm16 = big_endianize_int16(imm16);
output = buffer;
print("<inv>");
if(OP0 < 0xf && OPA == 0x7 && OP1 < 2)
{
print("%s %04x", jmp[OP0], OP1 ? (pc - OPIMM + 1) : (pc + OPIMM + 1));
util::stream_format(stream, "%s %04x", jmp[OP0], OP1 ? (pc - OPIMM + 1) : (pc + OPIMM + 1));
return UNSP_DASM_OK;
}
@ -78,29 +63,29 @@ CPU_DISASSEMBLE( unsp )
{
// ALU, Indexed
case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x06: case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d:
print("%s %s, [bp+%02x]", alu[OP0], reg[OPA], OPIMM);
util::stream_format(stream, "%s %s, [bp+%02x]", alu[OP0], reg[OPA], OPIMM);
return UNSP_DASM_OK;
// ALU, Immediate
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x16: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c:
print("%s %s, %02x", alu[OP0], reg[OPA], OPIMM);
util::stream_format(stream, "%s %s, %02x", alu[OP0], reg[OPA], OPIMM);
return UNSP_DASM_OK;
// Pop / Interrupt return
case 0x29:
if(op == 0x9a90)
{
print("retf");
util::stream_format(stream, "retf");
return UNSP_DASM_OK;
}
else if(op == 0x9a98)
{
print("reti");
util::stream_format(stream, "reti");
return UNSP_DASM_OK;
}
else if((OPA + 1) < 8 && ((OPA + OPN) < 8))
{
print("pop %s, %s [%s]", reg[OPA+1], reg[OPA+OPN], reg[OPB]);
util::stream_format(stream, "pop %s, %s [%s]", reg[OPA+1], reg[OPA+OPN], reg[OPB]);
return UNSP_DASM_OK;
}
break;
@ -109,7 +94,7 @@ CPU_DISASSEMBLE( unsp )
case 0x2d:
if((OPA + 1) >= OPN && OPA < (OPN + 7))
{
print("push %s, %s [%s]", reg[(OPA+1)-OPN], reg[OPA], reg[OPB]);
util::stream_format(stream, "push %s, %s [%s]", reg[(OPA+1)-OPN], reg[OPA], reg[OPB]);
return UNSP_DASM_OK;
}
break;
@ -119,16 +104,16 @@ CPU_DISASSEMBLE( unsp )
switch(OPN & 3)
{
case 0:
print("%s %s, [%s%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
util::stream_format(stream, "%s %s, [%s%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
return UNSP_DASM_OK;
case 1:
print("%s %s, [%s%s--]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
util::stream_format(stream, "%s %s, [%s%s--]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
return UNSP_DASM_OK;
case 2:
print("%s %s, [%s%s++]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
util::stream_format(stream, "%s %s, [%s%s++]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
return UNSP_DASM_OK;
case 3:
print("%s %s, [%s++%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
util::stream_format(stream, "%s %s, [%s++%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
return UNSP_DASM_OK;
}
return UNSP_DASM_OK;
@ -139,7 +124,7 @@ CPU_DISASSEMBLE( unsp )
{
// ALU, Register
case 0:
print("%s %s, %s", alu[OP0], reg[OPA], reg[OPB]);
util::stream_format(stream, "%s %s, %s", alu[OP0], reg[OPA], reg[OPB]);
return UNSP_DASM_OK;
// ALU, 16-bit Immediate
@ -148,12 +133,12 @@ CPU_DISASSEMBLE( unsp )
{
if(OP0 != 4 && OP0 != 12)
{
print("%s %s, %s, %04x", alu[OP0], reg[OPA], reg[OPB], imm16);
util::stream_format(stream, "%s %s, %s, %04x", alu[OP0], reg[OPA], reg[OPB], imm16);
return UNSP_DASM_OK;
}
else
{
print("%s %s, %04x", alu[OP0], reg[OPB], imm16);
util::stream_format(stream, "%s %s, %04x", alu[OP0], reg[OPB], imm16);
return UNSP_DASM_OK;
}
}
@ -161,74 +146,71 @@ CPU_DISASSEMBLE( unsp )
// ALU, Direct 16
case 2:
print("%s %s, [%04x]", alu[OP0], reg[OPA], imm16);
util::stream_format(stream, "%s %s, [%04x]", alu[OP0], reg[OPA], imm16);
return UNSP_DASM_OK;
// ALU, Direct 16
case 3:
print("%s [%04x], %s, %s", alu[OP0], imm16, reg[OPA], reg[OPB]);
util::stream_format(stream, "%s [%04x], %s, %s", alu[OP0], imm16, reg[OPA], reg[OPB]);
return UNSP_DASM_OK;
// ALU, Shifted
default:
print("%s %s, %s asr %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 3) + 1);
util::stream_format(stream, "%s %s, %s asr %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 3) + 1);
return UNSP_DASM_OK;
}
case 0x4d:
if(OPN == 3)
{
if(OPA == OPB)
{
print("store [%04x], %s", imm16, reg[OPB]);
}
}
if((OPN == 3) && (OPA == OPB))
util::stream_format(stream, "store [%04x], %s", imm16, reg[OPB]);
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
// ALU, Shifted
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x56: case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c:
print("%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? ">>" : "<<", (OPN & 3) + 1);
util::stream_format(stream, "%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? ">>" : "<<", (OPN & 3) + 1);
return UNSP_DASM_OK;
// ALU, Rotated
case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x66: case 0x68: case 0x69: case 0x6a: case 0x6b: case 0x6c:
print("%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? "ror" : "rol", (OPN & 3) + 1);
util::stream_format(stream, "%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? "ror" : "rol", (OPN & 3) + 1);
return UNSP_DASM_OK;
// ALU, Direct 8
case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x76: case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c:
print("%s %s, [%02x]", alu[OP0], reg[OPA], OPIMM);
util::stream_format(stream, "%s %s, [%02x]", alu[OP0], reg[OPA], OPIMM);
return UNSP_DASM_OK;
// Call
case 0x1f:
if(OPA == 0)
{
print("call %06x", ((OPIMM << 16) | imm16) << 1);
}
util::stream_format(stream, "call %06x", ((OPIMM << 16) | imm16) << 1);
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
// Far Jump
case 0x2f: case 0x3f: case 0x6f: case 0x7f:
if (OPA == 7 && OP1 == 2)
{
print("goto %06x", ((OPIMM << 16) | imm16) << 1);
}
util::stream_format(stream, "goto %06x", ((OPIMM << 16) | imm16) << 1);
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
// Multiply, Unsigned * Signed
case 0x0f:
if(OPN == 1 && OPA != 7)
{
print("mulus %s, %s", reg[OPA], reg[OPB]);
}
util::stream_format(stream, "mulus %s, %s", reg[OPA], reg[OPB]);
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
// Multiply, Signed * Signed
case 0x4f:
if(OPN == 1 && OPA != 7)
{
print("mulss %s, %s", reg[OPA], reg[OPB]);
}
util::stream_format(stream, "mulss %s, %s", reg[OPA], reg[OPB]);
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
// Interrupt flags
@ -238,35 +220,51 @@ CPU_DISASSEMBLE( unsp )
switch(OPIMM)
{
case 0:
print("int off");
util::stream_format(stream, "int off");
break;
case 1:
print("int irq");
util::stream_format(stream, "int irq");
break;
case 2:
print("int fiq");
util::stream_format(stream, "int fiq");
break;
case 3:
print("int irq,fiq");
util::stream_format(stream, "int irq,fiq");
break;
case 8:
print("irq off");
util::stream_format(stream, "irq off");
break;
case 9:
print("irq on");
util::stream_format(stream, "irq on");
break;
case 12:
print("fiq off");
util::stream_format(stream, "fiq off");
break;
case 14:
print("fiq on");
util::stream_format(stream, "fiq on");
break;
case 37:
print("nop");
util::stream_format(stream, "nop");
break;
default:
util::stream_format(stream, "<inv>");
break;
}
}
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
}
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK;
}
CPU_DISASSEMBLE(unsp)
{
std::ostringstream stream;
offs_t result = internal_disasm_unsp(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -39,7 +39,7 @@ static const char *const dRegs[]=
#define GET2s(opcode) dRegs[((opcode)>>5)&0x1f]
#define GETRs(opcode) dRegs[32+((opcode)&0x1f)]
CPU_DISASSEMBLE( v810 )
static offs_t internal_disasm_v810(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
uint32_t opc,opc2;
@ -49,56 +49,56 @@ CPU_DISASSEMBLE( v810 )
switch(opc>>10)
{
case 0x00: sprintf(buffer,"MOV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x01: sprintf(buffer,"ADD %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x02: sprintf(buffer,"SUB %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x03: sprintf(buffer,"CMP %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x04: sprintf(buffer,"SHL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x05: sprintf(buffer,"SHR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x06: sprintf(buffer,"JMP [%s]",GET1s(opc)); size=2; if ((opc&0x1f) == 31) flags = DASMFLAG_STEP_OUT; break;
case 0x07: sprintf(buffer,"SAR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x08: sprintf(buffer,"MUL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x09: sprintf(buffer,"DIV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0a: sprintf(buffer,"MULU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0b: sprintf(buffer,"DIVU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0c: sprintf(buffer,"OR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0d: sprintf(buffer,"AND %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0e: sprintf(buffer,"XOR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0f: sprintf(buffer,"NOT %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x10: sprintf(buffer,"MOV %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x11: sprintf(buffer,"ADD %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x12: sprintf(buffer,"SETF %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x13: sprintf(buffer,"CMP %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x14: sprintf(buffer,"SHL %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x15: sprintf(buffer,"SHR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x16: sprintf(buffer,"EI"); size=2; break;
case 0x17: sprintf(buffer,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x18: sprintf(buffer,"TRAP %X",I5(opc)); size=2; break;
case 0x19: sprintf(buffer,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break;
case 0x1a: sprintf(buffer,"HALT"); size=2; break;
case 0x1b: sprintf(buffer,"Unk 0x1B"); size=2; break;
case 0x1c: sprintf(buffer,"LDSR %s,%s",GET2s(opc),GETRs(opc));size=2; break;
case 0x1d: sprintf(buffer,"STSR %s,%s",GETRs(opc),GET2s(opc));size=2; break;
case 0x1e: sprintf(buffer,"DI"); size=2; break;
case 0x00: util::stream_format(stream,"MOV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x01: util::stream_format(stream,"ADD %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x02: util::stream_format(stream,"SUB %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x03: util::stream_format(stream,"CMP %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x04: util::stream_format(stream,"SHL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x05: util::stream_format(stream,"SHR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x06: util::stream_format(stream,"JMP [%s]",GET1s(opc)); size=2; if ((opc&0x1f) == 31) flags = DASMFLAG_STEP_OUT; break;
case 0x07: util::stream_format(stream,"SAR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x08: util::stream_format(stream,"MUL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x09: util::stream_format(stream,"DIV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0a: util::stream_format(stream,"MULU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0b: util::stream_format(stream,"DIVU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0c: util::stream_format(stream,"OR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0d: util::stream_format(stream,"AND %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0e: util::stream_format(stream,"XOR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x0f: util::stream_format(stream,"NOT %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
case 0x10: util::stream_format(stream,"MOV %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x11: util::stream_format(stream,"ADD %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x12: util::stream_format(stream,"SETF %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x13: util::stream_format(stream,"CMP %X,%s",I5(opc),GET2s(opc)); size=2; break;
case 0x14: util::stream_format(stream,"SHL %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x15: util::stream_format(stream,"SHR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x16: util::stream_format(stream,"EI"); size=2; break;
case 0x17: util::stream_format(stream,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x18: util::stream_format(stream,"TRAP %X",I5(opc)); size=2; break;
case 0x19: util::stream_format(stream,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break;
case 0x1a: util::stream_format(stream,"HALT"); size=2; break;
case 0x1b: util::stream_format(stream,"Unk 0x1B"); size=2; break;
case 0x1c: util::stream_format(stream,"LDSR %s,%s",GET2s(opc),GETRs(opc));size=2; break;
case 0x1d: util::stream_format(stream,"STSR %s,%s",GETRs(opc),GET2s(opc));size=2; break;
case 0x1e: util::stream_format(stream,"DI"); size=2; break;
case 0x1f:
switch(opc&0x1f)
{
case 0x00: sprintf(buffer,"SCH0BSU"); break;
case 0x01: sprintf(buffer,"SCH0BSD"); break;
case 0x02: sprintf(buffer,"SCH1BSU"); break;
case 0x03: sprintf(buffer,"SCH1BSD"); break;
case 0x04: sprintf(buffer,"UnkS 4"); break;
case 0x05: sprintf(buffer,"UnkS 5"); break;
case 0x06: sprintf(buffer,"UnkS 6"); break;
case 0x08: sprintf(buffer,"ORBSU"); break;
case 0x09: sprintf(buffer,"ANDBSU"); break;
case 0x0a: sprintf(buffer,"XORBSU"); break;
case 0x0b: sprintf(buffer,"MOVBSU"); break;
case 0x0c: sprintf(buffer,"ORNBSU"); break;
case 0x0d: sprintf(buffer,"ANDNBSU"); break;
case 0x0e: sprintf(buffer,"XORNBSU"); break;
case 0x0f: sprintf(buffer,"NOTBSU"); break;
default: sprintf(buffer,"UnkBS 0x%X",opc&0x1f); break;
case 0x00: util::stream_format(stream,"SCH0BSU"); break;
case 0x01: util::stream_format(stream,"SCH0BSD"); break;
case 0x02: util::stream_format(stream,"SCH1BSU"); break;
case 0x03: util::stream_format(stream,"SCH1BSD"); break;
case 0x04: util::stream_format(stream,"UnkS 4"); break;
case 0x05: util::stream_format(stream,"UnkS 5"); break;
case 0x06: util::stream_format(stream,"UnkS 6"); break;
case 0x08: util::stream_format(stream,"ORBSU"); break;
case 0x09: util::stream_format(stream,"ANDBSU"); break;
case 0x0a: util::stream_format(stream,"XORBSU"); break;
case 0x0b: util::stream_format(stream,"MOVBSU"); break;
case 0x0c: util::stream_format(stream,"ORNBSU"); break;
case 0x0d: util::stream_format(stream,"ANDNBSU"); break;
case 0x0e: util::stream_format(stream,"XORNBSU"); break;
case 0x0f: util::stream_format(stream,"NOTBSU"); break;
default: util::stream_format(stream,"UnkBS 0x%X",opc&0x1f); break;
}
size=2;
break;
@ -111,67 +111,77 @@ CPU_DISASSEMBLE( v810 )
case 0x26:
case 0x27: switch( (opc>>9) &0xf)
{
case 0x0: sprintf(buffer,"BV %X",pc+D9(opc)); break;
case 0x1: sprintf(buffer,"BL %X",pc+D9(opc)); break;
case 0x2: sprintf(buffer,"BE %X",pc+D9(opc)); break;
case 0x3: sprintf(buffer,"BNH %X",pc+D9(opc)); break;
case 0x4: sprintf(buffer,"BN %X",pc+D9(opc)); break;
case 0x5: sprintf(buffer,"BR %X",pc+D9(opc)); break;
case 0x6: sprintf(buffer,"BLT %X",pc+D9(opc)); break;
case 0x7: sprintf(buffer,"BLE %X",pc+D9(opc)); break;
case 0x8: sprintf(buffer,"BNV %X",pc+D9(opc)); break;
case 0x9: sprintf(buffer,"BNL %X",pc+D9(opc)); break;
case 0xa: sprintf(buffer,"BNE %X",pc+D9(opc)); break;
case 0xb: sprintf(buffer,"BH %X",pc+D9(opc)); break;
case 0xc: sprintf(buffer,"BP %X",pc+D9(opc)); break;
case 0xd: sprintf(buffer,"NOP"); break;
case 0xe: sprintf(buffer,"BGE %X",pc+D9(opc)); break;
case 0xf: sprintf(buffer,"BGT %X",pc+D9(opc)); break;
case 0x0: util::stream_format(stream,"BV %X",pc+D9(opc)); break;
case 0x1: util::stream_format(stream,"BL %X",pc+D9(opc)); break;
case 0x2: util::stream_format(stream,"BE %X",pc+D9(opc)); break;
case 0x3: util::stream_format(stream,"BNH %X",pc+D9(opc)); break;
case 0x4: util::stream_format(stream,"BN %X",pc+D9(opc)); break;
case 0x5: util::stream_format(stream,"BR %X",pc+D9(opc)); break;
case 0x6: util::stream_format(stream,"BLT %X",pc+D9(opc)); break;
case 0x7: util::stream_format(stream,"BLE %X",pc+D9(opc)); break;
case 0x8: util::stream_format(stream,"BNV %X",pc+D9(opc)); break;
case 0x9: util::stream_format(stream,"BNL %X",pc+D9(opc)); break;
case 0xa: util::stream_format(stream,"BNE %X",pc+D9(opc)); break;
case 0xb: util::stream_format(stream,"BH %X",pc+D9(opc)); break;
case 0xc: util::stream_format(stream,"BP %X",pc+D9(opc)); break;
case 0xd: util::stream_format(stream,"NOP"); break;
case 0xe: util::stream_format(stream,"BGE %X",pc+D9(opc)); break;
case 0xf: util::stream_format(stream,"BGT %X",pc+D9(opc)); break;
}
size=2;
break;
case 0x28: sprintf(buffer,"MOVEA %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x29: sprintf(buffer,"ADDI %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2a: sprintf(buffer,"JR %X",pc+D26(opc,opc2));size=4; break;
case 0x2b: sprintf(buffer,"JAL %X",pc+D26(opc,opc2));size=4; flags = DASMFLAG_STEP_OVER; break;
case 0x2c: sprintf(buffer,"ORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2d: sprintf(buffer,"ANDI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2e: sprintf(buffer,"XORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2f: sprintf(buffer,"MOVHI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x30: sprintf(buffer,"LDB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x31: sprintf(buffer,"LDH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x32: sprintf(buffer,"Unk 0x32"); size=2; break;
case 0x33: sprintf(buffer,"LDW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x34: sprintf(buffer,"STB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x35: sprintf(buffer,"STH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x36: sprintf(buffer,"Unk 0x36"); size=2; break;
case 0x37: sprintf(buffer,"STW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x38: sprintf(buffer,"INB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x39: sprintf(buffer,"INH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x3a: sprintf(buffer,"CAXI %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x3b: sprintf(buffer,"INW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x28: util::stream_format(stream,"MOVEA %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x29: util::stream_format(stream,"ADDI %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2a: util::stream_format(stream,"JR %X",pc+D26(opc,opc2));size=4; break;
case 0x2b: util::stream_format(stream,"JAL %X",pc+D26(opc,opc2));size=4; flags = DASMFLAG_STEP_OVER; break;
case 0x2c: util::stream_format(stream,"ORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2d: util::stream_format(stream,"ANDI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2e: util::stream_format(stream,"XORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x2f: util::stream_format(stream,"MOVHI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x30: util::stream_format(stream,"LDB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x31: util::stream_format(stream,"LDH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x32: util::stream_format(stream,"Unk 0x32"); size=2; break;
case 0x33: util::stream_format(stream,"LDW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x34: util::stream_format(stream,"STB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x35: util::stream_format(stream,"STH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x36: util::stream_format(stream,"Unk 0x36"); size=2; break;
case 0x37: util::stream_format(stream,"STW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x38: util::stream_format(stream,"INB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x39: util::stream_format(stream,"INH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x3a: util::stream_format(stream,"CAXI %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x3b: util::stream_format(stream,"INW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x3c: sprintf(buffer,"OUTB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3d: sprintf(buffer,"OUTH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3c: util::stream_format(stream,"OUTB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3d: util::stream_format(stream,"OUTH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3e:
switch((opc2&0xfc00)>>10)
{
case 0x0: sprintf(buffer,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x2: sprintf(buffer,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x3: sprintf(buffer,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x4: sprintf(buffer,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x5: sprintf(buffer,"SUBF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x6: sprintf(buffer,"MULF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x7: sprintf(buffer,"DIVF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0xb: sprintf(buffer,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break;
default : sprintf(buffer,"Unkf 0x%X",(opc2&0xfc00)>>10); break;
case 0x0: util::stream_format(stream,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x2: util::stream_format(stream,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x3: util::stream_format(stream,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x4: util::stream_format(stream,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x5: util::stream_format(stream,"SUBF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x6: util::stream_format(stream,"MULF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x7: util::stream_format(stream,"DIVF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0xb: util::stream_format(stream,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break;
default : util::stream_format(stream,"Unkf 0x%X",(opc2&0xfc00)>>10); break;
}
size=4;
break;
case 0x3f: sprintf(buffer,"OUTW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3f: util::stream_format(stream,"OUTW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
default : size=2;
}
return size | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(v810)
{
std::ostringstream stream;
offs_t result = internal_disasm_v810(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -391,11 +391,10 @@ static int offs(int8_t offset)
/****************************************************************************
* Disassemble opcode at PC and return number of bytes it takes
****************************************************************************/
CPU_DISASSEMBLE( z180 )
static offs_t internal_disasm_z180(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
const z80dasm *d;
const char *src, *ixy;
char *dst;
unsigned PC = pc;
int8_t offset = 0;
uint8_t op, op1 = 0;
@ -404,7 +403,6 @@ CPU_DISASSEMBLE( z180 )
uint32_t flags = 0;
ixy = "oops!!";
dst = buffer;
op = oprom[pos++];
@ -447,64 +445,63 @@ CPU_DISASSEMBLE( z180 )
if( d->arguments )
{
dst += sprintf(dst, "%-5s ", s_mnemonic[d->mnemonic]);
util::stream_format(stream, "%-5s ", s_mnemonic[d->mnemonic]);
src = d->arguments;
while( *src )
{
switch( *src )
{
case '?': /* illegal opcode */
dst += sprintf( dst, "$%02x,$%02x", op, op1);
util::stream_format(stream, "$%02x,$%02x", op, op1);
break;
case 'A':
ea = opram[pos] + ( opram[pos+1] << 8);
ea = opram[pos] + (opram[pos+1] << 8);
pos += 2;
dst += sprintf( dst, "$%04X", ea );
util::stream_format(stream, "$%04X", ea);
break;
case 'B': /* Byte op arg */
ea = opram[pos++];
dst += sprintf( dst, "$%02X", ea );
util::stream_format(stream, "$%02X", ea);
break;
case 'N': /* Immediate 16 bit */
ea = opram[pos] + ( opram[pos+1] << 8 );
pos += 2;
dst += sprintf( dst, "$%04X", ea );
util::stream_format(stream, "$%04X", ea);
break;
case 'O': /* Offset relative to PC */
offset = (int8_t) opram[pos++];
dst += sprintf( dst, "$%05X", PC + offset + 2 );
util::stream_format(stream, "$%05X", PC + offset + 2);
break;
case 'P': /* Port number */
ea = opram[pos++];
dst += sprintf( dst, "$%02X", ea );
util::stream_format(stream, "$%02X", ea);
break;
case 'V': /* Restart vector */
ea = op & 0x38;
dst += sprintf( dst, "$%02X", ea );
util::stream_format(stream, "$%02X", ea);
break;
case 'W': /* Memory address word */
ea = opram[pos] + ( opram[pos+1] << 8);
ea = opram[pos] + (opram[pos+1] << 8);
pos += 2;
dst += sprintf( dst, "$%05X", ea );
util::stream_format(stream, "$%05X", ea);
break;
case 'X':
offset = (int8_t) opram[pos++];
case 'Y':
dst += sprintf( dst,"(%s%c$%02x)", ixy, sign(offset), offs(offset) );
util::stream_format(stream,"(%s%c$%02x)", ixy, sign(offset), offs(offset));
break;
case 'I':
dst += sprintf( dst, "%s", ixy);
util::stream_format(stream, "%s", ixy);
break;
default:
*dst++ = *src;
stream << *src;
}
src++;
}
*dst = '\0';
}
else
{
dst += sprintf(dst, "%s", s_mnemonic[d->mnemonic]);
util::stream_format(stream, "%s", s_mnemonic[d->mnemonic]);
}
if (d->mnemonic == zCALL || d->mnemonic == zCPDR || d->mnemonic == zCPIR || d->mnemonic == zDJNZ ||
@ -516,3 +513,13 @@ CPU_DISASSEMBLE( z180 )
return pos | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(z180)
{
std::ostringstream stream;
offs_t result = internal_disasm_z180(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -56,7 +56,7 @@ static const char *const CONDITION_CODE[16] =
#define B0L (B0 & 0x0f)
#define OPH (opcode >> 4)
#define ARG(_formatting, _value) { if (argc) dst += sprintf(dst, ", "); dst += sprintf(dst, _formatting, _value); argc++; }
#define ARG(_formatting, _value) { if (argc) util::stream_format(stream, ", "); util::stream_format(stream, _formatting, _value); argc++; }
#define arg_name(_value) ARG("%s", REGISTER_NAME[_value])
#define arg_cc ARG("%s", CONDITION_CODE[OPH])
@ -70,10 +70,10 @@ static const char *const CONDITION_CODE[16] =
#define arg_IM(_value) ARG(IM, _value)
#define arg_RA ARG(RA, pc + (int8_t)B0 + 2)
#define arg_DA ARG(DA, B0 << 8 | B1)
#define arg_X(_value1, _value2) { if (argc) dst += sprintf(dst, ", "); dst += sprintf(dst, X, _value1, _value2); argc++; }
#define arg_X(_value1, _value2) { if (argc) util::stream_format(stream, ", "); util::stream_format(stream, X, _value1, _value2); argc++; }
#define illegal dst += sprintf(dst, "Illegal")
#define mnemonic(_mnemonic) dst += sprintf(dst, "%-5s", _mnemonic)
#define illegal util::stream_format(stream, "Illegal")
#define mnemonic(_mnemonic) util::stream_format(stream, "%-5s", _mnemonic)
#define bytes(_count) oprom += (_count - 1)
#define step_over flags = DASMFLAG_STEP_OVER
#define step_out flags = DASMFLAG_STEP_OUT
@ -82,12 +82,11 @@ static const char *const CONDITION_CODE[16] =
DISASSEMBLER
***************************************************************************/
CPU_DISASSEMBLE( z8 )
static offs_t internal_disasm_z8(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
const uint8_t *startrom = oprom;
uint32_t flags = 0;
uint8_t opcode = *oprom++;
char *dst = buffer;
int argc = 0;
switch (pc)
@ -98,7 +97,7 @@ CPU_DISASSEMBLE( z8 )
case 0x0006:
case 0x0008:
case 0x000a:
sprintf(buffer, "IRQ%u Vector %04Xh", pc / 2, opcode << 8 | *oprom++); break;
util::stream_format(stream, "IRQ%u Vector %04Xh", pc / 2, opcode << 8 | *oprom++); break;
default:
switch (opcode)
{
@ -378,3 +377,13 @@ CPU_DISASSEMBLE( z8 )
return (oprom - startrom) | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(z8)
{
std::ostringstream stream;
offs_t result = internal_disasm_z8(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}

View File

@ -63,9 +63,9 @@ public:
int ext_clock(int counter) const { return m_external_clock[counter]; } // get clock frequency
DECLARE_WRITE8_MEMBER( write );
void write(offs_t offset, uint8_t data) { write(machine().driver_data()->generic_space(), offset, data); }
void write(offs_t offset, uint8_t data) { write(machine().dummy_space(), offset, data); }
DECLARE_READ8_MEMBER( read );
uint8_t read(offs_t offset) { return read(machine().driver_data()->generic_space(), offset); }
uint8_t read(offs_t offset) { return read(machine().dummy_space(), offset); }
void set_gate(int idx, int state);
DECLARE_WRITE_LINE_MEMBER( set_g1 );

View File

@ -288,7 +288,7 @@ void kbdc8042_device::at_8042_check_keyboard()
if (!m_keyboard.received && !m_mouse.received)
{
if((data = m_keyboard_dev->read(machine().driver_data()->generic_space(), 0)))
if((data = m_keyboard_dev->read(machine().dummy_space(), 0)))
at_8042_receive(data);
}
}

View File

@ -23,14 +23,14 @@ void latch8_device::update(uint8_t new_val, uint8_t mask)
uint8_t changed = old_val ^ m_value;
for (i=0; i<8; i++)
if (((changed & (1<<i)) != 0)) {
if (i==0 && !m_write_0.isnull()) m_write_0(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==1 && !m_write_1.isnull()) m_write_1(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==2 && !m_write_2.isnull()) m_write_2(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==3 && !m_write_3.isnull()) m_write_3(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==4 && !m_write_4.isnull()) m_write_4(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==5 && !m_write_5.isnull()) m_write_5(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==6 && !m_write_6.isnull()) m_write_6(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==7 && !m_write_7.isnull()) m_write_7(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
if (i==0 && !m_write_0.isnull()) m_write_0(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==1 && !m_write_1.isnull()) m_write_1(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==2 && !m_write_2.isnull()) m_write_2(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==3 && !m_write_3.isnull()) m_write_3(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==4 && !m_write_4.isnull()) m_write_4(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==5 && !m_write_5.isnull()) m_write_5(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==6 && !m_write_6.isnull()) m_write_6(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
if (i==7 && !m_write_7.isnull()) m_write_7(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
}
}
}

View File

@ -66,6 +66,9 @@ void mm58274c_device::device_start()
m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm58274c_device::rtc_interrupt_cb),this));
// register for state saving
save_item(NAME(m_mode24));
save_item(NAME(m_day1));
save_item(NAME(m_status));
save_item(NAME(m_control));
save_item(NAME(m_clk_set));

View File

@ -654,6 +654,20 @@ void tms9901_device::device_start(void)
m_interrupt.resolve();
m_clock_register = 0;
save_item(NAME(m_int_state));
save_item(NAME(m_old_int_state));
save_item(NAME(m_enabled_ints));
save_item(NAME(m_int_pending));
save_item(NAME(m_timer_int_pending));
save_item(NAME(m_pio_direction));
save_item(NAME(m_pio_output));
save_item(NAME(m_pio_direction_mirror));
save_item(NAME(m_pio_output_mirror));
save_item(NAME(m_clock_mode));
save_item(NAME(m_clock_register));
save_item(NAME(m_decrementer_value));
save_item(NAME(m_clock_read_register));
}
const device_type TMS9901 = &device_creator<tms9901_device>;

View File

@ -31,21 +31,21 @@
#include "z80dart.h"
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
#define VERBOSE 0
#define LOGPRINT(x) do { if (VERBOSE) logerror x; } while (0)
#define LOG(x) {} LOGPRINT(x)
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
#if VERBOSE == 2
#define logerror printf
#endif
#define CHANA_TAG "cha"
#define CHANB_TAG "chb"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
@ -503,7 +503,6 @@ z80dart_channel::z80dart_channel(const machine_config &mconfig, const char *tag,
: device_t(mconfig, Z80DART_CHANNEL, "Z80 DART channel", tag, owner, clock, "z80dart_channel", __FILE__),
device_serial_interface(mconfig, *this),
m_rx_error(0),
m_rx_fifo(-1),
m_rx_clock(0),
m_rx_first(0),
m_rx_break(0),
@ -523,12 +522,6 @@ z80dart_channel::z80dart_channel(const machine_config &mconfig, const char *tag,
for (auto & elem : m_wr)
elem = 0;
for (int i = 0; i < 3; i++)
{
m_rx_data_fifo[i] = 0;
m_rx_error_fifo[i] = 0;
}
}
@ -544,10 +537,8 @@ void z80dart_channel::device_start()
// state saving
save_item(NAME(m_rr));
save_item(NAME(m_wr));
save_item(NAME(m_rx_data_fifo));
save_item(NAME(m_rx_error_fifo));
save_item(NAME(m_rx_error));
save_item(NAME(m_rx_fifo));
// save_item(NAME(m_rx_data_fifo));
// save_item(NAME(m_rx_error_fifo));
save_item(NAME(m_rx_clock));
save_item(NAME(m_rx_first));
save_item(NAME(m_rx_break));
@ -1001,18 +992,15 @@ uint8_t z80dart_channel::data_read()
{
uint8_t data = 0;
if (m_rx_fifo >= 0)
if (!m_rx_data_fifo.empty())
{
// load data from the FIFO
data = m_rx_data_fifo[m_rx_fifo];
data = m_rx_data_fifo.dequeue();
// load error status from the FIFO
m_rr[1] = (m_rr[1] & ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR)) | m_rx_error_fifo[m_rx_fifo];
m_rr[1] = (m_rr[1] & ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR)) | m_rx_error_fifo.dequeue();
// decrease FIFO pointer
m_rx_fifo--;
if (m_rx_fifo < 0)
if (m_rx_data_fifo.empty())
{
// no more characters available in the FIFO
m_rr[0] &= ~ RR0_RX_CHAR_AVAILABLE;
@ -1064,7 +1052,7 @@ void z80dart_channel::receive_data(uint8_t data)
{
LOG(("Z80DART \"%s\" Channel %c : Receive Data Byte '%02x'\n", m_owner->tag(), 'A' + m_index, data));
if (m_rx_fifo == 2)
if (m_rx_data_fifo.full())
{
// receive overrun error detected
m_rx_error |= RR1_RX_OVERRUN_ERROR;
@ -1083,16 +1071,17 @@ void z80dart_channel::receive_data(uint8_t data)
m_uart->trigger_interrupt(m_index, INT_SPECIAL);
break;
}
// overwrite last character/error with received character and error status into FIFO
m_rx_data_fifo.poke(data);
m_rx_error_fifo.poke(m_rx_error);
}
else
{
m_rx_fifo++;
// store received character and error status into FIFO
m_rx_data_fifo.enqueue(data);
m_rx_error_fifo.enqueue(m_rx_error);
}
// store received character and error status into FIFO
m_rx_data_fifo[m_rx_fifo] = data;
m_rx_error_fifo[m_rx_fifo] = m_rx_error;
m_rr[0] |= RR0_RX_CHAR_AVAILABLE;
// receive interrupt

View File

@ -428,11 +428,10 @@ protected:
int get_tx_word_length();
// receiver state
uint8_t m_rx_data_fifo[3]; // receive data FIFO
uint8_t m_rx_error_fifo[3]; // receive error FIFO
uint8_t m_rx_error; // current receive error
int m_rx_fifo; // receive FIFO pointer
util::fifo<uint8_t, 3> m_rx_data_fifo;
util::fifo<uint8_t, 3> m_rx_error_fifo;
uint8_t m_rx_error; // current receive error
int m_rx_clock; // receive clock pulse count
int m_rx_first; // first character received
int m_rx_break; // receive break condition

View File

@ -84,8 +84,8 @@ void msm5232_device::device_reset()
for (i=0; i<8; i++)
{
write(machine().driver_data()->generic_space(),i,0x80);
write(machine().driver_data()->generic_space(),i,0x00);
write(machine().dummy_space(), i, 0x80);
write(machine().dummy_space(), i, 0x00);
}
m_noise_cnt = 0;
m_noise_rng = 1;

View File

@ -110,8 +110,7 @@ nesapu_device::nesapu_device(const machine_config &mconfig, const char *tag, dev
m_samps_per_sync(0),
m_buffer_size(0),
m_real_rate(0),
m_stream(nullptr),
m_cpu_tag("")
m_stream(nullptr)
{
for (auto & elem : m_noise_lut)
{
@ -134,13 +133,6 @@ nesapu_device::nesapu_device(const machine_config &mconfig, const char *tag, dev
}
}
void nesapu_device::set_tag_memory(const char *tag)
{
/* Initialize individual chips */
if (tag)
(m_APU.dpcm).memory = &machine().device(tag)->memory().space(AS_PROGRAM);
}
void nesapu_device::device_clock_changed()
{
calculate_rates();
@ -184,7 +176,7 @@ void nesapu_device::device_start()
{
create_noise(m_noise_lut, 13, NOISE_LONG);
set_tag_memory(m_cpu_tag);
(m_APU.dpcm).memory = &downcast<n2a03_device &>(*owner()).space(AS_PROGRAM);
calculate_rates();

View File

@ -50,9 +50,6 @@ public:
nesapu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~nesapu_device() {}
static void set_cpu_tag(device_t &device, const char *tag) { downcast<nesapu_device &>(device).m_cpu_tag = tag; }
void set_tag_memory(const char *tag);
virtual void device_clock_changed() override;
DECLARE_READ8_MEMBER( read );
@ -78,8 +75,6 @@ private:
uint32 m_sync_times2[SYNCS_MAX2]; /* Samples per sync table */
sound_stream *m_stream;
const char *m_cpu_tag;
void calculate_rates();
void create_syncs(unsigned long sps);
int8 apu_square(square_t *chan);
@ -93,8 +88,4 @@ private:
extern const device_type NES_APU;
#define MCFG_NES_APU_CPU(_tag) \
nesapu_device::set_cpu_tag(*device, _tag);
#endif /* __NES_APU_H__ */

View File

@ -84,7 +84,7 @@ void huc6261_device::device_timer(emu_timer &timer, device_timer_id id, int para
{
g_profiler.start( PROFILER_VIDEO );
/* Get next pixel information */
m_pixel_data = m_huc6270_b->next_pixel( machine().driver_data()->generic_space(), 0, 0xffff );
m_pixel_data = m_huc6270_b->next_pixel( machine().dummy_space(), 0, 0xffff );
g_profiler.stop();
}

View File

@ -137,14 +137,13 @@ void debug_view_memory::enumerate_sources()
// first add all the devices' address spaces
for (device_memory_interface &memintf : memory_interface_iterator(machine().root_device()))
if (&memintf.device() != &machine().root_device())
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
if (memintf.has_space(spacenum))
{
address_space &space = memintf.space(spacenum);
name = string_format("%s '%s' %s space memory", memintf.device().name(), memintf.device().tag(), space.name());
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), space)));
}
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
if (memintf.has_space(spacenum))
{
address_space &space = memintf.space(spacenum);
name = string_format("%s '%s' %s space memory", memintf.device().name(), memintf.device().tag(), space.name());
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), space)));
}
// then add all the memory regions
for (auto &region : machine().memory().regions())

View File

@ -13,17 +13,6 @@
#include "drivenum.h"
//**************************************************************************
// ADDRESS_MAPS
//**************************************************************************
// default address map
static ADDRESS_MAP_START( generic, AS_0, 8, driver_device )
AM_RANGE(0x00000000, 0xffffffff) AM_DEVREADWRITE(":", driver_device, fatal_generic_read, fatal_generic_write)
ADDRESS_MAP_END
//**************************************************************************
// DRIVER DEVICE
//**************************************************************************
@ -34,8 +23,6 @@ ADDRESS_MAP_END
driver_device::driver_device(const machine_config &mconfig, device_type type, const char *tag)
: device_t(mconfig, type, "Driver Device", tag, nullptr, 0, "", __FILE__),
device_memory_interface(mconfig, *this),
m_space_config("generic", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(generic)),
m_system(nullptr),
m_flip_screen_x(0),
m_flip_screen_y(0)
@ -261,17 +248,6 @@ void driver_device::device_reset_after_children()
}
//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
const address_space_config *driver_device::memory_space_config(address_spacenum spacenum) const
{
return (spacenum == 0) ? &m_space_config : nullptr;
}
//**************************************************************************
// INTERRUPT ENABLE AND VECTOR HELPERS
@ -476,22 +452,3 @@ CUSTOM_INPUT_MEMBER(driver_device::custom_port_read)
const char *tag = (const char *)param;
return ioport(tag)->read();
}
//**************************************************************************
// MISC READ/WRITE HANDLERS
//**************************************************************************
//-------------------------------------------------
// generic space fatal error handlers
//-------------------------------------------------
READ8_MEMBER( driver_device::fatal_generic_read )
{
throw emu_fatalerror("Attempted to read from generic address space (offs %X)\n", offset);
}
WRITE8_MEMBER( driver_device::fatal_generic_write )
{
throw emu_fatalerror("Attempted to write to generic address space (offs %X = %02X)\n", offset, data);
}

View File

@ -97,8 +97,7 @@ typedef delegate<void ()> driver_callback_delegate;
// ======================> driver_device
// base class for machine driver-specific devices
class driver_device : public device_t,
public device_memory_interface
class driver_device : public device_t
{
public:
// construction/destruction
@ -135,7 +134,7 @@ public:
void init_0() { }
// memory helpers
address_space &generic_space() const { return space(AS_PROGRAM); }
address_space &generic_space() const { return machine().dummy_space(); }
// output heler
output_manager &output() const { return machine().output(); }
@ -192,10 +191,6 @@ public:
// generic input port helpers
DECLARE_CUSTOM_INPUT_MEMBER( custom_port_read );
// general fatal error handlers
DECLARE_READ8_MEMBER( fatal_generic_read );
DECLARE_WRITE8_MEMBER( fatal_generic_write );
protected:
// helpers called at startup
virtual void driver_start();
@ -215,16 +210,11 @@ protected:
virtual void device_start() override;
virtual void device_reset_after_children() override;
// device_memory_interface overrides
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
private:
// helpers
void irq_pulse_clear(void *ptr, int32_t param);
void updateflip();
// configuration state
const address_space_config m_space_config;
// internal state
const game_driver * m_system; // pointer to the game driver
driver_callback_delegate m_callbacks[CB_COUNT]; // start/reset callbacks

View File

@ -186,6 +186,7 @@ enum
XTAL_27_164MHz = 27164000, /* Typically used on 90's Taito PCBs to drive the custom chips */
XTAL_27_2109MHz = 27210900, /* LA Girl */
XTAL_28MHz = 28000000,
XTAL_28_322MHz = 28322000, /* Saitek RISC 2500, Mephisto Montreux */
XTAL_28_37516MHz = 28375160, /* Amiga PAL systems */
XTAL_28_48MHz = 28480000, /* Chromatics CGC-7900 */
XTAL_28_63636MHz = 28636363, /* Later Leland games and Atari GT, Amiga NTSC, Raiden2 h/w (8x NTSC subcarrier)*/

View File

@ -1553,6 +1553,20 @@ memory_manager::memory_manager(running_machine &machine)
memset(m_bank_ptr, 0, sizeof(m_bank_ptr));
}
//-------------------------------------------------
// allocate - allocate memory spaces
//-------------------------------------------------
void memory_manager::allocate(device_memory_interface &memory)
{
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
{
// if there is a configuration for this space, we need an address space
const address_space_config *spaceconfig = memory.space_config(spacenum);
if (spaceconfig != nullptr)
address_space::allocate(m_spacelist, *this, *spaceconfig, memory, spacenum);
}
}
//-------------------------------------------------
// initialize - initialize the memory system
@ -1563,13 +1577,9 @@ void memory_manager::initialize()
// loop over devices and spaces within each device
memory_interface_iterator iter(machine().root_device());
for (device_memory_interface &memory : iter)
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
{
// if there is a configuration for this space, we need an address space
const address_space_config *spaceconfig = memory.space_config(spacenum);
if (spaceconfig != nullptr)
address_space::allocate(m_spacelist,*this, *spaceconfig, memory, spacenum);
}
allocate(memory);
allocate(m_machine.m_dummy_space);
// construct and preprocess the address_map for each space
for (auto &space : m_spacelist)

View File

@ -734,6 +734,7 @@ public:
private:
// internal helpers
void bank_reattach();
void allocate(device_memory_interface &memory);
// internal state
running_machine & m_machine; // reference to the machine

View File

@ -130,10 +130,13 @@ running_machine::running_machine(const machine_config &_config, machine_manager
m_memory(*this),
m_ioport(*this),
m_parameters(*this),
m_scheduler(*this)
m_scheduler(*this),
m_dummy_space(_config, "dummy_space", &root_device(), 0)
{
memset(&m_base_time, 0, sizeof(m_base_time));
m_dummy_space.set_machine(*this);
// set the machine on all devices
device_iterator iter(root_device());
for (device_t &device : iter)
@ -963,6 +966,8 @@ void running_machine::logfile_callback(const char *buffer)
void running_machine::start_all_devices()
{
m_dummy_space.start();
// iterate through the devices
int last_failed_starts = -1;
while (last_failed_starts != 0)
@ -1227,6 +1232,48 @@ void system_time::full_time::set(struct tm &t)
//**************************************************************************
// DUMMY ADDRESS SPACE
//**************************************************************************
READ8_MEMBER(dummy_space_device::read)
{
throw emu_fatalerror("Attempted to read from generic address space (offs %X)\n", offset);
}
WRITE8_MEMBER(dummy_space_device::write)
{
throw emu_fatalerror("Attempted to write to generic address space (offs %X = %02X)\n", offset, data);
}
static ADDRESS_MAP_START(dummy, AS_0, 8, dummy_space_device)
AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(read, write)
ADDRESS_MAP_END
const device_type DUMMY_SPACE = &device_creator<dummy_space_device>;
dummy_space_device::dummy_space_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, DUMMY_SPACE, "Dummy Space", tag, owner, clock, "dummy_space", __FILE__),
device_memory_interface(mconfig, *this),
m_space_config("dummy", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(dummy))
{
}
void dummy_space_device::device_start()
{
}
//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
const address_space_config *dummy_space_device::memory_space_config(address_spacenum spacenum) const
{
return (spacenum == 0) ? &m_space_config : nullptr;
}
//**************************************************************************
// JAVASCRIPT PORT-SPECIFIC
//**************************************************************************

View File

@ -132,6 +132,32 @@ public:
// ======================> dummy_space_device
// a dummy address space for passing to handlers outside of the memory system
class dummy_space_device : public device_t,
public device_memory_interface
{
public:
dummy_space_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ8_MEMBER(read);
DECLARE_WRITE8_MEMBER(write);
protected:
// device-level overrides
virtual void device_start() override;
// device_memory_interface overrides
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
private:
const address_space_config m_space_config;
};
// ======================> running_machine
typedef delegate<void ()> machine_notify_delegate;
@ -142,6 +168,7 @@ class running_machine
DISABLE_COPYING(running_machine);
friend class sound_manager;
friend class memory_manager;
typedef std::function<void(const char*)> logerror_callback;
@ -230,6 +257,7 @@ public:
void set_rtc_datetime(const system_time &systime);
// misc
address_space &dummy_space() const { return m_dummy_space.space(AS_PROGRAM); }
void popmessage() const { popmessage(static_cast<char const *>(nullptr)); }
template <typename Format, typename... Params> void popmessage(Format &&fmt, Params &&... args) const;
template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
@ -356,6 +384,9 @@ private:
// string formatting buffer
mutable util::ovectorstream m_string_buffer;
// configuration state
dummy_space_device m_dummy_space;
};

View File

@ -9,6 +9,7 @@
***************************************************************************/
#include "emu.h"
#include "luaengine.h"
#include "console.h"
#include "linenoise-ng/include/linenoise.h"
#include "mame.h"
@ -28,9 +29,10 @@ console_frontend::console_frontend(emu_options &options, osd_interface &osd)
m_wait(false),
m_prompt("\x1b[1;36m[MAME]\x1b[0m> ")
{
using namespace std::placeholders;
m_commands.insert(std::make_pair("quit", std::bind(&console_frontend::cmd_quit, this, _1)));
m_commands.insert(std::make_pair("exit", std::bind(&console_frontend::cmd_quit, this, _1)));
mame_machine_manager::instance()->lua()->sol()["quit"] = [this]() { cmd_quit(); };
m_commands.push_back("quit()");
mame_machine_manager::instance()->lua()->sol()["exit"] = [this]() { cmd_quit(); };
m_commands.push_back("exit()");
gConsole = this;
}
@ -47,14 +49,14 @@ void console_frontend::completion(char const* prefix, linenoiseCompletions* lc)
{
for (auto cmd : m_commands)
{
if (strncmp(prefix, cmd.first.c_str(), strlen(prefix)) == 0)
if (strncmp(prefix, cmd.c_str(), strlen(prefix)) == 0)
{
linenoiseAddCompletion(lc, cmd.first.c_str());
linenoiseAddCompletion(lc, cmd.c_str());
}
}
}
void console_frontend::cmd_quit(std::vector<std::string>& arg)
void console_frontend::cmd_quit()
{
printf("Exiting application\n");
m_run.store(false);
@ -89,46 +91,6 @@ void console_frontend::read_console(std::string &cmdLine)
}
}
void console_frontend::split_command(std::vector<std::string>& arg, std::string command)
{
int len = command.length();
bool qot = false, sqot = false;
int arglen;
for (int i = 0; i < len; i++) {
int start = i;
if (command[i] == '\"') {
qot = true;
}
else if (command[i] == '\'') sqot = true;
if (qot) {
i++;
start++;
while (i<len && command[i] != '\"')
i++;
if (i<len)
qot = false;
arglen = i - start;
i++;
}
else if (sqot) {
i++;
while (i<len && command[i] != '\'')
i++;
if (i<len)
sqot = false;
arglen = i - start;
i++;
}
else {
while (i<len && command[i] != ' ')
i++;
arglen = i - start;
}
arg.push_back(command.substr(start, arglen));
}
}
static void completionHook(char const* prefix, linenoiseCompletions* lc)
{
gConsole->completion(prefix, lc);
@ -159,16 +121,7 @@ void console_frontend::start_console()
{
if (m_wait.load())
{
std::vector<std::string> arg;
split_command(arg, cmdLine);
auto command = m_commands.find(arg[0]);
if (command != m_commands.end())
{
command->second(arg);
}
else {
printf("Unknown command: %s\n", arg[0].c_str());
}
mame_machine_manager::instance()->lua()->load_string(cmdLine.c_str());
cmdLine.clear();
m_wait.store(false);
} else {

View File

@ -28,17 +28,14 @@ public:
private:
void read_console(std::string &cmdLine);
void split_command(std::vector<std::string>& arg, std::string command);
void cmd_quit(std::vector<std::string>& arg);
void cmd_quit();
// internal state
//emu_options & m_options;
//osd_interface & m_osd;
std::atomic<bool> m_run;
std::atomic<bool> m_wait;
std::string m_prompt;
std::unordered_map<std::string, std::function<void(std::vector<std::string>& arg)>> m_commands;
std::vector<std::string> m_commands;
};
#endif /* MAME_FRONTEND_CONSOLE_H */

View File

@ -8,10 +8,7 @@
***************************************************************************/
#include <limits>
#include <thread>
#include <lua.hpp>
#include <signal.h>
#include "emu.h"
#include "mame.h"
#include "drivenum.h"
@ -21,7 +18,6 @@
#include "natkeyboard.h"
#include "uiinput.h"
#include "pluginopts.h"
#include <mutex>
#ifdef __clang__
#pragma clang diagnostic ignored "-Wshift-count-overflow"
@ -37,6 +33,7 @@
extern "C" {
int luaopen_zlib(lua_State *L);
int luaopen_lfs(lua_State *L);
int luaopen_linenoise(lua_State *L);
}
namespace sol
@ -527,6 +524,7 @@ lua_engine::lua_engine()
// Get package.preload so we can store builtins in it.
sol()["package"]["preload"]["zlib"] = &luaopen_zlib;
sol()["package"]["preload"]["lfs"] = &luaopen_lfs;
sol()["package"]["preload"]["linenoise"] = &luaopen_linenoise;
lua_gc(m_lua_state, LUA_GCRESTART, 0);
}

View File

@ -100,17 +100,15 @@ public:
call_plugin(name, sol::make_object(sol(), in));
}
sol::state_view &sol() const { return *m_sol_state; }
private:
// internal state
lua_State *m_lua_state;
sol::state_view *m_sol_state;
sol::state_view &sol() const { return *m_sol_state; }
running_machine *m_machine;
std::vector<std::string> m_menu;
std::map<lua_State *, std::pair<lua_State *, int> > thread_registry;
running_machine &machine() const { return *m_machine; }
void on_machine_prestart();

View File

@ -428,7 +428,7 @@ public:
fifo()
: std::array<T, N>()
, m_head(this->begin())
, m_tail(this->end())
, m_tail(this->begin())
, m_empty(true)
{
static_assert(0U < N, "FIFO must have at least one element");
@ -513,11 +513,27 @@ public:
return result;
}
void poke(T &v)
{
*m_tail = v;
}
void poke(T &&v)
{
*m_tail = std::move(v);
}
T const &peek() const
{
return *m_head;
}
void clear()
{
m_head = m_tail = this->begin();
m_empty = true;
}
private:
typename fifo::iterator m_head, m_tail;
bool m_empty;

View File

@ -448,7 +448,7 @@ void atari_cage_device::update_control_lines()
if ((m_control & 2) && m_cage_to_cpu_ready)
reason |= CAGE_IRQ_REASON_DATA_READY;
m_irqhandler(machine().driver_data()->generic_space(), 0, reason);
m_irqhandler(machine().dummy_space(), 0, reason);
/* set the IOF input lines */
val = m_cpu->state_int(TMS3203X_IOF);
val &= ~0x88;

View File

@ -2142,7 +2142,7 @@ void dcs_audio_device::fifo_notify(int count, int max)
if (transfer.state != 5 || transfer.fifo_entries == transfer.writes_left || transfer.fifo_entries >= 256)
{
for ( ; transfer.fifo_entries; transfer.fifo_entries--)
preprocess_write(m_fifo_data_r(machine().driver_data()->generic_space(),0, 0xffff));
preprocess_write(m_fifo_data_r(machine().dummy_space(), 0, 0xffff));
}
}
@ -2155,7 +2155,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::transfer_watchdog_callback )
if (transfer.fifo_entries && starting_writes_left == transfer.writes_left)
{
for ( ; transfer.fifo_entries; transfer.fifo_entries--)
preprocess_write(m_fifo_data_r(machine().driver_data()->generic_space(),0, 0xffff));
preprocess_write(m_fifo_data_r(machine().dummy_space(), 0, 0xffff));
}
if (transfer.watchdog != nullptr)
transfer.watchdog->adjust(attotime::from_msec(1), transfer.writes_left);

View File

@ -565,7 +565,7 @@ void mw8080bw_state::maze_write_discrete(uint8_t maze_tone_timing_state)
/* controls need to be active low */
int controls = ~ioport("IN0")->read() & 0xff;
address_space &space = machine().driver_data()->generic_space();
address_space &space = machine().dummy_space();
m_discrete->write(space, MAZE_TONE_TIMING, maze_tone_timing_state);
m_discrete->write(space, MAZE_P1_DATA, controls & 0x0f);
m_discrete->write(space, MAZE_P2_DATA, (controls >> 4) & 0x0f);

View File

@ -548,9 +548,9 @@ static MACHINE_CONFIG_START( fexcel68k, fidel68k_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz)
MCFG_CPU_PROGRAM_MAP(fexcel68k_map)
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel68k_state, irq_on, attotime::from_hz(589)) // from 556 timer (22nf, 91K+20K, 100)
MCFG_TIMER_START_DELAY(attotime::from_hz(589) - attotime::from_nsec(1525)) // active for 1.525us
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel68k_state, irq_off, attotime::from_hz(589))
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel68k_state, irq_on, attotime::from_hz(618)) // theoretical frequency from 556 timer (22nf, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz
MCFG_TIMER_START_DELAY(attotime::from_hz(618) - attotime::from_nsec(1525)) // active for 1.525us
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel68k_state, irq_off, attotime::from_hz(618))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_fidel_ex_68k)

View File

@ -865,11 +865,11 @@ ROM_START(megaduck)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
CONS(1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_SUPPORTS_SAVE)
CONS(1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_SUPPORTS_SAVE)
CONS(1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_SUPPORTS_SAVE)
CONS(1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_SUPPORTS_SAVE)
CONS(1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
CONS(1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
CONS(1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
CONS(1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
CONS(1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
CONS(1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
// Sound is not 100% yet, it generates some sounds which could be ok. Since we're lacking a real system there's no way to verify.
CONS( 1993, megaduck, 0, 0, megaduck, gameboy, driver_device, 0, "Welback Holdings (Timlex International) / Creatronic / Videojet / Cougar USA", "Mega Duck / Cougar Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -211,7 +211,7 @@ WRITE8_MEMBER(gei_state::sound_w)
/* bit 5 - ticket out in trivia games */
if (m_ticket != nullptr)
m_ticket->write(machine().driver_data()->generic_space(), 0, (data & 0x20)<< 2);
m_ticket->write(machine().dummy_space(), 0, (data & 0x20)<< 2);
/* bit 6 enables NMI */
m_nmi_mask = data & 0x40;

View File

@ -773,4 +773,4 @@ ROM_START(geneve)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , 0)
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , MACHINE_SUPPORTS_SAVE)

View File

@ -895,9 +895,9 @@ WRITE8_MEMBER(hp64k_state::hp64k_floppy1_rdy)
void hp64k_state::hp64k_floppy_idx_cb(floppy_image_device *floppy , int state)
{
if (floppy == m_floppy0->get_device()) {
m_ss0->a_w(machine().driver_data()->generic_space() , 0 , !state);
m_ss0->a_w(machine().dummy_space(), 0, !state);
} else if (floppy == m_floppy1->get_device()) {
m_ss1->a_w(machine().driver_data()->generic_space() , 0 , !state);
m_ss1->a_w(machine().dummy_space(), 0, !state);
}
if (floppy == m_current_floppy) {

View File

@ -256,7 +256,7 @@ WRITE_LINE_MEMBER(pcjr_state::keyb_interrupt)
{
int data;
if(state && (data = m_keyboard->read(machine().driver_data()->generic_space(), 0)))
if(state && (data = m_keyboard->read(machine().dummy_space(), 0)))
{
uint8_t parity = 0;
int i;

View File

@ -739,7 +739,7 @@ WRITE8_MEMBER(itech32_state::drivedge_portb_out)
output().set_led_value(1, data & 0x01);
output().set_led_value(2, data & 0x02);
output().set_led_value(3, data & 0x04);
machine().device<ticket_dispenser_device>("ticket")->write(machine().driver_data()->generic_space(), 0, (data & 0x10) << 3);
machine().device<ticket_dispenser_device>("ticket")->write(machine().dummy_space(), 0, (data & 0x10) << 3);
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
}
@ -757,7 +757,7 @@ WRITE8_MEMBER(itech32_state::pia_portb_out)
/* bit 4 controls the ticket dispenser */
/* bit 5 controls the coin counter */
/* bit 6 controls the diagnostic sound LED */
machine().device<ticket_dispenser_device>("ticket")->write(machine().driver_data()->generic_space(), 0, (data & 0x10) << 3);
machine().device<ticket_dispenser_device>("ticket")->write(machine().dummy_space(), 0, (data & 0x10) << 3);
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
}

View File

@ -760,7 +760,7 @@ WRITE8_MEMBER(itech8_state::ym2203_portb_out)
/* bit 6 controls the diagnostic sound LED */
/* bit 7 controls the ticket dispenser */
m_pia_portb_data = data;
m_ticket->write(machine().driver_data()->generic_space(), 0, data & 0x80);
m_ticket->write(machine().dummy_space(), 0, data & 0x80);
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
}

View File

@ -278,7 +278,7 @@ INTERRUPT_GEN_MEMBER(kron180_state::interrupt)
WRITE_LINE_MEMBER(kron180_state::keyb_interrupt)
{
if(state && (m_kbd_data = m_keyboard->read(machine().driver_data()->generic_space(), 0)))
if(state && (m_kbd_data = m_keyboard->read(machine().dummy_space(), 0)))
{
LOGKBD(("%s(%02x)\n", FUNCNAME, m_kbd_data));
m_maincpu->set_input_line(2, ASSERT_LINE);

View File

@ -369,7 +369,7 @@ WRITE8_MEMBER(mgavegas_state::cso1_w)
update_custom();
hopper_data=(m_hop&0x01)<<7;
m_ticket->write(machine().driver_data()->generic_space(), 0, hopper_data);
m_ticket->write(machine().dummy_space(), 0, hopper_data);
}
WRITE8_MEMBER(mgavegas_state::cso2_w)

View File

@ -152,13 +152,13 @@ WRITE8_MEMBER(midyunit_state::yawdim_oki_bank_w)
CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_strobe_r)
{
return (m_narc_sound->read(machine().driver_data()->generic_space(), 0) >> 8) & 1;
return (m_narc_sound->read(machine().dummy_space(), 0) >> 8) & 1;
}
CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_data_r)
{
return m_narc_sound->read(machine().driver_data()->generic_space(), 0) & 0xff;
return m_narc_sound->read(machine().dummy_space(), 0) & 0xff;
}

View File

@ -92,7 +92,7 @@ void miragemi_state::video_start()
uint32_t miragemi_state::screen_update_mirage(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
address_space &space = machine().driver_data()->generic_space();
address_space &space = machine().dummy_space();
uint16_t flip = m_deco_tilegen1->pf_control_r(space, 0, 0xffff);
flip_screen_set(BIT(flip, 7));

View File

@ -1406,11 +1406,6 @@ WRITE32_MEMBER(model2_state::model2o_luma_w)
}
}
WRITE32_MEMBER(model2_state::model2_3d_zclip_w)
{
model2_3d_set_zclip( machine(), data & 0xFF );
}
/* Top Skater reads here and discards the result */
READ8_MEMBER(model2_state::tgpid_r)
{

View File

@ -733,7 +733,6 @@ JP4/5/6/7 - Jumpers to configure ROMs
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/powerpc/ppc.h"
#include "machine/eepromser.h"
#include "machine/53c810.h"
#include "machine/nvram.h"
@ -952,20 +951,19 @@ WRITE64_MEMBER(model3_state::mpc105_reg_w)
m_mpc105_regs[(offset*2)+1] = (uint32_t)data;
}
static void mpc105_init(running_machine &machine)
void model3_state::mpc105_init()
{
model3_state *state = machine.driver_data<model3_state>();
/* set reset values */
memset(state->m_mpc105_regs, 0, sizeof(state->m_mpc105_regs));
state->m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */
state->m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
state->m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */
state->m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
state->m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
state->m_mpc105_regs[0xb8/4] = 0x04000000;
state->m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
state->m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
state->m_mpc105_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
memset(m_mpc105_regs, 0, sizeof(m_mpc105_regs));
m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */
m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */
m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
m_mpc105_regs[0xb8/4] = 0x04000000;
m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
m_mpc105_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
}
/*****************************************************************************/
@ -1044,25 +1042,24 @@ WRITE64_MEMBER(model3_state::mpc106_reg_w)
m_mpc106_regs[(offset*2)+1] = (uint32_t)data;
}
static void mpc106_init(running_machine &machine)
void model3_state::mpc106_init()
{
model3_state *state = machine.driver_data<model3_state>();
/* set reset values */
memset(state->m_mpc106_regs, 0, sizeof(state->m_mpc106_regs));
state->m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */
state->m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
state->m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */
state->m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */
state->m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */
state->m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
state->m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
state->m_mpc106_regs[0xb8/4] = 0x04000000;
state->m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */
state->m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */
state->m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */
state->m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
state->m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
state->m_mpc106_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
memset(m_mpc106_regs, 0, sizeof(m_mpc106_regs));
m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */
m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */
m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */
m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */
m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
m_mpc106_regs[0xb8/4] = 0x04000000;
m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */
m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */
m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */
m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
m_mpc106_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
}
/*****************************************************************************/
@ -1260,14 +1257,13 @@ LSI53C810_DMA_CB(model3_state::real3d_dma_callback)
/*****************************************************************************/
static void configure_fast_ram(running_machine &machine)
void model3_state::configure_fast_ram()
{
model3_state *state = machine.driver_data<model3_state>();
/* set conservative DRC options */
machine.device<ppc_device>("maincpu")->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
/* configure fast RAM regions for DRC */
machine.device<ppc_device>("maincpu")->ppcdrc_add_fastram(0x00000000, 0x007fffff, false, state->m_work_ram);
m_maincpu->ppcdrc_add_fastram(0x00000000, 0x007fffff, false, m_work_ram);
}
TIMER_CALLBACK_MEMBER(model3_state::model3_sound_timer_tick)
@ -1285,28 +1281,28 @@ TIMER_CALLBACK_MEMBER(model3_state::real3d_dma_timer_callback)
MACHINE_START_MEMBER(model3_state,model3_10)
{
configure_fast_ram(machine());
configure_fast_ram();
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
}
MACHINE_START_MEMBER(model3_state,model3_15)
{
configure_fast_ram(machine());
configure_fast_ram();
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
}
MACHINE_START_MEMBER(model3_state,model3_20)
{
configure_fast_ram(machine());
configure_fast_ram();
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
}
MACHINE_START_MEMBER(model3_state,model3_21)
{
configure_fast_ram(machine());
configure_fast_ram();
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
@ -1338,17 +1334,17 @@ void model3_state::model3_init(int step)
{
if (m_step15_with_mpc106)
{
mpc106_init(machine());
mpc106_init();
}
else
{
mpc105_init(machine());
mpc105_init();
}
m_real3d_device_id = 0x16c311db; /* PCI Vendor ID (11db = SEGA), Device ID (16c3 = 315-5827) */
}
else
{
mpc106_init(machine());
mpc106_init();
// some step 2+ games need the older PCI ID (obvious symptom:
// vbl is enabled briefly then disabled so the game hangs)
if (m_step20_with_old_real3d)
@ -5740,18 +5736,17 @@ static MACHINE_CONFIG_DERIVED( model3_21_5881, model3_21 )
MACHINE_CONFIG_END
static void interleave_vroms(running_machine &machine)
void model3_state::interleave_vroms()
{
model3_state *state = machine.driver_data<model3_state>();
int start;
int i,j,x;
uint16_t *vrom1 = (uint16_t*)state->memregion("user3")->base();
uint16_t *vrom2 = (uint16_t*)state->memregion("user4")->base();
int vrom_length = state->memregion("user3")->bytes();
uint16_t *vrom1 = (uint16_t*)memregion("user3")->base();
uint16_t *vrom2 = (uint16_t*)memregion("user4")->base();
int vrom_length = memregion("user3")->bytes();
uint16_t *vrom;
state->m_vrom = std::make_unique<uint32_t[]>(0x4000000/4);
vrom = (uint16_t *)state->m_vrom.get();
m_vrom = std::make_unique<uint32_t[]>(0x4000000/4);
vrom = (uint16_t *)m_vrom.get();
if( vrom_length <= 0x1000000 ) {
start = 0x1000000;
@ -5783,7 +5778,7 @@ DRIVER_INIT_MEMBER(model3_state, genprot)
DRIVER_INIT_MEMBER(model3_state,model3_10)
{
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
@ -5796,7 +5791,7 @@ DRIVER_INIT_MEMBER(model3_state,model3_10)
DRIVER_INIT_MEMBER(model3_state,model3_15)
{
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64_delegate(FUNC(model3_state::mpc105_addr_r),this), write64_delegate(FUNC(model3_state::mpc105_addr_w),this));
@ -5806,7 +5801,7 @@ DRIVER_INIT_MEMBER(model3_state,model3_15)
DRIVER_INIT_MEMBER(model3_state,model3_20)
{
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc2000000, 0xc20000ff, read64_delegate(FUNC(model3_state::real3d_dma_r),this), write64_delegate(FUNC(model3_state::real3d_dma_w),this));
@ -5875,7 +5870,7 @@ DRIVER_INIT_MEMBER(model3_state,vs215)
{
m_step15_with_mpc106 = true;
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
@ -5896,7 +5891,7 @@ DRIVER_INIT_MEMBER(model3_state,vs29815)
rom[(0x6028ec^4)/4] = 0x60000000;
rom[(0x60290c^4)/4] = 0x60000000;
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
@ -5912,7 +5907,7 @@ DRIVER_INIT_MEMBER(model3_state,bass)
{
m_step15_with_mpc106 = true;
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
@ -5926,7 +5921,7 @@ DRIVER_INIT_MEMBER(model3_state,bass)
DRIVER_INIT_MEMBER(model3_state,getbass)
{
interleave_vroms(machine());
interleave_vroms();
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));

View File

@ -123,7 +123,7 @@ WRITE8_MEMBER(ms0515_state::ms0515_sys_w)
void ms0515_state::machine_reset()
{
uint8_t *ram = m_ram->pointer();
ms0515_bank_w(machine().driver_data()->generic_space(),0,0);
ms0515_bank_w(machine().dummy_space(), 0, 0);
m_video_ram = ram + 0000000 + 0340000;
m_blink = 0;

View File

@ -231,6 +231,33 @@ ROM_START( mustache )
ROM_LOAD( "mustache.b6",0x0300, 0x1000, CRC(5f83fa35) SHA1(cb13e63577762d818e5dcbb52b8a53f66e284e8f) ) /* 63S281N near SEI0070BU */
ROM_END
ROM_START( mustachei )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "1.h18", 0x0000, 0x8000, CRC(22893fbc) SHA1(724ea50642aec9be10547bd86fae5e1ebfe54685) )
ROM_LOAD( "2.h16", 0x8000, 0x4000, CRC(ec70cfd3) SHA1(0476eab03b907778ea488c802b79da99bf376eb6) )
ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
ROM_LOAD( "10.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */
ROM_LOAD( "5.a13", 0x0000, 0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) )
ROM_LOAD( "4.a15", 0x4000, 0x4000, CRC(8155387d) SHA1(5f0a394c7671442519a831b0eeeaba4eecd5a406) )
ROM_LOAD( "3.a16", 0x8000, 0x4000, CRC(4db4448d) SHA1(50a94fd65c263d95fd24b4009dbb87707929fdcb) )
ROM_REGION( 0x20000, "gfx2",0 ) /* sprites */
ROM_LOAD( "6.a4", 0x00000, 0x8000, CRC(4a95a89c) SHA1(b34ebbda9b0e591876988e42bd36fd505452f38c) )
ROM_LOAD( "8.a7", 0x08000, 0x8000, CRC(3e6be0fb) SHA1(319ea59107e37953c31f59f5f635fc520682b09f) )
ROM_LOAD( "7.a5", 0x10000, 0x8000, CRC(8ad38884) SHA1(e11f1e1db6d5d119afedbe6604d10a6fd6049f12) )
ROM_LOAD( "9.a8", 0x18000, 0x8000, CRC(3568c158) SHA1(c3a2120086befe396a112bd62f032638011cb47a) )
ROM_REGION( 0x1300, "proms",0 ) /* proms */
ROM_LOAD( "d.c3",0x0000, 0x0100, CRC(68575300) SHA1(bc93a38df91ad8c2f335f9bccc98b52376f9b483) )
ROM_LOAD( "c.c2",0x0100, 0x0100, CRC(eb008d62) SHA1(a370fbd1affaa489210ea36eb9e365263fb4e232) )
ROM_LOAD( "b.c1",0x0200, 0x0100, CRC(65da3604) SHA1(e4874d4152a57944d4e47306250833ea5cd0d89b) )
ROM_LOAD( "a.b6",0x0300, 0x1000, CRC(5f83fa35) SHA1(cb13e63577762d818e5dcbb52b8a53f66e284e8f) ) /* 63S281N near SEI0070BU */
ROM_END
DRIVER_INIT_MEMBER(mustache_state,mustache)
{
int i;
@ -279,4 +306,5 @@ DRIVER_INIT_MEMBER(mustache_state,mustache)
}
GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", MACHINE_SUPPORTS_SAVE )
GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, mustachei, mustache, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (IG SPA license)", "Mustache Boy (Italy)", MACHINE_SUPPORTS_SAVE )

View File

@ -715,6 +715,7 @@ Notes:
/Shin Nihon Prowrestling Toukon /FL0 & FL1 have pin55 raised from PCB.
\Retsuden 4 Arcade Edition (Japan, Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K.
World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped)
World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1 not dumped, FL1.2D sums E8F1 B057
World Kicks (Asia, WK2 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK2
World Kicks (US, WK3 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK3
@ -9686,10 +9687,10 @@ ROM_END
/* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS )
/* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Shootout Pool The Medal Version B / Shootout Pool Prize Version B (Export, Japan)", GAME_FLAGS )
/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS )
/* 0150 */ GAME( 2003, mtkob2, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K3 2nd (USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0150 */ GAME( 2003, mtkob2, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K3 2nd (World)", GAME_FLAGS ) // not for Japan
/* 0158 */ GAME( 2005, mushi2k5, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K5 1st (Japan)", GAME_FLAGS )
/* 0164 */ GAME( 2005, mushi2eo, mushik2e, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001) (USA, EXP, AUS)", GAME_FLAGS )
/* 0164 */ GAME( 2005, mushik2e, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001) (USA, EXP, AUS)", GAME_FLAGS )
/* 0164 */ GAME( 2005, mushi2eo, mushik2e, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001) (World)", GAME_FLAGS ) // not for Japan
/* 0164 */ GAME( 2005, mushik2e, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001) (World)", GAME_FLAGS ) // not for Japan
/* 0166 */ GAME( 2006, zunou, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Touch De Zunou (Japan, Rev A)", GAME_FLAGS )
/* 0170-01*/GAME( 2007,manicpnc, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Manic Panic Ghosts! (USA, Export)", GAME_FLAGS )
/* 0170 */ GAME( 2007, pokasuka, manicpnc, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Pokasuka Ghost! (Japan)", GAME_FLAGS )
@ -9703,15 +9704,15 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
/* 840-xxxxx (Sega Naomi 2 cart games) */
/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Wild Riders", GAME_FLAGS )
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (Rev B) (USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan
/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS )
/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS )
/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS )
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan
/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS )
/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS )
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (USA, EXP, KOR, AUS)", GAME_FLAGS )
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan
/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan)", GAME_FLAGS )
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS )
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS )

View File

@ -528,7 +528,7 @@ WRITE_LINE_MEMBER(pcw16_state::pcw16_keyboard_callback)
{
int data;
data = m_keyboard->read(machine().driver_data()->generic_space(), 0);
data = m_keyboard->read(machine().dummy_space(), 0);
if (data)
{

View File

@ -118,6 +118,7 @@ public:
DECLARE_WRITE8_MEMBER(quizpun2_soundlatch_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
void log_protection(address_space &space, const char *warning);
virtual void machine_reset() override;
virtual void video_start() override;
uint32_t screen_update_quizpun2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -213,11 +214,10 @@ void quizpun2_state::machine_reset()
prot.addr = 0;
}
static void log_protection( address_space &space, const char *warning )
void quizpun2_state::log_protection( address_space &space, const char *warning )
{
quizpun2_state *state = space.machine().driver_data<quizpun2_state>();
struct prot_t &prot = state->m_prot;
state->logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
struct prot_t &prot = m_prot;
logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
prot.state,
prot.wait_param,
prot.param,

View File

@ -323,7 +323,7 @@ WRITE_LINE_MEMBER(r2dtank_state::display_enable_changed)
WRITE8_MEMBER(r2dtank_state::pia_comp_w)
{
device_t *device = machine().device("pia_main");
downcast<pia6821_device *>(device)->write(machine().driver_data()->generic_space(), offset, ~data);
downcast<pia6821_device *>(device)->write(machine().dummy_space(), offset, ~data);
}

View File

@ -5,7 +5,8 @@
Saitek RISC 2500
TODO:
- sound
- Sound is too short and high pitch, better when you underclock the cpu.
Is cpu cycle timing wrong? or waitstate on p1000_w?
******************************************************************************/
@ -14,6 +15,8 @@
#include "cpu/arm/arm.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "risc2500.lh"
@ -26,6 +29,7 @@ public:
m_maincpu(*this, "maincpu"),
m_ram(*this, "ram"),
m_nvram(*this, "nvram"),
m_dac(*this, "dac"),
m_inputs(*this, "P%u", 0)
{ }
@ -44,6 +48,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram;
required_device<dac_byte_interface> m_dac;
required_ioport_array<8> m_inputs;
uint32_t m_p1000;
@ -237,7 +242,9 @@ WRITE32_MEMBER(risc2500_state::p1000_w)
{
memset(m_vram, 0, sizeof(m_vram));
}
m_dac->write(data >> 28 & 3); // Speaker
m_p1000 = data;
}
@ -273,12 +280,12 @@ static ADDRESS_MAP_START(risc2500_mem, AS_PROGRAM, 32, risc2500_state )
AM_RANGE( 0x00000000, 0x0001ffff ) AM_RAM
AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(disable_boot_rom)
AM_RANGE( 0x01000000, 0x01000003 ) AM_READWRITE(p1000_r, p1000_w)
AM_RANGE( 0x02000000, 0x0201ffff ) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE( 0x02000000, 0x0203ffff ) AM_ROM AM_REGION("maincpu", 0)
ADDRESS_MAP_END
static MACHINE_CONFIG_START( risc2500, risc2500_state )
MCFG_CPU_ADD("maincpu", ARM, 14000000) // VY86C010
MCFG_CPU_ADD("maincpu", ARM, XTAL_28_322MHz / 2) // VY86C010
MCFG_CPU_PROGRAM_MAP(risc2500_mem)
MCFG_ARM_COPRO(ARM_COPRO_TYPE_VL86C020)
MCFG_CPU_PERIODIC_INT_DRIVER(risc2500_state, irq1_line_hold, 250)
@ -300,16 +307,32 @@ static MACHINE_CONFIG_START( risc2500, risc2500_state )
MCFG_RAM_EXTRA_OPTIONS("128K, 256K, 512K, 1M, 2M")
MCFG_NVRAM_ADD_NO_FILL("nvram")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_SOUND_ADD("dac", DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
/* ROM definitions */
ROM_START( risc )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE )
ROM_SYSTEM_BIOS( 0, "v104", "v1.04" )
ROMX_LOAD("s2500_v104.bin", 0x000000, 0x020000, CRC(84a06178) SHA1(66f4d9f53de6da865a3ebb4af1d6a3e245c59a3c), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "v103", "v1.03" )
ROMX_LOAD("s2500_v103.bin", 0x000000, 0x020000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc), ROM_BIOS(2))
ROM_END
ROM_START( montreux )
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE )
ROM_SYSTEM_BIOS( 0, "v100", "v1.00" )
ROMX_LOAD("montreux.bin", 0x000000, 0x040000, CRC(db374cf3) SHA1(44dd60d56779084326c3dfb41d2137ebf0b4e0ac), ROM_BIOS(1))
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
CONS( 1992, risc, 0, 0, risc2500, risc2500, driver_device, 0, "Saitek", "RISC 2500", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_CLICKABLE_ARTWORK )
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
CONS( 1992, risc, 0, 0, risc2500, risc2500, driver_device, 0, "Saitek" , "RISC 2500", MACHINE_CLICKABLE_ARTWORK )
CONS( 1995, montreux, 0, 0, risc2500, risc2500, driver_device, 0, "Mephisto", "Montreux" , MACHINE_CLICKABLE_ARTWORK )

View File

@ -51,6 +51,10 @@ WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w)
m_sound_nmi_mask = data & 1;
}
WRITE8_MEMBER(rollrace_state::coin_w)
{
machine().bookkeeping().coin_counter_w(offset, data);
}
static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@ -72,7 +76,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w)
AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_w)
AM_RANGE(0xfc02, 0xfc03) AM_WRITENOP /* coin counters */
AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coin_w)
AM_RANGE(0xfc04, 0xfc05) AM_WRITE(charbank_w)
AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w)
ADDRESS_MAP_END

View File

@ -1386,18 +1386,17 @@ Note: on screen copyright is (c)1998 Coinmaster.
/*------------------------------
update timer
------------------------------*/
static void uPD71054_update_timer( running_machine &machine, device_t *cpu, int no )
void seta_state::uPD71054_update_timer(device_t *cpu, int no)
{
seta_state *state = machine.driver_data<seta_state>();
uPD71054_state *uPD71054 = &state->m_uPD71054;
uPD71054_state *uPD71054 = &m_uPD71054;
uint16_t max = uPD71054->max[no]&0xffff;
if( max != 0 ) {
attotime period = attotime::from_hz(machine.device("maincpu")->unscaled_clock()) * (16 * max);
attotime period = attotime::from_hz(m_maincpu->unscaled_clock()) * (16 * max);
uPD71054->timer[no]->adjust( period, no );
} else {
uPD71054->timer[no]->adjust( attotime::never, no);
state->logerror( "CPU #0 PC %06X: uPD71054 error, timer %d duration is 0\n",
logerror( "CPU #0 PC %06X: uPD71054 error, timer %d duration is 0\n",
(cpu != nullptr) ? cpu->safe_pc() : -1, no );
}
}
@ -1410,7 +1409,7 @@ static void uPD71054_update_timer( running_machine &machine, device_t *cpu, int
TIMER_CALLBACK_MEMBER(seta_state::uPD71054_timer_callback)
{
m_maincpu->set_input_line(4, HOLD_LINE );
uPD71054_update_timer( machine(), nullptr, param );
uPD71054_update_timer( nullptr, param );
}
@ -1459,7 +1458,7 @@ WRITE16_MEMBER(seta_state::timer_regs_w)
uPD71054->max[offset] = (uPD71054->max[offset]&0x00ff)+(data<<8);
}
if( uPD71054->max[offset] != 0 ) {
uPD71054_update_timer( machine(), &space.device(), offset );
uPD71054_update_timer( &space.device(), offset );
}
break;
case 0x0003:

View File

@ -1050,4 +1050,4 @@ ROM_START(ti99_4p)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP( 1996, ti99_4p, 0, 0, ti99_4p_60hz, ti99_4p, driver_device, 0, "System-99 User Group", "SGCPU (aka TI-99/4P)" , 0 )
COMP( 1996, ti99_4p, 0, 0, ti99_4p_60hz, ti99_4p, driver_device, 0, "System-99 User Group", "SGCPU (aka TI-99/4P)" , MACHINE_SUPPORTS_SAVE )

View File

@ -1244,9 +1244,9 @@ ROM_START(ti99_4ev)
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1979, ti99_4, 0, 0, ti99_4_60hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (US)", 0)
COMP( 1980, ti99_4e, ti99_4, 0, ti99_4_50hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (Europe)", 0)
COMP( 1981, ti99_4a, 0, 0, ti99_4a_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (US)", 0)
COMP( 1981, ti99_4ae, ti99_4a, 0, ti99_4a_50hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (Europe)", 0)
COMP( 1983, ti99_4qi, ti99_4a, 0, ti99_4qi_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4QI Home Computer (US)", 0)
COMP( 1994, ti99_4ev, ti99_4a, 0, ti99_4ev_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer with EVPC", 0)
COMP( 1979, ti99_4, 0, 0, ti99_4_60hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (US)", MACHINE_SUPPORTS_SAVE)
COMP( 1980, ti99_4e, ti99_4, 0, ti99_4_50hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (Europe)", MACHINE_SUPPORTS_SAVE)
COMP( 1981, ti99_4a, 0, 0, ti99_4a_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (US)", MACHINE_SUPPORTS_SAVE)
COMP( 1981, ti99_4ae, ti99_4a, 0, ti99_4a_50hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (Europe)", MACHINE_SUPPORTS_SAVE)
COMP( 1983, ti99_4qi, ti99_4a, 0, ti99_4qi_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4QI Home Computer (US)", MACHINE_SUPPORTS_SAVE)
COMP( 1994, ti99_4ev, ti99_4a, 0, ti99_4ev_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer with EVPC", MACHINE_SUPPORTS_SAVE)

View File

@ -912,5 +912,5 @@ ROM_END
#define rom_ti99_8e rom_ti99_8
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP( 1983, ti99_8, 0, 0, ti99_8_60hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (US)" , 0)
COMP( 1983, ti99_8e, ti99_8, 0, ti99_8_50hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (Europe)" , 0 )
COMP( 1983, ti99_8, 0, 0, ti99_8_60hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (US)" , MACHINE_SUPPORTS_SAVE )
COMP( 1983, ti99_8e, ti99_8, 0, ti99_8_50hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (Europe)" , MACHINE_SUPPORTS_SAVE )

View File

@ -425,17 +425,15 @@ command 1 - stop?
*/
static void tumbleb2_playmusic( device_t *device )
void tumbleb_state::tumbleb2_playmusic(okim6295_device *oki)
{
tumbleb_state *state = device->machine().driver_data<tumbleb_state>();
okim6295_device *oki = downcast<okim6295_device *>(device);
int status = oki->read_status();
if (state->m_music_is_playing)
if (m_music_is_playing)
{
if (!BIT(status, 3))
{
oki->write_command(0x80 | state->m_music_command);
oki->write_command(0x80 | m_music_command);
oki->write_command(0x00 | 0x82);
}
}
@ -2190,15 +2188,13 @@ static MACHINE_CONFIG_START( fncywld, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,fncywld)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.20)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.20)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_OKIM6295_ADD("oki", 1023924, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -2252,21 +2248,18 @@ static MACHINE_CONFIG_START( htchctch, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,tumblepb)
/* sound hardware - same as hyperpac */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
/* on at least hatch catch, cookie & bibi and choky choky the YM2151 clock is connected
directly to the Z80 clock so the speed should match */
MCFG_YM2151_ADD("ymsnd", 15000000/4)
/* on at least hatch catch, cookie & bibi and choky choky the YM2151 clock is connected directly to the Z80 clock so the speed should match */
MCFG_YM2151_ADD("ymsnd", 15000000/4)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
/* correct for cookie & bibi and hatch catch, (4096000/4) */
MCFG_OKIM6295_ADD("oki", 1024000, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
@ -2275,12 +2268,13 @@ static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( chokchok, htchctch )
MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
MCFG_OKIM6295_REPLACE("oki", 3579545/4, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
// some PCBs have left factory with a 3.57mhz while some have a 4.096 which matches other games, assuming the former are factory errors
// TODO: MAME sound cores doesn't handle on-the-fly sound frequency changes, I guess best action here is to make the sound chip a slot option,
// assuming it's worth emulating a factory error in the first place.
MCFG_OKIM6295_REPLACE("oki", 4096000/4, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cookbib_mcu, htchctch )
@ -2301,8 +2295,7 @@ static MACHINE_CONFIG_DERIVED( bcstory, htchctch )
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( semibase, bcstory )
@ -2323,8 +2316,7 @@ static MACHINE_CONFIG_DERIVED( metlsavr, cookbib )
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@ -2364,13 +2356,12 @@ static MACHINE_CONFIG_START( suprtrio, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,suprtrio)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_OKIM6295_ADD("oki", 875000, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pangpang, tumbleb_state )

View File

@ -128,6 +128,7 @@ public:
DECLARE_DRIVER_INIT(vcombat);
DECLARE_MACHINE_RESET(vcombat);
DECLARE_MACHINE_RESET(shadfgtr);
uint32_t update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index);
uint32_t screen_update_vcombat_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_vcombat_aux(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
@ -137,14 +138,13 @@ public:
required_device<dac_word_interface> m_dac;
};
static uint32_t update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
uint32_t vcombat_state::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
{
vcombat_state *state = screen.machine().driver_data<vcombat_state>();
int y;
const rgb_t *const pens = state->m_tlc34076->get_pens();
const rgb_t *const pens = m_tlc34076->get_pens();
uint16_t *m68k_buf = state->m_m68k_framebuffer[(*state->m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
uint16_t *i860_buf = state->m_i860_framebuffer[index][0].get();
uint16_t *m68k_buf = m_m68k_framebuffer[(*m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
uint16_t *i860_buf = m_i860_framebuffer[index][0].get();
/* TODO: It looks like the leftmost chunk of the ground should really be on the right side? */
/* But the i860 draws the background correctly, so it may be an original game issue. */

View File

@ -93,8 +93,8 @@ void videopin_state::machine_reset()
/* both output latches are cleared on reset */
out1_w(machine().driver_data()->generic_space(), 0, 0);
out2_w(machine().driver_data()->generic_space(), 0, 0);
out1_w(machine().dummy_space(), 0, 0);
out2_w(machine().dummy_space(), 0, 0);
}

View File

@ -477,7 +477,7 @@ READ_LINE_MEMBER( vip_state::ef4_r )
WRITE_LINE_MEMBER( vip_state::q_w )
{
// sound output
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, state);
m_beeper->write(machine().dummy_space(), NODE_01, state);
// Q led
output().set_led_value(LED_Q, state);
@ -620,7 +620,7 @@ void vip_state::machine_start()
output().set_led_value(LED_POWER, 1);
// reset sound
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, 0);
m_beeper->write(machine().dummy_space(), NODE_01, 0);
// state saving
save_item(NAME(m_8000));

View File

@ -165,6 +165,8 @@ public:
DECLARE_WRITE32_MEMBER(model2_5881prot_w);
int first_read;
void model2_3d_init(uint16_t *texture_rom);
void geo_init(uint32_t *polygon_rom);
DECLARE_READ32_MEMBER(maxx_r);
DECLARE_WRITE32_MEMBER(mode_w);
DECLARE_WRITE32_MEMBER(model2o_tex_w0);
@ -396,8 +398,3 @@ struct quad_m2
uint16_t texheader[4];
uint8_t luma;
};
/*----------- defined in video/model2.c -----------*/
void model2_3d_set_zclip( running_machine &machine, uint8_t clip );

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont, Ville Linde
#include "cpu/powerpc/ppc.h"
#include "video/poly.h"
#include "bus/scsi/scsi.h"
#include "machine/53c810.h"
@ -72,7 +73,7 @@ public:
m_step20_with_old_real3d = false;
}
required_device<cpu_device> m_maincpu;
required_device<ppc_device> m_maincpu;
optional_device<lsi53c810_device> m_lsi53c810;
required_device<cpu_device> m_audiocpu;
required_device<scsp_device> m_scsp1;
@ -198,12 +199,14 @@ public:
DECLARE_WRITE64_MEMBER(mpc105_data_w);
DECLARE_READ64_MEMBER(mpc105_reg_r);
DECLARE_WRITE64_MEMBER(mpc105_reg_w);
void mpc105_init();
DECLARE_READ64_MEMBER(mpc106_addr_r);
DECLARE_WRITE64_MEMBER(mpc106_addr_w);
DECLARE_READ64_MEMBER(mpc106_data_r);
DECLARE_WRITE64_MEMBER(mpc106_data_w);
DECLARE_READ64_MEMBER(mpc106_reg_r);
DECLARE_WRITE64_MEMBER(mpc106_reg_w);
void mpc106_init();
DECLARE_READ64_MEMBER(scsi_r);
DECLARE_WRITE64_MEMBER(scsi_w);
DECLARE_READ64_MEMBER(real3d_dma_r);
@ -222,6 +225,8 @@ public:
DECLARE_WRITE16_MEMBER(model3snd_ctrl);
uint32_t pci_device_get_reg();
void pci_device_set_reg(uint32_t value);
void configure_fast_ram();
void interleave_vroms();
DECLARE_DRIVER_INIT(genprot);
DECLARE_DRIVER_INIT(lemans24);
DECLARE_DRIVER_INIT(vs298);

View File

@ -37,6 +37,7 @@ public:
DECLARE_WRITE8_MEMBER(fake_d800_w);
DECLARE_WRITE8_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
DECLARE_WRITE8_MEMBER(coin_w);
DECLARE_WRITE8_MEMBER(charbank_w);
DECLARE_WRITE8_MEMBER(bkgpen_w);
DECLARE_WRITE8_MEMBER(spritebank_w);

View File

@ -250,6 +250,7 @@ public:
uint32_t screen_update_seta_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof_seta_buffer_sprites(screen_device &screen, bool state);
void screen_eof_setaroul(screen_device &screen, bool state);
void uPD71054_update_timer(device_t *cpu, int no);
INTERRUPT_GEN_MEMBER(wrofaero_interrupt);
TIMER_CALLBACK_MEMBER(uPD71054_timer_callback);
TIMER_CALLBACK_MEMBER(keroppi_prize_hop_callback);

View File

@ -211,6 +211,7 @@ public:
DECLARE_WRITE8_MEMBER( ti83pse_ctimer3_count_w );
void ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram);
void update_ti85_memory ();
void update_ti83p_memory ();
void update_ti83pse_memory ();

View File

@ -128,6 +128,7 @@ public:
void tumbleb_draw_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pf1x_offs, int pf1y_offs, int pf2x_offs, int pf2y_offs);
void tumbleb2_set_music_bank( int bank );
void tumbleb2_play_sound( okim6295_device *oki, int data );
void tumbleb2_playmusic(okim6295_device *oki);
void process_tumbleb2_music_command( okim6295_device *oki, int data );
void tumblepb_gfx_rearrange(int rgn);
void suprtrio_decrypt_code();

View File

@ -157,48 +157,55 @@
<element name="black"><rect><color red="0.64" green="0.08" blue="0.11" /></rect></element>
<element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></rect></element>
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_1"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_newgame"> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_level"> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_color"> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_selfplay"> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_referee"> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_random"> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_hint"> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_white"> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_black"> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_king" > <text string="&#x2654;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_queen" > <text string="&#x2655;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_rook" > <text string="&#x2656;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_bishop" > <text string="&#x2657;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_knight" > <text string="&#x2658;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_pawn" > <text string="&#x2659;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_change"> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <text string="BOARD" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_halt"> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_check"> <text string="CHECK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_your"> <text string="YOUR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_cms"> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_b1"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b2"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b3"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b4"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b5"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b6"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b7"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b8"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_chessmaster"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_newgame"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_level"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_color"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_selfplay"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_referee"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_random"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_hint"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_white"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_black"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2654;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2655;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2656;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2657;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2658;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_pawn" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="&#x2659;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_change"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_halt"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_check"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHECK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_your"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="YOUR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_cms"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="piece" defstate="0">
<text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
@ -557,23 +564,23 @@
<bezel element="text_rook"> <bounds x="95" y="39" width="4" height="4" /></bezel>
<bezel element="text_queen"> <bounds x="95" y="46" width="4" height="4" /></bezel>
<bezel element="text_king"> <bounds x="95" y="53" width="4" height="4" /></bezel>
<bezel element="text_white"> <bounds x="88" y="61" width="10" height="1.8" /></bezel>
<bezel element="text_black"> <bounds x="88" y="68" width="10" height="1.8" /></bezel>
<bezel element="text_white"> <bounds x="90" y="61" width="9" height="1.8" /></bezel>
<bezel element="text_black"> <bounds x="90" y="68" width="9" height="1.8" /></bezel>
<bezel element="text_check"> <bounds x="91" y="6" width="10" height="1.8" /></bezel>
<bezel element="text_your"> <bounds x="98" y="6" width="8" height="1.8" /></bezel>
<bezel element="text_your"> <bounds x="99" y="6" width="6" height="1.8" /></bezel>
<bezel element="text_cms"> <bounds x="104" y="6" width="8" height="1.8" /></bezel>
<bezel element="text_change"> <bounds x="95.3" y="73" width="12" height="1.8" /></bezel>
<bezel element="text_board"> <bounds x="103" y="73" width="10" height="1.8" /></bezel>
<bezel element="text_1"><bounds x="111" y="19" width="2" height="1.8" /></bezel>
<bezel element="text_2"><bounds x="111" y="26" width="2" height="1.8" /></bezel>
<bezel element="text_3"><bounds x="111" y="33" width="2" height="1.8" /></bezel>
<bezel element="text_4"><bounds x="111" y="40" width="2" height="1.8" /></bezel>
<bezel element="text_5"><bounds x="111" y="47" width="2" height="1.8" /></bezel>
<bezel element="text_6"><bounds x="111" y="54" width="2" height="1.8" /></bezel>
<bezel element="text_7"><bounds x="111" y="62" width="2" height="1.8" /></bezel>
<bezel element="text_8"><bounds x="111" y="69" width="2" height="1.8" /></bezel>
<bezel element="text_b1"><bounds x="111" y="19" width="2" height="1.8" /></bezel>
<bezel element="text_b2"><bounds x="111" y="26" width="2" height="1.8" /></bezel>
<bezel element="text_b3"><bounds x="111" y="33" width="2" height="1.8" /></bezel>
<bezel element="text_b4"><bounds x="111" y="40" width="2" height="1.8" /></bezel>
<bezel element="text_b5"><bounds x="111" y="47" width="2" height="1.8" /></bezel>
<bezel element="text_b6"><bounds x="111" y="54" width="2" height="1.8" /></bezel>
<bezel element="text_b7"><bounds x="111" y="62" width="2" height="1.8" /></bezel>
<bezel element="text_b8"><bounds x="111" y="69" width="2" height="1.8" /></bezel>
<bezel name="led_i1" element="led"> <bounds x="100" y="19" width="2" height="2" /></bezel>
<bezel name="led_i2" element="led"> <bounds x="100" y="26" width="2" height="2" /></bezel>

View File

@ -167,42 +167,42 @@
<element name="black"><rect><color red="0.44" green="0.08" blue="0.01" /></rect></element>
<element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></rect></element>
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_1"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_diamond"> <text string="diamond" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_monitor"> <text string="MONITOR" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_view"> <text string="VIEW" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <text string="RESET" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_selection"> <text string="SELECTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_dialogue"> <text string="DIALOGUE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_function"> <text string="FUNCTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_notation"> <text string="NOTATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_parameter"> <text string="PARAMETER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_information"> <text string="INFORMATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <text string="BOARD" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_match"> <text string="MATCH" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_time"> <text string="TIME" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <text string="ENTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_playmode"> <text string="PLAYMODE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_fore"> <text string="MOVE FORE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_back"> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_chessmaster"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_diamond"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="diamond" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_monitor"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MONITOR" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_view"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="VIEW" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_selection"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="SELECTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_dialogue"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="DIALOGUE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_function"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="FUNCTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_notation"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="NOTATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_parameter"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="PARAMETER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_information"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="INFORMATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BOARD" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_match"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MATCH" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_time"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="TIME" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="ENTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_playmode"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="PLAYMODE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_fore"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE FORE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_back"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="piece" defstate="0">
<text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>

View File

@ -154,50 +154,50 @@
</rect>
</element>
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_on"> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_off"> <text string="OFF" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_newgame"> <text string="NEW GAME" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_play"> <text string="PLAY" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_back"> <text string="BACK" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_left"> <text string="&#x2190;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_right"> <text string="&#x2192;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_menu"> <text string="MENU" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_up"> <text string="&#x2191;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_down"> <text string="&#x2193;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p1"> <text string="&#x265a;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p2"> <text string="&#x265b;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p3"> <text string="&#x265c;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p4"> <text string="&#x265d;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p5"> <text string="&#x265e;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p6"> <text string="&#x265f;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="sym_colon"> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
<element name="sym_left"> <text string="&#x2190;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_right"> <text string="&#x2192;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p1"> <text string="&#x265a;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p2"> <text string="&#x265b;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p3"> <text string="&#x265c;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p4"> <text string="&#x265d;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p5"> <text string="&#x265e;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p6"> <text string="&#x265f;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_black"> <text string="&#x25cf;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_white"> <text string="&#x25cb;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="text_1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_on"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_off"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="OFF" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_newgame"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="NEW GAME" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_play"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="PLAY" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_back"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="BACK" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_left"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2190;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_right"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2192;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_menu"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="MENU" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_up"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2191;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_down"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x2193;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265a;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265b;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265c;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265d;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265e;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="&#x265f;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="sym_colon"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
<element name="sym_left"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x2190;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_right"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x2192;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p1"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265a;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p2"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265b;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p3"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265c;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p4"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265d;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p5"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265e;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p6"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x265f;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_white"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="&#x25cb;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_black"> <text string="&#x25cf;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
<element name="black"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element>
@ -463,6 +463,8 @@
<!-- LCD panel -->
<screen index="0"><bounds x="95" y="4.5" width="30" height="4" /></screen>
<bezel name="sym12" element="sym_colon" ><bounds x="107.0" y="9" width="1.5" height="3" /></bezel>
<bezel name="sym13" element="sym_colon" ><bounds x="119.2" y="9" width="1.5" height="3" /></bezel>
<bezel name="digit11" element="digit" ><bounds x="95.9" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit10" element="digit" ><bounds x="98.35" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit9" element="digit" ><bounds x="100.8" y="9" width="1.6" height="3" /></bezel>
@ -475,8 +477,6 @@
<bezel name="digit2" element="digit" ><bounds x="117.95" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit1" element="digit" ><bounds x="120.4" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit0" element="digit" ><bounds x="122.85" y="9" width="1.6" height="3" /></bezel>
<bezel name="sym12" element="sym_colon" ><bounds x="107.0" y="9" width="1.5" height="3" /></bezel>
<bezel name="sym13" element="sym_colon" ><bounds x="119.2" y="9" width="1.5" height="3" /></bezel>
<bezel name="sym1" element="sym_right" > <bounds x="121.60" y="12.7" width="3" height="3" /></bezel>
<bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.5" width="5" height="3" /></bezel>

View File

@ -700,7 +700,7 @@ void midway_ioasic_device::ioasic_reset()
void midway_ioasic_device::update_ioasic_irq()
{
uint16_t fifo_state = fifo_status_r(machine().driver_data()->generic_space(),0);
uint16_t fifo_state = fifo_status_r(machine().dummy_space(), 0);
uint16_t irqbits = 0x2000;
uint8_t new_state;

View File

@ -252,7 +252,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(nitedrvr_state::nitedrvr_crash_toggle_callback)
if (m_crash_en && m_crash_data_en)
{
m_crash_data--;
address_space &space = machine().driver_data()->generic_space();
address_space &space = machine().dummy_space();
m_discrete->write(space, NITEDRVR_BANG_DATA, m_crash_data); // Crash Volume
if (!m_crash_data)
m_crash_data_en = 0; // Done counting?

View File

@ -134,12 +134,11 @@ void ti85_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
}
}
inline void ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram)
void ti85_state::ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram)
{
ti85_state *state = space.machine().driver_data<ti85_state>();
static const char *const tag[] = {"bank1", "bank2", "bank3", "bank4"};
state->membank(tag[bank&3])->set_base(base + (0x4000 * page));
membank(tag[bank&3])->set_base(base + (0x4000 * page));
if (is_ram)
space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, tag[bank&3]);

View File

@ -155,7 +155,7 @@ WRITE8_MEMBER( ticket_dispenser_device::write )
WRITE_LINE_MEMBER( ticket_dispenser_device::motor_w )
{
write(machine().driver_data()->generic_space(), 0, state ? m_active_bit : 0);
write(machine().dummy_space(), 0, state ? m_active_bit : 0);
}

View File

@ -693,13 +693,13 @@ TIMER_CALLBACK_MEMBER(joust2_state::joust2_deferred_snd_cmd_w)
WRITE_LINE_MEMBER(joust2_state::joust2_pia_3_cb1_w)
{
m_joust2_current_sound_data = (m_joust2_current_sound_data & ~0x100) | ((state << 8) & 0x100);
m_cvsd_sound->write(machine().driver_data()->generic_space(), 0, m_joust2_current_sound_data);
m_cvsd_sound->write(machine().dummy_space(), 0, m_joust2_current_sound_data);
}
WRITE8_MEMBER(joust2_state::joust2_snd_cmd_w)
{
m_joust2_current_sound_data = (m_joust2_current_sound_data & ~0xff) | (data & 0xff);
m_cvsd_sound->write(machine().driver_data()->generic_space(), 0, m_joust2_current_sound_data);
m_cvsd_sound->write(machine().dummy_space(), 0, m_joust2_current_sound_data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(joust2_state::joust2_deferred_snd_cmd_w),this), m_joust2_current_sound_data);
}

Some files were not shown because too many files have changed in this diff Show More