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/ 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_SHARED_LIBS "Build shared instead of static library" OFF)
option(BUILD_TESTS "Build tests" OFF) option(BUILD_TESTS "Build tests" OFF)
option(BUILD_PKGCONFIG "Build in PKGCONFIG mode" OFF)
set(BUILD_DEFINES "" CACHE STRING "Build defines") set(BUILD_DEFINES "" CACHE STRING "Build defines")
if(MSVC) if(MSVC)
@ -46,16 +48,25 @@ if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} STRLESS 3.1 AND ";${CMAKE_C
endif() endif()
set_target_properties(pugixml PROPERTIES VERSION 1.7 SOVERSION 1) 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 install(TARGETS pugixml EXPORT pugixml-config
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
) install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}${INSTALL_SUFFIX})
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT pugixml-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml) 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) if(BUILD_TESTS)
file(GLOB TEST_SOURCES tests/*.cpp) file(GLOB TEST_SOURCES tests/*.cpp)
file(GLOB FUZZ_SOURCES tests/fuzz_*.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 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]] [[dom]]
== Document object model == 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
#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 // Character interface macros
#ifdef PUGIXML_WCHAR_MODE #ifdef PUGIXML_WCHAR_MODE
# define PUGIXML_TEXT(t) L ## t # 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 // Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio
xml_writer_file(void* file); 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: private:
void* file; 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<char, std::char_traits<char> >& stream);
xml_writer_stream(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& 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: private:
std::basic_ostream<char, std::char_traits<char> >* narrow_stream; std::basic_ostream<char, std::char_traits<char> >* narrow_stream;
@ -1214,7 +1223,7 @@ namespace pugi
explicit xpath_exception(const xpath_parse_result& result); explicit xpath_exception(const xpath_parse_result& result);
// Get error message // Get error message
virtual const char* what() const throw() override; virtual const char* what() const throw() PUGIXML_OVERRIDE;
// Get parse result // Get parse result
const xpath_parse_result& result() const; const xpath_parse_result& result() const;

View File

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

View File

@ -187,7 +187,7 @@ public:
this->setg(begin, begin, end); 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()); 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 #endif
} }
virtual bool begin(xml_node& node) virtual bool begin(xml_node& node) PUGIXML_OVERRIDE
{ {
log += STR("|"); log += STR("|");
log += depthstr(); log += depthstr();
@ -810,7 +810,7 @@ struct test_walker: xml_tree_walker
return ++call_count != stop_count && xml_tree_walker::begin(node); 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 += STR("|");
log += depthstr(); log += depthstr();
@ -822,7 +822,7 @@ struct test_walker: xml_tree_walker
return ++call_count != stop_count && xml_tree_walker::end(node); 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 += STR("|");
log += depthstr(); log += depthstr();

View File

@ -213,7 +213,7 @@ struct test_writer: xml_writer
{ {
std::basic_string<pugi::char_t> contents; 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); CHECK(size % sizeof(pugi::char_t) == 0);
contents.append(static_cast<const pugi::char_t*>(data), size / sizeof(pugi::char_t)); 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 #ifndef PUGIXML_NO_EXCEPTIONS
struct throwing_writer: pugi::xml_writer 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"); throw std::runtime_error("write failed");
} }

View File

@ -9,7 +9,7 @@ struct xml_writer_string: public pugi::xml_writer
{ {
std::string contents; 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::string as_narrow() const;
std::basic_string<wchar_t> as_wide() const; std::basic_string<wchar_t> as_wide() const;

View File

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

View File

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

View File

@ -266,7 +266,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
if (m_rtc_index >= 0) if (m_rtc_index >= 0)
{ {
m_rtc->address_w(m_rtc_index--); 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 else
@ -290,7 +290,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
for (int i = 12; i >= 0; i--) for (int i = 12; i >= 0; i--)
{ {
m_rtc->address_w(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; break;

View File

@ -141,18 +141,18 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::readz)
case 0: /* RTC RAM */ case 0: /* RTC RAM */
if (addr & 0x80) if (addr & 0x80)
/* RTC RAM page register */ /* 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 else
/* RTC RAM read */ /* RTC RAM read */
reply = m_rtc->xram_r(machine().driver_data()->generic_space(),addr); reply = m_rtc->xram_r(machine().dummy_space(), addr);
break; break;
case 1: /* RTC registers */ case 1: /* RTC registers */
if (addr & 0x10) if (addr & 0x10)
/* register data */ /* register data */
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),1); reply = m_rtc->rtc_r(machine().dummy_space(), 1);
else else
/* register select */ /* register select */
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),0); reply = m_rtc->rtc_r(machine().dummy_space(), 0);
break; break;
case 2: /* IDE registers set 1 (CS1Fx) */ case 2: /* IDE registers set 1 (CS1Fx) */
if (m_tms9995_mode ? (!(addr & 1)) : (addr & 1)) if (m_tms9995_mode ? (!(addr & 1)) : (addr & 1))
@ -212,18 +212,18 @@ WRITE8_MEMBER(nouspikel_ide_interface_device::write)
case 0: /* RTC RAM */ case 0: /* RTC RAM */
if (addr & 0x80) if (addr & 0x80)
/* RTC RAM page register */ /* 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 else
/* RTC RAM write */ /* RTC RAM write */
m_rtc->xram_w(machine().driver_data()->generic_space(),addr, data); m_rtc->xram_w(machine().dummy_space(), addr, data);
break; break;
case 1: /* RTC registers */ case 1: /* RTC registers */
if (addr & 0x10) if (addr & 0x10)
/* register data */ /* register data */
m_rtc->rtc_w(machine().driver_data()->generic_space(),1, data); m_rtc->rtc_w(machine().dummy_space(), 1, data);
else else
/* register select */ /* register select */
m_rtc->rtc_w(machine().driver_data()->generic_space(),0, data); m_rtc->rtc_w(machine().dummy_space(), 0, data);
break; break;
case 2: /* IDE registers set 1 (CS1Fx) */ 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_sry));
save_item(NAME(m_a14)); save_item(NAME(m_a14));
save_item(NAME(m_dbin_level)); 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() void vaquerro_device::device_reset()

View File

@ -238,7 +238,7 @@ private:
// DRAM access // DRAM access
bool m_skdrcs; bool m_skdrcs;
// Holds the decoding result; essentially names the selected line // Indicates the UP level of the GROMCLK
bool m_gromclk_up; bool m_gromclk_up;
// Have we got the upper word of the address? // 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) 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), : 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_gromraddr_LSB(false),
m_extra_waitstates(false), m_ready_asserted(false), m_read_mode(false), m_grom_address(0),
m_debug_no_ws(false), m_geneve_mode(false), m_direct_mode(false), m_video_waitstates(false),
m_cartridge_size(0), m_cartridge_secondpage(false), m_extra_waitstates(false),
m_cartridge6_writable(false), m_cartridge7_writable(false), m_ready_asserted(false),
m_turbo(false), m_genmod(false), m_timode(false), m_pfm_mode(0), m_read_mode(false),
m_pfm_bank(0), m_pfm_output_enable(false), m_sram_mask(0), m_sram_val(0), m_debug_no_ws(false),
m_ready(*this), m_waitcount(0), m_ext_waitcount(0), m_geneve_mode(false),
m_clock(nullptr), m_cpu(nullptr), m_pfm512(nullptr), m_direct_mode(false),
m_pfm512a(nullptr), m_sound(nullptr), m_keyboard(nullptr), m_cartridge_size(0),
m_video(nullptr), m_peribox(nullptr), m_sram(*this, SRAM_PAR_TAG), m_dram(*this, DRAM_PAR_TAG) 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; m_eprom = nullptr;
} }
@ -1384,19 +1407,7 @@ WRITE_LINE_MEMBER( geneve_mapper_device::pfm_output_enable )
void geneve_mapper_device::device_start() 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_ready.resolve();
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
m_geneve_mode = false; m_geneve_mode = false;
m_direct_mode = true; m_direct_mode = true;
@ -1416,6 +1427,13 @@ void geneve_mapper_device::device_start()
save_item(NAME(m_cartridge_secondpage)); save_item(NAME(m_cartridge_secondpage));
save_item(NAME(m_cartridge6_writable)); save_item(NAME(m_cartridge6_writable));
save_item(NAME(m_cartridge7_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_mode));
save_item(NAME(m_pfm_bank)); save_item(NAME(m_pfm_bank));
save_item(NAME(m_pfm_output_enable)); save_item(NAME(m_pfm_output_enable));

View File

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

View File

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

View File

