Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
762deacab2
198
3rdparty/lua-linenoise/linenoise.c
vendored
Normal file
198
3rdparty/lua-linenoise/linenoise.c
vendored
Normal 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;
|
||||
}
|
1
3rdparty/pugixml/.gitignore
vendored
1
3rdparty/pugixml/.gitignore
vendored
@ -1 +1,2 @@
|
||||
build/
|
||||
.vscode/
|
23
3rdparty/pugixml/CMakeLists.txt
vendored
23
3rdparty/pugixml/CMakeLists.txt
vendored
@ -4,6 +4,8 @@ cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)
|
||||
option(BUILD_TESTS "Build tests" OFF)
|
||||
option(BUILD_PKGCONFIG "Build in PKGCONFIG mode" OFF)
|
||||
|
||||
set(BUILD_DEFINES "" CACHE STRING "Build defines")
|
||||
|
||||
if(MSVC)
|
||||
@ -46,16 +48,25 @@ if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} STRLESS 3.1 AND ";${CMAKE_C
|
||||
endif()
|
||||
|
||||
set_target_properties(pugixml PROPERTIES VERSION 1.7 SOVERSION 1)
|
||||
get_target_property(PUGIXML_VERSION_STRING pugixml VERSION)
|
||||
|
||||
if(BUILD_PKGCONFIG)
|
||||
# Install library into its own directory under LIBDIR
|
||||
set(INSTALL_SUFFIX /pugixml-${PUGIXML_VERSION_STRING})
|
||||
endif()
|
||||
|
||||
install(TARGETS pugixml EXPORT pugixml-config
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${INSTALL_SUFFIX}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}${INSTALL_SUFFIX})
|
||||
install(EXPORT pugixml-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml)
|
||||
|
||||
if(BUILD_PKGCONFIG)
|
||||
configure_file(scripts/pugixml.pc.in ${PROJECT_BINARY_DIR}/pugixml.pc @ONLY)
|
||||
install(FILES ${PROJECT_BINARY_DIR}/pugixml.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
|
||||
endif()
|
||||
|
||||
if(BUILD_TESTS)
|
||||
file(GLOB TEST_SOURCES tests/*.cpp)
|
||||
file(GLOB FUZZ_SOURCES tests/fuzz_*.cpp)
|
||||
|
2
3rdparty/pugixml/docs/quickstart.adoc
vendored
2
3rdparty/pugixml/docs/quickstart.adoc
vendored
@ -25,7 +25,7 @@ The distribution contains library source, documentation (the guide you're readin
|
||||
|
||||
The complete pugixml source consists of three files - one source file, `pugixml.cpp`, and two header files, `pugixml.hpp` and `pugiconfig.hpp`. `pugixml.hpp` is the primary header which you need to include in order to use pugixml classes/functions. The rest of this guide assumes that `pugixml.hpp` is either in the current directory or in one of include directories of your projects, so that `#include "pugixml.hpp"` can find the header; however you can also use relative path (i.e. `#include "../libs/pugixml/src/pugixml.hpp"`) or include directory-relative path (i.e. `#include <xml/thirdparty/pugixml/src/pugixml.hpp>`).
|
||||
|
||||
The easiest way to build pugixml is to compile the source file, `pugixml.cpp`, along with the existing library/executable. This process depends on the method of building your application; for example, if you're using Microsoft Visual Studio footnote:[All trademarks used are properties of their respective owners.], Apple Xcode, Code::Blocks or any other IDE, just add `pugixml.cpp` to one of your projects. There are other building methods available, including building pugixml as a standalone static/shared library; link:manual/install.html#install.building[read the manual] for further information.
|
||||
The easiest way to build pugixml is to compile the source file, `pugixml.cpp`, along with the existing library/executable. This process depends on the method of building your application; for example, if you're using Microsoft Visual Studio footnote:[All trademarks used are properties of their respective owners.], Apple Xcode, Code::Blocks or any other IDE, just add `pugixml.cpp` to one of your projects. There are other building methods available, including building pugixml as a standalone static/shared library; link:manual.html#install.building[read the manual] for further information.
|
||||
|
||||
[[dom]]
|
||||
== Document object model
|
||||
|
11
3rdparty/pugixml/scripts/pugixml.pc.in
vendored
Normal file
11
3rdparty/pugixml/scripts/pugixml.pc.in
vendored
Normal 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
|
15
3rdparty/pugixml/src/pugixml.hpp
vendored
15
3rdparty/pugixml/src/pugixml.hpp
vendored
@ -72,6 +72,15 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// If C++ is 2011 or higher, add 'override' qualifiers
|
||||
#ifndef PUGIXML_OVERRIDE
|
||||
# if __cplusplus >= 201103
|
||||
# define PUGIXML_OVERRIDE override
|
||||
# else
|
||||
# define PUGIXML_OVERRIDE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Character interface macros
|
||||
#ifdef PUGIXML_WCHAR_MODE
|
||||
# define PUGIXML_TEXT(t) L ## t
|
||||
@ -273,7 +282,7 @@ namespace pugi
|
||||
// Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio
|
||||
xml_writer_file(void* file);
|
||||
|
||||
virtual void write(const void* data, size_t size) override;
|
||||
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
|
||||
|
||||
private:
|
||||
void* file;
|
||||
@ -288,7 +297,7 @@ namespace pugi
|
||||
xml_writer_stream(std::basic_ostream<char, std::char_traits<char> >& stream);
|
||||
xml_writer_stream(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& stream);
|
||||
|
||||
virtual void write(const void* data, size_t size) override;
|
||||
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
|
||||
|
||||
private:
|
||||
std::basic_ostream<char, std::char_traits<char> >* narrow_stream;
|
||||
@ -1214,7 +1223,7 @@ namespace pugi
|
||||
explicit xpath_exception(const xpath_parse_result& result);
|
||||
|
||||
// Get error message
|
||||
virtual const char* what() const throw() override;
|
||||
virtual const char* what() const throw() PUGIXML_OVERRIDE;
|
||||
|
||||
// Get parse result
|
||||
const xpath_parse_result& result() const;
|
||||
|
2
3rdparty/pugixml/tests/test.hpp
vendored
2
3rdparty/pugixml/tests/test.hpp
vendored
@ -78,7 +78,7 @@ struct dummy_fixture {};
|
||||
{ \
|
||||
test_runner_##name(): test_runner(#name) {} \
|
||||
\
|
||||
virtual void run() \
|
||||
virtual void run() PUGIXML_OVERRIDE \
|
||||
{ \
|
||||
test_runner_helper_##name helper; \
|
||||
helper.run(); \
|
||||
|
2
3rdparty/pugixml/tests/test_document.cpp
vendored
2
3rdparty/pugixml/tests/test_document.cpp
vendored
@ -187,7 +187,7 @@ public:
|
||||
this->setg(begin, begin, end);
|
||||
}
|
||||
|
||||
typename std::basic_streambuf<T>::int_type underflow()
|
||||
typename std::basic_streambuf<T>::int_type underflow() PUGIXML_OVERRIDE
|
||||
{
|
||||
return this->gptr() == this->egptr() ? std::basic_streambuf<T>::traits_type::eof() : std::basic_streambuf<T>::traits_type::to_int_type(*this->gptr());
|
||||
}
|
||||
|
6
3rdparty/pugixml/tests/test_dom_traverse.cpp
vendored
6
3rdparty/pugixml/tests/test_dom_traverse.cpp
vendored
@ -798,7 +798,7 @@ struct test_walker: xml_tree_walker
|
||||
#endif
|
||||
}
|
||||
|
||||
virtual bool begin(xml_node& node)
|
||||
virtual bool begin(xml_node& node) PUGIXML_OVERRIDE
|
||||
{
|
||||
log += STR("|");
|
||||
log += depthstr();
|
||||
@ -810,7 +810,7 @@ struct test_walker: xml_tree_walker
|
||||
return ++call_count != stop_count && xml_tree_walker::begin(node);
|
||||
}
|
||||
|
||||
virtual bool for_each(xml_node& node)
|
||||
virtual bool for_each(xml_node& node) PUGIXML_OVERRIDE
|
||||
{
|
||||
log += STR("|");
|
||||
log += depthstr();
|
||||
@ -822,7 +822,7 @@ struct test_walker: xml_tree_walker
|
||||
return ++call_count != stop_count && xml_tree_walker::end(node);
|
||||
}
|
||||
|
||||
virtual bool end(xml_node& node)
|
||||
virtual bool end(xml_node& node) PUGIXML_OVERRIDE
|
||||
{
|
||||
log += STR("|");
|
||||
log += depthstr();
|
||||
|
4
3rdparty/pugixml/tests/test_write.cpp
vendored
4
3rdparty/pugixml/tests/test_write.cpp
vendored
@ -213,7 +213,7 @@ struct test_writer: xml_writer
|
||||
{
|
||||
std::basic_string<pugi::char_t> contents;
|
||||
|
||||
virtual void write(const void* data, size_t size)
|
||||
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE
|
||||
{
|
||||
CHECK(size % sizeof(pugi::char_t) == 0);
|
||||
contents.append(static_cast<const pugi::char_t*>(data), size / sizeof(pugi::char_t));
|
||||
@ -604,7 +604,7 @@ TEST_XML_FLAGS(write_mixed, "<node><child1/><child2>pre<![CDATA[data]]>mid<!--co
|
||||
#ifndef PUGIXML_NO_EXCEPTIONS
|
||||
struct throwing_writer: pugi::xml_writer
|
||||
{
|
||||
virtual void write(const void*, size_t)
|
||||
virtual void write(const void*, size_t) PUGIXML_OVERRIDE
|
||||
{
|
||||
throw std::runtime_error("write failed");
|
||||
}
|
||||
|
2
3rdparty/pugixml/tests/writer_string.hpp
vendored
2
3rdparty/pugixml/tests/writer_string.hpp
vendored
@ -9,7 +9,7 @@ struct xml_writer_string: public pugi::xml_writer
|
||||
{
|
||||
std::string contents;
|
||||
|
||||
virtual void write(const void* data, size_t size);
|
||||
virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE;
|
||||
|
||||
std::string as_narrow() const;
|
||||
std::basic_string<wchar_t> as_wide() const;
|
||||
|
@ -11,13 +11,8 @@ function dat.check(set, softlist)
|
||||
return nil
|
||||
end
|
||||
local datpath
|
||||
local function xml_parse()
|
||||
local file = emu.file(lfs.env_replace(mame_manager:ui():options().entries.historypath:value():gsub("([^;]+)", "%1/hi2txt")), 1)
|
||||
local ret = file:open(set .. ".xml")
|
||||
local function xml_parse(file)
|
||||
local table
|
||||
if ret then
|
||||
return nil
|
||||
end
|
||||
datpath = file:fullpath():gsub(".zip", "/")
|
||||
local data = file:read(file:size())
|
||||
data = data:match("<hi2txt>(.*)</ *hi2txt>")
|
||||
@ -494,6 +489,9 @@ function dat.check(set, softlist)
|
||||
if fld["line-ignore"] then
|
||||
igncol, ignval = fld["line-ignore"]:match("([^:]*):(.*)")
|
||||
end
|
||||
if fld["field"] and not fld["column"] then -- ????
|
||||
fld["column"] = fld["field"]
|
||||
end
|
||||
for num2, col in ipairs(fld["column"]) do
|
||||
if not col["display"] or col["display"] == "always" then
|
||||
if not col["src"] then
|
||||
@ -501,7 +499,7 @@ function dat.check(set, softlist)
|
||||
end
|
||||
if not loopcnt and col["src"] ~= "index" then
|
||||
table.insert(dat, 1, "for i = 1, #arr['" .. col["src"] .. "'] do")
|
||||
table.insert(dat, 2, "index = arr['" .. col["src"] .. "'][i].index")
|
||||
table.insert(dat, 2, "index = arr['" .. col["src"] .. "'][i].index or i - 1")
|
||||
table.insert(dat, 3, "line = ''")
|
||||
loopcnt = true
|
||||
end
|
||||
@ -768,10 +766,22 @@ function dat.check(set, softlist)
|
||||
local ret = scrfile:open(set .. ".lua")
|
||||
local script
|
||||
if ret then
|
||||
local xml = xml_parse()
|
||||
function get_xml_table(fileset)
|
||||
local file = emu.file(lfs.env_replace(mame_manager:ui():options().entries.historypath:value():gsub("([^;]+)", "%1/hi2txt")), 1)
|
||||
local ret = file:open(fileset .. ".xml")
|
||||
if ret then
|
||||
return nil
|
||||
end
|
||||
local xml = xml_parse(file)
|
||||
return xml
|
||||
end
|
||||
local xml = get_xml_table(set)
|
||||
if not xml then
|
||||
return nil
|
||||
end
|
||||
if xml.sameas then
|
||||
xml = get_xml_table(xml.sameas[1].id)
|
||||
end
|
||||
local status
|
||||
status, script = pcall(parse_table, xml)
|
||||
if not status then
|
||||
|
@ -555,6 +555,7 @@ project "lualibs"
|
||||
|
||||
includedirs {
|
||||
MAME_DIR .. "3rdparty",
|
||||
MAME_DIR .. "3rdparty/linenoise-ng/include",
|
||||
}
|
||||
includedirs {
|
||||
ext_includedir("lua"),
|
||||
@ -564,6 +565,7 @@ project "lualibs"
|
||||
files {
|
||||
MAME_DIR .. "3rdparty/lua-zlib/lua_zlib.c",
|
||||
MAME_DIR .. "3rdparty/luafilesystem/src/lfs.c",
|
||||
MAME_DIR .. "3rdparty/lua-linenoise/linenoise.c",
|
||||
}
|
||||
|
||||
end
|
||||
|
@ -266,7 +266,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
|
||||
if (m_rtc_index >= 0)
|
||||
{
|
||||
m_rtc->address_w(m_rtc_index--);
|
||||
m_rtc->data_w(machine().driver_data()->generic_space(), 0, byte);
|
||||
m_rtc->data_w(machine().dummy_space(), 0, byte);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -290,7 +290,7 @@ void apricot_keyboard_hle_device::received_byte(uint8_t byte)
|
||||
for (int i = 12; i >= 0; i--)
|
||||
{
|
||||
m_rtc->address_w(i);
|
||||
transmit_byte(0xf0 | m_rtc->data_r(machine().driver_data()->generic_space(), 0));
|
||||
transmit_byte(0xf0 | m_rtc->data_r(machine().dummy_space(), 0));
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -141,18 +141,18 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::readz)
|
||||
case 0: /* RTC RAM */
|
||||
if (addr & 0x80)
|
||||
/* RTC RAM page register */
|
||||
reply = m_rtc->xram_r(machine().driver_data()->generic_space(),(addr & 0x1f) | 0x20);
|
||||
reply = m_rtc->xram_r(machine().dummy_space(), (addr & 0x1f) | 0x20);
|
||||
else
|
||||
/* RTC RAM read */
|
||||
reply = m_rtc->xram_r(machine().driver_data()->generic_space(),addr);
|
||||
reply = m_rtc->xram_r(machine().dummy_space(), addr);
|
||||
break;
|
||||
case 1: /* RTC registers */
|
||||
if (addr & 0x10)
|
||||
/* register data */
|
||||
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),1);
|
||||
reply = m_rtc->rtc_r(machine().dummy_space(), 1);
|
||||
else
|
||||
/* register select */
|
||||
reply = m_rtc->rtc_r(machine().driver_data()->generic_space(),0);
|
||||
reply = m_rtc->rtc_r(machine().dummy_space(), 0);
|
||||
break;
|
||||
case 2: /* IDE registers set 1 (CS1Fx) */
|
||||
if (m_tms9995_mode ? (!(addr & 1)) : (addr & 1))
|
||||
@ -212,18 +212,18 @@ WRITE8_MEMBER(nouspikel_ide_interface_device::write)
|
||||
case 0: /* RTC RAM */
|
||||
if (addr & 0x80)
|
||||
/* RTC RAM page register */
|
||||
m_rtc->xram_w(machine().driver_data()->generic_space(),(addr & 0x1f) | 0x20, data);
|
||||
m_rtc->xram_w(machine().dummy_space(), (addr & 0x1f) | 0x20, data);
|
||||
else
|
||||
/* RTC RAM write */
|
||||
m_rtc->xram_w(machine().driver_data()->generic_space(),addr, data);
|
||||
m_rtc->xram_w(machine().dummy_space(), addr, data);
|
||||
break;
|
||||
case 1: /* RTC registers */
|
||||
if (addr & 0x10)
|
||||
/* register data */
|
||||
m_rtc->rtc_w(machine().driver_data()->generic_space(),1, data);
|
||||
m_rtc->rtc_w(machine().dummy_space(), 1, data);
|
||||
else
|
||||
/* register select */
|
||||
m_rtc->rtc_w(machine().driver_data()->generic_space(),0, data);
|
||||
m_rtc->rtc_w(machine().dummy_space(), 0, data);
|
||||
break;
|
||||
case 2: /* IDE registers set 1 (CS1Fx) */
|
||||
/*
|
||||
|
@ -1192,6 +1192,11 @@ void vaquerro_device::device_start()
|
||||
save_item(NAME(m_sry));
|
||||
save_item(NAME(m_a14));
|
||||
save_item(NAME(m_dbin_level));
|
||||
|
||||
// FIXME: In rare occasions, the saved state is invalid and restoring
|
||||
// may crash the emulated 99/8 (e.g. with invalid opcodes)
|
||||
// Saving the wait state logic does not affect the operation, as it seems,
|
||||
// so we leave it out.
|
||||
}
|
||||
|
||||
void vaquerro_device::device_reset()
|
||||
|
@ -238,7 +238,7 @@ private:
|
||||
// DRAM access
|
||||
bool m_skdrcs;
|
||||
|
||||
// Holds the decoding result; essentially names the selected line
|
||||
// Indicates the UP level of the GROMCLK
|
||||
bool m_gromclk_up;
|
||||
|
||||
// Have we got the upper word of the address?
|
||||
|
@ -211,17 +211,40 @@
|
||||
|
||||
geneve_mapper_device::geneve_mapper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, GENEVE_MAPPER, "Geneve Gate Array", tag, owner, clock, "geneve_mapper", __FILE__), m_gromwaddr_LSB(false),
|
||||
m_gromraddr_LSB(false), m_grom_address(0), m_video_waitstates(false),
|
||||
m_extra_waitstates(false), m_ready_asserted(false), m_read_mode(false),
|
||||
m_debug_no_ws(false), m_geneve_mode(false), m_direct_mode(false),
|
||||
m_cartridge_size(0), m_cartridge_secondpage(false),
|
||||
m_cartridge6_writable(false), m_cartridge7_writable(false),
|
||||
m_turbo(false), m_genmod(false), m_timode(false), m_pfm_mode(0),
|
||||
m_pfm_bank(0), m_pfm_output_enable(false), m_sram_mask(0), m_sram_val(0),
|
||||
m_ready(*this), m_waitcount(0), m_ext_waitcount(0),
|
||||
m_clock(nullptr), m_cpu(nullptr), m_pfm512(nullptr),
|
||||
m_pfm512a(nullptr), m_sound(nullptr), m_keyboard(nullptr),
|
||||
m_video(nullptr), m_peribox(nullptr), m_sram(*this, SRAM_PAR_TAG), m_dram(*this, DRAM_PAR_TAG)
|
||||
m_gromraddr_LSB(false),
|
||||
m_grom_address(0),
|
||||
m_video_waitstates(false),
|
||||
m_extra_waitstates(false),
|
||||
m_ready_asserted(false),
|
||||
m_read_mode(false),
|
||||
m_debug_no_ws(false),
|
||||
m_geneve_mode(false),
|
||||
m_direct_mode(false),
|
||||
m_cartridge_size(0),
|
||||
m_cartridge_secondpage(false),
|
||||
m_cartridge6_writable(false),
|
||||
m_cartridge7_writable(false),
|
||||
m_turbo(false),
|
||||
m_genmod(false),
|
||||
m_timode(false),
|
||||
m_pfm_mode(0),
|
||||
m_pfm_bank(0),
|
||||
m_pfm_output_enable(false),
|
||||
m_sram_mask(0),
|
||||
m_sram_val(0),
|
||||
m_ready(*this),
|
||||
m_waitcount(0),
|
||||
m_ext_waitcount(0),
|
||||
m_clock(*owner, GCLOCK_TAG),
|
||||
m_cpu(*owner, "maincpu"),
|
||||
m_pfm512(*owner, PFM512_TAG),
|
||||
m_pfm512a(*owner, PFM512A_TAG),
|
||||
m_sound(*owner, TISOUNDCHIP_TAG),
|
||||
m_keyboard(*owner, GKEYBOARD_TAG),
|
||||
m_video(*owner, VDP_TAG),
|
||||
m_peribox(*owner, PERIBOX_TAG),
|
||||
m_sram(*this, SRAM_PAR_TAG),
|
||||
m_dram(*this, DRAM_PAR_TAG)
|
||||
{
|
||||
m_eprom = nullptr;
|
||||
}
|
||||
@ -1384,19 +1407,7 @@ WRITE_LINE_MEMBER( geneve_mapper_device::pfm_output_enable )
|
||||
|
||||
void geneve_mapper_device::device_start()
|
||||
{
|
||||
// Get pointers
|
||||
m_peribox = machine().device<peribox_device>(PERIBOX_TAG);
|
||||
m_keyboard = machine().device<geneve_keyboard_device>(GKEYBOARD_TAG);
|
||||
m_video = machine().device<v9938_device>(VDP_TAG);
|
||||
m_sound = machine().device<sn76496_base_device>(TISOUNDCHIP_TAG);
|
||||
m_clock = machine().device<mm58274c_device>(GCLOCK_TAG);
|
||||
|
||||
// PFM expansion
|
||||
m_pfm512 = machine().device<at29c040_device>(PFM512_TAG);
|
||||
m_pfm512a = machine().device<at29c040a_device>(PFM512A_TAG);
|
||||
|
||||
m_ready.resolve();
|
||||
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
|
||||
|
||||
m_geneve_mode = false;
|
||||
m_direct_mode = true;
|
||||
@ -1416,6 +1427,13 @@ void geneve_mapper_device::device_start()
|
||||
save_item(NAME(m_cartridge_secondpage));
|
||||
save_item(NAME(m_cartridge6_writable));
|
||||
save_item(NAME(m_cartridge7_writable));
|
||||
save_pointer(NAME(m_map), 8);
|
||||
save_item(NAME(m_decoded.function));
|
||||
save_item(NAME(m_decoded.offset));
|
||||
save_item(NAME(m_decoded.physaddr));
|
||||
save_item(NAME(m_turbo));
|
||||
save_item(NAME(m_genmod));
|
||||
save_item(NAME(m_timode));
|
||||
save_item(NAME(m_pfm_mode));
|
||||
save_item(NAME(m_pfm_bank));
|
||||
save_item(NAME(m_pfm_output_enable));
|
||||
|
@ -203,15 +203,15 @@ private:
|
||||
int m_ext_waitcount;
|
||||
|
||||
// Devices
|
||||
mm58274c_device* m_clock;
|
||||
tms9995_device* m_cpu;
|
||||
at29c040_device* m_pfm512;
|
||||
at29c040a_device* m_pfm512a;
|
||||
sn76496_base_device* m_sound;
|
||||
required_device<mm58274c_device> m_clock;
|
||||
required_device<tms9995_device> m_cpu;
|
||||
required_device<at29c040_device> m_pfm512;
|
||||
required_device<at29c040a_device> m_pfm512a;
|
||||
required_device<sn76496_base_device> m_sound;
|
||||
|
||||
geneve_keyboard_device* m_keyboard;
|
||||
v9938_device* m_video;
|
||||
peribox_device* m_peribox;
|
||||
required_device<geneve_keyboard_device> m_keyboard;
|
||||
required_device<v9938_device> m_video;
|
||||
required_device<peribox_device> m_peribox;
|
||||
uint8_t* m_eprom;
|
||||
required_device<ram_device> m_sram;
|
||||
required_device<ram_device> m_dram;
|
||||
|
@ -71,8 +71,6 @@ void n2a03_device::device_start()
|
||||
else
|
||||
mintf = new mi_2a03_normal;
|
||||
|
||||
m_apu->set_tag_memory(tag());
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ static const struct { const char *mnemonic; Adr adr; } table[]={
|
||||
{ nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr }, { nullptr },
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE( sc61860 )
|
||||
static offs_t internal_disasm_sc61860(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
const uint8_t *base_oprom = oprom;
|
||||
int oper=*(oprom++);
|
||||
@ -161,42 +161,42 @@ CPU_DISASSEMBLE( sc61860 )
|
||||
|
||||
switch(oper&0xc0) {
|
||||
case 0x80:
|
||||
sprintf(buffer,"%-6s%.2x",table[oper&0x80].mnemonic, oper&0x3f);
|
||||
util::stream_format(stream,"%-6s%02x",table[oper&0x80].mnemonic, oper&0x3f);
|
||||
break;
|
||||
default:
|
||||
switch(oper&0xe0) {
|
||||
case 0xe0:
|
||||
sprintf(buffer,"%-6s%.4x",table[oper&0xe0].mnemonic,
|
||||
util::stream_format(stream,"%-6s%04x",table[oper&0xe0].mnemonic,
|
||||
*(oprom++)|((oper&0x1f)<<8));
|
||||
break;
|
||||
default:
|
||||
switch (table[oper].adr) {
|
||||
case Ill: sprintf(buffer,"?%.2x",oper);break;
|
||||
case Imp: sprintf(buffer,"%s",table[oper].mnemonic); break;
|
||||
case Imm: sprintf(buffer,"%-6s%.2x",table[oper].mnemonic, *(oprom++)); break;
|
||||
case Ill: util::stream_format(stream,"?%02x",oper);break;
|
||||
case Imp: util::stream_format(stream,"%s",table[oper].mnemonic); break;
|
||||
case Imm: util::stream_format(stream,"%-6s%02x",table[oper].mnemonic, *(oprom++)); break;
|
||||
case ImmW:
|
||||
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
|
||||
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
|
||||
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
|
||||
break;
|
||||
case Abs:
|
||||
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
|
||||
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr);
|
||||
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr);
|
||||
break;
|
||||
case RelM:
|
||||
adr=pc-*(oprom++);
|
||||
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
|
||||
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
|
||||
break;
|
||||
case RelP:
|
||||
adr=pc+*(oprom++);
|
||||
sprintf(buffer,"%-6s%.4x",table[oper].mnemonic, adr&0xffff);
|
||||
util::stream_format(stream,"%-6s%04x",table[oper].mnemonic, adr&0xffff);
|
||||
break;
|
||||
case Ptc:
|
||||
t=*(oprom++);
|
||||
adr=(oprom[0]<<8)|oprom[1];oprom+=2;
|
||||
sprintf(buffer,"%-6s%.2x,%.4x",table[oper].mnemonic,t, adr);
|
||||
util::stream_format(stream,"%-6s%02x,%04x",table[oper].mnemonic,t, adr);
|
||||
break;
|
||||
case Etc:
|
||||
sprintf(buffer,"%-6s",table[oper].mnemonic);
|
||||
util::stream_format(stream,"%-6s",table[oper].mnemonic);
|
||||
/*H imm, abs */
|
||||
/* abs */
|
||||
break;
|
||||
@ -208,3 +208,13 @@ CPU_DISASSEMBLE( sc61860 )
|
||||
}
|
||||
return oprom - base_oprom;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(sc61860)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_sc61860(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ static void InitDasm32010(void)
|
||||
OpInizialized = 1;
|
||||
}
|
||||
|
||||
CPU_DISASSEMBLE( tms32010 )
|
||||
static offs_t internal_disasm_tms32010(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
uint32_t flags = 0;
|
||||
int a, b, d, k, m, n, p, r, s, w; /* these can all be filled in by parsing an instruction */
|
||||
@ -252,7 +252,7 @@ CPU_DISASSEMBLE( tms32010 )
|
||||
}
|
||||
if (op == -1)
|
||||
{
|
||||
sprintf(buffer, "dw %04Xh *(invalid op)", code);
|
||||
util::stream_format(stream, "dw %04Xh *(invalid op)", code);
|
||||
return cnt | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
//buffertmp = buffer;
|
||||
@ -306,7 +306,7 @@ CPU_DISASSEMBLE( tms32010 )
|
||||
{
|
||||
if (*cp == '%')
|
||||
{
|
||||
char num[20], *q;
|
||||
char num[20];
|
||||
cp++;
|
||||
switch (*cp++)
|
||||
{
|
||||
@ -323,14 +323,22 @@ CPU_DISASSEMBLE( tms32010 )
|
||||
default:
|
||||
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
|
||||
}
|
||||
q = num; while (*q) *buffer++ = *q++;
|
||||
*buffer = '\0';
|
||||
stream << num;
|
||||
}
|
||||
else
|
||||
{
|
||||
*buffer++ = *cp++;
|
||||
*buffer = '\0';
|
||||
stream << *cp++;
|
||||
}
|
||||
}
|
||||
return cnt | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(tms32010)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_tms32010(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -387,7 +387,7 @@ static void InitDasm32025(void)
|
||||
OpInizialized = 1;
|
||||
}
|
||||
|
||||
CPU_DISASSEMBLE( tms32025 )
|
||||
static offs_t internal_disasm_tms32025(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
uint32_t flags = 0;
|
||||
int a, b, c, d, k, m, n, p, r, s, t, w; /* these can all be filled in by parsing an instruction */
|
||||
@ -417,7 +417,7 @@ CPU_DISASSEMBLE( tms32025 )
|
||||
}
|
||||
if (op == -1)
|
||||
{
|
||||
sprintf(buffer,"???? dw %04Xh",code);
|
||||
util::stream_format(stream, "???? dw %04Xh",code);
|
||||
return cnt | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
//buffertmp = buffer;
|
||||
@ -474,7 +474,7 @@ CPU_DISASSEMBLE( tms32025 )
|
||||
{
|
||||
if (*cp == '%')
|
||||
{
|
||||
char num[30], *q;
|
||||
char num[30];
|
||||
cp++;
|
||||
switch (*cp++)
|
||||
{
|
||||
@ -494,14 +494,22 @@ CPU_DISASSEMBLE( tms32025 )
|
||||
default:
|
||||
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
|
||||
}
|
||||
q = num; while (*q) *buffer++ = *q++;
|
||||
*buffer = '\0';
|
||||
stream << num;
|
||||
}
|
||||
else
|
||||
{
|
||||
*buffer++ = *cp++;
|
||||
*buffer = '\0';
|
||||
stream << *cp++;
|
||||
}
|
||||
}
|
||||
return cnt | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(tms32025)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_tms32025(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ static const tms7000_opcodeinfo opcodes[] = {
|
||||
{0x00, "NOP", 23, 0 }
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE( tms7000 )
|
||||
static offs_t internal_disasm_tms7000(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
int opcode, i/*, size = 1*/;
|
||||
int pos = 0;
|
||||
@ -387,7 +387,7 @@ CPU_DISASSEMBLE( tms7000 )
|
||||
uint16_t c;
|
||||
int16_t d;
|
||||
|
||||
buffer += sprintf (buffer, "%s", opcodes[i].name);
|
||||
util::stream_format(stream, "%s", opcodes[i].name);
|
||||
|
||||
j=opcodes[i].operand;
|
||||
|
||||
@ -398,39 +398,39 @@ CPU_DISASSEMBLE( tms7000 )
|
||||
case DONE:
|
||||
break;
|
||||
case NONE:
|
||||
buffer += sprintf (buffer, "%s", of[j].opstr[k]);
|
||||
util::stream_format(stream, "%s", of[j].opstr[k]);
|
||||
break;
|
||||
case UI8:
|
||||
a = (uint8_t)opram[pos++];
|
||||
buffer += sprintf(buffer, of[j].opstr[k], (unsigned int)a);
|
||||
util::stream_format(stream, of[j].opstr[k], (unsigned int)a);
|
||||
break;
|
||||
case I8:
|
||||
b = (int8_t)opram[pos++];
|
||||
buffer += sprintf (buffer, of[j].opstr[k], (int8_t)b);
|
||||
util::stream_format(stream, of[j].opstr[k], (int8_t)b);
|
||||
break;
|
||||
case UI16:
|
||||
c = (uint16_t)opram[pos++];
|
||||
c <<= 8;
|
||||
c += opram[pos++];
|
||||
buffer += sprintf (buffer, of[j].opstr[k], (unsigned int)c);
|
||||
util::stream_format(stream, of[j].opstr[k], (unsigned int)c);
|
||||
break;
|
||||
case I16:
|
||||
d = (int16_t)opram[pos++];
|
||||
d <<= 8;
|
||||
d += opram[pos++];
|
||||
buffer += sprintf (buffer, of[j].opstr[k], (signed int)d);
|
||||
util::stream_format(stream, of[j].opstr[k], (signed int)d);
|
||||
break;
|
||||
case PCREL:
|
||||
b = (int8_t)opram[pos++];
|
||||
sprintf(tmpbuf, "$%04X", pc+2+k+b);
|
||||
buffer += sprintf (buffer, of[j].opstr[k], tmpbuf);
|
||||
util::stream_format(stream, of[j].opstr[k], tmpbuf);
|
||||
break;
|
||||
case PCABS:
|
||||
c = (uint16_t)opram[pos++];
|
||||
c <<= 8;
|
||||
c += opram[pos++];
|
||||
sprintf(tmpbuf, "$%04X", c);
|
||||
buffer += sprintf (buffer, of[j].opstr[k], tmpbuf);
|
||||
util::stream_format(stream, of[j].opstr[k], tmpbuf);
|
||||
break;
|
||||
case TRAP:
|
||||
vector = 0xffff - ((0xff - opcode) * 2);
|
||||
@ -443,6 +443,16 @@ CPU_DISASSEMBLE( tms7000 )
|
||||
}
|
||||
|
||||
/* No Match */
|
||||
strcpy (buffer, "Illegal Opcode");
|
||||
stream << "Illegal Opcode";
|
||||
return pos | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(tms7000)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_tms7000(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -113,14 +113,13 @@ static const uint8_t ucom4_mnemonic[0x100] =
|
||||
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(ucom4)
|
||||
static offs_t internal_disasm_ucom4(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
int pos = 0;
|
||||
uint8_t op = oprom[pos++];
|
||||
uint8_t instr = ucom4_mnemonic[op];
|
||||
|
||||
char *dst = buffer;
|
||||
dst += sprintf(dst, "%-4s ", s_mnemonics[instr]);
|
||||
util::stream_format(stream,"%-4s ", s_mnemonics[instr]);
|
||||
|
||||
// opcode parameter
|
||||
int bits = s_bits[instr];
|
||||
@ -142,12 +141,22 @@ CPU_DISASSEMBLE(ucom4)
|
||||
}
|
||||
|
||||
if (bits <= 4)
|
||||
dst += sprintf(dst, "%d", param);
|
||||
util::stream_format(stream, "%d", param);
|
||||
else if (bits <= 8)
|
||||
dst += sprintf(dst, "$%02X", param);
|
||||
util::stream_format(stream, "$%02X", param);
|
||||
else
|
||||
dst += sprintf(dst, "$%03X", param);
|
||||
util::stream_format(stream, "$%03X", param);
|
||||
}
|
||||
|
||||
return pos | s_flags[instr] | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(ucom4)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_ucom4(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -11,17 +11,6 @@
|
||||
#include "emu.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
static char *output;
|
||||
|
||||
static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
|
||||
{
|
||||
va_list vl;
|
||||
|
||||
va_start(vl, fmt);
|
||||
vsprintf(output, fmt, vl);
|
||||
va_end(vl);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const char *reg[] =
|
||||
@ -57,20 +46,16 @@ static const char *alu[] =
|
||||
|
||||
#define UNSP_DASM_OK ((OP2X ? 2 : 1) | DASMFLAG_SUPPORTED)
|
||||
|
||||
CPU_DISASSEMBLE( unsp )
|
||||
static offs_t internal_disasm_unsp(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
uint16_t op = *(uint16_t *)oprom;
|
||||
uint16_t imm16 = *(uint16_t *)(oprom + 2);
|
||||
op = big_endianize_int16(op);
|
||||
imm16 = big_endianize_int16(imm16);
|
||||
|
||||
output = buffer;
|
||||
|
||||
print("<inv>");
|
||||
|
||||
if(OP0 < 0xf && OPA == 0x7 && OP1 < 2)
|
||||
{
|
||||
print("%s %04x", jmp[OP0], OP1 ? (pc - OPIMM + 1) : (pc + OPIMM + 1));
|
||||
util::stream_format(stream, "%s %04x", jmp[OP0], OP1 ? (pc - OPIMM + 1) : (pc + OPIMM + 1));
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
|
||||
@ -78,29 +63,29 @@ CPU_DISASSEMBLE( unsp )
|
||||
{
|
||||
// ALU, Indexed
|
||||
case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x06: case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d:
|
||||
print("%s %s, [bp+%02x]", alu[OP0], reg[OPA], OPIMM);
|
||||
util::stream_format(stream, "%s %s, [bp+%02x]", alu[OP0], reg[OPA], OPIMM);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Immediate
|
||||
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x16: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c:
|
||||
print("%s %s, %02x", alu[OP0], reg[OPA], OPIMM);
|
||||
util::stream_format(stream, "%s %s, %02x", alu[OP0], reg[OPA], OPIMM);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Pop / Interrupt return
|
||||
case 0x29:
|
||||
if(op == 0x9a90)
|
||||
{
|
||||
print("retf");
|
||||
util::stream_format(stream, "retf");
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
else if(op == 0x9a98)
|
||||
{
|
||||
print("reti");
|
||||
util::stream_format(stream, "reti");
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
else if((OPA + 1) < 8 && ((OPA + OPN) < 8))
|
||||
{
|
||||
print("pop %s, %s [%s]", reg[OPA+1], reg[OPA+OPN], reg[OPB]);
|
||||
util::stream_format(stream, "pop %s, %s [%s]", reg[OPA+1], reg[OPA+OPN], reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
break;
|
||||
@ -109,7 +94,7 @@ CPU_DISASSEMBLE( unsp )
|
||||
case 0x2d:
|
||||
if((OPA + 1) >= OPN && OPA < (OPN + 7))
|
||||
{
|
||||
print("push %s, %s [%s]", reg[(OPA+1)-OPN], reg[OPA], reg[OPB]);
|
||||
util::stream_format(stream, "push %s, %s [%s]", reg[(OPA+1)-OPN], reg[OPA], reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
break;
|
||||
@ -119,16 +104,16 @@ CPU_DISASSEMBLE( unsp )
|
||||
switch(OPN & 3)
|
||||
{
|
||||
case 0:
|
||||
print("%s %s, [%s%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
util::stream_format(stream, "%s %s, [%s%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
case 1:
|
||||
print("%s %s, [%s%s--]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
util::stream_format(stream, "%s %s, [%s%s--]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
case 2:
|
||||
print("%s %s, [%s%s++]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
util::stream_format(stream, "%s %s, [%s%s++]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
case 3:
|
||||
print("%s %s, [%s++%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
util::stream_format(stream, "%s %s, [%s++%s]", alu[OP0], reg[OPA], (OPN & 4) ? "ds:" : "", reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
return UNSP_DASM_OK;
|
||||
@ -139,7 +124,7 @@ CPU_DISASSEMBLE( unsp )
|
||||
{
|
||||
// ALU, Register
|
||||
case 0:
|
||||
print("%s %s, %s", alu[OP0], reg[OPA], reg[OPB]);
|
||||
util::stream_format(stream, "%s %s, %s", alu[OP0], reg[OPA], reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, 16-bit Immediate
|
||||
@ -148,12 +133,12 @@ CPU_DISASSEMBLE( unsp )
|
||||
{
|
||||
if(OP0 != 4 && OP0 != 12)
|
||||
{
|
||||
print("%s %s, %s, %04x", alu[OP0], reg[OPA], reg[OPB], imm16);
|
||||
util::stream_format(stream, "%s %s, %s, %04x", alu[OP0], reg[OPA], reg[OPB], imm16);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
print("%s %s, %04x", alu[OP0], reg[OPB], imm16);
|
||||
util::stream_format(stream, "%s %s, %04x", alu[OP0], reg[OPB], imm16);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
}
|
||||
@ -161,74 +146,71 @@ CPU_DISASSEMBLE( unsp )
|
||||
|
||||
// ALU, Direct 16
|
||||
case 2:
|
||||
print("%s %s, [%04x]", alu[OP0], reg[OPA], imm16);
|
||||
util::stream_format(stream, "%s %s, [%04x]", alu[OP0], reg[OPA], imm16);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Direct 16
|
||||
case 3:
|
||||
print("%s [%04x], %s, %s", alu[OP0], imm16, reg[OPA], reg[OPB]);
|
||||
util::stream_format(stream, "%s [%04x], %s, %s", alu[OP0], imm16, reg[OPA], reg[OPB]);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Shifted
|
||||
default:
|
||||
print("%s %s, %s asr %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 3) + 1);
|
||||
util::stream_format(stream, "%s %s, %s asr %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 3) + 1);
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
case 0x4d:
|
||||
if(OPN == 3)
|
||||
{
|
||||
if(OPA == OPB)
|
||||
{
|
||||
print("store [%04x], %s", imm16, reg[OPB]);
|
||||
}
|
||||
}
|
||||
if((OPN == 3) && (OPA == OPB))
|
||||
util::stream_format(stream, "store [%04x], %s", imm16, reg[OPB]);
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Shifted
|
||||
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x56: case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c:
|
||||
print("%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? ">>" : "<<", (OPN & 3) + 1);
|
||||
util::stream_format(stream, "%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? ">>" : "<<", (OPN & 3) + 1);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Rotated
|
||||
case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x66: case 0x68: case 0x69: case 0x6a: case 0x6b: case 0x6c:
|
||||
print("%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? "ror" : "rol", (OPN & 3) + 1);
|
||||
util::stream_format(stream, "%s %s, %s %s %d", alu[OP0], reg[OPA], reg[OPB], (OPN & 4) ? "ror" : "rol", (OPN & 3) + 1);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// ALU, Direct 8
|
||||
case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x76: case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c:
|
||||
print("%s %s, [%02x]", alu[OP0], reg[OPA], OPIMM);
|
||||
util::stream_format(stream, "%s %s, [%02x]", alu[OP0], reg[OPA], OPIMM);
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Call
|
||||
case 0x1f:
|
||||
if(OPA == 0)
|
||||
{
|
||||
print("call %06x", ((OPIMM << 16) | imm16) << 1);
|
||||
}
|
||||
util::stream_format(stream, "call %06x", ((OPIMM << 16) | imm16) << 1);
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Far Jump
|
||||
case 0x2f: case 0x3f: case 0x6f: case 0x7f:
|
||||
if (OPA == 7 && OP1 == 2)
|
||||
{
|
||||
print("goto %06x", ((OPIMM << 16) | imm16) << 1);
|
||||
}
|
||||
util::stream_format(stream, "goto %06x", ((OPIMM << 16) | imm16) << 1);
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Multiply, Unsigned * Signed
|
||||
case 0x0f:
|
||||
if(OPN == 1 && OPA != 7)
|
||||
{
|
||||
print("mulus %s, %s", reg[OPA], reg[OPB]);
|
||||
}
|
||||
util::stream_format(stream, "mulus %s, %s", reg[OPA], reg[OPB]);
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Multiply, Signed * Signed
|
||||
case 0x4f:
|
||||
if(OPN == 1 && OPA != 7)
|
||||
{
|
||||
print("mulss %s, %s", reg[OPA], reg[OPB]);
|
||||
}
|
||||
util::stream_format(stream, "mulss %s, %s", reg[OPA], reg[OPB]);
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
|
||||
// Interrupt flags
|
||||
@ -238,35 +220,51 @@ CPU_DISASSEMBLE( unsp )
|
||||
switch(OPIMM)
|
||||
{
|
||||
case 0:
|
||||
print("int off");
|
||||
util::stream_format(stream, "int off");
|
||||
break;
|
||||
case 1:
|
||||
print("int irq");
|
||||
util::stream_format(stream, "int irq");
|
||||
break;
|
||||
case 2:
|
||||
print("int fiq");
|
||||
util::stream_format(stream, "int fiq");
|
||||
break;
|
||||
case 3:
|
||||
print("int irq,fiq");
|
||||
util::stream_format(stream, "int irq,fiq");
|
||||
break;
|
||||
case 8:
|
||||
print("irq off");
|
||||
util::stream_format(stream, "irq off");
|
||||
break;
|
||||
case 9:
|
||||
print("irq on");
|
||||
util::stream_format(stream, "irq on");
|
||||
break;
|
||||
case 12:
|
||||
print("fiq off");
|
||||
util::stream_format(stream, "fiq off");
|
||||
break;
|
||||
case 14:
|
||||
print("fiq on");
|
||||
util::stream_format(stream, "fiq on");
|
||||
break;
|
||||
case 37:
|
||||
print("nop");
|
||||
util::stream_format(stream, "nop");
|
||||
break;
|
||||
default:
|
||||
util::stream_format(stream, "<inv>");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
util::stream_format(stream, "<inv>");
|
||||
return UNSP_DASM_OK;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(unsp)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_unsp(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ static const char *const dRegs[]=
|
||||
#define GET2s(opcode) dRegs[((opcode)>>5)&0x1f]
|
||||
#define GETRs(opcode) dRegs[32+((opcode)&0x1f)]
|
||||
|
||||
CPU_DISASSEMBLE( v810 )
|
||||
static offs_t internal_disasm_v810(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
uint32_t flags = 0;
|
||||
uint32_t opc,opc2;
|
||||
@ -49,56 +49,56 @@ CPU_DISASSEMBLE( v810 )
|
||||
|
||||
switch(opc>>10)
|
||||
{
|
||||
case 0x00: sprintf(buffer,"MOV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x01: sprintf(buffer,"ADD %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x02: sprintf(buffer,"SUB %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x03: sprintf(buffer,"CMP %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x04: sprintf(buffer,"SHL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x05: sprintf(buffer,"SHR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x06: sprintf(buffer,"JMP [%s]",GET1s(opc)); size=2; if ((opc&0x1f) == 31) flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x07: sprintf(buffer,"SAR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x08: sprintf(buffer,"MUL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x09: sprintf(buffer,"DIV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0a: sprintf(buffer,"MULU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0b: sprintf(buffer,"DIVU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0c: sprintf(buffer,"OR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0d: sprintf(buffer,"AND %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0e: sprintf(buffer,"XOR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0f: sprintf(buffer,"NOT %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x10: sprintf(buffer,"MOV %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x11: sprintf(buffer,"ADD %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x12: sprintf(buffer,"SETF %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x13: sprintf(buffer,"CMP %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x14: sprintf(buffer,"SHL %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x15: sprintf(buffer,"SHR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x16: sprintf(buffer,"EI"); size=2; break;
|
||||
case 0x17: sprintf(buffer,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x18: sprintf(buffer,"TRAP %X",I5(opc)); size=2; break;
|
||||
case 0x19: sprintf(buffer,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x1a: sprintf(buffer,"HALT"); size=2; break;
|
||||
case 0x1b: sprintf(buffer,"Unk 0x1B"); size=2; break;
|
||||
case 0x1c: sprintf(buffer,"LDSR %s,%s",GET2s(opc),GETRs(opc));size=2; break;
|
||||
case 0x1d: sprintf(buffer,"STSR %s,%s",GETRs(opc),GET2s(opc));size=2; break;
|
||||
case 0x1e: sprintf(buffer,"DI"); size=2; break;
|
||||
case 0x00: util::stream_format(stream,"MOV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x01: util::stream_format(stream,"ADD %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x02: util::stream_format(stream,"SUB %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x03: util::stream_format(stream,"CMP %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x04: util::stream_format(stream,"SHL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x05: util::stream_format(stream,"SHR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x06: util::stream_format(stream,"JMP [%s]",GET1s(opc)); size=2; if ((opc&0x1f) == 31) flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x07: util::stream_format(stream,"SAR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x08: util::stream_format(stream,"MUL %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x09: util::stream_format(stream,"DIV %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0a: util::stream_format(stream,"MULU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0b: util::stream_format(stream,"DIVU %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0c: util::stream_format(stream,"OR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0d: util::stream_format(stream,"AND %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0e: util::stream_format(stream,"XOR %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x0f: util::stream_format(stream,"NOT %s,%s",GET1s(opc),GET2s(opc)); size=2; break;
|
||||
case 0x10: util::stream_format(stream,"MOV %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x11: util::stream_format(stream,"ADD %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x12: util::stream_format(stream,"SETF %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x13: util::stream_format(stream,"CMP %X,%s",I5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x14: util::stream_format(stream,"SHL %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x15: util::stream_format(stream,"SHR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x16: util::stream_format(stream,"EI"); size=2; break;
|
||||
case 0x17: util::stream_format(stream,"SAR %X,%s",UI5(opc),GET2s(opc)); size=2; break;
|
||||
case 0x18: util::stream_format(stream,"TRAP %X",I5(opc)); size=2; break;
|
||||
case 0x19: util::stream_format(stream,"RETI"); size=2; flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x1a: util::stream_format(stream,"HALT"); size=2; break;
|
||||
case 0x1b: util::stream_format(stream,"Unk 0x1B"); size=2; break;
|
||||
case 0x1c: util::stream_format(stream,"LDSR %s,%s",GET2s(opc),GETRs(opc));size=2; break;
|
||||
case 0x1d: util::stream_format(stream,"STSR %s,%s",GETRs(opc),GET2s(opc));size=2; break;
|
||||
case 0x1e: util::stream_format(stream,"DI"); size=2; break;
|
||||
case 0x1f:
|
||||
switch(opc&0x1f)
|
||||
{
|
||||
case 0x00: sprintf(buffer,"SCH0BSU"); break;
|
||||
case 0x01: sprintf(buffer,"SCH0BSD"); break;
|
||||
case 0x02: sprintf(buffer,"SCH1BSU"); break;
|
||||
case 0x03: sprintf(buffer,"SCH1BSD"); break;
|
||||
case 0x04: sprintf(buffer,"UnkS 4"); break;
|
||||
case 0x05: sprintf(buffer,"UnkS 5"); break;
|
||||
case 0x06: sprintf(buffer,"UnkS 6"); break;
|
||||
case 0x08: sprintf(buffer,"ORBSU"); break;
|
||||
case 0x09: sprintf(buffer,"ANDBSU"); break;
|
||||
case 0x0a: sprintf(buffer,"XORBSU"); break;
|
||||
case 0x0b: sprintf(buffer,"MOVBSU"); break;
|
||||
case 0x0c: sprintf(buffer,"ORNBSU"); break;
|
||||
case 0x0d: sprintf(buffer,"ANDNBSU"); break;
|
||||
case 0x0e: sprintf(buffer,"XORNBSU"); break;
|
||||
case 0x0f: sprintf(buffer,"NOTBSU"); break;
|
||||
default: sprintf(buffer,"UnkBS 0x%X",opc&0x1f); break;
|
||||
case 0x00: util::stream_format(stream,"SCH0BSU"); break;
|
||||
case 0x01: util::stream_format(stream,"SCH0BSD"); break;
|
||||
case 0x02: util::stream_format(stream,"SCH1BSU"); break;
|
||||
case 0x03: util::stream_format(stream,"SCH1BSD"); break;
|
||||
case 0x04: util::stream_format(stream,"UnkS 4"); break;
|
||||
case 0x05: util::stream_format(stream,"UnkS 5"); break;
|
||||
case 0x06: util::stream_format(stream,"UnkS 6"); break;
|
||||
case 0x08: util::stream_format(stream,"ORBSU"); break;
|
||||
case 0x09: util::stream_format(stream,"ANDBSU"); break;
|
||||
case 0x0a: util::stream_format(stream,"XORBSU"); break;
|
||||
case 0x0b: util::stream_format(stream,"MOVBSU"); break;
|
||||
case 0x0c: util::stream_format(stream,"ORNBSU"); break;
|
||||
case 0x0d: util::stream_format(stream,"ANDNBSU"); break;
|
||||
case 0x0e: util::stream_format(stream,"XORNBSU"); break;
|
||||
case 0x0f: util::stream_format(stream,"NOTBSU"); break;
|
||||
default: util::stream_format(stream,"UnkBS 0x%X",opc&0x1f); break;
|
||||
}
|
||||
size=2;
|
||||
break;
|
||||
@ -111,67 +111,77 @@ CPU_DISASSEMBLE( v810 )
|
||||
case 0x26:
|
||||
case 0x27: switch( (opc>>9) &0xf)
|
||||
{
|
||||
case 0x0: sprintf(buffer,"BV %X",pc+D9(opc)); break;
|
||||
case 0x1: sprintf(buffer,"BL %X",pc+D9(opc)); break;
|
||||
case 0x2: sprintf(buffer,"BE %X",pc+D9(opc)); break;
|
||||
case 0x3: sprintf(buffer,"BNH %X",pc+D9(opc)); break;
|
||||
case 0x4: sprintf(buffer,"BN %X",pc+D9(opc)); break;
|
||||
case 0x5: sprintf(buffer,"BR %X",pc+D9(opc)); break;
|
||||
case 0x6: sprintf(buffer,"BLT %X",pc+D9(opc)); break;
|
||||
case 0x7: sprintf(buffer,"BLE %X",pc+D9(opc)); break;
|
||||
case 0x8: sprintf(buffer,"BNV %X",pc+D9(opc)); break;
|
||||
case 0x9: sprintf(buffer,"BNL %X",pc+D9(opc)); break;
|
||||
case 0xa: sprintf(buffer,"BNE %X",pc+D9(opc)); break;
|
||||
case 0xb: sprintf(buffer,"BH %X",pc+D9(opc)); break;
|
||||
case 0xc: sprintf(buffer,"BP %X",pc+D9(opc)); break;
|
||||
case 0xd: sprintf(buffer,"NOP"); break;
|
||||
case 0xe: sprintf(buffer,"BGE %X",pc+D9(opc)); break;
|
||||
case 0xf: sprintf(buffer,"BGT %X",pc+D9(opc)); break;
|
||||
case 0x0: util::stream_format(stream,"BV %X",pc+D9(opc)); break;
|
||||
case 0x1: util::stream_format(stream,"BL %X",pc+D9(opc)); break;
|
||||
case 0x2: util::stream_format(stream,"BE %X",pc+D9(opc)); break;
|
||||
case 0x3: util::stream_format(stream,"BNH %X",pc+D9(opc)); break;
|
||||
case 0x4: util::stream_format(stream,"BN %X",pc+D9(opc)); break;
|
||||
case 0x5: util::stream_format(stream,"BR %X",pc+D9(opc)); break;
|
||||
case 0x6: util::stream_format(stream,"BLT %X",pc+D9(opc)); break;
|
||||
case 0x7: util::stream_format(stream,"BLE %X",pc+D9(opc)); break;
|
||||
case 0x8: util::stream_format(stream,"BNV %X",pc+D9(opc)); break;
|
||||
case 0x9: util::stream_format(stream,"BNL %X",pc+D9(opc)); break;
|
||||
case 0xa: util::stream_format(stream,"BNE %X",pc+D9(opc)); break;
|
||||
case 0xb: util::stream_format(stream,"BH %X",pc+D9(opc)); break;
|
||||
case 0xc: util::stream_format(stream,"BP %X",pc+D9(opc)); break;
|
||||
case 0xd: util::stream_format(stream,"NOP"); break;
|
||||
case 0xe: util::stream_format(stream,"BGE %X",pc+D9(opc)); break;
|
||||
case 0xf: util::stream_format(stream,"BGT %X",pc+D9(opc)); break;
|
||||
}
|
||||
size=2;
|
||||
break;
|
||||
|
||||
case 0x28: sprintf(buffer,"MOVEA %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x29: sprintf(buffer,"ADDI %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2a: sprintf(buffer,"JR %X",pc+D26(opc,opc2));size=4; break;
|
||||
case 0x2b: sprintf(buffer,"JAL %X",pc+D26(opc,opc2));size=4; flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x2c: sprintf(buffer,"ORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2d: sprintf(buffer,"ANDI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2e: sprintf(buffer,"XORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2f: sprintf(buffer,"MOVHI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x30: sprintf(buffer,"LDB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x31: sprintf(buffer,"LDH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x32: sprintf(buffer,"Unk 0x32"); size=2; break;
|
||||
case 0x33: sprintf(buffer,"LDW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x34: sprintf(buffer,"STB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x35: sprintf(buffer,"STH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x36: sprintf(buffer,"Unk 0x36"); size=2; break;
|
||||
case 0x37: sprintf(buffer,"STW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x38: sprintf(buffer,"INB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x39: sprintf(buffer,"INH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x3a: sprintf(buffer,"CAXI %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x3b: sprintf(buffer,"INW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x28: util::stream_format(stream,"MOVEA %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x29: util::stream_format(stream,"ADDI %X, %s, %s",I16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2a: util::stream_format(stream,"JR %X",pc+D26(opc,opc2));size=4; break;
|
||||
case 0x2b: util::stream_format(stream,"JAL %X",pc+D26(opc,opc2));size=4; flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x2c: util::stream_format(stream,"ORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2d: util::stream_format(stream,"ANDI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2e: util::stream_format(stream,"XORI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x2f: util::stream_format(stream,"MOVHI %X, %s, %s",UI16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x30: util::stream_format(stream,"LDB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x31: util::stream_format(stream,"LDH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x32: util::stream_format(stream,"Unk 0x32"); size=2; break;
|
||||
case 0x33: util::stream_format(stream,"LDW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x34: util::stream_format(stream,"STB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x35: util::stream_format(stream,"STH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x36: util::stream_format(stream,"Unk 0x36"); size=2; break;
|
||||
case 0x37: util::stream_format(stream,"STW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x38: util::stream_format(stream,"INB %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x39: util::stream_format(stream,"INH %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x3a: util::stream_format(stream,"CAXI %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
case 0x3b: util::stream_format(stream,"INW %X[%s], %s",D16(opc2),GET1s(opc),GET2s(opc));size=4; break;
|
||||
|
||||
case 0x3c: sprintf(buffer,"OUTB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x3d: sprintf(buffer,"OUTH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x3c: util::stream_format(stream,"OUTB %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x3d: util::stream_format(stream,"OUTH %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x3e:
|
||||
switch((opc2&0xfc00)>>10)
|
||||
{
|
||||
case 0x0: sprintf(buffer,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x2: sprintf(buffer,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x3: sprintf(buffer,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x4: sprintf(buffer,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x5: sprintf(buffer,"SUBF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x6: sprintf(buffer,"MULF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x7: sprintf(buffer,"DIVF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0xb: sprintf(buffer,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
default : sprintf(buffer,"Unkf 0x%X",(opc2&0xfc00)>>10); break;
|
||||
case 0x0: util::stream_format(stream,"CMPF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x2: util::stream_format(stream,"CVT.WS %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x3: util::stream_format(stream,"CVT.SW %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x4: util::stream_format(stream,"ADDF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x5: util::stream_format(stream,"SUBF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x6: util::stream_format(stream,"MULF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0x7: util::stream_format(stream,"DIVF.S %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
case 0xb: util::stream_format(stream,"TRNC.SW %s, %s",GET1s(opc),GET2s(opc)); break;
|
||||
default : util::stream_format(stream,"Unkf 0x%X",(opc2&0xfc00)>>10); break;
|
||||
}
|
||||
size=4;
|
||||
break;
|
||||
case 0x3f: sprintf(buffer,"OUTW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
case 0x3f: util::stream_format(stream,"OUTW %s, %X[%s]",GET2s(opc),D16(opc2),GET1s(opc));size=4; break;
|
||||
|
||||
default : size=2;
|
||||
}
|
||||
return size | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(v810)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_v810(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -391,11 +391,10 @@ static int offs(int8_t offset)
|
||||
/****************************************************************************
|
||||
* Disassemble opcode at PC and return number of bytes it takes
|
||||
****************************************************************************/
|
||||
CPU_DISASSEMBLE( z180 )
|
||||
static offs_t internal_disasm_z180(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
const z80dasm *d;
|
||||
const char *src, *ixy;
|
||||
char *dst;
|
||||
unsigned PC = pc;
|
||||
int8_t offset = 0;
|
||||
uint8_t op, op1 = 0;
|
||||
@ -404,7 +403,6 @@ CPU_DISASSEMBLE( z180 )
|
||||
uint32_t flags = 0;
|
||||
|
||||
ixy = "oops!!";
|
||||
dst = buffer;
|
||||
|
||||
op = oprom[pos++];
|
||||
|
||||
@ -447,64 +445,63 @@ CPU_DISASSEMBLE( z180 )
|
||||
|
||||
if( d->arguments )
|
||||
{
|
||||
dst += sprintf(dst, "%-5s ", s_mnemonic[d->mnemonic]);
|
||||
util::stream_format(stream, "%-5s ", s_mnemonic[d->mnemonic]);
|
||||
src = d->arguments;
|
||||
while( *src )
|
||||
{
|
||||
switch( *src )
|
||||
{
|
||||
case '?': /* illegal opcode */
|
||||
dst += sprintf( dst, "$%02x,$%02x", op, op1);
|
||||
util::stream_format(stream, "$%02x,$%02x", op, op1);
|
||||
break;
|
||||
case 'A':
|
||||
ea = opram[pos] + ( opram[pos+1] << 8);
|
||||
ea = opram[pos] + (opram[pos+1] << 8);
|
||||
pos += 2;
|
||||
dst += sprintf( dst, "$%04X", ea );
|
||||
util::stream_format(stream, "$%04X", ea);
|
||||
break;
|
||||
case 'B': /* Byte op arg */
|
||||
ea = opram[pos++];
|
||||
dst += sprintf( dst, "$%02X", ea );
|
||||
util::stream_format(stream, "$%02X", ea);
|
||||
break;
|
||||
case 'N': /* Immediate 16 bit */
|
||||
ea = opram[pos] + ( opram[pos+1] << 8 );
|
||||
pos += 2;
|
||||
dst += sprintf( dst, "$%04X", ea );
|
||||
util::stream_format(stream, "$%04X", ea);
|
||||
break;
|
||||
case 'O': /* Offset relative to PC */
|
||||
offset = (int8_t) opram[pos++];
|
||||
dst += sprintf( dst, "$%05X", PC + offset + 2 );
|
||||
util::stream_format(stream, "$%05X", PC + offset + 2);
|
||||
break;
|
||||
case 'P': /* Port number */
|
||||
ea = opram[pos++];
|
||||
dst += sprintf( dst, "$%02X", ea );
|
||||
util::stream_format(stream, "$%02X", ea);
|
||||
break;
|
||||
case 'V': /* Restart vector */
|
||||
ea = op & 0x38;
|
||||
dst += sprintf( dst, "$%02X", ea );
|
||||
util::stream_format(stream, "$%02X", ea);
|
||||
break;
|
||||
case 'W': /* Memory address word */
|
||||
ea = opram[pos] + ( opram[pos+1] << 8);
|
||||
ea = opram[pos] + (opram[pos+1] << 8);
|
||||
pos += 2;
|
||||
dst += sprintf( dst, "$%05X", ea );
|
||||
util::stream_format(stream, "$%05X", ea);
|
||||
break;
|
||||
case 'X':
|
||||
offset = (int8_t) opram[pos++];
|
||||
case 'Y':
|
||||
dst += sprintf( dst,"(%s%c$%02x)", ixy, sign(offset), offs(offset) );
|
||||
util::stream_format(stream,"(%s%c$%02x)", ixy, sign(offset), offs(offset));
|
||||
break;
|
||||
case 'I':
|
||||
dst += sprintf( dst, "%s", ixy);
|
||||
util::stream_format(stream, "%s", ixy);
|
||||
break;
|
||||
default:
|
||||
*dst++ = *src;
|
||||
stream << *src;
|
||||
}
|
||||
src++;
|
||||
}
|
||||
*dst = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
dst += sprintf(dst, "%s", s_mnemonic[d->mnemonic]);
|
||||
util::stream_format(stream, "%s", s_mnemonic[d->mnemonic]);
|
||||
}
|
||||
|
||||
if (d->mnemonic == zCALL || d->mnemonic == zCPDR || d->mnemonic == zCPIR || d->mnemonic == zDJNZ ||
|
||||
@ -516,3 +513,13 @@ CPU_DISASSEMBLE( z180 )
|
||||
|
||||
return pos | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(z180)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_z180(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ static const char *const CONDITION_CODE[16] =
|
||||
#define B0L (B0 & 0x0f)
|
||||
#define OPH (opcode >> 4)
|
||||
|
||||
#define ARG(_formatting, _value) { if (argc) dst += sprintf(dst, ", "); dst += sprintf(dst, _formatting, _value); argc++; }
|
||||
#define ARG(_formatting, _value) { if (argc) util::stream_format(stream, ", "); util::stream_format(stream, _formatting, _value); argc++; }
|
||||
|
||||
#define arg_name(_value) ARG("%s", REGISTER_NAME[_value])
|
||||
#define arg_cc ARG("%s", CONDITION_CODE[OPH])
|
||||
@ -70,10 +70,10 @@ static const char *const CONDITION_CODE[16] =
|
||||
#define arg_IM(_value) ARG(IM, _value)
|
||||
#define arg_RA ARG(RA, pc + (int8_t)B0 + 2)
|
||||
#define arg_DA ARG(DA, B0 << 8 | B1)
|
||||
#define arg_X(_value1, _value2) { if (argc) dst += sprintf(dst, ", "); dst += sprintf(dst, X, _value1, _value2); argc++; }
|
||||
#define arg_X(_value1, _value2) { if (argc) util::stream_format(stream, ", "); util::stream_format(stream, X, _value1, _value2); argc++; }
|
||||
|
||||
#define illegal dst += sprintf(dst, "Illegal")
|
||||
#define mnemonic(_mnemonic) dst += sprintf(dst, "%-5s", _mnemonic)
|
||||
#define illegal util::stream_format(stream, "Illegal")
|
||||
#define mnemonic(_mnemonic) util::stream_format(stream, "%-5s", _mnemonic)
|
||||
#define bytes(_count) oprom += (_count - 1)
|
||||
#define step_over flags = DASMFLAG_STEP_OVER
|
||||
#define step_out flags = DASMFLAG_STEP_OUT
|
||||
@ -82,12 +82,11 @@ static const char *const CONDITION_CODE[16] =
|
||||
DISASSEMBLER
|
||||
***************************************************************************/
|
||||
|
||||
CPU_DISASSEMBLE( z8 )
|
||||
static offs_t internal_disasm_z8(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
const uint8_t *startrom = oprom;
|
||||
uint32_t flags = 0;
|
||||
uint8_t opcode = *oprom++;
|
||||
char *dst = buffer;
|
||||
int argc = 0;
|
||||
|
||||
switch (pc)
|
||||
@ -98,7 +97,7 @@ CPU_DISASSEMBLE( z8 )
|
||||
case 0x0006:
|
||||
case 0x0008:
|
||||
case 0x000a:
|
||||
sprintf(buffer, "IRQ%u Vector %04Xh", pc / 2, opcode << 8 | *oprom++); break;
|
||||
util::stream_format(stream, "IRQ%u Vector %04Xh", pc / 2, opcode << 8 | *oprom++); break;
|
||||
default:
|
||||
switch (opcode)
|
||||
{
|
||||
@ -378,3 +377,13 @@ CPU_DISASSEMBLE( z8 )
|
||||
|
||||
return (oprom - startrom) | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(z8)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_z8(device, stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
@ -63,9 +63,9 @@ public:
|
||||
int ext_clock(int counter) const { return m_external_clock[counter]; } // get clock frequency
|
||||
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
void write(offs_t offset, uint8_t data) { write(machine().driver_data()->generic_space(), offset, data); }
|
||||
void write(offs_t offset, uint8_t data) { write(machine().dummy_space(), offset, data); }
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
uint8_t read(offs_t offset) { return read(machine().driver_data()->generic_space(), offset); }
|
||||
uint8_t read(offs_t offset) { return read(machine().dummy_space(), offset); }
|
||||
|
||||
void set_gate(int idx, int state);
|
||||
DECLARE_WRITE_LINE_MEMBER( set_g1 );
|
||||
|
@ -288,7 +288,7 @@ void kbdc8042_device::at_8042_check_keyboard()
|
||||
|
||||
if (!m_keyboard.received && !m_mouse.received)
|
||||
{
|
||||
if((data = m_keyboard_dev->read(machine().driver_data()->generic_space(), 0)))
|
||||
if((data = m_keyboard_dev->read(machine().dummy_space(), 0)))
|
||||
at_8042_receive(data);
|
||||
}
|
||||
}
|
||||
|
@ -23,14 +23,14 @@ void latch8_device::update(uint8_t new_val, uint8_t mask)
|
||||
uint8_t changed = old_val ^ m_value;
|
||||
for (i=0; i<8; i++)
|
||||
if (((changed & (1<<i)) != 0)) {
|
||||
if (i==0 && !m_write_0.isnull()) m_write_0(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==1 && !m_write_1.isnull()) m_write_1(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==2 && !m_write_2.isnull()) m_write_2(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==3 && !m_write_3.isnull()) m_write_3(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==4 && !m_write_4.isnull()) m_write_4(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==5 && !m_write_5.isnull()) m_write_5(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==6 && !m_write_6.isnull()) m_write_6(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==7 && !m_write_7.isnull()) m_write_7(machine().driver_data()->generic_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==0 && !m_write_0.isnull()) m_write_0(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==1 && !m_write_1.isnull()) m_write_1(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==2 && !m_write_2.isnull()) m_write_2(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==3 && !m_write_3.isnull()) m_write_3(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==4 && !m_write_4.isnull()) m_write_4(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==5 && !m_write_5.isnull()) m_write_5(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==6 && !m_write_6.isnull()) m_write_6(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
if (i==7 && !m_write_7.isnull()) m_write_7(machine().dummy_space(), m_offset[i] , (m_value >> i) & 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,6 +66,9 @@ void mm58274c_device::device_start()
|
||||
m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm58274c_device::rtc_interrupt_cb),this));
|
||||
|
||||
// register for state saving
|
||||
save_item(NAME(m_mode24));
|
||||
save_item(NAME(m_day1));
|
||||
|
||||
save_item(NAME(m_status));
|
||||
save_item(NAME(m_control));
|
||||
save_item(NAME(m_clk_set));
|
||||
|
@ -654,6 +654,20 @@ void tms9901_device::device_start(void)
|
||||
m_interrupt.resolve();
|
||||
|
||||
m_clock_register = 0;
|
||||
|
||||
save_item(NAME(m_int_state));
|
||||
save_item(NAME(m_old_int_state));
|
||||
save_item(NAME(m_enabled_ints));
|
||||
save_item(NAME(m_int_pending));
|
||||
save_item(NAME(m_timer_int_pending));
|
||||
save_item(NAME(m_pio_direction));
|
||||
save_item(NAME(m_pio_output));
|
||||
save_item(NAME(m_pio_direction_mirror));
|
||||
save_item(NAME(m_pio_output_mirror));
|
||||
save_item(NAME(m_clock_mode));
|
||||
save_item(NAME(m_clock_register));
|
||||
save_item(NAME(m_decrementer_value));
|
||||
save_item(NAME(m_clock_read_register));
|
||||
}
|
||||
|
||||
const device_type TMS9901 = &device_creator<tms9901_device>;
|
||||
|
@ -31,21 +31,21 @@
|
||||
|
||||
#include "z80dart.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define VERBOSE 0
|
||||
#define LOGPRINT(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
#define LOG(x) {} LOGPRINT(x)
|
||||
|
||||
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
#if VERBOSE == 2
|
||||
#define logerror printf
|
||||
#endif
|
||||
|
||||
#define CHANA_TAG "cha"
|
||||
#define CHANB_TAG "chb"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
@ -503,7 +503,6 @@ z80dart_channel::z80dart_channel(const machine_config &mconfig, const char *tag,
|
||||
: device_t(mconfig, Z80DART_CHANNEL, "Z80 DART channel", tag, owner, clock, "z80dart_channel", __FILE__),
|
||||
device_serial_interface(mconfig, *this),
|
||||
m_rx_error(0),
|
||||
m_rx_fifo(-1),
|
||||
m_rx_clock(0),
|
||||
m_rx_first(0),
|
||||
m_rx_break(0),
|
||||
@ -523,12 +522,6 @@ z80dart_channel::z80dart_channel(const machine_config &mconfig, const char *tag,
|
||||
|
||||
for (auto & elem : m_wr)
|
||||
elem = 0;
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
m_rx_data_fifo[i] = 0;
|
||||
m_rx_error_fifo[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -544,10 +537,8 @@ void z80dart_channel::device_start()
|
||||
// state saving
|
||||
save_item(NAME(m_rr));
|
||||
save_item(NAME(m_wr));
|
||||
save_item(NAME(m_rx_data_fifo));
|
||||
save_item(NAME(m_rx_error_fifo));
|
||||
save_item(NAME(m_rx_error));
|
||||
save_item(NAME(m_rx_fifo));
|
||||
// save_item(NAME(m_rx_data_fifo));
|
||||
// save_item(NAME(m_rx_error_fifo));
|
||||
save_item(NAME(m_rx_clock));
|
||||
save_item(NAME(m_rx_first));
|
||||
save_item(NAME(m_rx_break));
|
||||
@ -1001,18 +992,15 @@ uint8_t z80dart_channel::data_read()
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
if (m_rx_fifo >= 0)
|
||||
if (!m_rx_data_fifo.empty())
|
||||
{
|
||||
// load data from the FIFO
|
||||
data = m_rx_data_fifo[m_rx_fifo];
|
||||
data = m_rx_data_fifo.dequeue();
|
||||
|
||||
// load error status from the FIFO
|
||||
m_rr[1] = (m_rr[1] & ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR)) | m_rx_error_fifo[m_rx_fifo];
|
||||
m_rr[1] = (m_rr[1] & ~(RR1_CRC_FRAMING_ERROR | RR1_RX_OVERRUN_ERROR | RR1_PARITY_ERROR)) | m_rx_error_fifo.dequeue();
|
||||
|
||||
// decrease FIFO pointer
|
||||
m_rx_fifo--;
|
||||
|
||||
if (m_rx_fifo < 0)
|
||||
if (m_rx_data_fifo.empty())
|
||||
{
|
||||
// no more characters available in the FIFO
|
||||
m_rr[0] &= ~ RR0_RX_CHAR_AVAILABLE;
|
||||
@ -1064,7 +1052,7 @@ void z80dart_channel::receive_data(uint8_t data)
|
||||
{
|
||||
LOG(("Z80DART \"%s\" Channel %c : Receive Data Byte '%02x'\n", m_owner->tag(), 'A' + m_index, data));
|
||||
|
||||
if (m_rx_fifo == 2)
|
||||
if (m_rx_data_fifo.full())
|
||||
{
|
||||
// receive overrun error detected
|
||||
m_rx_error |= RR1_RX_OVERRUN_ERROR;
|
||||
@ -1083,16 +1071,17 @@ void z80dart_channel::receive_data(uint8_t data)
|
||||
m_uart->trigger_interrupt(m_index, INT_SPECIAL);
|
||||
break;
|
||||
}
|
||||
// overwrite last character/error with received character and error status into FIFO
|
||||
m_rx_data_fifo.poke(data);
|
||||
m_rx_error_fifo.poke(m_rx_error);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rx_fifo++;
|
||||
// store received character and error status into FIFO
|
||||
m_rx_data_fifo.enqueue(data);
|
||||
m_rx_error_fifo.enqueue(m_rx_error);
|
||||
}
|
||||
|
||||
// store received character and error status into FIFO
|
||||
m_rx_data_fifo[m_rx_fifo] = data;
|
||||
m_rx_error_fifo[m_rx_fifo] = m_rx_error;
|
||||
|
||||
m_rr[0] |= RR0_RX_CHAR_AVAILABLE;
|
||||
|
||||
// receive interrupt
|
||||
|
@ -428,11 +428,10 @@ protected:
|
||||
int get_tx_word_length();
|
||||
|
||||
// receiver state
|
||||
uint8_t m_rx_data_fifo[3]; // receive data FIFO
|
||||
uint8_t m_rx_error_fifo[3]; // receive error FIFO
|
||||
uint8_t m_rx_error; // current receive error
|
||||
int m_rx_fifo; // receive FIFO pointer
|
||||
util::fifo<uint8_t, 3> m_rx_data_fifo;
|
||||
util::fifo<uint8_t, 3> m_rx_error_fifo;
|
||||
|
||||
uint8_t m_rx_error; // current receive error
|
||||
int m_rx_clock; // receive clock pulse count
|
||||
int m_rx_first; // first character received
|
||||
int m_rx_break; // receive break condition
|
||||
|
@ -84,8 +84,8 @@ void msm5232_device::device_reset()
|
||||
|
||||
for (i=0; i<8; i++)
|
||||
{
|
||||
write(machine().driver_data()->generic_space(),i,0x80);
|
||||
write(machine().driver_data()->generic_space(),i,0x00);
|
||||
write(machine().dummy_space(), i, 0x80);
|
||||
write(machine().dummy_space(), i, 0x00);
|
||||
}
|
||||
m_noise_cnt = 0;
|
||||
m_noise_rng = 1;
|
||||
|
@ -110,8 +110,7 @@ nesapu_device::nesapu_device(const machine_config &mconfig, const char *tag, dev
|
||||
m_samps_per_sync(0),
|
||||
m_buffer_size(0),
|
||||
m_real_rate(0),
|
||||
m_stream(nullptr),
|
||||
m_cpu_tag("")
|
||||
m_stream(nullptr)
|
||||
{
|
||||
for (auto & elem : m_noise_lut)
|
||||
{
|
||||
@ -134,13 +133,6 @@ nesapu_device::nesapu_device(const machine_config &mconfig, const char *tag, dev
|
||||
}
|
||||
}
|
||||
|
||||
void nesapu_device::set_tag_memory(const char *tag)
|
||||
{
|
||||
/* Initialize individual chips */
|
||||
if (tag)
|
||||
(m_APU.dpcm).memory = &machine().device(tag)->memory().space(AS_PROGRAM);
|
||||
}
|
||||
|
||||
void nesapu_device::device_clock_changed()
|
||||
{
|
||||
calculate_rates();
|
||||
@ -184,7 +176,7 @@ void nesapu_device::device_start()
|
||||
{
|
||||
create_noise(m_noise_lut, 13, NOISE_LONG);
|
||||
|
||||
set_tag_memory(m_cpu_tag);
|
||||
(m_APU.dpcm).memory = &downcast<n2a03_device &>(*owner()).space(AS_PROGRAM);
|
||||
|
||||
calculate_rates();
|
||||
|
||||
|
@ -50,9 +50,6 @@ public:
|
||||
nesapu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
~nesapu_device() {}
|
||||
|
||||
static void set_cpu_tag(device_t &device, const char *tag) { downcast<nesapu_device &>(device).m_cpu_tag = tag; }
|
||||
void set_tag_memory(const char *tag);
|
||||
|
||||
virtual void device_clock_changed() override;
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
@ -78,8 +75,6 @@ private:
|
||||
uint32 m_sync_times2[SYNCS_MAX2]; /* Samples per sync table */
|
||||
sound_stream *m_stream;
|
||||
|
||||
const char *m_cpu_tag;
|
||||
|
||||
void calculate_rates();
|
||||
void create_syncs(unsigned long sps);
|
||||
int8 apu_square(square_t *chan);
|
||||
@ -93,8 +88,4 @@ private:
|
||||
|
||||
extern const device_type NES_APU;
|
||||
|
||||
#define MCFG_NES_APU_CPU(_tag) \
|
||||
nesapu_device::set_cpu_tag(*device, _tag);
|
||||
|
||||
|
||||
#endif /* __NES_APU_H__ */
|
||||
|
@ -84,7 +84,7 @@ void huc6261_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
{
|
||||
g_profiler.start( PROFILER_VIDEO );
|
||||
/* Get next pixel information */
|
||||
m_pixel_data = m_huc6270_b->next_pixel( machine().driver_data()->generic_space(), 0, 0xffff );
|
||||
m_pixel_data = m_huc6270_b->next_pixel( machine().dummy_space(), 0, 0xffff );
|
||||
g_profiler.stop();
|
||||
}
|
||||
|
||||
|
@ -137,14 +137,13 @@ void debug_view_memory::enumerate_sources()
|
||||
|
||||
// first add all the devices' address spaces
|
||||
for (device_memory_interface &memintf : memory_interface_iterator(machine().root_device()))
|
||||
if (&memintf.device() != &machine().root_device())
|
||||
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
|
||||
if (memintf.has_space(spacenum))
|
||||
{
|
||||
address_space &space = memintf.space(spacenum);
|
||||
name = string_format("%s '%s' %s space memory", memintf.device().name(), memintf.device().tag(), space.name());
|
||||
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), space)));
|
||||
}
|
||||
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
|
||||
if (memintf.has_space(spacenum))
|
||||
{
|
||||
address_space &space = memintf.space(spacenum);
|
||||
name = string_format("%s '%s' %s space memory", memintf.device().name(), memintf.device().tag(), space.name());
|
||||
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), space)));
|
||||
}
|
||||
|
||||
// then add all the memory regions
|
||||
for (auto ®ion : machine().memory().regions())
|
||||
|
@ -13,17 +13,6 @@
|
||||
#include "drivenum.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// ADDRESS_MAPS
|
||||
//**************************************************************************
|
||||
|
||||
// default address map
|
||||
static ADDRESS_MAP_START( generic, AS_0, 8, driver_device )
|
||||
AM_RANGE(0x00000000, 0xffffffff) AM_DEVREADWRITE(":", driver_device, fatal_generic_read, fatal_generic_write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DRIVER DEVICE
|
||||
//**************************************************************************
|
||||
@ -34,8 +23,6 @@ ADDRESS_MAP_END
|
||||
|
||||
driver_device::driver_device(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: device_t(mconfig, type, "Driver Device", tag, nullptr, 0, "", __FILE__),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_space_config("generic", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(generic)),
|
||||
m_system(nullptr),
|
||||
m_flip_screen_x(0),
|
||||
m_flip_screen_y(0)
|
||||
@ -261,17 +248,6 @@ void driver_device::device_reset_after_children()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// memory_space_config - return a description of
|
||||
// any address spaces owned by this device
|
||||
//-------------------------------------------------
|
||||
|
||||
const address_space_config *driver_device::memory_space_config(address_spacenum spacenum) const
|
||||
{
|
||||
return (spacenum == 0) ? &m_space_config : nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERRUPT ENABLE AND VECTOR HELPERS
|
||||
@ -476,22 +452,3 @@ CUSTOM_INPUT_MEMBER(driver_device::custom_port_read)
|
||||
const char *tag = (const char *)param;
|
||||
return ioport(tag)->read();
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MISC READ/WRITE HANDLERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// generic space fatal error handlers
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( driver_device::fatal_generic_read )
|
||||
{
|
||||
throw emu_fatalerror("Attempted to read from generic address space (offs %X)\n", offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( driver_device::fatal_generic_write )
|
||||
{
|
||||
throw emu_fatalerror("Attempted to write to generic address space (offs %X = %02X)\n", offset, data);
|
||||
}
|
||||
|
@ -97,8 +97,7 @@ typedef delegate<void ()> driver_callback_delegate;
|
||||
// ======================> driver_device
|
||||
|
||||
// base class for machine driver-specific devices
|
||||
class driver_device : public device_t,
|
||||
public device_memory_interface
|
||||
class driver_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -135,7 +134,7 @@ public:
|
||||
void init_0() { }
|
||||
|
||||
// memory helpers
|
||||
address_space &generic_space() const { return space(AS_PROGRAM); }
|
||||
address_space &generic_space() const { return machine().dummy_space(); }
|
||||
|
||||
// output heler
|
||||
output_manager &output() const { return machine().output(); }
|
||||
@ -192,10 +191,6 @@ public:
|
||||
// generic input port helpers
|
||||
DECLARE_CUSTOM_INPUT_MEMBER( custom_port_read );
|
||||
|
||||
// general fatal error handlers
|
||||
DECLARE_READ8_MEMBER( fatal_generic_read );
|
||||
DECLARE_WRITE8_MEMBER( fatal_generic_write );
|
||||
|
||||
protected:
|
||||
// helpers called at startup
|
||||
virtual void driver_start();
|
||||
@ -215,16 +210,11 @@ protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset_after_children() override;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
|
||||
private:
|
||||
// helpers
|
||||
void irq_pulse_clear(void *ptr, int32_t param);
|
||||
void updateflip();
|
||||
|
||||
// configuration state
|
||||
const address_space_config m_space_config;
|
||||
|
||||
// internal state
|
||||
const game_driver * m_system; // pointer to the game driver
|
||||
driver_callback_delegate m_callbacks[CB_COUNT]; // start/reset callbacks
|
||||
|
@ -186,6 +186,7 @@ enum
|
||||
XTAL_27_164MHz = 27164000, /* Typically used on 90's Taito PCBs to drive the custom chips */
|
||||
XTAL_27_2109MHz = 27210900, /* LA Girl */
|
||||
XTAL_28MHz = 28000000,
|
||||
XTAL_28_322MHz = 28322000, /* Saitek RISC 2500, Mephisto Montreux */
|
||||
XTAL_28_37516MHz = 28375160, /* Amiga PAL systems */
|
||||
XTAL_28_48MHz = 28480000, /* Chromatics CGC-7900 */
|
||||
XTAL_28_63636MHz = 28636363, /* Later Leland games and Atari GT, Amiga NTSC, Raiden2 h/w (8x NTSC subcarrier)*/
|
||||
|
@ -1553,6 +1553,20 @@ memory_manager::memory_manager(running_machine &machine)
|
||||
memset(m_bank_ptr, 0, sizeof(m_bank_ptr));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// allocate - allocate memory spaces
|
||||
//-------------------------------------------------
|
||||
|
||||
void memory_manager::allocate(device_memory_interface &memory)
|
||||
{
|
||||
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
|
||||
{
|
||||
// if there is a configuration for this space, we need an address space
|
||||
const address_space_config *spaceconfig = memory.space_config(spacenum);
|
||||
if (spaceconfig != nullptr)
|
||||
address_space::allocate(m_spacelist, *this, *spaceconfig, memory, spacenum);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// initialize - initialize the memory system
|
||||
@ -1563,13 +1577,9 @@ void memory_manager::initialize()
|
||||
// loop over devices and spaces within each device
|
||||
memory_interface_iterator iter(machine().root_device());
|
||||
for (device_memory_interface &memory : iter)
|
||||
for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum)
|
||||
{
|
||||
// if there is a configuration for this space, we need an address space
|
||||
const address_space_config *spaceconfig = memory.space_config(spacenum);
|
||||
if (spaceconfig != nullptr)
|
||||
address_space::allocate(m_spacelist,*this, *spaceconfig, memory, spacenum);
|
||||
}
|
||||
allocate(memory);
|
||||
|
||||
allocate(m_machine.m_dummy_space);
|
||||
|
||||
// construct and preprocess the address_map for each space
|
||||
for (auto &space : m_spacelist)
|
||||
|
@ -734,6 +734,7 @@ public:
|
||||
private:
|
||||
// internal helpers
|
||||
void bank_reattach();
|
||||
void allocate(device_memory_interface &memory);
|
||||
|
||||
// internal state
|
||||
running_machine & m_machine; // reference to the machine
|
||||
|
@ -130,10 +130,13 @@ running_machine::running_machine(const machine_config &_config, machine_manager
|
||||
m_memory(*this),
|
||||
m_ioport(*this),
|
||||
m_parameters(*this),
|
||||
m_scheduler(*this)
|
||||
m_scheduler(*this),
|
||||
m_dummy_space(_config, "dummy_space", &root_device(), 0)
|
||||
{
|
||||
memset(&m_base_time, 0, sizeof(m_base_time));
|
||||
|
||||
m_dummy_space.set_machine(*this);
|
||||
|
||||
// set the machine on all devices
|
||||
device_iterator iter(root_device());
|
||||
for (device_t &device : iter)
|
||||
@ -963,6 +966,8 @@ void running_machine::logfile_callback(const char *buffer)
|
||||
|
||||
void running_machine::start_all_devices()
|
||||
{
|
||||
m_dummy_space.start();
|
||||
|
||||
// iterate through the devices
|
||||
int last_failed_starts = -1;
|
||||
while (last_failed_starts != 0)
|
||||
@ -1227,6 +1232,48 @@ void system_time::full_time::set(struct tm &t)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DUMMY ADDRESS SPACE
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(dummy_space_device::read)
|
||||
{
|
||||
throw emu_fatalerror("Attempted to read from generic address space (offs %X)\n", offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dummy_space_device::write)
|
||||
{
|
||||
throw emu_fatalerror("Attempted to write to generic address space (offs %X = %02X)\n", offset, data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START(dummy, AS_0, 8, dummy_space_device)
|
||||
AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(read, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
const device_type DUMMY_SPACE = &device_creator<dummy_space_device>;
|
||||
|
||||
dummy_space_device::dummy_space_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, DUMMY_SPACE, "Dummy Space", tag, owner, clock, "dummy_space", __FILE__),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_space_config("dummy", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(dummy))
|
||||
{
|
||||
}
|
||||
|
||||
void dummy_space_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// memory_space_config - return a description of
|
||||
// any address spaces owned by this device
|
||||
//-------------------------------------------------
|
||||
|
||||
const address_space_config *dummy_space_device::memory_space_config(address_spacenum spacenum) const
|
||||
{
|
||||
return (spacenum == 0) ? &m_space_config : nullptr;
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// JAVASCRIPT PORT-SPECIFIC
|
||||
//**************************************************************************
|
||||
|
@ -132,6 +132,32 @@ public:
|
||||
|
||||
|
||||
|
||||
// ======================> dummy_space_device
|
||||
|
||||
// a dummy address space for passing to handlers outside of the memory system
|
||||
|
||||
class dummy_space_device : public device_t,
|
||||
public device_memory_interface
|
||||
{
|
||||
public:
|
||||
dummy_space_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_READ8_MEMBER(read);
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
|
||||
|
||||
private:
|
||||
const address_space_config m_space_config;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ======================> running_machine
|
||||
|
||||
typedef delegate<void ()> machine_notify_delegate;
|
||||
@ -142,6 +168,7 @@ class running_machine
|
||||
DISABLE_COPYING(running_machine);
|
||||
|
||||
friend class sound_manager;
|
||||
friend class memory_manager;
|
||||
|
||||
typedef std::function<void(const char*)> logerror_callback;
|
||||
|
||||
@ -230,6 +257,7 @@ public:
|
||||
void set_rtc_datetime(const system_time &systime);
|
||||
|
||||
// misc
|
||||
address_space &dummy_space() const { return m_dummy_space.space(AS_PROGRAM); }
|
||||
void popmessage() const { popmessage(static_cast<char const *>(nullptr)); }
|
||||
template <typename Format, typename... Params> void popmessage(Format &&fmt, Params &&... args) const;
|
||||
template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
|
||||
@ -356,6 +384,9 @@ private:
|
||||
|
||||
// string formatting buffer
|
||||
mutable util::ovectorstream m_string_buffer;
|
||||
|
||||
// configuration state
|
||||
dummy_space_device m_dummy_space;
|
||||
};
|
||||
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "luaengine.h"
|
||||
#include "console.h"
|
||||
#include "linenoise-ng/include/linenoise.h"
|
||||
#include "mame.h"
|
||||
@ -28,9 +29,10 @@ console_frontend::console_frontend(emu_options &options, osd_interface &osd)
|
||||
m_wait(false),
|
||||
m_prompt("\x1b[1;36m[MAME]\x1b[0m> ")
|
||||
{
|
||||
using namespace std::placeholders;
|
||||
m_commands.insert(std::make_pair("quit", std::bind(&console_frontend::cmd_quit, this, _1)));
|
||||
m_commands.insert(std::make_pair("exit", std::bind(&console_frontend::cmd_quit, this, _1)));
|
||||
mame_machine_manager::instance()->lua()->sol()["quit"] = [this]() { cmd_quit(); };
|
||||
m_commands.push_back("quit()");
|
||||
mame_machine_manager::instance()->lua()->sol()["exit"] = [this]() { cmd_quit(); };
|
||||
m_commands.push_back("exit()");
|
||||
gConsole = this;
|
||||
}
|
||||
|
||||
@ -47,14 +49,14 @@ void console_frontend::completion(char const* prefix, linenoiseCompletions* lc)
|
||||
{
|
||||
for (auto cmd : m_commands)
|
||||
{
|
||||
if (strncmp(prefix, cmd.first.c_str(), strlen(prefix)) == 0)
|
||||
if (strncmp(prefix, cmd.c_str(), strlen(prefix)) == 0)
|
||||
{
|
||||
linenoiseAddCompletion(lc, cmd.first.c_str());
|
||||
linenoiseAddCompletion(lc, cmd.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void console_frontend::cmd_quit(std::vector<std::string>& arg)
|
||||
void console_frontend::cmd_quit()
|
||||
{
|
||||
printf("Exiting application\n");
|
||||
m_run.store(false);
|
||||
@ -89,46 +91,6 @@ void console_frontend::read_console(std::string &cmdLine)
|
||||
}
|
||||
}
|
||||
|
||||
void console_frontend::split_command(std::vector<std::string>& arg, std::string command)
|
||||
{
|
||||
int len = command.length();
|
||||
bool qot = false, sqot = false;
|
||||
int arglen;
|
||||
for (int i = 0; i < len; i++) {
|
||||
int start = i;
|
||||
if (command[i] == '\"') {
|
||||
qot = true;
|
||||
}
|
||||
else if (command[i] == '\'') sqot = true;
|
||||
|
||||
if (qot) {
|
||||
i++;
|
||||
start++;
|
||||
while (i<len && command[i] != '\"')
|
||||
i++;
|
||||
if (i<len)
|
||||
qot = false;
|
||||
arglen = i - start;
|
||||
i++;
|
||||
}
|
||||
else if (sqot) {
|
||||
i++;
|
||||
while (i<len && command[i] != '\'')
|
||||
i++;
|
||||
if (i<len)
|
||||
sqot = false;
|
||||
arglen = i - start;
|
||||
i++;
|
||||
}
|
||||
else {
|
||||
while (i<len && command[i] != ' ')
|
||||
i++;
|
||||
arglen = i - start;
|
||||
}
|
||||
arg.push_back(command.substr(start, arglen));
|
||||
}
|
||||
}
|
||||
|
||||
static void completionHook(char const* prefix, linenoiseCompletions* lc)
|
||||
{
|
||||
gConsole->completion(prefix, lc);
|
||||
@ -159,16 +121,7 @@ void console_frontend::start_console()
|
||||
{
|
||||
if (m_wait.load())
|
||||
{
|
||||
std::vector<std::string> arg;
|
||||
split_command(arg, cmdLine);
|
||||
auto command = m_commands.find(arg[0]);
|
||||
if (command != m_commands.end())
|
||||
{
|
||||
command->second(arg);
|
||||
}
|
||||
else {
|
||||
printf("Unknown command: %s\n", arg[0].c_str());
|
||||
}
|
||||
mame_machine_manager::instance()->lua()->load_string(cmdLine.c_str());
|
||||
cmdLine.clear();
|
||||
m_wait.store(false);
|
||||
} else {
|
||||
|
@ -28,17 +28,14 @@ public:
|
||||
|
||||
private:
|
||||
void read_console(std::string &cmdLine);
|
||||
void split_command(std::vector<std::string>& arg, std::string command);
|
||||
|
||||
void cmd_quit(std::vector<std::string>& arg);
|
||||
void cmd_quit();
|
||||
// internal state
|
||||
//emu_options & m_options;
|
||||
//osd_interface & m_osd;
|
||||
std::atomic<bool> m_run;
|
||||
std::atomic<bool> m_wait;
|
||||
std::string m_prompt;
|
||||
|
||||
std::unordered_map<std::string, std::function<void(std::vector<std::string>& arg)>> m_commands;
|
||||
|
||||
std::vector<std::string> m_commands;
|
||||
};
|
||||
|
||||
#endif /* MAME_FRONTEND_CONSOLE_H */
|
||||
|
@ -8,10 +8,7 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include <limits>
|
||||
#include <thread>
|
||||
#include <lua.hpp>
|
||||
#include <signal.h>
|
||||
#include "emu.h"
|
||||
#include "mame.h"
|
||||
#include "drivenum.h"
|
||||
@ -21,7 +18,6 @@
|
||||
#include "natkeyboard.h"
|
||||
#include "uiinput.h"
|
||||
#include "pluginopts.h"
|
||||
#include <mutex>
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic ignored "-Wshift-count-overflow"
|
||||
@ -37,6 +33,7 @@
|
||||
extern "C" {
|
||||
int luaopen_zlib(lua_State *L);
|
||||
int luaopen_lfs(lua_State *L);
|
||||
int luaopen_linenoise(lua_State *L);
|
||||
}
|
||||
|
||||
namespace sol
|
||||
@ -527,6 +524,7 @@ lua_engine::lua_engine()
|
||||
// Get package.preload so we can store builtins in it.
|
||||
sol()["package"]["preload"]["zlib"] = &luaopen_zlib;
|
||||
sol()["package"]["preload"]["lfs"] = &luaopen_lfs;
|
||||
sol()["package"]["preload"]["linenoise"] = &luaopen_linenoise;
|
||||
|
||||
lua_gc(m_lua_state, LUA_GCRESTART, 0);
|
||||
}
|
||||
|
@ -100,17 +100,15 @@ public:
|
||||
call_plugin(name, sol::make_object(sol(), in));
|
||||
}
|
||||
|
||||
sol::state_view &sol() const { return *m_sol_state; }
|
||||
private:
|
||||
// internal state
|
||||
lua_State *m_lua_state;
|
||||
sol::state_view *m_sol_state;
|
||||
sol::state_view &sol() const { return *m_sol_state; }
|
||||
running_machine *m_machine;
|
||||
|
||||
std::vector<std::string> m_menu;
|
||||
|
||||
std::map<lua_State *, std::pair<lua_State *, int> > thread_registry;
|
||||
|
||||
running_machine &machine() const { return *m_machine; }
|
||||
|
||||
void on_machine_prestart();
|
||||
|
@ -428,7 +428,7 @@ public:
|
||||
fifo()
|
||||
: std::array<T, N>()
|
||||
, m_head(this->begin())
|
||||
, m_tail(this->end())
|
||||
, m_tail(this->begin())
|
||||
, m_empty(true)
|
||||
{
|
||||
static_assert(0U < N, "FIFO must have at least one element");
|
||||
@ -513,11 +513,27 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
void poke(T &v)
|
||||
{
|
||||
*m_tail = v;
|
||||
}
|
||||
|
||||
void poke(T &&v)
|
||||
{
|
||||
*m_tail = std::move(v);
|
||||
}
|
||||
|
||||
T const &peek() const
|
||||
{
|
||||
return *m_head;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_head = m_tail = this->begin();
|
||||
m_empty = true;
|
||||
}
|
||||
|
||||
private:
|
||||
typename fifo::iterator m_head, m_tail;
|
||||
bool m_empty;
|
||||
|
@ -448,7 +448,7 @@ void atari_cage_device::update_control_lines()
|
||||
if ((m_control & 2) && m_cage_to_cpu_ready)
|
||||
reason |= CAGE_IRQ_REASON_DATA_READY;
|
||||
|
||||
m_irqhandler(machine().driver_data()->generic_space(), 0, reason);
|
||||
m_irqhandler(machine().dummy_space(), 0, reason);
|
||||
/* set the IOF input lines */
|
||||
val = m_cpu->state_int(TMS3203X_IOF);
|
||||
val &= ~0x88;
|
||||
|
@ -2142,7 +2142,7 @@ void dcs_audio_device::fifo_notify(int count, int max)
|
||||
if (transfer.state != 5 || transfer.fifo_entries == transfer.writes_left || transfer.fifo_entries >= 256)
|
||||
{
|
||||
for ( ; transfer.fifo_entries; transfer.fifo_entries--)
|
||||
preprocess_write(m_fifo_data_r(machine().driver_data()->generic_space(),0, 0xffff));
|
||||
preprocess_write(m_fifo_data_r(machine().dummy_space(), 0, 0xffff));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2155,7 +2155,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::transfer_watchdog_callback )
|
||||
if (transfer.fifo_entries && starting_writes_left == transfer.writes_left)
|
||||
{
|
||||
for ( ; transfer.fifo_entries; transfer.fifo_entries--)
|
||||
preprocess_write(m_fifo_data_r(machine().driver_data()->generic_space(),0, 0xffff));
|
||||
preprocess_write(m_fifo_data_r(machine().dummy_space(), 0, 0xffff));
|
||||
}
|
||||
if (transfer.watchdog != nullptr)
|
||||
transfer.watchdog->adjust(attotime::from_msec(1), transfer.writes_left);
|
||||
|
@ -565,7 +565,7 @@ void mw8080bw_state::maze_write_discrete(uint8_t maze_tone_timing_state)
|
||||
/* controls need to be active low */
|
||||
int controls = ~ioport("IN0")->read() & 0xff;
|
||||
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
address_space &space = machine().dummy_space();
|
||||
m_discrete->write(space, MAZE_TONE_TIMING, maze_tone_timing_state);
|
||||
m_discrete->write(space, MAZE_P1_DATA, controls & 0x0f);
|
||||
m_discrete->write(space, MAZE_P2_DATA, (controls >> 4) & 0x0f);
|
||||
|
@ -548,9 +548,9 @@ static MACHINE_CONFIG_START( fexcel68k, fidel68k_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(fexcel68k_map)
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel68k_state, irq_on, attotime::from_hz(589)) // from 556 timer (22nf, 91K+20K, 100)
|
||||
MCFG_TIMER_START_DELAY(attotime::from_hz(589) - attotime::from_nsec(1525)) // active for 1.525us
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel68k_state, irq_off, attotime::from_hz(589))
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel68k_state, irq_on, attotime::from_hz(618)) // theoretical frequency from 556 timer (22nf, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz
|
||||
MCFG_TIMER_START_DELAY(attotime::from_hz(618) - attotime::from_nsec(1525)) // active for 1.525us
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel68k_state, irq_off, attotime::from_hz(618))
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_fidel_ex_68k)
|
||||
|
@ -865,11 +865,11 @@ ROM_START(megaduck)
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
CONS(1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1998, supergb2, gameboy, 0, supergb2, gameboy, driver_device, 0, "Nintendo", "Super Game Boy 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
|
||||
CONS(1998, gbcolor, 0, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE)
|
||||
|
||||
// Sound is not 100% yet, it generates some sounds which could be ok. Since we're lacking a real system there's no way to verify.
|
||||
CONS( 1993, megaduck, 0, 0, megaduck, gameboy, driver_device, 0, "Welback Holdings (Timlex International) / Creatronic / Videojet / Cougar USA", "Mega Duck / Cougar Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -211,7 +211,7 @@ WRITE8_MEMBER(gei_state::sound_w)
|
||||
|
||||
/* bit 5 - ticket out in trivia games */
|
||||
if (m_ticket != nullptr)
|
||||
m_ticket->write(machine().driver_data()->generic_space(), 0, (data & 0x20)<< 2);
|
||||
m_ticket->write(machine().dummy_space(), 0, (data & 0x20)<< 2);
|
||||
|
||||
/* bit 6 enables NMI */
|
||||
m_nmi_mask = data & 0x40;
|
||||
|
@ -773,4 +773,4 @@ ROM_START(geneve)
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , 0)
|
||||
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , MACHINE_SUPPORTS_SAVE)
|
||||
|
@ -895,9 +895,9 @@ WRITE8_MEMBER(hp64k_state::hp64k_floppy1_rdy)
|
||||
void hp64k_state::hp64k_floppy_idx_cb(floppy_image_device *floppy , int state)
|
||||
{
|
||||
if (floppy == m_floppy0->get_device()) {
|
||||
m_ss0->a_w(machine().driver_data()->generic_space() , 0 , !state);
|
||||
m_ss0->a_w(machine().dummy_space(), 0, !state);
|
||||
} else if (floppy == m_floppy1->get_device()) {
|
||||
m_ss1->a_w(machine().driver_data()->generic_space() , 0 , !state);
|
||||
m_ss1->a_w(machine().dummy_space(), 0, !state);
|
||||
}
|
||||
|
||||
if (floppy == m_current_floppy) {
|
||||
|
@ -256,7 +256,7 @@ WRITE_LINE_MEMBER(pcjr_state::keyb_interrupt)
|
||||
{
|
||||
int data;
|
||||
|
||||
if(state && (data = m_keyboard->read(machine().driver_data()->generic_space(), 0)))
|
||||
if(state && (data = m_keyboard->read(machine().dummy_space(), 0)))
|
||||
{
|
||||
uint8_t parity = 0;
|
||||
int i;
|
||||
|
@ -739,7 +739,7 @@ WRITE8_MEMBER(itech32_state::drivedge_portb_out)
|
||||
output().set_led_value(1, data & 0x01);
|
||||
output().set_led_value(2, data & 0x02);
|
||||
output().set_led_value(3, data & 0x04);
|
||||
machine().device<ticket_dispenser_device>("ticket")->write(machine().driver_data()->generic_space(), 0, (data & 0x10) << 3);
|
||||
machine().device<ticket_dispenser_device>("ticket")->write(machine().dummy_space(), 0, (data & 0x10) << 3);
|
||||
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
|
||||
}
|
||||
|
||||
@ -757,7 +757,7 @@ WRITE8_MEMBER(itech32_state::pia_portb_out)
|
||||
/* bit 4 controls the ticket dispenser */
|
||||
/* bit 5 controls the coin counter */
|
||||
/* bit 6 controls the diagnostic sound LED */
|
||||
machine().device<ticket_dispenser_device>("ticket")->write(machine().driver_data()->generic_space(), 0, (data & 0x10) << 3);
|
||||
machine().device<ticket_dispenser_device>("ticket")->write(machine().dummy_space(), 0, (data & 0x10) << 3);
|
||||
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
|
||||
}
|
||||
|
||||
|
@ -760,7 +760,7 @@ WRITE8_MEMBER(itech8_state::ym2203_portb_out)
|
||||
/* bit 6 controls the diagnostic sound LED */
|
||||
/* bit 7 controls the ticket dispenser */
|
||||
m_pia_portb_data = data;
|
||||
m_ticket->write(machine().driver_data()->generic_space(), 0, data & 0x80);
|
||||
m_ticket->write(machine().dummy_space(), 0, data & 0x80);
|
||||
machine().bookkeeping().coin_counter_w(0, (data & 0x20) >> 5);
|
||||
}
|
||||
|
||||
|
@ -278,7 +278,7 @@ INTERRUPT_GEN_MEMBER(kron180_state::interrupt)
|
||||
|
||||
WRITE_LINE_MEMBER(kron180_state::keyb_interrupt)
|
||||
{
|
||||
if(state && (m_kbd_data = m_keyboard->read(machine().driver_data()->generic_space(), 0)))
|
||||
if(state && (m_kbd_data = m_keyboard->read(machine().dummy_space(), 0)))
|
||||
{
|
||||
LOGKBD(("%s(%02x)\n", FUNCNAME, m_kbd_data));
|
||||
m_maincpu->set_input_line(2, ASSERT_LINE);
|
||||
|
@ -369,7 +369,7 @@ WRITE8_MEMBER(mgavegas_state::cso1_w)
|
||||
update_custom();
|
||||
|
||||
hopper_data=(m_hop&0x01)<<7;
|
||||
m_ticket->write(machine().driver_data()->generic_space(), 0, hopper_data);
|
||||
m_ticket->write(machine().dummy_space(), 0, hopper_data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mgavegas_state::cso2_w)
|
||||
|
@ -152,13 +152,13 @@ WRITE8_MEMBER(midyunit_state::yawdim_oki_bank_w)
|
||||
|
||||
CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_strobe_r)
|
||||
{
|
||||
return (m_narc_sound->read(machine().driver_data()->generic_space(), 0) >> 8) & 1;
|
||||
return (m_narc_sound->read(machine().dummy_space(), 0) >> 8) & 1;
|
||||
}
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_data_r)
|
||||
{
|
||||
return m_narc_sound->read(machine().driver_data()->generic_space(), 0) & 0xff;
|
||||
return m_narc_sound->read(machine().dummy_space(), 0) & 0xff;
|
||||
}
|
||||
|
||||
|
||||
|
@ -92,7 +92,7 @@ void miragemi_state::video_start()
|
||||
|
||||
uint32_t miragemi_state::screen_update_mirage(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
address_space &space = machine().dummy_space();
|
||||
uint16_t flip = m_deco_tilegen1->pf_control_r(space, 0, 0xffff);
|
||||
|
||||
flip_screen_set(BIT(flip, 7));
|
||||
|
@ -1406,11 +1406,6 @@ WRITE32_MEMBER(model2_state::model2o_luma_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(model2_state::model2_3d_zclip_w)
|
||||
{
|
||||
model2_3d_set_zclip( machine(), data & 0xFF );
|
||||
}
|
||||
|
||||
/* Top Skater reads here and discards the result */
|
||||
READ8_MEMBER(model2_state::tgpid_r)
|
||||
{
|
||||
|
@ -733,7 +733,6 @@ JP4/5/6/7 - Jumpers to configure ROMs
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/powerpc/ppc.h"
|
||||
#include "machine/eepromser.h"
|
||||
#include "machine/53c810.h"
|
||||
#include "machine/nvram.h"
|
||||
@ -952,20 +951,19 @@ WRITE64_MEMBER(model3_state::mpc105_reg_w)
|
||||
m_mpc105_regs[(offset*2)+1] = (uint32_t)data;
|
||||
}
|
||||
|
||||
static void mpc105_init(running_machine &machine)
|
||||
void model3_state::mpc105_init()
|
||||
{
|
||||
model3_state *state = machine.driver_data<model3_state>();
|
||||
/* set reset values */
|
||||
memset(state->m_mpc105_regs, 0, sizeof(state->m_mpc105_regs));
|
||||
state->m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */
|
||||
state->m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
|
||||
state->m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */
|
||||
state->m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
|
||||
state->m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
|
||||
state->m_mpc105_regs[0xb8/4] = 0x04000000;
|
||||
state->m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
|
||||
state->m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
|
||||
state->m_mpc105_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
|
||||
memset(m_mpc105_regs, 0, sizeof(m_mpc105_regs));
|
||||
m_mpc105_regs[0x00/4] = 0x00011057; /* Vendor ID & Device ID */
|
||||
m_mpc105_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
|
||||
m_mpc105_regs[0x08/4] = 0x00060000; /* Class code */
|
||||
m_mpc105_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
|
||||
m_mpc105_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
|
||||
m_mpc105_regs[0xb8/4] = 0x04000000;
|
||||
m_mpc105_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
|
||||
m_mpc105_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
|
||||
m_mpc105_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -1044,25 +1042,24 @@ WRITE64_MEMBER(model3_state::mpc106_reg_w)
|
||||
m_mpc106_regs[(offset*2)+1] = (uint32_t)data;
|
||||
}
|
||||
|
||||
static void mpc106_init(running_machine &machine)
|
||||
void model3_state::mpc106_init()
|
||||
{
|
||||
model3_state *state = machine.driver_data<model3_state>();
|
||||
/* set reset values */
|
||||
memset(state->m_mpc106_regs, 0, sizeof(state->m_mpc106_regs));
|
||||
state->m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */
|
||||
state->m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
|
||||
state->m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */
|
||||
state->m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */
|
||||
state->m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */
|
||||
state->m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
|
||||
state->m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
|
||||
state->m_mpc106_regs[0xb8/4] = 0x04000000;
|
||||
state->m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */
|
||||
state->m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */
|
||||
state->m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */
|
||||
state->m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
|
||||
state->m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
|
||||
state->m_mpc106_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
|
||||
memset(m_mpc106_regs, 0, sizeof(m_mpc106_regs));
|
||||
m_mpc106_regs[0x00/4] = 0x00021057; /* Vendor ID & Device ID */
|
||||
m_mpc106_regs[0x04/4] = 0x00800006; /* PCI Command & PCI Status */
|
||||
m_mpc106_regs[0x08/4] = 0x00060000; /* Class code */
|
||||
m_mpc106_regs[0x0c/4] = 0x00000800; /* Cache line size */
|
||||
m_mpc106_regs[0x70/4] = 0x00cd0000; /* Output driver control */
|
||||
m_mpc106_regs[0xa8/4] = 0x0010ff00; /* Processor interface configuration 1 */
|
||||
m_mpc106_regs[0xac/4] = 0x060c000c; /* Processor interface configuration 2 */
|
||||
m_mpc106_regs[0xb8/4] = 0x04000000;
|
||||
m_mpc106_regs[0xc0/4] = 0x00000100; /* Error enabling 1 */
|
||||
m_mpc106_regs[0xe0/4] = 0x00420fff; /* Emulation support configuration 1 */
|
||||
m_mpc106_regs[0xe8/4] = 0x00200000; /* Emulation support configuration 2 */
|
||||
m_mpc106_regs[0xf0/4] = 0x0000ff02; /* Memory control configuration 1 */
|
||||
m_mpc106_regs[0xf4/4] = 0x00030000; /* Memory control configuration 2 */
|
||||
m_mpc106_regs[0xfc/4] = 0x00000010; /* Memory control configuration 4 */
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -1260,14 +1257,13 @@ LSI53C810_DMA_CB(model3_state::real3d_dma_callback)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void configure_fast_ram(running_machine &machine)
|
||||
void model3_state::configure_fast_ram()
|
||||
{
|
||||
model3_state *state = machine.driver_data<model3_state>();
|
||||
/* set conservative DRC options */
|
||||
machine.device<ppc_device>("maincpu")->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
|
||||
m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
|
||||
|
||||
/* configure fast RAM regions for DRC */
|
||||
machine.device<ppc_device>("maincpu")->ppcdrc_add_fastram(0x00000000, 0x007fffff, false, state->m_work_ram);
|
||||
m_maincpu->ppcdrc_add_fastram(0x00000000, 0x007fffff, false, m_work_ram);
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER(model3_state::model3_sound_timer_tick)
|
||||
@ -1285,28 +1281,28 @@ TIMER_CALLBACK_MEMBER(model3_state::real3d_dma_timer_callback)
|
||||
|
||||
MACHINE_START_MEMBER(model3_state,model3_10)
|
||||
{
|
||||
configure_fast_ram(machine());
|
||||
configure_fast_ram();
|
||||
|
||||
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
|
||||
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
|
||||
}
|
||||
MACHINE_START_MEMBER(model3_state,model3_15)
|
||||
{
|
||||
configure_fast_ram(machine());
|
||||
configure_fast_ram();
|
||||
|
||||
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
|
||||
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
|
||||
}
|
||||
MACHINE_START_MEMBER(model3_state,model3_20)
|
||||
{
|
||||
configure_fast_ram(machine());
|
||||
configure_fast_ram();
|
||||
|
||||
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
|
||||
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
|
||||
}
|
||||
MACHINE_START_MEMBER(model3_state,model3_21)
|
||||
{
|
||||
configure_fast_ram(machine());
|
||||
configure_fast_ram();
|
||||
|
||||
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
|
||||
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
|
||||
@ -1338,17 +1334,17 @@ void model3_state::model3_init(int step)
|
||||
{
|
||||
if (m_step15_with_mpc106)
|
||||
{
|
||||
mpc106_init(machine());
|
||||
mpc106_init();
|
||||
}
|
||||
else
|
||||
{
|
||||
mpc105_init(machine());
|
||||
mpc105_init();
|
||||
}
|
||||
m_real3d_device_id = 0x16c311db; /* PCI Vendor ID (11db = SEGA), Device ID (16c3 = 315-5827) */
|
||||
}
|
||||
else
|
||||
{
|
||||
mpc106_init(machine());
|
||||
mpc106_init();
|
||||
// some step 2+ games need the older PCI ID (obvious symptom:
|
||||
// vbl is enabled briefly then disabled so the game hangs)
|
||||
if (m_step20_with_old_real3d)
|
||||
@ -5740,18 +5736,17 @@ static MACHINE_CONFIG_DERIVED( model3_21_5881, model3_21 )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static void interleave_vroms(running_machine &machine)
|
||||
void model3_state::interleave_vroms()
|
||||
{
|
||||
model3_state *state = machine.driver_data<model3_state>();
|
||||
int start;
|
||||
int i,j,x;
|
||||
uint16_t *vrom1 = (uint16_t*)state->memregion("user3")->base();
|
||||
uint16_t *vrom2 = (uint16_t*)state->memregion("user4")->base();
|
||||
int vrom_length = state->memregion("user3")->bytes();
|
||||
uint16_t *vrom1 = (uint16_t*)memregion("user3")->base();
|
||||
uint16_t *vrom2 = (uint16_t*)memregion("user4")->base();
|
||||
int vrom_length = memregion("user3")->bytes();
|
||||
uint16_t *vrom;
|
||||
|
||||
state->m_vrom = std::make_unique<uint32_t[]>(0x4000000/4);
|
||||
vrom = (uint16_t *)state->m_vrom.get();
|
||||
m_vrom = std::make_unique<uint32_t[]>(0x4000000/4);
|
||||
vrom = (uint16_t *)m_vrom.get();
|
||||
|
||||
if( vrom_length <= 0x1000000 ) {
|
||||
start = 0x1000000;
|
||||
@ -5783,7 +5778,7 @@ DRIVER_INIT_MEMBER(model3_state, genprot)
|
||||
|
||||
DRIVER_INIT_MEMBER(model3_state,model3_10)
|
||||
{
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
|
||||
|
||||
@ -5796,7 +5791,7 @@ DRIVER_INIT_MEMBER(model3_state,model3_10)
|
||||
|
||||
DRIVER_INIT_MEMBER(model3_state,model3_15)
|
||||
{
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf0800cf8, 0xf0800cff, read64_delegate(FUNC(model3_state::mpc105_addr_r),this), write64_delegate(FUNC(model3_state::mpc105_addr_w),this));
|
||||
@ -5806,7 +5801,7 @@ DRIVER_INIT_MEMBER(model3_state,model3_15)
|
||||
|
||||
DRIVER_INIT_MEMBER(model3_state,model3_20)
|
||||
{
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc2000000, 0xc20000ff, read64_delegate(FUNC(model3_state::real3d_dma_r),this), write64_delegate(FUNC(model3_state::real3d_dma_w),this));
|
||||
@ -5875,7 +5870,7 @@ DRIVER_INIT_MEMBER(model3_state,vs215)
|
||||
{
|
||||
m_step15_with_mpc106 = true;
|
||||
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
|
||||
@ -5896,7 +5891,7 @@ DRIVER_INIT_MEMBER(model3_state,vs29815)
|
||||
rom[(0x6028ec^4)/4] = 0x60000000;
|
||||
rom[(0x60290c^4)/4] = 0x60000000;
|
||||
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
|
||||
@ -5912,7 +5907,7 @@ DRIVER_INIT_MEMBER(model3_state,bass)
|
||||
{
|
||||
m_step15_with_mpc106 = true;
|
||||
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
|
||||
@ -5926,7 +5921,7 @@ DRIVER_INIT_MEMBER(model3_state,bass)
|
||||
|
||||
DRIVER_INIT_MEMBER(model3_state,getbass)
|
||||
{
|
||||
interleave_vroms(machine());
|
||||
interleave_vroms();
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xff000000, 0xff7fffff, "bank1" );
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
|
||||
|
@ -123,7 +123,7 @@ WRITE8_MEMBER(ms0515_state::ms0515_sys_w)
|
||||
void ms0515_state::machine_reset()
|
||||
{
|
||||
uint8_t *ram = m_ram->pointer();
|
||||
ms0515_bank_w(machine().driver_data()->generic_space(),0,0);
|
||||
ms0515_bank_w(machine().dummy_space(), 0, 0);
|
||||
|
||||
m_video_ram = ram + 0000000 + 0340000;
|
||||
m_blink = 0;
|
||||
|
@ -231,6 +231,33 @@ ROM_START( mustache )
|
||||
ROM_LOAD( "mustache.b6",0x0300, 0x1000, CRC(5f83fa35) SHA1(cb13e63577762d818e5dcbb52b8a53f66e284e8f) ) /* 63S281N near SEI0070BU */
|
||||
ROM_END
|
||||
|
||||
ROM_START( mustachei )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "1.h18", 0x0000, 0x8000, CRC(22893fbc) SHA1(724ea50642aec9be10547bd86fae5e1ebfe54685) )
|
||||
ROM_LOAD( "2.h16", 0x8000, 0x4000, CRC(ec70cfd3) SHA1(0476eab03b907778ea488c802b79da99bf376eb6) )
|
||||
|
||||
ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
|
||||
ROM_LOAD( "10.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
|
||||
|
||||
ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */
|
||||
ROM_LOAD( "5.a13", 0x0000, 0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) )
|
||||
ROM_LOAD( "4.a15", 0x4000, 0x4000, CRC(8155387d) SHA1(5f0a394c7671442519a831b0eeeaba4eecd5a406) )
|
||||
ROM_LOAD( "3.a16", 0x8000, 0x4000, CRC(4db4448d) SHA1(50a94fd65c263d95fd24b4009dbb87707929fdcb) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx2",0 ) /* sprites */
|
||||
ROM_LOAD( "6.a4", 0x00000, 0x8000, CRC(4a95a89c) SHA1(b34ebbda9b0e591876988e42bd36fd505452f38c) )
|
||||
ROM_LOAD( "8.a7", 0x08000, 0x8000, CRC(3e6be0fb) SHA1(319ea59107e37953c31f59f5f635fc520682b09f) )
|
||||
ROM_LOAD( "7.a5", 0x10000, 0x8000, CRC(8ad38884) SHA1(e11f1e1db6d5d119afedbe6604d10a6fd6049f12) )
|
||||
ROM_LOAD( "9.a8", 0x18000, 0x8000, CRC(3568c158) SHA1(c3a2120086befe396a112bd62f032638011cb47a) )
|
||||
|
||||
ROM_REGION( 0x1300, "proms",0 ) /* proms */
|
||||
ROM_LOAD( "d.c3",0x0000, 0x0100, CRC(68575300) SHA1(bc93a38df91ad8c2f335f9bccc98b52376f9b483) )
|
||||
ROM_LOAD( "c.c2",0x0100, 0x0100, CRC(eb008d62) SHA1(a370fbd1affaa489210ea36eb9e365263fb4e232) )
|
||||
ROM_LOAD( "b.c1",0x0200, 0x0100, CRC(65da3604) SHA1(e4874d4152a57944d4e47306250833ea5cd0d89b) )
|
||||
|
||||
ROM_LOAD( "a.b6",0x0300, 0x1000, CRC(5f83fa35) SHA1(cb13e63577762d818e5dcbb52b8a53f66e284e8f) ) /* 63S281N near SEI0070BU */
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(mustache_state,mustache)
|
||||
{
|
||||
int i;
|
||||
@ -279,4 +306,5 @@ DRIVER_INIT_MEMBER(mustache_state,mustache)
|
||||
}
|
||||
|
||||
|
||||
GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, mustachei, mustache, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (IG SPA license)", "Mustache Boy (Italy)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -715,6 +715,7 @@ Notes:
|
||||
/Shin Nihon Prowrestling Toukon /FL0 & FL1 have pin55 raised from PCB.
|
||||
\Retsuden 4 Arcade Edition (Japan, Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K.
|
||||
World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped)
|
||||
World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1 not dumped, FL1.2D sums E8F1 B057
|
||||
World Kicks (Asia, WK2 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK2
|
||||
World Kicks (US, WK3 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK3
|
||||
|
||||
@ -9686,10 +9687,10 @@ ROM_END
|
||||
/* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS )
|
||||
/* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Shootout Pool The Medal Version B / Shootout Pool Prize Version B (Export, Japan)", GAME_FLAGS )
|
||||
/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS )
|
||||
/* 0150 */ GAME( 2003, mtkob2, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K3 2nd (USA, EXP, KOR, AUS)", GAME_FLAGS )
|
||||
/* 0150 */ GAME( 2003, mtkob2, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K3 2nd (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0158 */ GAME( 2005, mushi2k5, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Sega", "Mushiking The King Of Beetle 2K5 1st (Japan)", GAME_FLAGS )
|
||||
/* 0164 */ GAME( 2005, mushi2eo, mushik2e, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001) (USA, EXP, AUS)", GAME_FLAGS )
|
||||
/* 0164 */ GAME( 2005, mushik2e, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001) (USA, EXP, AUS)", GAME_FLAGS )
|
||||
/* 0164 */ GAME( 2005, mushi2eo, mushik2e, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001) (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0164 */ GAME( 2005, mushik2e, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001) (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0166 */ GAME( 2006, zunou, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Touch De Zunou (Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0170-01*/GAME( 2007,manicpnc, naomi, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Manic Panic Ghosts! (USA, Export)", GAME_FLAGS )
|
||||
/* 0170 */ GAME( 2007, pokasuka, manicpnc, naomim4, naomi, naomi_state, naomi, ROT0, "Sega", "Pokasuka Ghost! (Japan)", GAME_FLAGS )
|
||||
@ -9703,15 +9704,15 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
|
||||
|
||||
/* 840-xxxxx (Sega Naomi 2 cart games) */
|
||||
/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Wild Riders", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (USA, EXP, KOR, AUS)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (Rev B) (USA, EXP, KOR, AUS)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan
|
||||
/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS )
|
||||
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (USA, EXP, KOR, AUS)", GAME_FLAGS )
|
||||
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS )
|
||||
/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS )
|
||||
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (USA, EXP, KOR, AUS)", GAME_FLAGS )
|
||||
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan)", GAME_FLAGS )
|
||||
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS )
|
||||
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS )
|
||||
|
@ -528,7 +528,7 @@ WRITE_LINE_MEMBER(pcw16_state::pcw16_keyboard_callback)
|
||||
{
|
||||
int data;
|
||||
|
||||
data = m_keyboard->read(machine().driver_data()->generic_space(), 0);
|
||||
data = m_keyboard->read(machine().dummy_space(), 0);
|
||||
|
||||
if (data)
|
||||
{
|
||||
|
@ -118,6 +118,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(quizpun2_soundlatch_w);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
void log_protection(address_space &space, const char *warning);
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update_quizpun2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -213,11 +214,10 @@ void quizpun2_state::machine_reset()
|
||||
prot.addr = 0;
|
||||
}
|
||||
|
||||
static void log_protection( address_space &space, const char *warning )
|
||||
void quizpun2_state::log_protection( address_space &space, const char *warning )
|
||||
{
|
||||
quizpun2_state *state = space.machine().driver_data<quizpun2_state>();
|
||||
struct prot_t &prot = state->m_prot;
|
||||
state->logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
|
||||
struct prot_t &prot = m_prot;
|
||||
logerror("%04x: protection - %s (state %x, wait %x, param %02x, cmd %02x, addr %02x)\n", space.device().safe_pc(), warning,
|
||||
prot.state,
|
||||
prot.wait_param,
|
||||
prot.param,
|
||||
|
@ -323,7 +323,7 @@ WRITE_LINE_MEMBER(r2dtank_state::display_enable_changed)
|
||||
WRITE8_MEMBER(r2dtank_state::pia_comp_w)
|
||||
{
|
||||
device_t *device = machine().device("pia_main");
|
||||
downcast<pia6821_device *>(device)->write(machine().driver_data()->generic_space(), offset, ~data);
|
||||
downcast<pia6821_device *>(device)->write(machine().dummy_space(), offset, ~data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,7 +5,8 @@
|
||||
Saitek RISC 2500
|
||||
|
||||
TODO:
|
||||
- sound
|
||||
- Sound is too short and high pitch, better when you underclock the cpu.
|
||||
Is cpu cycle timing wrong? or waitstate on p1000_w?
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
@ -14,6 +15,8 @@
|
||||
#include "cpu/arm/arm.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
|
||||
#include "risc2500.lh"
|
||||
|
||||
@ -26,6 +29,7 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_ram(*this, "ram"),
|
||||
m_nvram(*this, "nvram"),
|
||||
m_dac(*this, "dac"),
|
||||
m_inputs(*this, "P%u", 0)
|
||||
{ }
|
||||
|
||||
@ -44,6 +48,7 @@ private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<nvram_device> m_nvram;
|
||||
required_device<dac_byte_interface> m_dac;
|
||||
required_ioport_array<8> m_inputs;
|
||||
|
||||
uint32_t m_p1000;
|
||||
@ -237,7 +242,9 @@ WRITE32_MEMBER(risc2500_state::p1000_w)
|
||||
{
|
||||
memset(m_vram, 0, sizeof(m_vram));
|
||||
}
|
||||
|
||||
|
||||
m_dac->write(data >> 28 & 3); // Speaker
|
||||
|
||||
m_p1000 = data;
|
||||
}
|
||||
|
||||
@ -273,12 +280,12 @@ static ADDRESS_MAP_START(risc2500_mem, AS_PROGRAM, 32, risc2500_state )
|
||||
AM_RANGE( 0x00000000, 0x0001ffff ) AM_RAM
|
||||
AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(disable_boot_rom)
|
||||
AM_RANGE( 0x01000000, 0x01000003 ) AM_READWRITE(p1000_r, p1000_w)
|
||||
AM_RANGE( 0x02000000, 0x0201ffff ) AM_ROM AM_REGION("maincpu", 0)
|
||||
AM_RANGE( 0x02000000, 0x0203ffff ) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( risc2500, risc2500_state )
|
||||
MCFG_CPU_ADD("maincpu", ARM, 14000000) // VY86C010
|
||||
MCFG_CPU_ADD("maincpu", ARM, XTAL_28_322MHz / 2) // VY86C010
|
||||
MCFG_CPU_PROGRAM_MAP(risc2500_mem)
|
||||
MCFG_ARM_COPRO(ARM_COPRO_TYPE_VL86C020)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(risc2500_state, irq1_line_hold, 250)
|
||||
@ -300,16 +307,32 @@ static MACHINE_CONFIG_START( risc2500, risc2500_state )
|
||||
MCFG_RAM_EXTRA_OPTIONS("128K, 256K, 512K, 1M, 2M")
|
||||
|
||||
MCFG_NVRAM_ADD_NO_FILL("nvram")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("speaker")
|
||||
MCFG_SOUND_ADD("dac", DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) // unknown DAC
|
||||
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
|
||||
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
/* ROM definitions */
|
||||
|
||||
ROM_START( risc )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
|
||||
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE )
|
||||
ROM_SYSTEM_BIOS( 0, "v104", "v1.04" )
|
||||
ROMX_LOAD("s2500_v104.bin", 0x000000, 0x020000, CRC(84a06178) SHA1(66f4d9f53de6da865a3ebb4af1d6a3e245c59a3c), ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS( 1, "v103", "v1.03" )
|
||||
ROMX_LOAD("s2500_v103.bin", 0x000000, 0x020000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc), ROM_BIOS(2))
|
||||
ROM_END
|
||||
|
||||
ROM_START( montreux )
|
||||
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE )
|
||||
ROM_SYSTEM_BIOS( 0, "v100", "v1.00" )
|
||||
ROMX_LOAD("montreux.bin", 0x000000, 0x040000, CRC(db374cf3) SHA1(44dd60d56779084326c3dfb41d2137ebf0b4e0ac), ROM_BIOS(1))
|
||||
ROM_END
|
||||
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1992, risc, 0, 0, risc2500, risc2500, driver_device, 0, "Saitek", "RISC 2500", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_CLICKABLE_ARTWORK )
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1992, risc, 0, 0, risc2500, risc2500, driver_device, 0, "Saitek" , "RISC 2500", MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1995, montreux, 0, 0, risc2500, risc2500, driver_device, 0, "Mephisto", "Montreux" , MACHINE_CLICKABLE_ARTWORK )
|
||||
|
@ -51,6 +51,10 @@ WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w)
|
||||
m_sound_nmi_mask = data & 1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(rollrace_state::coin_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
@ -72,7 +76,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
|
||||
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w)
|
||||
AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xfc02, 0xfc03) AM_WRITENOP /* coin counters */
|
||||
AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xfc04, 0xfc05) AM_WRITE(charbank_w)
|
||||
AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
@ -1386,18 +1386,17 @@ Note: on screen copyright is (c)1998 Coinmaster.
|
||||
/*------------------------------
|
||||
update timer
|
||||
------------------------------*/
|
||||
static void uPD71054_update_timer( running_machine &machine, device_t *cpu, int no )
|
||||
void seta_state::uPD71054_update_timer(device_t *cpu, int no)
|
||||
{
|
||||
seta_state *state = machine.driver_data<seta_state>();
|
||||
uPD71054_state *uPD71054 = &state->m_uPD71054;
|
||||
uPD71054_state *uPD71054 = &m_uPD71054;
|
||||
uint16_t max = uPD71054->max[no]&0xffff;
|
||||
|
||||
if( max != 0 ) {
|
||||
attotime period = attotime::from_hz(machine.device("maincpu")->unscaled_clock()) * (16 * max);
|
||||
attotime period = attotime::from_hz(m_maincpu->unscaled_clock()) * (16 * max);
|
||||
uPD71054->timer[no]->adjust( period, no );
|
||||
} else {
|
||||
uPD71054->timer[no]->adjust( attotime::never, no);
|
||||
state->logerror( "CPU #0 PC %06X: uPD71054 error, timer %d duration is 0\n",
|
||||
logerror( "CPU #0 PC %06X: uPD71054 error, timer %d duration is 0\n",
|
||||
(cpu != nullptr) ? cpu->safe_pc() : -1, no );
|
||||
}
|
||||
}
|
||||
@ -1410,7 +1409,7 @@ static void uPD71054_update_timer( running_machine &machine, device_t *cpu, int
|
||||
TIMER_CALLBACK_MEMBER(seta_state::uPD71054_timer_callback)
|
||||
{
|
||||
m_maincpu->set_input_line(4, HOLD_LINE );
|
||||
uPD71054_update_timer( machine(), nullptr, param );
|
||||
uPD71054_update_timer( nullptr, param );
|
||||
}
|
||||
|
||||
|
||||
@ -1459,7 +1458,7 @@ WRITE16_MEMBER(seta_state::timer_regs_w)
|
||||
uPD71054->max[offset] = (uPD71054->max[offset]&0x00ff)+(data<<8);
|
||||
}
|
||||
if( uPD71054->max[offset] != 0 ) {
|
||||
uPD71054_update_timer( machine(), &space.device(), offset );
|
||||
uPD71054_update_timer( &space.device(), offset );
|
||||
}
|
||||
break;
|
||||
case 0x0003:
|
||||
|
@ -1050,4 +1050,4 @@ ROM_START(ti99_4p)
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
COMP( 1996, ti99_4p, 0, 0, ti99_4p_60hz, ti99_4p, driver_device, 0, "System-99 User Group", "SGCPU (aka TI-99/4P)" , 0 )
|
||||
COMP( 1996, ti99_4p, 0, 0, ti99_4p_60hz, ti99_4p, driver_device, 0, "System-99 User Group", "SGCPU (aka TI-99/4P)" , MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1244,9 +1244,9 @@ ROM_START(ti99_4ev)
|
||||
ROM_END
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1979, ti99_4, 0, 0, ti99_4_60hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (US)", 0)
|
||||
COMP( 1980, ti99_4e, ti99_4, 0, ti99_4_50hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (Europe)", 0)
|
||||
COMP( 1981, ti99_4a, 0, 0, ti99_4a_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (US)", 0)
|
||||
COMP( 1981, ti99_4ae, ti99_4a, 0, ti99_4a_50hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (Europe)", 0)
|
||||
COMP( 1983, ti99_4qi, ti99_4a, 0, ti99_4qi_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4QI Home Computer (US)", 0)
|
||||
COMP( 1994, ti99_4ev, ti99_4a, 0, ti99_4ev_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer with EVPC", 0)
|
||||
COMP( 1979, ti99_4, 0, 0, ti99_4_60hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (US)", MACHINE_SUPPORTS_SAVE)
|
||||
COMP( 1980, ti99_4e, ti99_4, 0, ti99_4_50hz, ti99_4, driver_device, 0, "Texas Instruments", "TI-99/4 Home Computer (Europe)", MACHINE_SUPPORTS_SAVE)
|
||||
COMP( 1981, ti99_4a, 0, 0, ti99_4a_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (US)", MACHINE_SUPPORTS_SAVE)
|
||||
COMP( 1981, ti99_4ae, ti99_4a, 0, ti99_4a_50hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer (Europe)", MACHINE_SUPPORTS_SAVE)
|
||||
COMP( 1983, ti99_4qi, ti99_4a, 0, ti99_4qi_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4QI Home Computer (US)", MACHINE_SUPPORTS_SAVE)
|
||||
COMP( 1994, ti99_4ev, ti99_4a, 0, ti99_4ev_60hz, ti99_4a, driver_device, 0, "Texas Instruments", "TI-99/4A Home Computer with EVPC", MACHINE_SUPPORTS_SAVE)
|
||||
|
@ -912,5 +912,5 @@ ROM_END
|
||||
#define rom_ti99_8e rom_ti99_8
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
COMP( 1983, ti99_8, 0, 0, ti99_8_60hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (US)" , 0)
|
||||
COMP( 1983, ti99_8e, ti99_8, 0, ti99_8_50hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (Europe)" , 0 )
|
||||
COMP( 1983, ti99_8, 0, 0, ti99_8_60hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (US)" , MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1983, ti99_8e, ti99_8, 0, ti99_8_50hz,ti99_8, driver_device, 0, "Texas Instruments", "TI-99/8 Computer (Europe)" , MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -425,17 +425,15 @@ command 1 - stop?
|
||||
*/
|
||||
|
||||
|
||||
static void tumbleb2_playmusic( device_t *device )
|
||||
void tumbleb_state::tumbleb2_playmusic(okim6295_device *oki)
|
||||
{
|
||||
tumbleb_state *state = device->machine().driver_data<tumbleb_state>();
|
||||
okim6295_device *oki = downcast<okim6295_device *>(device);
|
||||
int status = oki->read_status();
|
||||
|
||||
if (state->m_music_is_playing)
|
||||
if (m_music_is_playing)
|
||||
{
|
||||
if (!BIT(status, 3))
|
||||
{
|
||||
oki->write_command(0x80 | state->m_music_command);
|
||||
oki->write_command(0x80 | m_music_command);
|
||||
oki->write_command(0x00 | 0x82);
|
||||
}
|
||||
}
|
||||
@ -2190,15 +2188,13 @@ static MACHINE_CONFIG_START( fncywld, tumbleb_state )
|
||||
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,fncywld)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_YM2151_ADD("ymsnd", 32220000/9)
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.20)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.20)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||
|
||||
MCFG_OKIM6295_ADD("oki", 1023924, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -2252,21 +2248,18 @@ static MACHINE_CONFIG_START( htchctch, tumbleb_state )
|
||||
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,tumblepb)
|
||||
|
||||
/* sound hardware - same as hyperpac */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* on at least hatch catch, cookie & bibi and choky choky the YM2151 clock is connected
|
||||
directly to the Z80 clock so the speed should match */
|
||||
MCFG_YM2151_ADD("ymsnd", 15000000/4)
|
||||
/* on at least hatch catch, cookie & bibi and choky choky the YM2151 clock is connected directly to the Z80 clock so the speed should match */
|
||||
MCFG_YM2151_ADD("ymsnd", 15000000/4)
|
||||
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
|
||||
/* correct for cookie & bibi and hatch catch, (4096000/4) */
|
||||
MCFG_OKIM6295_ADD("oki", 1024000, OKIM6295_PIN7_HIGH)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
|
||||
@ -2275,12 +2268,13 @@ static MACHINE_CONFIG_DERIVED( cookbib, htchctch )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( chokchok, htchctch )
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
|
||||
|
||||
MCFG_OKIM6295_REPLACE("oki", 3579545/4, OKIM6295_PIN7_HIGH)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
MCFG_PALETTE_FORMAT(xxxxBBBBGGGGRRRR)
|
||||
// some PCBs have left factory with a 3.57mhz while some have a 4.096 which matches other games, assuming the former are factory errors
|
||||
// TODO: MAME sound cores doesn't handle on-the-fly sound frequency changes, I guess best action here is to make the sound chip a slot option,
|
||||
// assuming it's worth emulating a factory error in the first place.
|
||||
MCFG_OKIM6295_REPLACE("oki", 4096000/4, OKIM6295_PIN7_HIGH)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cookbib_mcu, htchctch )
|
||||
@ -2301,8 +2295,7 @@ static MACHINE_CONFIG_DERIVED( bcstory, htchctch )
|
||||
|
||||
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
|
||||
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( semibase, bcstory )
|
||||
@ -2323,8 +2316,7 @@ static MACHINE_CONFIG_DERIVED( metlsavr, cookbib )
|
||||
|
||||
MCFG_SOUND_REPLACE("ymsnd", YM2151, 3427190)
|
||||
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 0.10)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -2364,13 +2356,12 @@ static MACHINE_CONFIG_START( suprtrio, tumbleb_state )
|
||||
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,suprtrio)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_OKIM6295_ADD("oki", 875000, OKIM6295_PIN7_HIGH)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( pangpang, tumbleb_state )
|
||||
|
@ -128,6 +128,7 @@ public:
|
||||
DECLARE_DRIVER_INIT(vcombat);
|
||||
DECLARE_MACHINE_RESET(vcombat);
|
||||
DECLARE_MACHINE_RESET(shadfgtr);
|
||||
uint32_t update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index);
|
||||
uint32_t screen_update_vcombat_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_vcombat_aux(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -137,14 +138,13 @@ public:
|
||||
required_device<dac_word_interface> m_dac;
|
||||
};
|
||||
|
||||
static uint32_t update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
|
||||
uint32_t vcombat_state::update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
|
||||
{
|
||||
vcombat_state *state = screen.machine().driver_data<vcombat_state>();
|
||||
int y;
|
||||
const rgb_t *const pens = state->m_tlc34076->get_pens();
|
||||
const rgb_t *const pens = m_tlc34076->get_pens();
|
||||
|
||||
uint16_t *m68k_buf = state->m_m68k_framebuffer[(*state->m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
|
||||
uint16_t *i860_buf = state->m_i860_framebuffer[index][0].get();
|
||||
uint16_t *m68k_buf = m_m68k_framebuffer[(*m_framebuffer_ctrl & 0x20) ? 1 : 0].get();
|
||||
uint16_t *i860_buf = m_i860_framebuffer[index][0].get();
|
||||
|
||||
/* TODO: It looks like the leftmost chunk of the ground should really be on the right side? */
|
||||
/* But the i860 draws the background correctly, so it may be an original game issue. */
|
||||
|
@ -93,8 +93,8 @@ void videopin_state::machine_reset()
|
||||
|
||||
/* both output latches are cleared on reset */
|
||||
|
||||
out1_w(machine().driver_data()->generic_space(), 0, 0);
|
||||
out2_w(machine().driver_data()->generic_space(), 0, 0);
|
||||
out1_w(machine().dummy_space(), 0, 0);
|
||||
out2_w(machine().dummy_space(), 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -477,7 +477,7 @@ READ_LINE_MEMBER( vip_state::ef4_r )
|
||||
WRITE_LINE_MEMBER( vip_state::q_w )
|
||||
{
|
||||
// sound output
|
||||
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, state);
|
||||
m_beeper->write(machine().dummy_space(), NODE_01, state);
|
||||
|
||||
// Q led
|
||||
output().set_led_value(LED_Q, state);
|
||||
@ -620,7 +620,7 @@ void vip_state::machine_start()
|
||||
output().set_led_value(LED_POWER, 1);
|
||||
|
||||
// reset sound
|
||||
m_beeper->write(machine().driver_data()->generic_space(), NODE_01, 0);
|
||||
m_beeper->write(machine().dummy_space(), NODE_01, 0);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_8000));
|
||||
|
@ -165,6 +165,8 @@ public:
|
||||
DECLARE_WRITE32_MEMBER(model2_5881prot_w);
|
||||
int first_read;
|
||||
|
||||
void model2_3d_init(uint16_t *texture_rom);
|
||||
void geo_init(uint32_t *polygon_rom);
|
||||
DECLARE_READ32_MEMBER(maxx_r);
|
||||
DECLARE_WRITE32_MEMBER(mode_w);
|
||||
DECLARE_WRITE32_MEMBER(model2o_tex_w0);
|
||||
@ -396,8 +398,3 @@ struct quad_m2
|
||||
uint16_t texheader[4];
|
||||
uint8_t luma;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*----------- defined in video/model2.c -----------*/
|
||||
void model2_3d_set_zclip( running_machine &machine, uint8_t clip );
|
||||
|
@ -1,5 +1,6 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont, Ville Linde
|
||||
#include "cpu/powerpc/ppc.h"
|
||||
#include "video/poly.h"
|
||||
#include "bus/scsi/scsi.h"
|
||||
#include "machine/53c810.h"
|
||||
@ -72,7 +73,7 @@ public:
|
||||
m_step20_with_old_real3d = false;
|
||||
}
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ppc_device> m_maincpu;
|
||||
optional_device<lsi53c810_device> m_lsi53c810;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<scsp_device> m_scsp1;
|
||||
@ -198,12 +199,14 @@ public:
|
||||
DECLARE_WRITE64_MEMBER(mpc105_data_w);
|
||||
DECLARE_READ64_MEMBER(mpc105_reg_r);
|
||||
DECLARE_WRITE64_MEMBER(mpc105_reg_w);
|
||||
void mpc105_init();
|
||||
DECLARE_READ64_MEMBER(mpc106_addr_r);
|
||||
DECLARE_WRITE64_MEMBER(mpc106_addr_w);
|
||||
DECLARE_READ64_MEMBER(mpc106_data_r);
|
||||
DECLARE_WRITE64_MEMBER(mpc106_data_w);
|
||||
DECLARE_READ64_MEMBER(mpc106_reg_r);
|
||||
DECLARE_WRITE64_MEMBER(mpc106_reg_w);
|
||||
void mpc106_init();
|
||||
DECLARE_READ64_MEMBER(scsi_r);
|
||||
DECLARE_WRITE64_MEMBER(scsi_w);
|
||||
DECLARE_READ64_MEMBER(real3d_dma_r);
|
||||
@ -222,6 +225,8 @@ public:
|
||||
DECLARE_WRITE16_MEMBER(model3snd_ctrl);
|
||||
uint32_t pci_device_get_reg();
|
||||
void pci_device_set_reg(uint32_t value);
|
||||
void configure_fast_ram();
|
||||
void interleave_vroms();
|
||||
DECLARE_DRIVER_INIT(genprot);
|
||||
DECLARE_DRIVER_INIT(lemans24);
|
||||
DECLARE_DRIVER_INIT(vs298);
|
||||
|
@ -37,6 +37,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(fake_d800_w);
|
||||
DECLARE_WRITE8_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
|
||||
DECLARE_WRITE8_MEMBER(coin_w);
|
||||
DECLARE_WRITE8_MEMBER(charbank_w);
|
||||
DECLARE_WRITE8_MEMBER(bkgpen_w);
|
||||
DECLARE_WRITE8_MEMBER(spritebank_w);
|
||||
|
@ -250,6 +250,7 @@ public:
|
||||
uint32_t screen_update_seta_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void screen_eof_seta_buffer_sprites(screen_device &screen, bool state);
|
||||
void screen_eof_setaroul(screen_device &screen, bool state);
|
||||
void uPD71054_update_timer(device_t *cpu, int no);
|
||||
INTERRUPT_GEN_MEMBER(wrofaero_interrupt);
|
||||
TIMER_CALLBACK_MEMBER(uPD71054_timer_callback);
|
||||
TIMER_CALLBACK_MEMBER(keroppi_prize_hop_callback);
|
||||
|
@ -211,6 +211,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( ti83pse_ctimer3_count_w );
|
||||
|
||||
|
||||
void ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram);
|
||||
void update_ti85_memory ();
|
||||
void update_ti83p_memory ();
|
||||
void update_ti83pse_memory ();
|
||||
|
@ -128,6 +128,7 @@ public:
|
||||
void tumbleb_draw_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pf1x_offs, int pf1y_offs, int pf2x_offs, int pf2y_offs);
|
||||
void tumbleb2_set_music_bank( int bank );
|
||||
void tumbleb2_play_sound( okim6295_device *oki, int data );
|
||||
void tumbleb2_playmusic(okim6295_device *oki);
|
||||
void process_tumbleb2_music_command( okim6295_device *oki, int data );
|
||||
void tumblepb_gfx_rearrange(int rgn);
|
||||
void suprtrio_decrypt_code();
|
||||
|
@ -157,48 +157,55 @@
|
||||
<element name="black"><rect><color red="0.64" green="0.08" blue="0.11" /></rect></element>
|
||||
<element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></rect></element>
|
||||
|
||||
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_1"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
|
||||
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_a"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <rect><color red="0.64" green="0.08" blue="0.11" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
|
||||
<element name="text_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_newgame"> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_level"> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_color"> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_board"> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_selfplay"> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_referee"> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_random"> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_hint"> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_white"> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_black"> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_king" > <text string="♔" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_queen" > <text string="♕" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_rook" > <text string="♖" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_bishop" > <text string="♗" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_knight" > <text string="♘" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_pawn" > <text string="♙" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_change"> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_board"> <text string="BOARD" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_halt"> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_reset"> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_check"> <text string="CHECK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_your"> <text string="YOUR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_cms"> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_b1"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b2"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b3"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b4"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b5"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b6"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b7"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b8"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_chessmaster"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_newgame"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_level"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_color"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_board"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_selfplay"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_referee"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_random"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_hint"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_white"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_black"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_king" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♔" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_queen" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♕" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_rook" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♖" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_bishop" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♗" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_knight" > <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="♘" 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="♙" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_change"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_halt"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_check"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHECK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_your"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="YOUR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_cms"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
|
||||
<element name="piece" defstate="0">
|
||||
<text string="♚" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
|
||||
@ -557,23 +564,23 @@
|
||||
<bezel element="text_rook"> <bounds x="95" y="39" width="4" height="4" /></bezel>
|
||||
<bezel element="text_queen"> <bounds x="95" y="46" width="4" height="4" /></bezel>
|
||||
<bezel element="text_king"> <bounds x="95" y="53" width="4" height="4" /></bezel>
|
||||
<bezel element="text_white"> <bounds x="88" y="61" width="10" height="1.8" /></bezel>
|
||||
<bezel element="text_black"> <bounds x="88" y="68" width="10" height="1.8" /></bezel>
|
||||
<bezel element="text_white"> <bounds x="90" y="61" width="9" height="1.8" /></bezel>
|
||||
<bezel element="text_black"> <bounds x="90" y="68" width="9" height="1.8" /></bezel>
|
||||
|
||||
<bezel element="text_check"> <bounds x="91" y="6" width="10" height="1.8" /></bezel>
|
||||
<bezel element="text_your"> <bounds x="98" y="6" width="8" height="1.8" /></bezel>
|
||||
<bezel element="text_your"> <bounds x="99" y="6" width="6" height="1.8" /></bezel>
|
||||
<bezel element="text_cms"> <bounds x="104" y="6" width="8" height="1.8" /></bezel>
|
||||
<bezel element="text_change"> <bounds x="95.3" y="73" width="12" height="1.8" /></bezel>
|
||||
<bezel element="text_board"> <bounds x="103" y="73" width="10" height="1.8" /></bezel>
|
||||
|
||||
<bezel element="text_1"><bounds x="111" y="19" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_2"><bounds x="111" y="26" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_3"><bounds x="111" y="33" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_4"><bounds x="111" y="40" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_5"><bounds x="111" y="47" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_6"><bounds x="111" y="54" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_7"><bounds x="111" y="62" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_8"><bounds x="111" y="69" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b1"><bounds x="111" y="19" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b2"><bounds x="111" y="26" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b3"><bounds x="111" y="33" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b4"><bounds x="111" y="40" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b5"><bounds x="111" y="47" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b6"><bounds x="111" y="54" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b7"><bounds x="111" y="62" width="2" height="1.8" /></bezel>
|
||||
<bezel element="text_b8"><bounds x="111" y="69" width="2" height="1.8" /></bezel>
|
||||
|
||||
<bezel name="led_i1" element="led"> <bounds x="100" y="19" width="2" height="2" /></bezel>
|
||||
<bezel name="led_i2" element="led"> <bounds x="100" y="26" width="2" height="2" /></bezel>
|
||||
|
@ -167,42 +167,42 @@
|
||||
<element name="black"><rect><color red="0.44" green="0.08" blue="0.01" /></rect></element>
|
||||
<element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></rect></element>
|
||||
|
||||
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_1"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
|
||||
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_a"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
|
||||
<element name="text_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_diamond"> <text string="diamond" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_monitor"> <text string="MONITOR" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_view"> <text string="VIEW" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_reset"> <text string="RESET" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_selection"> <text string="SELECTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_dialogue"> <text string="DIALOGUE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_function"> <text string="FUNCTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_notation"> <text string="NOTATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_parameter"> <text string="PARAMETER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_information"> <text string="INFORMATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_board"> <text string="BOARD" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_match"> <text string="MATCH" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_time"> <text string="TIME" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_enter"> <text string="ENTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_playmode"> <text string="PLAYMODE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_move_fore"> <text string="MOVE FORE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_move_back"> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_chessmaster"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_diamond"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="diamond" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_monitor"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MONITOR" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_view"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="VIEW" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_reset"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="RESET" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_selection"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="SELECTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_dialogue"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="DIALOGUE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_function"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="FUNCTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_notation"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="NOTATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_parameter"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="PARAMETER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_information"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="INFORMATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_board"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="BOARD" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_match"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MATCH" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_time"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="TIME" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_enter"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="ENTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_playmode"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="PLAYMODE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_move_fore"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE FORE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_move_back"> <rect><color red="1.00" green="0.88" blue="0.55" /></rect> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
|
||||
<element name="piece" defstate="0">
|
||||
<text string="♚" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
|
||||
|
@ -154,50 +154,50 @@
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_on"> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_off"> <text string="OFF" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_newgame"> <text string="NEW GAME" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_play"> <text string="PLAY" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_back"> <text string="BACK" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_left"> <text string="←" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_right"> <text string="→" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_menu"> <text string="MENU" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_up"> <text string="↑" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_down"> <text string="↓" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_enter"> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p1"> <text string="♚" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p2"> <text string="♛" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p3"> <text string="♜" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p4"> <text string="♝" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p5"> <text string="♞" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p6"> <text string="♟" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="sym_colon"> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
|
||||
<element name="sym_left"> <text string="←" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_right"> <text string="→" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p1"> <text string="♚" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p2"> <text string="♛" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p3"> <text string="♜" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p4"> <text string="♝" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p5"> <text string="♞" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_p6"> <text string="♟" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_black"> <text string="●" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_white"> <text string="○" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="text_1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_2"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_3"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_4"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_5"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_6"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_7"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_8"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_a"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_b"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_c"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_d"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_e"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_f"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_g"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_h"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
|
||||
<element name="text_on"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_off"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="OFF" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_newgame"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="NEW GAME" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_play"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="PLAY" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_back"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="BACK" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_left"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="←" > <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="→" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_menu"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="MENU" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_up"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="↑" > <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="↓" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_enter"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="text_p1"> <rect><color red="0.63" green="0.63" blue="0.63" /></rect> <text string="♚" > <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="♛" > <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="♜" > <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="♝" > <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="♞" > <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="♟" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
|
||||
<element name="sym_colon"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
|
||||
<element name="sym_left"> <rect><color red="0.00" green="0.00" blue="0.00" /></rect> <text string="←" 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="→" 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="♚" 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="♛" 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="♜" 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="♝" 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="♞" 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="♟" 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="○" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="sym_black"> <text string="●" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
|
||||
<element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
|
||||
<element name="black"><rect><color red="0" green="0" blue="0" /></rect></element>
|
||||
<element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element>
|
||||
@ -463,6 +463,8 @@
|
||||
<!-- LCD panel -->
|
||||
<screen index="0"><bounds x="95" y="4.5" width="30" height="4" /></screen>
|
||||
|
||||
<bezel name="sym12" element="sym_colon" ><bounds x="107.0" y="9" width="1.5" height="3" /></bezel>
|
||||
<bezel name="sym13" element="sym_colon" ><bounds x="119.2" y="9" width="1.5" height="3" /></bezel>
|
||||
<bezel name="digit11" element="digit" ><bounds x="95.9" y="9" width="1.6" height="3" /></bezel>
|
||||
<bezel name="digit10" element="digit" ><bounds x="98.35" y="9" width="1.6" height="3" /></bezel>
|
||||
<bezel name="digit9" element="digit" ><bounds x="100.8" y="9" width="1.6" height="3" /></bezel>
|
||||
@ -475,8 +477,6 @@
|
||||
<bezel name="digit2" element="digit" ><bounds x="117.95" y="9" width="1.6" height="3" /></bezel>
|
||||
<bezel name="digit1" element="digit" ><bounds x="120.4" y="9" width="1.6" height="3" /></bezel>
|
||||
<bezel name="digit0" element="digit" ><bounds x="122.85" y="9" width="1.6" height="3" /></bezel>
|
||||
<bezel name="sym12" element="sym_colon" ><bounds x="107.0" y="9" width="1.5" height="3" /></bezel>
|
||||
<bezel name="sym13" element="sym_colon" ><bounds x="119.2" y="9" width="1.5" height="3" /></bezel>
|
||||
|
||||
<bezel name="sym1" element="sym_right" > <bounds x="121.60" y="12.7" width="3" height="3" /></bezel>
|
||||
<bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.5" width="5" height="3" /></bezel>
|
||||
|
@ -700,7 +700,7 @@ void midway_ioasic_device::ioasic_reset()
|
||||
|
||||
void midway_ioasic_device::update_ioasic_irq()
|
||||
{
|
||||
uint16_t fifo_state = fifo_status_r(machine().driver_data()->generic_space(),0);
|
||||
uint16_t fifo_state = fifo_status_r(machine().dummy_space(), 0);
|
||||
uint16_t irqbits = 0x2000;
|
||||
uint8_t new_state;
|
||||
|
||||
|
@ -252,7 +252,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(nitedrvr_state::nitedrvr_crash_toggle_callback)
|
||||
if (m_crash_en && m_crash_data_en)
|
||||
{
|
||||
m_crash_data--;
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
address_space &space = machine().dummy_space();
|
||||
m_discrete->write(space, NITEDRVR_BANG_DATA, m_crash_data); // Crash Volume
|
||||
if (!m_crash_data)
|
||||
m_crash_data_en = 0; // Done counting?
|
||||
|
@ -134,12 +134,11 @@ void ti85_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
|
||||
}
|
||||
}
|
||||
|
||||
inline void ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram)
|
||||
void ti85_state::ti8x_update_bank(address_space &space, uint8_t bank, uint8_t *base, uint8_t page, bool is_ram)
|
||||
{
|
||||
ti85_state *state = space.machine().driver_data<ti85_state>();
|
||||
static const char *const tag[] = {"bank1", "bank2", "bank3", "bank4"};
|
||||
|
||||
state->membank(tag[bank&3])->set_base(base + (0x4000 * page));
|
||||
membank(tag[bank&3])->set_base(base + (0x4000 * page));
|
||||
|
||||
if (is_ram)
|
||||
space.install_write_bank(bank * 0x4000, bank * 0x4000 + 0x3fff, tag[bank&3]);
|
||||
|
@ -155,7 +155,7 @@ WRITE8_MEMBER( ticket_dispenser_device::write )
|
||||
|
||||
WRITE_LINE_MEMBER( ticket_dispenser_device::motor_w )
|
||||
{
|
||||
write(machine().driver_data()->generic_space(), 0, state ? m_active_bit : 0);
|
||||
write(machine().dummy_space(), 0, state ? m_active_bit : 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -693,13 +693,13 @@ TIMER_CALLBACK_MEMBER(joust2_state::joust2_deferred_snd_cmd_w)
|
||||
WRITE_LINE_MEMBER(joust2_state::joust2_pia_3_cb1_w)
|
||||
{
|
||||
m_joust2_current_sound_data = (m_joust2_current_sound_data & ~0x100) | ((state << 8) & 0x100);
|
||||
m_cvsd_sound->write(machine().driver_data()->generic_space(), 0, m_joust2_current_sound_data);
|
||||
m_cvsd_sound->write(machine().dummy_space(), 0, m_joust2_current_sound_data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(joust2_state::joust2_snd_cmd_w)
|
||||
{
|
||||
m_joust2_current_sound_data = (m_joust2_current_sound_data & ~0xff) | (data & 0xff);
|
||||
m_cvsd_sound->write(machine().driver_data()->generic_space(), 0, m_joust2_current_sound_data);
|
||||
m_cvsd_sound->write(machine().dummy_space(), 0, m_joust2_current_sound_data);
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(joust2_state::joust2_deferred_snd_cmd_w),this), m_joust2_current_sound_data);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user