@ -152,7 +152,7 @@ static const struct { const char *mnemonic; Adr adr; } table[]={
{ nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { 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; const uint8_t *base_oprom = oprom;
int oper=*(oprom++); int oper=*(oprom++);
@ -161,42 +161,42 @@ CPU_DISASSEMBLE( sc61860 )
switch(oper&0xc0) { switch(oper&0xc0) {
case 0x80: 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; break;
default: default:
switch(oper&0xe0) { switch(oper&0xe0) {
case 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)); *(oprom++)|((oper&0x1f)<<8));
break; break;
default: default:
switch (table[oper].adr) { switch (table[oper].adr) {
case Ill: sprintf(buffer,"?%.2x",oper);break; case Ill: util::stream_format(stream,"?%02x",oper);break;
case Imp: sprintf(buffer,"%s",table[oper].mnemonic); break; case Imp: util::stream_format(stream,"%s",table[oper].mnemonic); break;
case Imm: sprintf(buffer,"%-6s%.2x",table[oper].mnemonic, *(oprom++)); break; case Imm: util::stream_format(stream,"%-6s%02x",table[oper].mnemonic, *(oprom++)); break;
case ImmW: case ImmW:
adr=(oprom[0]<<8)|oprom[1];oprom+=2; 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; break;
case Abs: case Abs:
adr=(oprom[0]<<8)|oprom[1];oprom+=2; 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; break;
case RelM: case RelM:
adr=pc-*(oprom++); adr=pc-*(oprom++);
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff); util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break; break;
case RelP: case RelP:
adr=pc+*(oprom++); adr=pc+*(oprom++);
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff); util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
break; break;
case Ptc: case Ptc:
t=*(oprom++); t=*(oprom++);
adr=(oprom[0]<<8)|oprom[1];oprom+=2; 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; break;
case Etc: case Etc:
sprintf(buffer,"%-6s",table[oper].mnemonic); util::stream_format(stream,"%-6s",table[oper].mnemonic);
/*H imm, abs */ /*H imm, abs */
/* abs */ /* abs */
break; break;
@ -208,3 +208,13 @@ CPU_DISASSEMBLE( sc61860 )
} }
return oprom - base_oprom; 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; 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; 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 */ 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) if (op == -1)
{ {
sprintf(buffer, "dw %04Xh *(invalid op)", code); util::stream_format(stream, "dw %04Xh *(invalid op)", code);
return cnt | DASMFLAG_SUPPORTED; return cnt | DASMFLAG_SUPPORTED;
} }
//buffertmp = buffer; //buffertmp = buffer;
@ -306,7 +306,7 @@ CPU_DISASSEMBLE( tms32010 )
{ {
if (*cp == '%') if (*cp == '%')
{ {
char num[20], *q; char num[20];
cp++; cp++;
switch (*cp++) switch (*cp++)
{ {
@ -323,14 +323,22 @@ CPU_DISASSEMBLE( tms32010 )
default: default:
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
} }
q = num; while (*q) *buffer++ = *q++; stream << num;
*buffer = '\0';
} }
else else
{ {
*buffer++ = *cp++; stream << *cp++;
*buffer = '\0';
} }
} }
return cnt | flags | DASMFLAG_SUPPORTED; 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; 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; 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 */ 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) if (op == -1)
{ {
sprintf(buffer,"???? dw %04Xh",code); util::stream_format(stream, "???? dw %04Xh",code);
return cnt | DASMFLAG_SUPPORTED; return cnt | DASMFLAG_SUPPORTED;
} }
//buffertmp = buffer; //buffertmp = buffer;
@ -474,7 +474,7 @@ CPU_DISASSEMBLE( tms32025 )
{ {
if (*cp == '%') if (*cp == '%')
{ {
char num[30], *q; char num[30];
cp++; cp++;
switch (*cp++) switch (*cp++)
{ {
@ -494,14 +494,22 @@ CPU_DISASSEMBLE( tms32025 )
default: default:
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
} }
q = num; while (*q) *buffer++ = *q++; stream << num;
*buffer = '\0';
} }
else else
{ {
*buffer++ = *cp++; stream << *cp++;
*buffer = '\0';
} }
} }
return cnt | flags | DASMFLAG_SUPPORTED; 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 } {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 opcode, i/*, size = 1*/;
int pos = 0; int pos = 0;
@ -387,7 +387,7 @@ CPU_DISASSEMBLE( tms7000 )
uint16_t c; uint16_t c;
int16_t d; int16_t d;
buffer += sprintf (buffer, "%s", opcodes[i].name); util::stream_format(stream, "%s", opcodes[i].name);
j=opcodes[i].operand; j=opcodes[i].operand;
@ -398,39 +398,39 @@ CPU_DISASSEMBLE( tms7000 )
case DONE: case DONE:
break; break;
case NONE: case NONE:
buffer += sprintf (buffer, "%s", of[j].opstr[k]); util::stream_format(stream, "%s", of[j].opstr[k]);
break; break;
case UI8: case UI8:
a = (uint8_t)opram[pos++]; 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; break;
case I8: case I8:
b = (int8_t)opram[pos++]; 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; break;
case UI16: case UI16:
c = (uint16_t)opram[pos++]; c = (uint16_t)opram[pos++];
c <<= 8; c <<= 8;
c += opram[pos++]; 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; break;
case I16: case I16:
d = (int16_t)opram[pos++]; d = (int16_t)opram[pos++];
d <<= 8; d <<= 8;
d += opram[pos++]; 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; break;
case PCREL: case PCREL:
b = (int8_t)opram[pos++]; b = (int8_t)opram[pos++];
sprintf(tmpbuf, "$%04X", pc+2+k+b); 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; break;
case PCABS: case PCABS:
c = (uint16_t)opram[pos++]; c = (uint16_t)opram[pos++];
c <<= 8; c <<= 8;
c += opram[pos++]; c += opram[pos++];
sprintf(tmpbuf, "$%04X", c); sprintf(tmpbuf, "$%04X", c);
buffer += sprintf (buffer, of[j].opstr[k], tmpbuf); util::stream_format(stream, of[j].opstr[k], tmpbuf);
break; break;
case TRAP: case TRAP:
vector = 0xffff - ((0xff - opcode) * 2); vector = 0xffff - ((0xff - opcode) * 2);
@ -443,6 +443,16 @@ CPU_DISASSEMBLE( tms7000 )
} }
/* No Match */ /* No Match */
strcpy (buffer, "Illegal Opcode"); stream << "Illegal Opcode";
return pos | DASMFLAG_SUPPORTED; 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; int pos = 0;
uint8_t op = oprom[pos++]; uint8_t op = oprom[pos++];
uint8_t instr = ucom4_mnemonic[op]; uint8_t instr = ucom4_mnemonic[op];
char *dst = buffer; util::stream_format(stream,"%-4s ", s_mnemonics[instr]);
dst += sprintf(dst, "%-4s ", s_mnemonics[instr]);
// opcode parameter // opcode parameter
int bits = s_bits[instr]; int bits = s_bits[instr];
@ -142,12 +141,22 @@ CPU_DISASSEMBLE(ucom4)
} }
if (bits <= 4) if (bits <= 4)
dst += sprintf(dst, "%d", param); util::stream_format(stream, "%d", param);
else if (bits <= 8) else if (bits <= 8)
dst += sprintf(dst, "$%02X", param); util::stream_format(stream, "$%02X", param);
else else
dst += sprintf(dst, "$%03X", param); util::stream_format(stream, "$%03X", param);
} }
return pos | s_flags[instr] | DASMFLAG_SUPPORTED; 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 "emu.h"
#include <stdarg.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[] = static const char *reg[] =
@ -57,20 +46,16 @@ static const char *alu[] =
#define UNSP_DASM_OK ((OP2X ? 2 : 1) | DASMFLAG_SUPPORTED) #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 op = *(uint16_t *)oprom;
uint16_t imm16 = *(uint16_t *)(oprom + 2); uint16_t imm16 = *(uint16_t *)(oprom + 2);
op = big_endianize_int16(op); op = big_endianize_int16(op);
imm16 = big_endianize_int16(imm16); imm16 = big_endianize_int16(imm16);
output = buffer;
print("<inv>");
if(OP0 < 0xf && OPA == 0x7 && OP1 < 2) 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; return UNSP_DASM_OK;
} }
@ -78,29 +63,29 @@ CPU_DISASSEMBLE( unsp )
{ {
// ALU, Indexed // 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: 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; return UNSP_DASM_OK;
// ALU, Immediate // ALU, Immediate
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x16: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: 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; return UNSP_DASM_OK;
// Pop / Interrupt return // Pop / Interrupt return
case 0x29: case 0x29:
if(op == 0x9a90) if(op == 0x9a90)
{ {
print("retf"); util::stream_format(stream, "retf");
return UNSP_DASM_OK; return UNSP_DASM_OK;
} }
else if(op == 0x9a98) else if(op == 0x9a98)
{ {
print("reti"); util::stream_format(stream, "reti");
return UNSP_DASM_OK; return UNSP_DASM_OK;
} }
else if((OPA + 1) < 8 && ((OPA + OPN) < 8)) 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; return UNSP_DASM_OK;
} }
break; break;
@ -109,7 +94,7 @@ CPU_DISASSEMBLE( unsp )
case 0x2d: case 0x2d:
if((OPA + 1) >= OPN && OPA < (OPN + 7)) 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; return UNSP_DASM_OK;
} }
break; break;
@ -119,16 +104,16 @@ CPU_DISASSEMBLE( unsp )
switch(OPN & 3) switch(OPN & 3)
{ {
case 0: 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; return UNSP_DASM_OK;
case 1: 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; return UNSP_DASM_OK;
case 2: 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; return UNSP_DASM_OK;
case 3: 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;
} }
return UNSP_DASM_OK; return UNSP_DASM_OK;
@ -139,7 +124,7 @@ CPU_DISASSEMBLE( unsp )
{ {
// ALU, Register // ALU, Register
case 0: 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; return UNSP_DASM_OK;
// ALU, 16-bit Immediate // ALU, 16-bit Immediate
@ -148,12 +133,12 @@ CPU_DISASSEMBLE( unsp )
{ {
if(OP0 != 4 && OP0 != 12) 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; return UNSP_DASM_OK;
} }
else 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; return UNSP_DASM_OK;
} }
} }
@ -161,74 +146,71 @@ CPU_DISASSEMBLE( unsp )
// ALU, Direct 16 // ALU, Direct 16
case 2: 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; return UNSP_DASM_OK;
// ALU, Direct 16 // ALU, Direct 16
case 3: 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; return UNSP_DASM_OK;
// ALU, Shifted // ALU, Shifted
default: 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; return UNSP_DASM_OK;
} }
case 0x4d: case 0x4d:
if(OPN == 3) if((OPN == 3) && (OPA == OPB))
{ util::stream_format(stream, "store [%04x], %s", imm16, reg[OPB]);
if(OPA == OPB) else
{ util::stream_format(stream, "<inv>");
print("store [%04x], %s", imm16, reg[OPB]);
}
}
return UNSP_DASM_OK; return UNSP_DASM_OK;
// ALU, Shifted // ALU, Shifted
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x56: case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: 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; return UNSP_DASM_OK;
// ALU, Rotated // ALU, Rotated
case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x66: case 0x68: case 0x69: case 0x6a: case 0x6b: case 0x6c: 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; return UNSP_DASM_OK;
// ALU, Direct 8 // 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: 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; return UNSP_DASM_OK;
// Call // Call
case 0x1f: case 0x1f:
if(OPA == 0) if(OPA == 0)
{ util::stream_format(stream, "call %06x", ((OPIMM << 16) | imm16) << 1);
print("call %06x", ((OPIMM << 16) | imm16) << 1); else
} util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; return UNSP_DASM_OK;
// Far Jump // Far Jump
case 0x2f: case 0x3f: case 0x6f: case 0x7f: case 0x2f: case 0x3f: case 0x6f: case 0x7f:
if (OPA == 7 && OP1 == 2) if (OPA == 7 && OP1 == 2)
{ util::stream_format(stream, "goto %06x", ((OPIMM << 16) | imm16) << 1);
print("goto %06x", ((OPIMM << 16) | imm16) << 1); else
} util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; return UNSP_DASM_OK;
// Multiply, Unsigned * Signed // Multiply, Unsigned * Signed
case 0x0f: case 0x0f:
if(OPN == 1 && OPA != 7) if(OPN == 1 && OPA != 7)
{ util::stream_format(stream, "mulus %s, %s", reg[OPA], reg[OPB]);
print("mulus %s, %s", reg[OPA], reg[OPB]); else
} util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; return UNSP_DASM_OK;
// Multiply, Signed * Signed // Multiply, Signed * Signed
case 0x4f: case 0x4f:
if(OPN == 1 && OPA != 7) if(OPN == 1 && OPA != 7)
{ util::stream_format(stream, "mulss %s, %s", reg[OPA], reg[OPB]);
print("mulss %s, %s", reg[OPA], reg[OPB]); else
} util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; return UNSP_DASM_OK;
// Interrupt flags // Interrupt flags
@ -238,35 +220,51 @@ CPU_DISASSEMBLE( unsp )
switch(OPIMM) switch(OPIMM)
{ {
case 0: case 0:
print("int off"); util::stream_format(stream, "int off");
break; break;
case 1: case 1:
print("int irq"); util::stream_format(stream, "int irq");
break; break;
case 2: case 2:
print("int fiq"); util::stream_format(stream, "int fiq");
break; break;
case 3: case 3:
print("int irq,fiq"); util::stream_format(stream, "int irq,fiq");
break; break;
case 8: case 8:
print("irq off"); util::stream_format(stream, "irq off");
break; break;
case 9: case 9:
print("irq on"); util::stream_format(stream, "irq on");
break; break;
case 12: case 12:
print("fiq off"); util::stream_format(stream, "fiq off");
break; break;
case 14: case 14:
print("fiq on"); util::stream_format(stream, "fiq on");
break; break;
case 37: case 37:
print("nop"); util::stream_format(stream, "nop");
break;
default:
util::stream_format(stream, "<inv>");
break; break;
} }
} }
else
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; return UNSP_DASM_OK;
} }
util::stream_format(stream, "<inv>");
return UNSP_DASM_OK; 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 GET2s(opcode) dRegs[((opcode)>>5)&0x1f]
#define GETRs(opcode) dRegs[32+((opcode)&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 flags = 0;
uint32_t opc,opc2; uint32_t opc,opc2;
@ -49,56 +49,56 @@ CPU_DISASSEMBLE( v810 )
switch(opc>>10) switch(opc>>10)
{ {
case 0x00: sprintf(buffer,"MOV %s,%s",GET1s(opc),GET2s(opc)); size=2; break; case 0x00: util::stream_format(stream,"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 0x01: util::stream_format(stream,"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 0x02: util::stream_format(stream,"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 0x03: util::stream_format(stream,"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 0x04: util::stream_format(stream,"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 0x05: util::stream_format(stream,"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 0x06: util::stream_format(stream,"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 0x07: util::stream_format(stream,"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 0x08: util::stream_format(stream,"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 0x09: util::stream_format(stream,"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 0x0a: util::stream_format(stream,"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 0x0b: util::stream_format(stream,"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 0x0c: util::stream_format(stream,"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 0x0d: util::stream_format(stream,"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 0x0e: util::stream_format(stream,"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 0x0f: util::stream_format(stream,"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 0x10: util::stream_format(stream,"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 0x11: util::stream_format(stream,"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 0x12: util::stream_format(stream,"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 0x13: util::stream_format(stream,"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 0x14: util::stream_format(stream,"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 0x15: util::stream_format(stream,"SHR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x16: sprintf(buffer,"EI"); size=2; break; case 0x16: util::stream_format(stream,"EI"); size=2; break;
case 0x17: sprintf(buffer,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break; case 0x17: util::stream_format(stream,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
case 0x18: sprintf(buffer,"TRAP %X",I5(opc)); size=2; break; case 0x18: util::stream_format(stream,"TRAP %X",I5(opc)); size=2; break;
case 0x19: sprintf(buffer,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break; case 0x19: util::stream_format(stream,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break;
case 0x1a: sprintf(buffer,"HALT"); size=2; break; case 0x1a: util::stream_format(stream,"HALT"); size=2; break;
case 0x1b: sprintf(buffer,"Unk 0x1B"); size=2; break; case 0x1b: util::stream_format(stream,"Unk 0x1B"); size=2; break;
case 0x1c: sprintf(buffer,"LDSR %s,%s",GET2s(opc),GETRs(opc));size=2; break; case 0x1c: util::stream_format(stream,"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 0x1d: util::stream_format(stream,"STSR %s,%s",GETRs(opc),GET2s(opc));size=2; break;
case 0x1e: sprintf(buffer,"DI"); size=2; break; case 0x1e: util::stream_format(stream,"DI"); size=2; break;
case 0x1f: case 0x1f:
switch(opc&0x1f) switch(opc&0x1f)
{ {
case 0x00: sprintf(buffer,"SCH0BSU"); break; case 0x00: util::stream_format(stream,"SCH0BSU"); break;
case 0x01: sprintf(buffer,"SCH0BSD"); break; case 0x01: util::stream_format(stream,"SCH0BSD"); break;
case 0x02: sprintf(buffer,"SCH1BSU"); break; case 0x02: util::stream_format(stream,"SCH1BSU"); break;
case 0x03: sprintf(buffer,"SCH1BSD"); break; case 0x03: util::stream_format(stream,"SCH1BSD"); break;
case 0x04: sprintf(buffer,"UnkS 4"); break; case 0x04: util::stream_format(stream,"UnkS 4"); break;
case 0x05: sprintf(buffer,"UnkS 5"); break; case 0x05: util::stream_format(stream,"UnkS 5"); break;
case 0x06: sprintf(buffer,"UnkS 6"); break; case 0x06: util::stream_format(stream,"UnkS 6"); break;
case 0x08: sprintf(buffer,"ORBSU"); break; case 0x08: util::stream_format(stream,"ORBSU"); break;
case 0x09: sprintf(buffer,"ANDBSU"); break; case 0x09: util::stream_format(stream,"ANDBSU"); break;
case 0x0a: sprintf(buffer,"XORBSU"); break; case 0x0a: util::stream_format(stream,"XORBSU"); break;
case 0x0b: sprintf(buffer,"MOVBSU"); break; case 0x0b: util::stream_format(stream,"MOVBSU"); break;
case 0x0c: sprintf(buffer,"ORNBSU"); break; case 0x0c: util::stream_format(stream,"ORNBSU"); break;
case 0x0d: sprintf(buffer,"ANDNBSU"); break; case 0x0d: util::stream_format(stream,"ANDNBSU"); break;
case 0x0e: sprintf(buffer,"XORNBSU"); break; case 0x0e: util::stream_format(stream,"XORNBSU"); break;
case 0x0f: sprintf(buffer,"NOTBSU"); break; case 0x0f: util::stream_format(stream,"NOTBSU"); break;
default: sprintf(buffer,"UnkBS 0x%X",opc&0x1f); break; default: util::stream_format(stream,"UnkBS 0x%X",opc&0x1f); break;
} }
size=2; size=2;
break; break;
@ -111,67 +111,77 @@ CPU_DISASSEMBLE( v810 )
case 0x26: case 0x26:
case 0x27: switch( (opc>>9) &0xf) case 0x27: switch( (opc>>9) &0xf)
{ {
case 0x0: sprintf(buffer,"BV %X",pc+D9(opc)); break; case 0x0: util::stream_format(stream,"BV %X",pc+D9(opc)); break;
case 0x1: sprintf(buffer,"BL %X",pc+D9(opc)); break; case 0x1: util::stream_format(stream,"BL %X",pc+D9(opc)); break;
case 0x2: sprintf(buffer,"BE %X",pc+D9(opc)); break; case 0x2: util::stream_format(stream,"BE %X",pc+D9(opc)); break;
case 0x3: sprintf(buffer,"BNH %X",pc+D9(opc)); break; case 0x3: util::stream_format(stream,"BNH %X",pc+D9(opc)); break;
case 0x4: sprintf(buffer,"BN %X",pc+D9(opc)); break; case 0x4: util::stream_format(stream,"BN %X",pc+D9(opc)); break;
case 0x5: sprintf(buffer,"BR %X",pc+D9(opc)); break; case 0x5: util::stream_format(stream,"BR %X",pc+D9(opc)); break;
case 0x6: sprintf(buffer,"BLT %X",pc+D9(opc)); break; case 0x6: util::stream_format(stream,"BLT %X",pc+D9(opc)); break;
case 0x7: sprintf(buffer,"BLE %X",pc+D9(opc)); break; case 0x7: util::stream_format(stream,"BLE %X",pc+D9(opc)); break;
case 0x8: sprintf(buffer,"BNV %X",pc+D9(opc)); break; case 0x8: util::stream_format(stream,"BNV %X",pc+D9(opc)); break;
case 0x9: sprintf(buffer,"BNL %X",pc+D9(opc)); break; case 0x9: util::stream_format(stream,"BNL %X",pc+D9(opc)); break;
case 0xa: sprintf(buffer,"BNE %X",pc+D9(opc)); break; case 0xa: util::stream_format(stream,"BNE %X",pc+D9(opc)); break;
case 0xb: sprintf(buffer,"BH %X",pc+D9(opc)); break; case 0xb: util::stream_format(stream,"BH %X",pc+D9(opc)); break;
case 0xc: sprintf(buffer,"BP %X",pc+D9(opc)); break; case 0xc: util::stream_format(stream,"BP %X",pc+D9(opc)); break;
case 0xd: sprintf(buffer,"NOP"); break; case 0xd: util::stream_format(stream,"NOP"); break;
case 0xe: sprintf(buffer,"BGE %X",pc+D9(opc)); break; case 0xe: util::stream_format(stream,"BGE %X",pc+D9(opc)); break;
case 0xf: sprintf(buffer,"BGT %X",pc+D9(opc)); break; case 0xf: util::stream_format(stream,"BGT %X",pc+D9(opc)); break;
} }
size=2; size=2;
break; break;
case 0x28: sprintf(buffer,"MOVEA %X, %s, %s",I16(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: sprintf(buffer,"ADDI %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: sprintf(buffer,"JR %X",pc+D26(opc,opc2));size=4; break; case 0x2a: util::stream_format(stream,"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 0x2b: util::stream_format(stream,"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 0x2c: util::stream_format(stream,"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 0x2d: util::stream_format(stream,"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 0x2e: util::stream_format(stream,"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 0x2f: util::stream_format(stream,"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 0x30: util::stream_format(stream,"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 0x31: util::stream_format(stream,"LDH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
case 0x32: sprintf(buffer,"Unk 0x32"); size=2; break; case 0x32: util::stream_format(stream,"Unk 0x32"); size=2; break;
case 0x33: sprintf(buffer,"LDW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break; case 0x33: util::stream_format(stream,"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 0x34: util::stream_format(stream,"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 0x35: util::stream_format(stream,"STH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x36: sprintf(buffer,"Unk 0x36"); size=2; break; case 0x36: util::stream_format(stream,"Unk 0x36"); size=2; break;
case 0x37: sprintf(buffer,"STW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break; case 0x37: util::stream_format(stream,"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 0x38: util::stream_format(stream,"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 0x39: util::stream_format(stream,"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 0x3a: util::stream_format(stream,"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 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 0x3c: util::stream_format(stream,"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 0x3d: util::stream_format(stream,"OUTH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
case 0x3e: case 0x3e:
switch((opc2&0xfc00)>>10) switch((opc2&0xfc00)>>10)
{ {
case 0x0: sprintf(buffer,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break; case 0x0: util::stream_format(stream,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x2: sprintf(buffer,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break; case 0x2: util::stream_format(stream,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x3: sprintf(buffer,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break; case 0x3: util::stream_format(stream,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x4: sprintf(buffer,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break; case 0x4: util::stream_format(stream,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break;
case 0x5: sprintf(buffer,"SUBF.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: sprintf(buffer,"MULF.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: sprintf(buffer,"DIVF.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: sprintf(buffer,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break; case 0xb: util::stream_format(stream,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break;
default : sprintf(buffer,"Unkf 0x%X",(opc2&0xfc00)>>10); break; default : util::stream_format(stream,"Unkf 0x%X",(opc2&0xfc00)>>10); break;
} }
size=4; size=4;
break; 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; default : size=2;
} }
return size | flags | DASMFLAG_SUPPORTED; 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 * 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 z80dasm *d;
const char *src, *ixy; const char *src, *ixy;
char *dst;
unsigned PC = pc; unsigned PC = pc;
int8_t offset = 0; int8_t offset = 0;
uint8_t op, op1 = 0; uint8_t op, op1 = 0;
@ -404,7 +403,6 @@ CPU_DISASSEMBLE( z180 )
uint32_t flags = 0; uint32_t flags = 0;
ixy = "oops!!"; ixy = "oops!!";
dst = buffer;
op = oprom[pos++]; op = oprom[pos++];
@ -447,64 +445,63 @@ CPU_DISASSEMBLE( z180 )
if( d->arguments ) if( d->arguments )
{ {
dst += sprintf(dst, "%-5s ", s_mnemonic[d->mnemonic]); util::stream_format(stream, "%-5s ", s_mnemonic[d->mnemonic]);
src = d->arguments; src = d->arguments;
while( *src ) while( *src )
{ {
switch( *src ) switch( *src )
{ {
case '?': /* illegal opcode */ case '?': /* illegal opcode */
dst += sprintf( dst, "$%02x,$%02x", op, op1); util::stream_format(stream, "$%02x,$%02x", op, op1);
break; break;
case 'A': case 'A':
ea = opram[pos] + ( opram[pos+1] << 8); ea = opram[pos] + (opram[pos+1] << 8);
pos += 2; pos += 2;
dst += sprintf( dst, "$%04X", ea ); util::stream_format(stream, "$%04X", ea);
break; break;
case 'B': /* Byte op arg */ case 'B': /* Byte op arg */
ea = opram[pos++]; ea = opram[pos++];
dst += sprintf( dst, "$%02X", ea ); util::stream_format(stream, "$%02X", ea);
break; break;
case 'N': /* Immediate 16 bit */ case 'N': /* Immediate 16 bit */
ea = opram[pos] + ( opram[pos+1] << 8 ); ea = opram[pos] + ( opram[pos+1] << 8 );
pos += 2; pos += 2;
dst += sprintf( dst, "$%04X", ea ); util::stream_format(stream, "$%04X", ea);
break; break;
case 'O': /* Offset relative to PC */ case 'O': /* Offset relative to PC */
offset = (int8_t) opram[pos++]; offset = (int8_t) opram[pos++];
dst += sprintf( dst, "$%05X", PC + offset + 2 ); util::stream_format(stream, "$%05X", PC + offset + 2);
break; break;
case 'P': /* Port number */ case 'P': /* Port number */
ea = opram[pos++]; ea = opram[pos++];
dst += sprintf( dst, "$%02X", ea ); util::stream_format(stream, "$%02X", ea);
break; break;
case 'V': /* Restart vector */ case 'V': /* Restart vector */
ea = op & 0x38; ea = op & 0x38;
dst += sprintf( dst, "$%02X", ea ); util::stream_format(stream, "$%02X", ea);
break; break;
case 'W': /* Memory address word */ case 'W': /* Memory address word */
ea = opram[pos] + ( opram[pos+1] << 8); ea = opram[pos] + (opram[pos+1] << 8);
pos += 2; pos += 2;
dst += sprintf( dst, "$%05X", ea ); util::stream_format(stream, "$%05X", ea);
break; break;
case 'X': case 'X':
offset = (int8_t) opram[pos++]; offset = (int8_t) opram[pos++];
case 'Y': 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; break;
case 'I': case 'I':
dst += sprintf( dst, "%s", ixy); util::stream_format(stream, "%s", ixy);
break; break;
default: default:
*dst++ = *src; stream << *src;
} }
src++; src++;
} }
*dst = '\0';
} }
else 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 || 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; 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 B0L (B0 & 0x0f)
#define OPH (opcode >> 4) #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_name(_value) ARG("%s", REGISTER_NAME[_value])
#define arg_cc ARG("%s", CONDITION_CODE[OPH]) #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_IM(_value) ARG(IM, _value)
#define arg_RA ARG(RA, pc + (int8_t)B0 + 2) #define arg_RA ARG(RA, pc + (int8_t)B0 + 2)
#define arg_DA ARG(DA, B0 << 8 | B1) #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 illegal util::stream_format(stream, "Illegal")
#define mnemonic(_mnemonic) dst += sprintf(dst, "%-5s", _mnemonic) #define mnemonic(_mnemonic) util::stream_format(stream, "%-5s", _mnemonic)
#define bytes(_count) oprom += (_count - 1) #define bytes(_count) oprom += (_count - 1)
#define step_over flags = DASMFLAG_STEP_OVER #define step_over flags = DASMFLAG_STEP_OVER
#define step_out flags = DASMFLAG_STEP_OUT #define step_out flags = DASMFLAG_STEP_OUT
@ -82,12 +82,11 @@ static const char *const CONDITION_CODE[16] =
DISASSEMBLER 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; const uint8_t *startrom = oprom;
uint32_t flags = 0; uint32_t flags = 0;
uint8_t opcode = *oprom++; uint8_t opcode = *oprom++;
char *dst = buffer;
int argc = 0; int argc = 0;
switch (pc) switch (pc)
@ -98,7 +97,7 @@ CPU_DISASSEMBLE( z8 )
case 0x0006: case 0x0006:
case 0x0008: case 0x0008:
case 0x000a: 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: default:
switch (opcode) switch (opcode)
{ {
@ -378,3 +377,13 @@ CPU_DISASSEMBLE( z8 )
return (oprom - startrom) | flags | DASMFLAG_SUPPORTED; 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 int ext_clock(int counter) const { return m_external_clock[counter]; } // get clock frequency
DECLARE_WRITE8_MEMBER( write ); 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 ); 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); void set_gate(int idx, int state);
DECLARE_WRITE_LINE_MEMBER( set_g1 ); 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 (!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); 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; uint8_t changed = old_val ^ m_value;
for (i=0; i<8; i++) for (i=0; i<8; i++)
if (((changed & (1<<i)) != 0)) { 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==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().driver_data()->generic_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().driver_data()->generic_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().driver_data()->generic_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().driver_data()->generic_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().driver_data()->generic_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().driver_data()->generic_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().driver_data()->generic_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)); m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm58274c_device::rtc_interrupt_cb),this));
// register for state saving // register for state saving
save_item(NAME(m_mode24));
save_item(NAME(m_day1));
save_item(NAME(m_status)); save_item(NAME(m_status));
save_item(NAME(m_control)); save_item(NAME(m_control));
save_item(NAME(m_clk_set)); save_item(NAME(m_clk_set));

View File

@ -654,6 +654,20 @@ void tms9901_device::device_start(void)
m_interrupt.resolve(); m_interrupt.resolve();
m_clock_register = 0; 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>; const device_type TMS9901 = &device_creator<tms9901_device>;

View File

@ -31,21 +31,21 @@
#include "z80dart.h" #include "z80dart.h"
//************************************************************************** //**************************************************************************
// MACROS / CONSTANTS // MACROS / CONSTANTS
//************************************************************************** //**************************************************************************
#define VERBOSE 0 #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 CHANA_TAG "cha"
#define CHANB_TAG "chb" #define CHANB_TAG "chb"
//************************************************************************** //**************************************************************************
// DEVICE DEFINITIONS // 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_t(mconfig, Z80DART_CHANNEL, "Z80 DART channel", tag, owner, clock, "z80dart_channel", __FILE__),
device_serial_interface(mconfig, *this), device_serial_interface(mconfig, *this),
m_rx_error(0), m_rx_error(0),
m_rx_fifo(-1),
m_rx_clock(0), m_rx_clock(0),
m_rx_first(0), m_rx_first(0),
m_rx_break(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) for (auto & elem : m_wr)
elem = 0; 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 // state saving
save_item(NAME(m_rr)); save_item(NAME(m_rr));
save_item(NAME(m_wr)); save_item(NAME(m_wr));
save_item(NAME(m_rx_data_fifo)); // save_item(NAME(m_rx_data_fifo));
save_item(NAME(m_rx_error_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_clock)); save_item(NAME(m_rx_clock));
save_item(NAME(m_rx_first)); save_item(NAME(m_rx_first));
save_item(NAME(m_rx_break)); save_item(NAME(m_rx_break));
@ -1001,18 +992,15 @@ uint8_t z80dart_channel::data_read()
{ {
uint8_t data = 0; uint8_t data = 0;
if (m_rx_fifo >= 0) if (!m_rx_data_fifo.empty())
{ {
// load data from the FIFO // 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 // 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 if (m_rx_data_fifo.empty())
m_rx_fifo--;
if (m_rx_fifo < 0)
{ {
// no more characters available in the FIFO // no more characters available in the FIFO
m_rr[0] &= ~ RR0_RX_CHAR_AVAILABLE; 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)); 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 // receive overrun error detected
m_rx_error |= RR1_RX_OVERRUN_ERROR; 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); m_uart->trigger_interrupt(m_index, INT_SPECIAL);
break; 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 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; m_rr[0] |= RR0_RX_CHAR_AVAILABLE;
// receive interrupt // receive interrupt

View File

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

View File

@ -84,8 +84,8 @@ void msm5232_device::device_reset()
for (i=0; i<8; i++) for (i=0; i<8; i++)
{ {
write(machine().driver_data()->generic_space(),i,0x80); write(machine().dummy_space(), i, 0x80);
write(machine().driver_data()->generic_space(),i,0x00); write(machine().dummy_space(), i, 0x00);
} }
m_noise_cnt = 0; m_noise_cnt = 0;
m_noise_rng = 1; 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_samps_per_sync(0),
m_buffer_size(0), m_buffer_size(0),
m_real_rate(0), m_real_rate(0),
m_stream(nullptr), m_stream(nullptr)
m_cpu_tag("")
{ {
for (auto & elem : m_noise_lut) 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() void nesapu_device::device_clock_changed()
{ {
calculate_rates(); calculate_rates();
@ -184,7 +176,7 @@ void nesapu_device::device_start()
{ {
create_noise(m_noise_lut, 13, NOISE_LONG); 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(); 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(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
~nesapu_device() {} ~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; virtual void device_clock_changed() override;
DECLARE_READ8_MEMBER( read ); DECLARE_READ8_MEMBER( read );
@ -78,8 +75,6 @@ private:
uint32 m_sync_times2[SYNCS_MAX2]; /* Samples per sync table */ uint32 m_sync_times2[SYNCS_MAX2]; /* Samples per sync table */
sound_stream *m_stream; sound_stream *m_stream;
const char *m_cpu_tag;
void calculate_rates(); void calculate_rates();
void create_syncs(unsigned long sps); void create_syncs(unsigned long sps);
int8 apu_square(square_t *chan); int8 apu_square(square_t *chan);
@ -93,8 +88,4 @@ private:
extern const device_type NES_APU; extern const device_type NES_APU;
#define MCFG_NES_APU_CPU(_tag) \
nesapu_device::set_cpu_tag(*device, _tag);
#endif /* __NES_APU_H__ */ #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 ); g_profiler.start( PROFILER_VIDEO );
/* Get next pixel information */ /* 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(); g_profiler.stop();
} }

View File

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

View File

@ -13,17 +13,6 @@
#include "drivenum.h" #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 // DRIVER DEVICE
//************************************************************************** //**************************************************************************
@ -34,8 +23,6 @@ ADDRESS_MAP_END
driver_device::driver_device(const machine_config &mconfig, device_type type, const char *tag) 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_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_system(nullptr),
m_flip_screen_x(0), m_flip_screen_x(0),
m_flip_screen_y(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 // INTERRUPT ENABLE AND VECTOR HELPERS
@ -476,22 +452,3 @@ CUSTOM_INPUT_MEMBER(driver_device::custom_port_read)
const char *tag = (const char *)param; const char *tag = (const char *)param;
return ioport(tag)->read(); 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 // ======================> driver_device
// base class for machine driver-specific devices // base class for machine driver-specific devices
class driver_device : public device_t, class driver_device : public device_t
public device_memory_interface
{ {
public: public:
// construction/destruction // construction/destruction
@ -135,7 +134,7 @@ public:
void init_0() { } void init_0() { }
// memory helpers // memory helpers
address_space &generic_space() const { return space(AS_PROGRAM); } address_space &generic_space() const { return machine().dummy_space(); }
// output heler // output heler
output_manager &output() const { return machine().output(); } output_manager &output() const { return machine().output(); }
@ -192,10 +191,6 @@ public:
// generic input port helpers // generic input port helpers
DECLARE_CUSTOM_INPUT_MEMBER( custom_port_read ); DECLARE_CUSTOM_INPUT_MEMBER( custom_port_read );
// general fatal error handlers
DECLARE_READ8_MEMBER( fatal_generic_read );
DECLARE_WRITE8_MEMBER( fatal_generic_write );
protected: protected:
// helpers called at startup // helpers called at startup
virtual void driver_start(); virtual void driver_start();
@ -215,16 +210,11 @@ protected:
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset_after_children() 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: private:
// helpers // helpers
void irq_pulse_clear(void *ptr, int32_t param); void irq_pulse_clear(void *ptr, int32_t param);
void updateflip(); void updateflip();
// configuration state
const address_space_config m_space_config;
// internal state // internal state
const game_driver * m_system; // pointer to the game driver const game_driver * m_system; // pointer to the game driver
driver_callback_delegate m_callbacks[CB_COUNT]; // start/reset callbacks 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_164MHz = 27164000, /* Typically used on 90's Taito PCBs to drive the custom chips */
XTAL_27_2109MHz = 27210900, /* LA Girl */ XTAL_27_2109MHz = 27210900, /* LA Girl */
XTAL_28MHz = 28000000, XTAL_28MHz = 28000000,
XTAL_28_322MHz = 28322000, /* Saitek RISC 2500, Mephisto Montreux */
XTAL_28_37516MHz = 28375160, /* Amiga PAL systems */ XTAL_28_37516MHz = 28375160, /* Amiga PAL systems */
XTAL_28_48MHz = 28480000, /* Chromatics CGC-7900 */ 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)*/ 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)); 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 // initialize - initialize the memory system
@ -1563,13 +1577,9 @@ void memory_manager::initialize()
// loop over devices and spaces within each device // loop over devices and spaces within each device
memory_interface_iterator iter(machine().root_device()); memory_interface_iterator iter(machine().root_device());
for (device_memory_interface &memory : iter) for (device_memory_interface &memory : iter)
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum) allocate(memory);
{
// if there is a configuration for this space, we need an address space allocate(m_machine.m_dummy_space);
const address_space_config *spaceconfig = memory.space_config(spacenum);
if (spaceconfig != nullptr)
address_space::allocate(m_spacelist,*this, *spaceconfig, memory, spacenum);
}
// construct and preprocess the address_map for each space // construct and preprocess the address_map for each space
for (auto &space : m_spacelist) for (auto &space : m_spacelist)

View File

@ -734,6 +734,7 @@ public:
private: private:
// internal helpers // internal helpers
void bank_reattach(); void bank_reattach();
void allocate(device_memory_interface &memory);
// internal state // internal state
running_machine & m_machine; // reference to the machine 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_memory(*this),
m_ioport(*this), m_ioport(*this),
m_parameters(*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)); memset(&m_base_time, 0, sizeof(m_base_time));
m_dummy_space.set_machine(*this);
// set the machine on all devices // set the machine on all devices
device_iterator iter(root_device()); device_iterator iter(root_device());
for (device_t &device : iter) for (device_t &device : iter)
@ -963,6 +966,8 @@ void running_machine::logfile_callback(const char *buffer)
void running_machine::start_all_devices() void running_machine::start_all_devices()
{ {
m_dummy_space.start();
// iterate through the devices // iterate through the devices
int last_failed_starts = -1; int last_failed_starts = -1;
while (last_failed_starts != 0) 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 // 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 // ======================> running_machine
typedef delegate<void ()> machine_notify_delegate; typedef delegate<void ()> machine_notify_delegate;
@ -142,6 +168,7 @@ class running_machine
DISABLE_COPYING(running_machine); DISABLE_COPYING(running_machine);
friend class sound_manager; friend class sound_manager;
friend class memory_manager;
typedef std::function<void(const char*)> logerror_callback; typedef std::function<void(const char*)> logerror_callback;
@ -230,6 +257,7 @@ public:
void set_rtc_datetime(const system_time &systime); void set_rtc_datetime(const system_time &systime);
// misc // misc
address_space &dummy_space() const { return m_dummy_space.space(AS_PROGRAM); }
void popmessage() const { popmessage(static_cast<char const *>(nullptr)); } 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 popmessage(Format &&fmt, Params &&... args) const;
template <typename Format, typename... Params> void logerror(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 // string formatting buffer
mutable util::ovectorstream m_string_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 "emu.h"
#include "luaengine.h"
#include "console.h" #include "console.h"
#include "linenoise-ng/include/linenoise.h" #include "linenoise-ng/include/linenoise.h"
#include "mame.h" #include "mame.h"
@ -28,9 +29,10 @@ console_frontend::console_frontend(emu_options &options, osd_interface &osd)
m_wait(false), m_wait(false),
m_prompt("\x1b[1;36m[MAME]\x1b[0m> ") m_prompt("\x1b[1;36m[MAME]\x1b[0m> ")
{ {
using namespace std::placeholders; mame_machine_manager::instance()->lua()->sol()["quit"] = [this]() { cmd_quit(); };
m_commands.insert(std::make_pair("quit", std::bind(&console_frontend::cmd_quit, this, _1))); m_commands.push_back("quit()");
m_commands.insert(std::make_pair("exit", std::bind(&console_frontend::cmd_quit, this, _1))); mame_machine_manager::instance()->lua()->sol()["exit"] = [this]() { cmd_quit(); };
m_commands.push_back("exit()");
gConsole = this; gConsole = this;
} }
@ -47,14 +49,14 @@ void console_frontend::completion(char const* prefix, linenoiseCompletions* lc)
{ {
for (auto cmd : m_commands) 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"); printf("Exiting application\n");
m_run.store(false); 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) static void completionHook(char const* prefix, linenoiseCompletions* lc)
{ {
gConsole->completion(prefix, lc); gConsole->completion(prefix, lc);
@ -159,16 +121,7 @@ void console_frontend::start_console()
{ {
if (m_wait.load()) if (m_wait.load())
{ {
std::vector<std::string> arg; mame_machine_manager::instance()->lua()->load_string(cmdLine.c_str());
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());
}
cmdLine.clear(); cmdLine.clear();
m_wait.store(false); m_wait.store(false);
} else { } else {

View File

@ -28,17 +28,14 @@ public:
private: private:
void read_console(std::string &cmdLine); 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 // internal state
//emu_options & m_options;
//osd_interface & m_osd;
std::atomic<bool> m_run; std::atomic<bool> m_run;
std::atomic<bool> m_wait; std::atomic<bool> m_wait;
std::string m_prompt; 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 */ #endif /* MAME_FRONTEND_CONSOLE_H */

View File

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

View File

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

View File

@ -428,7 +428,7 @@ public:
fifo() fifo()
: std::array<T, N>() : std::array<T, N>()
, m_head(this->begin()) , m_head(this->begin())
, m_tail(this->end()) , m_tail(this->begin())
, m_empty(true) , m_empty(true)
{ {
static_assert(0U < N, "FIFO must have at least one element"); static_assert(0U < N, "FIFO must have at least one element");
@ -513,11 +513,27 @@ public:
return result; return result;
} }
void poke(T &v)
{
*m_tail = v;
}
void poke(T &&v)
{
*m_tail = std::move(v);
}
T const &peek() const T const &peek() const
{ {
return *m_head; return *m_head;
} }
void clear()
{
m_head = m_tail = this->begin();
m_empty = true;
}
private: private:
typename fifo::iterator m_head, m_tail; typename fifo::iterator m_head, m_tail;
bool m_empty; 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) if ((m_control & 2) && m_cage_to_cpu_ready)
reason |= CAGE_IRQ_REASON_DATA_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 */ /* set the IOF input lines */
val = m_cpu->state_int(TMS3203X_IOF); val = m_cpu->state_int(TMS3203X_IOF);
val &= ~0x88; 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) if (transfer.state != 5 || transfer.fifo_entries == transfer.writes_left || transfer.fifo_entries >= 256)
{ {
for ( ; transfer.fifo_entries; transfer.fifo_entries--) 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) if (transfer.fifo_entries && starting_writes_left == transfer.writes_left)
{ {
for ( ; transfer.fifo_entries; transfer.fifo_entries--) 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) if (transfer.watchdog != nullptr)
transfer.watchdog->adjust(attotime::from_msec(1), transfer.writes_left); 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 */ /* controls need to be active low */
int controls = ~ioport("IN0")->read() & 0xff; 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_TONE_TIMING, maze_tone_timing_state);
m_discrete->write(space, MAZE_P1_DATA, controls & 0x0f); m_discrete->write(space, MAZE_P1_DATA, controls & 0x0f);
m_discrete->write(space, MAZE_P2_DATA, (controls >> 4) & 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 */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz)
MCFG_CPU_PROGRAM_MAP(fexcel68k_map) 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_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(589) - attotime::from_nsec(1525)) // active for 1.525us 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(589)) 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_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_fidel_ex_68k) MCFG_DEFAULT_LAYOUT(layout_fidel_ex_68k)

View File

@ -865,11 +865,11 @@ ROM_START(megaduck)
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* 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(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_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_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_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_GRAPHICS | 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. // 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 ) 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 */ /* bit 5 - ticket out in trivia games */
if (m_ticket != nullptr) 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 */ /* bit 6 enables NMI */
m_nmi_mask = data & 0x40; m_nmi_mask = data & 0x40;

View File

@ -773,4 +773,4 @@ ROM_START(geneve)
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* 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) void hp64k_state::hp64k_floppy_idx_cb(floppy_image_device *floppy , int state)
{ {
if (floppy == m_floppy0->get_device()) { 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()) { } 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) { if (floppy == m_current_floppy) {

View File

@ -256,7 +256,7 @@ WRITE_LINE_MEMBER(pcjr_state::keyb_interrupt)
{ {
int data; 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; uint8_t parity = 0;
int i; 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(1, data & 0x01);
output().set_led_value(2, data & 0x02); output().set_led_value(2, data & 0x02);
output().set_led_value(3, data & 0x04); 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); 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 4 controls the ticket dispenser */
/* bit 5 controls the coin counter */ /* bit 5 controls the coin counter */
/* bit 6 controls the diagnostic sound LED */ /* 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); 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 6 controls the diagnostic sound LED */
/* bit 7 controls the ticket dispenser */ /* bit 7 controls the ticket dispenser */
m_pia_portb_data = data; 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); 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) 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)); LOGKBD(("%s(%02x)\n", FUNCNAME, m_kbd_data));
m_maincpu->set_input_line(2, ASSERT_LINE); m_maincpu->set_input_line(2, ASSERT_LINE);

View File

@ -369,7 +369,7 @@ WRITE8_MEMBER(mgavegas_state::cso1_w)
update_custom(); update_custom();
hopper_data=(m_hop&0x01)<<7; 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) 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) 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) 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) 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); uint16_t flip = m_deco_tilegen1->pf_control_r(space, 0, 0xffff);
flip_screen_set(BIT(flip, 7)); 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 */ /* Top Skater reads here and discards the result */
READ8_MEMBER(model2_state::tgpid_r) READ8_MEMBER(model2_state::tgpid_r)
{ {

View File

@ -733,7 +733,6 @@ JP4/5/6/7 - Jumpers to configure ROMs
#include "emu.h" #include "emu.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/powerpc/ppc.h"
#include "machine/eepromser.h" #include "machine/eepromser.h"
#include "machine/53c810.h" #include "machine/53c810.h"
#include "machine/nvram.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; 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 */ /* set reset values */
memset(state->m_mpc105_regs, 0, sizeof(state->m_mpc105_regs)); memset(m_mpc105_regs, 0, sizeof(m_mpc105_regs));
state->m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */ m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */
state->m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */ m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
state->m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */ m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */
state->m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */ m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
state->m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */ m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
state->m_mpc105_regs[0xb8/4] = 0x04000000; m_mpc105_regs[0xb8/4] = 0x04000000;
state->m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */ m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
state->m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */ m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
state->m_mpc105_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */ 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; 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 */ /* set reset values */
memset(state->m_mpc106_regs, 0, sizeof(state->m_mpc106_regs)); memset(m_mpc106_regs, 0, sizeof(m_mpc106_regs));
state->m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */ m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */
state->m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */ m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
state->m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */ m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */
state->m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */ m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */
state->m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */ m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */
state->m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */ m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
state->m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */ m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
state->m_mpc106_regs[0xb8/4] = 0x04000000; m_mpc106_regs[0xb8/4] = 0x04000000;
state->m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */ m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */
state->m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */ m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */
state->m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */ m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */
state->m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */ m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
state->m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */ m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
state->m_mpc106_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */ 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 */ /* 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 */ /* 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) 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) 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_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)); 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) 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_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)); 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) 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_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)); 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) 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_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)); 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) if (m_step15_with_mpc106)
{ {
mpc106_init(machine()); mpc106_init();
} }
else else
{ {
mpc105_init(machine()); mpc105_init();
} }
m_real3d_device_id = 0x16c311db; /* PCI Vendor ID (11db = SEGA), Device ID (16c3 = 315-5827) */ m_real3d_device_id = 0x16c311db; /* PCI Vendor ID (11db = SEGA), Device ID (16c3 = 315-5827) */
} }
else else
{ {
mpc106_init(machine()); mpc106_init();
// some step 2+ games need the older PCI ID (obvious symptom: // some step 2+ games need the older PCI ID (obvious symptom:
// vbl is enabled briefly then disabled so the game hangs) // vbl is enabled briefly then disabled so the game hangs)
if (m_step20_with_old_real3d) if (m_step20_with_old_real3d)
@ -5740,18 +5736,17 @@ static MACHINE_CONFIG_DERIVED( model3_21_5881, model3_21 )
MACHINE_CONFIG_END 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 start;
int i,j,x; int i,j,x;
uint16_t *vrom1 = (uint16_t*)state->memregion("user3")->base(); uint16_t *vrom1 = (uint16_t*)memregion("user3")->base();
uint16_t *vrom2 = (uint16_t*)state->memregion("user4")->base(); uint16_t *vrom2 = (uint16_t*)memregion("user4")->base();
int vrom_length = state->memregion("user3")->bytes(); int vrom_length = memregion("user3")->bytes();
uint16_t *vrom; uint16_t *vrom;
state->m_vrom = std::make_unique<uint32_t[]>(0x4000000/4); m_vrom = std::make_unique<uint32_t[]>(0x4000000/4);
vrom = (uint16_t *)state->m_vrom.get(); vrom = (uint16_t *)m_vrom.get();
if( vrom_length <= 0x1000000 ) { if( vrom_length <= 0x1000000 ) {
start = 0x1000000; start = 0x1000000;
@ -5783,7 +5778,7 @@ DRIVER_INIT_MEMBER(model3_state, genprot)
DRIVER_INIT_MEMBER(model3_state,model3_10) 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)); 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) 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_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)); 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) 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_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)); 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; 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_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)); 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[(0x6028ec^4)/4] = 0x60000000;
rom[(0x60290c^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_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)); 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; 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_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)); 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) 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_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)); 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() void ms0515_state::machine_reset()
{ {
uint8_t *ram = m_ram->pointer(); 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_video_ram = ram + 0000000 + 0340000;
m_blink = 0; 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_LOAD( "mustache.b6",0x0300, 0x1000, CRC(5f83fa35) SHA1(cb13e63577762d818e5dcbb52b8a53f66e284e8f) ) /* 63S281N near SEI0070BU */
ROM_END 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) DRIVER_INIT_MEMBER(mustache_state,mustache)
{ {
int i; 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. /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. \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 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 (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 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 ) /* 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 ) /* 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 ) /* 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 ) /* 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, 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) (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) (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 ) /* 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-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 ) /* 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) */ /* 840-xxxxx (Sega Naomi 2 cart games) */
/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Wild Riders", GAME_FLAGS ) /* 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, 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 (Rev B) (USA, EXP, KOR, AUS)", GAME_FLAGS ) /* 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, 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, 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 ) /* 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 ) /* 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 ) /* 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 ) /* 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 ) /* 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 ) /* 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; int data;
data = m_keyboard->read(machine().driver_data()->generic_space(), 0); data = m_keyboard->read(machine().dummy_space(), 0);
if (data) if (data)
{ {

View File

@ -118,6 +118,7 @@ public:
DECLARE_WRITE8_MEMBER(quizpun2_soundlatch_w); DECLARE_WRITE8_MEMBER(quizpun2_soundlatch_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_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 machine_reset() override;
virtual void video_start() override; virtual void video_start() override;
uint32_t screen_update_quizpun2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 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; 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 = m_prot;
struct prot_t &prot = state->m_prot; logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
state->logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
prot.state, prot.state,
prot.wait_param, prot.wait_param,
prot.param, prot.param,

View File

@ -323,7 +323,7 @@ WRITE_LINE_MEMBER(r2dtank_state::display_enable_changed)
WRITE8_MEMBER(r2dtank_state::pia_comp_w) WRITE8_MEMBER(r2dtank_state::pia_comp_w)
{ {
device_t *device = machine().device("pia_main"); 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 Saitek RISC 2500
TODO: 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 "cpu/arm/arm.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "risc2500.lh" #include "risc2500.lh"
@ -26,6 +29,7 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_ram(*this, "ram"), m_ram(*this, "ram"),
m_nvram(*this, "nvram"), m_nvram(*this, "nvram"),
m_dac(*this, "dac"),
m_inputs(*this, "P%u", 0) m_inputs(*this, "P%u", 0)
{ } { }
@ -44,6 +48,7 @@ private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram; required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram; required_device<nvram_device> m_nvram;
required_device<dac_byte_interface> m_dac;
required_ioport_array<8> m_inputs; required_ioport_array<8> m_inputs;
uint32_t m_p1000; uint32_t m_p1000;
@ -237,7 +242,9 @@ WRITE32_MEMBER(risc2500_state::p1000_w)
{ {
memset(m_vram, 0, sizeof(m_vram)); memset(m_vram, 0, sizeof(m_vram));
} }
m_dac->write(data >> 28 & 3); // Speaker
m_p1000 = data; 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( 0x00000000, 0x0001ffff ) AM_RAM
AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(disable_boot_rom) AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(disable_boot_rom)
AM_RANGE( 0x01000000, 0x01000003 ) AM_READWRITE(p1000_r, p1000_w) 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 ADDRESS_MAP_END
static MACHINE_CONFIG_START( risc2500, risc2500_state ) 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_CPU_PROGRAM_MAP(risc2500_mem)
MCFG_ARM_COPRO(ARM_COPRO_TYPE_VL86C020) MCFG_ARM_COPRO(ARM_COPRO_TYPE_VL86C020)
MCFG_CPU_PERIODIC_INT_DRIVER(risc2500_state, irq1_line_hold, 250) 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_RAM_EXTRA_OPTIONS("128K, 256K, 512K, 1M, 2M")
MCFG_NVRAM_ADD_NO_FILL("nvram") 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 MACHINE_CONFIG_END
/* ROM definitions */ /* ROM definitions */
ROM_START( risc ) ROM_START( risc )
ROM_REGION( 0x20000, "maincpu", 0 ) ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE )
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc)) 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 ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ /* 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 ) 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; 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 ) static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM 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(0xf805, 0xf805) AM_READ_PORT("DSW2")
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w)
AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_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(0xfc04, 0xfc05) AM_WRITE(charbank_w)
AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w) AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w)
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -1386,18 +1386,17 @@ Note: on screen copyright is (c)1998 Coinmaster.
/*------------------------------ /*------------------------------
update timer 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 = &m_uPD71054;
uPD71054_state *uPD71054 = &state->m_uPD71054;
uint16_t max = uPD71054->max[no]&0xffff; uint16_t max = uPD71054->max[no]&0xffff;
if( max != 0 ) { 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 ); uPD71054->timer[no]->adjust( period, no );
} else { } else {
uPD71054->timer[no]->adjust( attotime::never, no); 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 ); (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) TIMER_CALLBACK_MEMBER(seta_state::uPD71054_timer_callback)
{ {
m_maincpu->set_input_line(4, HOLD_LINE ); 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); uPD71054->max[offset] = (uPD71054->max[offset]&0x00ff)+(data<<8);
} }
if( uPD71054->max[offset] != 0 ) { if( uPD71054->max[offset] != 0 ) {
uPD71054_update_timer( machine(), &space.device(), offset ); uPD71054_update_timer( &space.device(), offset );
} }
break; break;
case 0x0003: case 0x0003:

View File

@ -1050,4 +1050,4 @@ ROM_START(ti99_4p)
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* 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 ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS // 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( 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)", 0) 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)", 0) 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)", 0) 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)", 0) 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", 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", MACHINE_SUPPORTS_SAVE)

View File

@ -912,5 +912,5 @@ ROM_END
#define rom_ti99_8e rom_ti99_8 #define rom_ti99_8e rom_ti99_8
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* 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_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)" , 0 ) 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(); int status = oki->read_status();
if (state->m_music_is_playing) if (m_music_is_playing)
{ {
if (!BIT(status, 3)) if (!BIT(status, 3))
{ {
oki->write_command(0x80 | state->m_music_command); oki->write_command(0x80 | m_music_command);
oki->write_command(0x00 | 0x82); oki->write_command(0x00 | 0x82);
} }
} }
@ -2190,15 +2188,13 @@ static MACHINE_CONFIG_START( fncywld, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,fncywld) MCFG_VIDEO_START_OVERRIDE(tumbleb_state,fncywld)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_YM2151_ADD("ymsnd", 32220000/9) MCFG_YM2151_ADD("ymsnd", 32220000/9)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.20) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.20)
MCFG_OKIM6295_ADD("oki", 1023924, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified 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, "mono", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -2252,21 +2248,18 @@ static MACHINE_CONFIG_START( htchctch, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,tumblepb) MCFG_VIDEO_START_OVERRIDE(tumbleb_state,tumblepb)
/* sound hardware - same as hyperpac */ /* sound hardware - same as hyperpac */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch")
/* on at least hatch catch, cookie & bibi and choky choky the YM2151 clock is connected /* 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 */
directly to the Z80 clock so the speed should match */ MCFG_YM2151_ADD("ymsnd", 15000000/4)
MCFG_YM2151_ADD("ymsnd", 15000000/4)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
/* correct for cookie & bibi and hatch catch, (4096000/4) */ /* correct for cookie & bibi and hatch catch, (4096000/4) */
MCFG_OKIM6295_ADD("oki", 1024000, OKIM6295_PIN7_HIGH) MCFG_OKIM6295_ADD("oki", 1024000, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cookbib, htchctch ) static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
@ -2275,12 +2268,13 @@ static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( chokchok, htchctch ) static MACHINE_CONFIG_DERIVED( chokchok, htchctch )
MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR) 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
MCFG_OKIM6295_REPLACE("oki", 3579545/4, OKIM6295_PIN7_HIGH) // 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,
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) // assuming it's worth emulating a factory error in the first place.
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MCFG_OKIM6295_REPLACE("oki", 4096000/4, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cookbib_mcu, htchctch ) static MACHINE_CONFIG_DERIVED( cookbib_mcu, htchctch )
@ -2301,8 +2295,7 @@ static MACHINE_CONFIG_DERIVED( bcstory, htchctch )
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190) MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( semibase, bcstory ) static MACHINE_CONFIG_DERIVED( semibase, bcstory )
@ -2323,8 +2316,7 @@ static MACHINE_CONFIG_DERIVED( metlsavr, cookbib )
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190) MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -2364,13 +2356,12 @@ static MACHINE_CONFIG_START( suprtrio, tumbleb_state )
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,suprtrio) MCFG_VIDEO_START_OVERRIDE(tumbleb_state,suprtrio)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_OKIM6295_ADD("oki", 875000, OKIM6295_PIN7_HIGH) MCFG_OKIM6295_ADD("oki", 875000, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pangpang, tumbleb_state ) static MACHINE_CONFIG_START( pangpang, tumbleb_state )

View File

@ -128,6 +128,7 @@ public:
DECLARE_DRIVER_INIT(vcombat); DECLARE_DRIVER_INIT(vcombat);
DECLARE_MACHINE_RESET(vcombat); DECLARE_MACHINE_RESET(vcombat);
DECLARE_MACHINE_RESET(shadfgtr); 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_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); uint32_t screen_update_vcombat_aux(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -137,14 +138,13 @@ public:
required_device<dac_word_interface> m_dac; 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; 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 *m68k_buf = m_m68k_framebuffer[(*m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
uint16_t *i860_buf = state->m_i860_framebuffer[index][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? */ /* 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. */ /* 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 */ /* both output latches are cleared on reset */
out1_w(machine().driver_data()->generic_space(), 0, 0); out1_w(machine().dummy_space(), 0, 0);
out2_w(machine().driver_data()->generic_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 ) WRITE_LINE_MEMBER( vip_state::q_w )
{ {
// sound output // sound output
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, state); m_beeper->write(machine().dummy_space(), NODE_01, state);
// Q led // Q led
output().set_led_value(LED_Q, state); output().set_led_value(LED_Q, state);
@ -620,7 +620,7 @@ void vip_state::machine_start()
output().set_led_value(LED_POWER, 1); output().set_led_value(LED_POWER, 1);
// reset sound // reset sound
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, 0); m_beeper->write(machine().dummy_space(), NODE_01, 0);
// state saving // state saving
save_item(NAME(m_8000)); save_item(NAME(m_8000));

View File

@ -165,6 +165,8 @@ public:
DECLARE_WRITE32_MEMBER(model2_5881prot_w); DECLARE_WRITE32_MEMBER(model2_5881prot_w);
int first_read; int first_read;
void model2_3d_init(uint16_t *texture_rom);
void geo_init(uint32_t *polygon_rom);
DECLARE_READ32_MEMBER(maxx_r); DECLARE_READ32_MEMBER(maxx_r);
DECLARE_WRITE32_MEMBER(mode_w); DECLARE_WRITE32_MEMBER(mode_w);
DECLARE_WRITE32_MEMBER(model2o_tex_w0); DECLARE_WRITE32_MEMBER(model2o_tex_w0);
@ -396,8 +398,3 @@ struct quad_m2
uint16_t texheader[4]; uint16_t texheader[4];
uint8_t luma; 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 // license:BSD-3-Clause
// copyright-holders:R. Belmont, Ville Linde // copyright-holders:R. Belmont, Ville Linde
#include "cpu/powerpc/ppc.h"
#include "video/poly.h" #include "video/poly.h"
#include "bus/scsi/scsi.h" #include "bus/scsi/scsi.h"
#include "machine/53c810.h" #include "machine/53c810.h"
@ -72,7 +73,7 @@ public:
m_step20_with_old_real3d = false; m_step20_with_old_real3d = false;
} }
required_device<cpu_device> m_maincpu; required_device<ppc_device> m_maincpu;
optional_device<lsi53c810_device> m_lsi53c810; optional_device<lsi53c810_device> m_lsi53c810;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_device<scsp_device> m_scsp1; required_device<scsp_device> m_scsp1;
@ -198,12 +199,14 @@ public:
DECLARE_WRITE64_MEMBER(mpc105_data_w); DECLARE_WRITE64_MEMBER(mpc105_data_w);
DECLARE_READ64_MEMBER(mpc105_reg_r); DECLARE_READ64_MEMBER(mpc105_reg_r);
DECLARE_WRITE64_MEMBER(mpc105_reg_w); DECLARE_WRITE64_MEMBER(mpc105_reg_w);
void mpc105_init();
DECLARE_READ64_MEMBER(mpc106_addr_r); DECLARE_READ64_MEMBER(mpc106_addr_r);
DECLARE_WRITE64_MEMBER(mpc106_addr_w); DECLARE_WRITE64_MEMBER(mpc106_addr_w);
DECLARE_READ64_MEMBER(mpc106_data_r); DECLARE_READ64_MEMBER(mpc106_data_r);
DECLARE_WRITE64_MEMBER(mpc106_data_w); DECLARE_WRITE64_MEMBER(mpc106_data_w);
DECLARE_READ64_MEMBER(mpc106_reg_r); DECLARE_READ64_MEMBER(mpc106_reg_r);
DECLARE_WRITE64_MEMBER(mpc106_reg_w); DECLARE_WRITE64_MEMBER(mpc106_reg_w);
void mpc106_init();
DECLARE_READ64_MEMBER(scsi_r); DECLARE_READ64_MEMBER(scsi_r);
DECLARE_WRITE64_MEMBER(scsi_w); DECLARE_WRITE64_MEMBER(scsi_w);
DECLARE_READ64_MEMBER(real3d_dma_r); DECLARE_READ64_MEMBER(real3d_dma_r);
@ -222,6 +225,8 @@ public:
DECLARE_WRITE16_MEMBER(model3snd_ctrl); DECLARE_WRITE16_MEMBER(model3snd_ctrl);
uint32_t pci_device_get_reg(); uint32_t pci_device_get_reg();
void pci_device_set_reg(uint32_t value); void pci_device_set_reg(uint32_t value);
void configure_fast_ram();
void interleave_vroms();
DECLARE_DRIVER_INIT(genprot); DECLARE_DRIVER_INIT(genprot);
DECLARE_DRIVER_INIT(lemans24); DECLARE_DRIVER_INIT(lemans24);
DECLARE_DRIVER_INIT(vs298); DECLARE_DRIVER_INIT(vs298);

View File

@ -37,6 +37,7 @@ public:
DECLARE_WRITE8_MEMBER(fake_d800_w); DECLARE_WRITE8_MEMBER(fake_d800_w);
DECLARE_WRITE8_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w); DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
DECLARE_WRITE8_MEMBER(coin_w);
DECLARE_WRITE8_MEMBER(charbank_w); DECLARE_WRITE8_MEMBER(charbank_w);
DECLARE_WRITE8_MEMBER(bkgpen_w); DECLARE_WRITE8_MEMBER(bkgpen_w);
DECLARE_WRITE8_MEMBER(spritebank_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); 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_seta_buffer_sprites(screen_device &screen, bool state);
void screen_eof_setaroul(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); INTERRUPT_GEN_MEMBER(wrofaero_interrupt);
TIMER_CALLBACK_MEMBER(uPD71054_timer_callback); TIMER_CALLBACK_MEMBER(uPD71054_timer_callback);
TIMER_CALLBACK_MEMBER(keroppi_prize_hop_callback); TIMER_CALLBACK_MEMBER(keroppi_prize_hop_callback);

View File

@ -211,6 +211,7 @@ public:
DECLARE_WRITE8_MEMBER( ti83pse_ctimer3_count_w ); 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_ti85_memory ();
void update_ti83p_memory (); void update_ti83p_memory ();
void update_ti83pse_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 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_set_music_bank( int bank );
void tumbleb2_play_sound( okim6295_device *oki, int data ); 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 process_tumbleb2_music_command( okim6295_device *oki, int data );
void tumblepb_gfx_rearrange(int rgn); void tumblepb_gfx_rearrange(int rgn);
void suprtrio_decrypt_code(); 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="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="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_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"> <text string="2"><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"> <text string="3"><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"> <text string="4"><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"> <text string="5"><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"> <text string="6"><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"> <text string="7"><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"> <text string="8"><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_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"> <text string="B"><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"> <text string="C"><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"> <text string="D"><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"> <text string="E"><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"> <text string="F"><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"> <text string="G"><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"> <text string="H"><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_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_newgame"> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_level"> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_color"> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_board"> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_selfplay"> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_referee"> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_random"> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></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_hint"> <text string="HINT" 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_white"> <text string="WHITE" align="2"><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_black"> <text string="BLACK" align="2"><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_king" > <text string="&#x2654;" align="2"><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_queen" > <text string="&#x2655;" align="2"><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_rook" > <text string="&#x2656;" align="2"><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_bishop" > <text string="&#x2657;" align="2"><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_knight" > <text string="&#x2658;" align="2"><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_pawn" > <text string="&#x2659;" align="2"><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_change"> <text string="CHANGE" align="1"><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_board"> <text string="BOARD" 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_halt"> <text string="HALT" align="0"><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_reset"> <text string="RESET" align="0"><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_check"> <text string="CHECK" align="0"><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_your"> <text string="YOUR" align="0"><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_cms"> <text string="CM'S" align="0"><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"> <element name="piece" defstate="0">
<text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> <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_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_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_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_white"> <bounds x="90" y="61" width="9" height="1.8" /></bezel>
<bezel element="text_black"> <bounds x="88" y="68" width="10" 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_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_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_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_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_b1"><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_b2"><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_b3"><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_b4"><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_b5"><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_b6"><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_b7"><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_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_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> <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="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="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_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"> <text string="2"><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"> <text string="3"><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"> <text string="4"><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"> <text string="5"><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"> <text string="6"><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"> <text string="7"><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"> <text string="8"><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_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"> <text string="B"><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"> <text string="C"><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"> <text string="D"><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"> <text string="E"><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"> <text string="F"><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"> <text string="G"><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"> <text string="H"><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_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"> <text string="diamond" 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"> <text string="MONITOR" 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"> <text string="VIEW" 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"> <text string="RESET" 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"> <text string="SELECTION" 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"> <text string="DIALOGUE" 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"> <text string="FUNCTION" 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"> <text string="NOTATION" 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"> <text string="PARAMETER" 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"> <text string="INFORMATION" 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"> <text string="BOARD" 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"> <text string="MATCH" 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"> <text string="TIME" 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"> <text string="ENTER" 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"> <text string="PLAYMODE" 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"> <text string="MOVE FORE" align="0"><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"> <text string="MOVE BACK" 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"> <element name="piece" defstate="0">
<text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text> <text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>

View File

@ -154,50 +154,50 @@
</rect> </rect>
</element> </element>
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></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"> <text string="2"><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"> <text string="3"><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"> <text string="4"><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"> <text string="5"><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"> <text string="6"><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"> <text string="7"><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"> <text string="8"><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"> <text string="A"><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"> <text string="B"><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"> <text string="C"><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"> <text string="D"><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"> <text string="E"><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"> <text string="F"><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"> <text string="G"><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"> <text string="H"><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"> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></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"> <text string="OFF" > <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"> <text string="NEW GAME" > <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"> <text string="PLAY" > <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"> <text string="BACK" > <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"> <text string="&#x2190;" > <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"> <text string="&#x2192;" > <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"> <text string="MENU" > <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"> <text string="&#x2191;" > <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"> <text string="&#x2193;" > <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"> <text string="ENTER" > <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"> <text string="&#x265a;" > <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"> <text string="&#x265b;" > <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"> <text string="&#x265c;" > <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"> <text string="&#x265d;" > <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"> <text string="&#x265e;" > <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"> <text string="&#x265f;" > <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"> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></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"> <text string="&#x2190;" 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"> <text string="&#x2192;" 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"> <text string="&#x265a;" 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"> <text string="&#x265b;" 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"> <text string="&#x265c;" 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"> <text string="&#x265d;" 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"> <text string="&#x265e;" 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"> <text string="&#x265f;" 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_black"> <text string="&#x25cf;" 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_white"> <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="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="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> <element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element>
@ -463,6 +463,8 @@
<!-- LCD panel --> <!-- LCD panel -->
<screen index="0"><bounds x="95" y="4.5" width="30" height="4" /></screen> <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="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="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> <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="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="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="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="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> <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() 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; uint16_t irqbits = 0x2000;
uint8_t new_state; 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) if (m_crash_en && m_crash_data_en)
{ {
m_crash_data--; 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 m_discrete->write(space, NITEDRVR_BANG_DATA, m_crash_data); // Crash Volume
if (!m_crash_data) if (!m_crash_data)
m_crash_data_en = 0; // Done counting? 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"}; 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) if (is_ram)
space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, tag[bank&3]); 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_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) 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_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) WRITE8_MEMBER(joust2_state::joust2_snd_cmd_w)
{ {
m_joust2_current_sound_data = (m_joust2_current_sound_data & ~0xff) | (data & 0xff); 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); 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