mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
0cacc8bc1f
@ -1,38 +1,42 @@
|
||||
#
|
||||
# FIXME: This file produces errors and needs to be fixed.
|
||||
#
|
||||
|
||||
[SDL2]
|
||||
# MAME/MESS keymap for Brazilian QWERTY 107-keys keyboard (Linux)
|
||||
#
|
||||
# The 107-keys Brazilian keyboard has an extra key used to type "/".
|
||||
# Since I don't own such a keyboard, I can't write a proper definition.
|
||||
# However, it should be placed in the 4th row, after ITEM_ID_SLASH.
|
||||
#
|
||||
# SDL can tell the difference between the two COMPOSE keys but assigns them the same label
|
||||
# thus both OPENBRACE and QUOTE appear like "´ ~" in the user interface.
|
||||
# The following definitions are therefore correct.
|
||||
# MAME/MESS keymap for Brazilian ABNT2 QWERTY 105-keys keyboard (Linux)
|
||||
#
|
||||
# Row 1
|
||||
#
|
||||
ITEM_ID_TILDE SDL_SCANCODE_QUOTE '
|
||||
ITEM_ID_TILDE SDL_SCANCODE_APOSTROPHE ~
|
||||
#
|
||||
# Row 2
|
||||
#
|
||||
ITEM_ID_OPENBRACE SDL_SCANCODE_COMPOSE ´
|
||||
ITEM_ID_CLOSEBRACE SDL_SCANCODE_LEFTBRACKET [
|
||||
ITEM_ID_OPENBRACE SDL_SCANCODE_RIGHTBRACKET [
|
||||
ITEM_ID_CLOSEBRACE SDL_SCANCODE_BACKSLASH ]
|
||||
#
|
||||
# Row 3
|
||||
#
|
||||
ITEM_ID_COLON SDL_SCANCODE_WORLD_71 Ç
|
||||
ITEM_ID_QUOTE SDL_SCANCODE_COMPOSE ~
|
||||
ITEM_ID_BACKSLASH SDL_SCANCODE_RIGHTBRACKET ]
|
||||
ITEM_ID_COLON SDL_SCANCODE_SLASH :
|
||||
ITEM_ID_QUOTE SDL_SCANCODE_GRAVE "
|
||||
ITEM_ID_BACKSLASH SDL_SCANCODE_NONUSBACKSLASH \
|
||||
#
|
||||
# Row 4
|
||||
#
|
||||
ITEM_ID_BACKSLASH2 SDL_SCANCODE_LESS <
|
||||
ITEM_ID_SLASH SDL_SCANCODE_SEMICOLON ;
|
||||
ITEM_ID_STOP SDL_SCANCODE_PERIOD .
|
||||
#
|
||||
# Row 5
|
||||
# keyPad row 1
|
||||
#
|
||||
ITEM_ID_RALT SDL_SCANCODE_MODE ALTGR
|
||||
ITEM_ID_NUMLOCK SDL_SCANCODE_NUMLOCKCLEAR NUMLOCK
|
||||
ITEM_ID_SLASH_PAD SDL_SCANCODE_KP_DIVIDE /
|
||||
ITEM_ID_ASTERISK SDL_SCANCODE_KP_MULTIPLY *
|
||||
ITEM_ID_MINUS_PAD SDL_SCANCODE_KP_MINUS -
|
||||
#
|
||||
# keyPad row 2
|
||||
#
|
||||
ITEM_ID_PLUS_PAD SDL_SCANCODE_KP_PLUS +
|
||||
#
|
||||
# keyPad row 3
|
||||
#
|
||||
ITEM_ID_STOP SDL_SCANCODE_KP_DECIMAL .
|
||||
#
|
||||
# keyPad row 4
|
||||
#
|
||||
# keyPad row 5
|
||||
#
|
||||
ITEM_ID_COMMA SDL_SCANCODE_KP_PERIOD ,
|
||||
|
@ -1835,7 +1835,9 @@ files {
|
||||
|
||||
createMESSProjects(_target, _subtarget, "chessking")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/ckz80.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/ckingbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/ckingbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/cking_master.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "chromatics")
|
||||
@ -1897,7 +1899,9 @@ files {
|
||||
|
||||
createMESSProjects(_target, _subtarget, "cxg")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/cxgz80.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/cxgbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/cxgbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "cybiko")
|
||||
@ -2125,11 +2129,12 @@ files {
|
||||
|
||||
createMESSProjects(_target, _subtarget, "fidelity")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/fidelz80.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidelbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/fidelbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel6502.cpp",
|
||||
MAME_DIR .. "src/mame/includes/fidel_desdis_common.h",
|
||||
MAME_DIR .. "src/mame/drivers/fidel68k.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidelmcs48.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "force")
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "natkeyboard.h"
|
||||
#include "render.h"
|
||||
#include <ctype.h>
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
|
||||
|
||||
@ -3215,13 +3216,6 @@ void debugger_commands::execute_memdump(int ref, const std::vector<std::string>
|
||||
execute_symlist - execute the symlist command
|
||||
-------------------------------------------------*/
|
||||
|
||||
static int CLIB_DECL symbol_sort_compare(const void *item1, const void *item2)
|
||||
{
|
||||
const char *str1 = *(const char **)item1;
|
||||
const char *str2 = *(const char **)item2;
|
||||
return strcmp(str1, str2);
|
||||
}
|
||||
|
||||
void debugger_commands::execute_symlist(int ref, const std::vector<std::string> ¶ms)
|
||||
{
|
||||
device_t *cpu = nullptr;
|
||||
@ -3257,7 +3251,9 @@ void debugger_commands::execute_symlist(int ref, const std::vector<std::string>
|
||||
|
||||
/* sort the symbols */
|
||||
if (count > 1)
|
||||
qsort((void *)namelist, count, sizeof(namelist[0]), symbol_sort_compare);
|
||||
std::sort(&namelist[0], &namelist[count], [](const char *item1, const char *item2) {
|
||||
return strcmp(item1, item2) < 0;
|
||||
});
|
||||
|
||||
/* iterate over symbols and print out relevant ones */
|
||||
for (symnum = 0; symnum < count; symnum++)
|
||||
|
@ -12,79 +12,68 @@
|
||||
#include "debugger.h"
|
||||
#include "dvbpoints.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
|
||||
|
||||
|
||||
// Sorting functors for the qsort function
|
||||
static int cIndexAscending(const void* a, const void* b)
|
||||
static bool cIndexAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return left->index() - right->index();
|
||||
return a->index() < b->index();
|
||||
}
|
||||
|
||||
static int cIndexDescending(const void* a, const void* b)
|
||||
static bool cIndexDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cIndexAscending(b, a);
|
||||
}
|
||||
|
||||
static int cEnabledAscending(const void* a, const void* b)
|
||||
static bool cEnabledAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0);
|
||||
return !a->enabled() && b->enabled();
|
||||
}
|
||||
|
||||
static int cEnabledDescending(const void* a, const void* b)
|
||||
static bool cEnabledDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cEnabledAscending(b, a);
|
||||
}
|
||||
|
||||
static int cCpuAscending(const void* a, const void* b)
|
||||
static bool cCpuAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag());
|
||||
return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0;
|
||||
}
|
||||
|
||||
static int cCpuDescending(const void* a, const void* b)
|
||||
static bool cCpuDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cCpuAscending(b, a);
|
||||
}
|
||||
|
||||
static int cAddressAscending(const void* a, const void* b)
|
||||
static bool cAddressAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0;
|
||||
return a->address() < b->address();
|
||||
}
|
||||
|
||||
static int cAddressDescending(const void* a, const void* b)
|
||||
static bool cAddressDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cAddressAscending(b, a);
|
||||
}
|
||||
|
||||
static int cConditionAscending(const void* a, const void* b)
|
||||
static bool cConditionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return strcmp(left->condition(), right->condition());
|
||||
return strcmp(a->condition(), b->condition()) < 0;
|
||||
}
|
||||
|
||||
static int cConditionDescending(const void* a, const void* b)
|
||||
static bool cConditionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cConditionAscending(b, a);
|
||||
}
|
||||
|
||||
static int cActionAscending(const void* a, const void* b)
|
||||
static bool cActionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
const device_debug::breakpoint* left = *(device_debug::breakpoint**)a;
|
||||
const device_debug::breakpoint* right = *(device_debug::breakpoint**)b;
|
||||
return strcmp(left->action(), right->action());
|
||||
return strcmp(a->action(), b->action()) < 0;
|
||||
}
|
||||
|
||||
static int cActionDescending(const void* a, const void* b)
|
||||
static bool cActionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b)
|
||||
{
|
||||
return cActionAscending(b, a);
|
||||
}
|
||||
@ -210,7 +199,7 @@ void debug_view_breakpoints::gather_breakpoints()
|
||||
|
||||
// And now for the sort
|
||||
if (!m_buffer.empty())
|
||||
qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::breakpoint *), m_sortType);
|
||||
std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType);
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,7 +48,7 @@ private:
|
||||
|
||||
|
||||
// internal state
|
||||
int (*m_sortType)(void const *, void const *);
|
||||
bool (*m_sortType)(const device_debug::breakpoint *, const device_debug::breakpoint *);
|
||||
std::vector<device_debug::breakpoint *> m_buffer;
|
||||
};
|
||||
|
||||
|
@ -11,102 +11,87 @@
|
||||
#include "emu.h"
|
||||
#include "dvwpoints.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
|
||||
|
||||
|
||||
static int cIndexAscending(const void* a, const void* b)
|
||||
static bool cIndexAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return left->index() - right->index();
|
||||
return a->index() < b->index();
|
||||
}
|
||||
|
||||
static int cIndexDescending(const void* a, const void* b)
|
||||
static bool cIndexDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cIndexAscending(b, a);
|
||||
}
|
||||
|
||||
static int cEnabledAscending(const void* a, const void* b)
|
||||
static bool cEnabledAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0);
|
||||
return !a->enabled() && b->enabled();
|
||||
}
|
||||
|
||||
static int cEnabledDescending(const void* a, const void* b)
|
||||
static bool cEnabledDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cEnabledAscending(b, a);
|
||||
}
|
||||
|
||||
static int cCpuAscending(const void* a, const void* b)
|
||||
static bool cCpuAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag());
|
||||
return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0;
|
||||
}
|
||||
|
||||
static int cCpuDescending(const void* a, const void* b)
|
||||
static bool cCpuDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cCpuAscending(b, a);
|
||||
}
|
||||
|
||||
static int cSpaceAscending(const void* a, const void* b)
|
||||
static bool cSpaceAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return strcmp(left->space().name(), right->space().name());
|
||||
return strcmp(a->space().name(), b->space().name()) < 0;
|
||||
}
|
||||
|
||||
static int cSpaceDescending(const void* a, const void* b)
|
||||
static bool cSpaceDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cSpaceAscending(b, a);
|
||||
}
|
||||
|
||||
static int cAddressAscending(const void* a, const void* b)
|
||||
static bool cAddressAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0;
|
||||
return a->address() < b->address();
|
||||
}
|
||||
|
||||
static int cAddressDescending(const void* a, const void* b)
|
||||
static bool cAddressDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cAddressAscending(b, a);
|
||||
}
|
||||
|
||||
static int cTypeAscending(const void* a, const void* b)
|
||||
static bool cTypeAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return int(left->type()) - int(right->type());
|
||||
return int(a->type()) < int(b->type());
|
||||
}
|
||||
|
||||
static int cTypeDescending(const void* a, const void* b)
|
||||
static bool cTypeDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cTypeAscending(b, a);
|
||||
}
|
||||
|
||||
static int cConditionAscending(const void* a, const void* b)
|
||||
static bool cConditionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return strcmp(left->condition(), right->condition());
|
||||
return strcmp(a->condition(), b->condition()) < 0;
|
||||
}
|
||||
|
||||
static int cConditionDescending(const void* a, const void* b)
|
||||
static bool cConditionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cConditionAscending(b, a);
|
||||
}
|
||||
|
||||
static int cActionAscending(const void* a, const void* b)
|
||||
static bool cActionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
const device_debug::watchpoint* left = *(device_debug::watchpoint**)a;
|
||||
const device_debug::watchpoint* right = *(device_debug::watchpoint**)b;
|
||||
return left->action().compare(right->action());
|
||||
return a->action() < b->action();
|
||||
}
|
||||
|
||||
static int cActionDescending(const void* a, const void* b)
|
||||
static bool cActionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b)
|
||||
{
|
||||
return cActionAscending(b, a);
|
||||
}
|
||||
@ -236,7 +221,7 @@ void debug_view_watchpoints::gather_watchpoints()
|
||||
|
||||
// And now for the sort
|
||||
if (!m_buffer.empty())
|
||||
qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::watchpoint *), m_sortType);
|
||||
std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType);
|
||||
}
|
||||
|
||||
|
||||
|
@ -43,7 +43,7 @@ private:
|
||||
|
||||
|
||||
// internal state
|
||||
int (*m_sortType)(void const *, void const *);
|
||||
bool (*m_sortType)(const device_debug::watchpoint *, const device_debug::watchpoint *);
|
||||
std::vector<device_debug::watchpoint *> m_buffer;
|
||||
};
|
||||
|
||||
|
@ -313,8 +313,8 @@ void apple2_state::machine_start()
|
||||
m_inh_bank = 0;
|
||||
|
||||
// precalculate joystick time constants
|
||||
m_x_calibration = attotime::from_usec(12).as_double();
|
||||
m_y_calibration = attotime::from_usec(13).as_double();
|
||||
m_x_calibration = attotime::from_nsec(10800).as_double();
|
||||
m_y_calibration = attotime::from_nsec(10800).as_double();
|
||||
|
||||
// cache slot devices
|
||||
for (int i = 0; i <= 7; i++)
|
||||
@ -322,6 +322,12 @@ void apple2_state::machine_start()
|
||||
m_slotdevice[i] = m_a2bus->get_a2bus_card(i);
|
||||
}
|
||||
|
||||
for (int adr = 0; adr < 0x10000; adr += 2)
|
||||
{
|
||||
m_ram_ptr[adr] = 0;
|
||||
m_ram_ptr[adr+1] = 0xff;
|
||||
}
|
||||
|
||||
// setup save states
|
||||
save_item(NAME(m_speaker_state));
|
||||
save_item(NAME(m_cassette_state));
|
||||
@ -630,33 +636,33 @@ READ8_MEMBER(apple2_state::flags_r)
|
||||
switch (offset)
|
||||
{
|
||||
case 0: // cassette in
|
||||
return m_cassette->input() > 0.0 ? 0x80 : 0;
|
||||
return (m_cassette->input() > 0.0 ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 1: // button 0
|
||||
return (m_joybuttons->read() & 0x10) ? 0x80 : 0;
|
||||
return ((m_joybuttons->read() & 0x10) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 2: // button 1
|
||||
return (m_joybuttons->read() & 0x20) ? 0x80 : 0;
|
||||
return ((m_joybuttons->read() & 0x20) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 3: // button 2
|
||||
// check if SHIFT key mod configured
|
||||
if (m_sysconfig->read() & 0x04)
|
||||
{
|
||||
return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | (read_floatingbus() & 0x3f);
|
||||
}
|
||||
return (m_joybuttons->read() & 0x40) ? 0x80 : 0;
|
||||
return ((m_joybuttons->read() & 0x40) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 4: // joy 1 X axis
|
||||
return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 5: // joy 1 Y axis
|
||||
return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 6: // joy 2 X axis
|
||||
return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
|
||||
case 7: // joy 2 Y axis
|
||||
return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | (read_floatingbus() & 0x7f);
|
||||
}
|
||||
|
||||
// this is never reached
|
||||
|
@ -780,8 +780,8 @@ void apple2e_state::machine_start()
|
||||
}
|
||||
|
||||
// precalculate joystick time constants
|
||||
m_x_calibration = attotime::from_usec(12).as_double();
|
||||
m_y_calibration = attotime::from_usec(13).as_double();
|
||||
m_x_calibration = attotime::from_nsec(10800).as_double();
|
||||
m_y_calibration = attotime::from_nsec(10800).as_double();
|
||||
|
||||
// cache slot devices
|
||||
for (int i = 0; i <= 7; i++)
|
||||
@ -818,6 +818,14 @@ void apple2e_state::machine_start()
|
||||
m_video->m_char_ptr = memregion("gfx1")->base();
|
||||
m_video->m_char_size = memregion("gfx1")->bytes();
|
||||
|
||||
for (int adr = 0; adr < 0x10000; adr += 2)
|
||||
{
|
||||
m_ram_ptr[adr] = 0;
|
||||
m_ram_ptr[adr+1] = 0xff;
|
||||
m_aux_ptr[adr] = 0;
|
||||
m_aux_ptr[adr+1] = 0xff;
|
||||
}
|
||||
|
||||
m_inh_slot = -1;
|
||||
m_cnxx_slot = CNXX_UNCLAIMED;
|
||||
m_mockingboard4c = false;
|
||||
@ -1592,6 +1600,7 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic)
|
||||
READ8_MEMBER(apple2e_state::c000_r)
|
||||
{
|
||||
if(machine().side_effects_disabled()) return read_floatingbus();
|
||||
u8 uFloatingBus7 = read_floatingbus() & 0x7f;
|
||||
|
||||
if ((offset & 0xf0) == 0x00) // keyboard latch, $C000 is really 00-0F
|
||||
{
|
||||
@ -1656,43 +1665,43 @@ READ8_MEMBER(apple2e_state::c000_r)
|
||||
case 0x68:
|
||||
if (m_cassette)
|
||||
{
|
||||
return m_cassette->input() > 0.0 ? 0x80 : 0;
|
||||
return (m_cassette->input() > 0.0 ? 0x80 : 0) | uFloatingBus7;
|
||||
}
|
||||
return 0;
|
||||
return uFloatingBus7;
|
||||
|
||||
case 0x61: // button 0 or Open Apple
|
||||
case 0x69:
|
||||
return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x62: // button 1 or Solid Apple
|
||||
case 0x6a:
|
||||
return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x63: // button 2 or SHIFT key
|
||||
case 0x6b:
|
||||
return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x64: // joy 1 X axis
|
||||
case 0x6c:
|
||||
return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x65: // joy 1 Y axis
|
||||
case 0x6d:
|
||||
return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x66: // joy 2 X axis
|
||||
case 0x6e:
|
||||
return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x67: // joy 2 Y axis
|
||||
case 0x6f:
|
||||
return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x7e: // read IOUDIS
|
||||
return m_ioudis ? 0x80 : 0x00;
|
||||
return (m_ioudis ? 0x80 : 0x00) | uFloatingBus7;
|
||||
|
||||
case 0x7f: // read DHIRES
|
||||
return m_video->m_dhires ? 0x00 : 0x80;
|
||||
return (m_video->m_dhires ? 0x00 : 0x80) | uFloatingBus7;
|
||||
|
||||
default:
|
||||
do_io(space, offset, false);
|
||||
@ -1833,6 +1842,7 @@ WRITE8_MEMBER(apple2e_state::c000_w)
|
||||
READ8_MEMBER(apple2e_state::c000_iic_r)
|
||||
{
|
||||
if(machine().side_effects_disabled()) return read_floatingbus();
|
||||
u8 uFloatingBus7 = read_floatingbus() & 0x7f;
|
||||
|
||||
if ((offset & 0xf0) == 0x00) // keyboard latch, $C000 is really 00-0F
|
||||
{
|
||||
@ -1908,43 +1918,43 @@ READ8_MEMBER(apple2e_state::c000_iic_r)
|
||||
return m_y0edge ? 0x80 : 0x00;
|
||||
|
||||
case 0x60: // 40/80 column switch (IIc only)
|
||||
return (m_sysconfig->read() & 0x04) ? 0x80 : 0;
|
||||
return ((m_sysconfig->read() & 0x04) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x61: // button 0 or Open Apple or mouse button 1
|
||||
case 0x69:
|
||||
return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x62: // button 1 or Solid Apple
|
||||
case 0x6a:
|
||||
return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x63: // mouse button 2 (no other function on IIc)
|
||||
case 0x6b:
|
||||
return m_mouseb->read() ? 0 : 0x80;
|
||||
return (m_mouseb->read() ? 0 : 0x80) | uFloatingBus7;
|
||||
|
||||
case 0x64: // joy 1 X axis
|
||||
case 0x6c:
|
||||
return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x65: // joy 1 Y axis
|
||||
case 0x6d:
|
||||
return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x66: // mouse X1 (IIc only)
|
||||
case 0x6e:
|
||||
return m_x1 ? 0x80 : 0;
|
||||
return (m_x1 ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x67: // mouse Y1 (IIc only)
|
||||
case 0x6f:
|
||||
return m_y1 ? 0x80 : 0;
|
||||
return (m_y1 ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x7e: // read IOUDIS
|
||||
m_vbl = false;
|
||||
lower_irq(IRQ_VBL);
|
||||
return m_ioudis ? 0x80 : 0x00;
|
||||
return (m_ioudis ? 0x80 : 0x00) | uFloatingBus7;
|
||||
|
||||
case 0x7f: // read DHIRES
|
||||
return m_video->m_dhires ? 0x00 : 0x80;
|
||||
return (m_video->m_dhires ? 0x00 : 0x80) | uFloatingBus7;
|
||||
|
||||
default:
|
||||
do_io(space, offset, true);
|
||||
|
@ -1212,8 +1212,8 @@ void apple2gs_state::machine_start()
|
||||
m_speaker->set_levels(16, lvlTable);
|
||||
|
||||
// precalculate joystick time constants
|
||||
m_x_calibration = attotime::from_usec(12).as_double();
|
||||
m_y_calibration = attotime::from_usec(13).as_double();
|
||||
m_x_calibration = attotime::from_nsec(10800).as_double();
|
||||
m_y_calibration = attotime::from_nsec(10800).as_double();
|
||||
|
||||
// cache slot devices
|
||||
for (int i = 0; i <= 7; i++)
|
||||
@ -2029,6 +2029,7 @@ READ8_MEMBER(apple2gs_state::c000_r)
|
||||
}
|
||||
|
||||
slow_cycle();
|
||||
u8 uFloatingBus7 = read_floatingbus();
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
@ -2272,28 +2273,28 @@ READ8_MEMBER(apple2gs_state::c000_r)
|
||||
return (m_an3 ? INTFLAG_AN3 : 0x00) | m_intflag;
|
||||
|
||||
case 0x60: // button 3 on IIgs
|
||||
return (m_joybuttons->read() & 0x80);
|
||||
return (m_joybuttons->read() & 0x80) | uFloatingBus7;
|
||||
|
||||
case 0x61: // button 0 or Open Apple
|
||||
return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x62: // button 1 or Solid Apple
|
||||
return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x63: // button 2 or SHIFT key
|
||||
return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0;
|
||||
return (((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x64: // joy 1 X axis
|
||||
return (machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x65: // joy 1 Y axis
|
||||
return (machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x66: // joy 2 X axis
|
||||
return (machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x67: // joy 2 Y axis
|
||||
return (machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0;
|
||||
return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0) | uFloatingBus7;
|
||||
|
||||
case 0x68: // STATEREG, synthesizes all the IIe state regs
|
||||
return (m_altzp ? 0x80 : 0x00) |
|
||||
|
226
src/mame/drivers/cking_master.cpp
Normal file
226
src/mame/drivers/cking_master.cpp
Normal file
@ -0,0 +1,226 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
Master: (yes, it's plainly named "Master")
|
||||
- Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer
|
||||
- 8KB ROM(NEC D2764C-3), 2KB RAM(NEC D4016C), ROM is scrambled for easy PCB placement
|
||||
- simple I/O via 2*74373 and a 74145
|
||||
- 8*8 chessboard buttons, 32+1 border leds, piezo
|
||||
|
||||
TODO:
|
||||
- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
|
||||
(wait state is similar to MSX) but I can't be bothered, better solution
|
||||
is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/ckingbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "ck_master.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class master_state : public ckingbase_state
|
||||
{
|
||||
public:
|
||||
master_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
ckingbase_state(mconfig, type, tag),
|
||||
m_dac(*this, "dac"),
|
||||
m_mainmap(*this, "mainmap")
|
||||
{ }
|
||||
|
||||
void master(machine_config &config);
|
||||
|
||||
void init_master();
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
|
||||
required_device<address_map_bank_device> m_mainmap;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_trampoline(address_map &map);
|
||||
u8 main_trampoline_r(offs_t offset);
|
||||
void main_trampoline_w(offs_t offset, u8 data);
|
||||
|
||||
// I/O handlers
|
||||
u8 input_r();
|
||||
void control_w(u8 data);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// TTL/generic
|
||||
|
||||
void master_state::control_w(u8 data)
|
||||
{
|
||||
// d0-d3: 74145 A-D
|
||||
// 74145 0-9: input mux, led select
|
||||
u16 sel = 1 << (data & 0xf) & 0x3ff;
|
||||
m_inp_mux = sel;
|
||||
|
||||
// d4,d5: led data
|
||||
display_matrix(2, 9, data >> 4 & 3, sel & 0x1ff);
|
||||
|
||||
// d6,d7: speaker +/-
|
||||
m_dac->write(data >> 6 & 3);
|
||||
}
|
||||
|
||||
u8 master_state::input_r()
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(10);
|
||||
}
|
||||
|
||||
void master_state::init_master()
|
||||
{
|
||||
u8 *rom = memregion("maincpu")->base();
|
||||
const u32 len = memregion("maincpu")->bytes();
|
||||
|
||||
// descramble data lines
|
||||
for (int i = 0; i < len; i++)
|
||||
rom[i] = bitswap<8>(rom[i], 4,5,0,7,6,1,3,2);
|
||||
|
||||
// descramble address lines
|
||||
std::vector<u8> buf(len);
|
||||
memcpy(&buf[0], rom, len);
|
||||
for (int i = 0; i < len; i++)
|
||||
rom[i] = buf[bitswap<16>(i, 15,14,13,12,11,3,7,9, 10,8,6,5,4,2,1,0)];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void master_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).mirror(0x6000).rom().region("maincpu", 0); // _A15
|
||||
map(0xa000, 0xa000).mirror(0x1fff).rw(FUNC(master_state::input_r), FUNC(master_state::control_w)); // A13
|
||||
map(0xc000, 0xc7ff).mirror(0x3800).ram(); // A14
|
||||
}
|
||||
|
||||
// PCB design is prone to bus conflicts, but should be fine if software obeys
|
||||
void master_state::main_trampoline_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (offset & 0x2000)
|
||||
m_mainmap->write8((offset & 0x3fff) | 0x8000, data);
|
||||
if (offset & 0x4000)
|
||||
m_mainmap->write8((offset & 0x7fff) | 0x8000, data);
|
||||
}
|
||||
|
||||
u8 master_state::main_trampoline_r(offs_t offset)
|
||||
{
|
||||
u8 data = 0xff;
|
||||
if (~offset & 0x8000)
|
||||
data &= m_mainmap->read8(offset);
|
||||
if (offset & 0x2000)
|
||||
data &= m_mainmap->read8((offset & 0x3fff) | 0x8000);
|
||||
if (offset & 0x4000)
|
||||
data &= m_mainmap->read8((offset & 0x7fff) | 0x8000);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void master_state::main_trampoline(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).rw(FUNC(master_state::main_trampoline_r), FUNC(master_state::main_trampoline_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( master )
|
||||
PORT_INCLUDE( cking_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Clear Board")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("New Game")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Take Back")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("King")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Queen")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Rook")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("IN.9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Bishop")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_NAME("Knight")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("Pawn")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("White")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Black")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Move")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Level")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Sound")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void master_state::master(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline);
|
||||
ADDRESS_MAP_BANK(config, "mainmap").set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(429); // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(master_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(master_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(ckingbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_ck_master);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( ckmaster )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("ckmaster.ic2", 0x0000, 0x2000, CRC(59cbec9e) SHA1(2e0629e65778da62bed857406b91a334698d2fe8) ) // D2764C, no label
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1984, ckmaster, 0, 0, master, master, master_state, init_master, "Chess King", "Master (Chess King)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
222
src/mame/drivers/ckingbase.cpp
Normal file
222
src/mame/drivers/ckingbase.cpp
Normal file
@ -0,0 +1,222 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
|
||||
Chess King chess computer driver base class
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
As workaround for the chess games, use an external chess GUI on the side,
|
||||
such as Arena(in editmode).
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/ckingbase.h"
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void ckingbase_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_x.resolve();
|
||||
m_out_a.resolve();
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
memset(m_display_state, 0, sizeof(m_display_state));
|
||||
memset(m_display_decay, 0, sizeof(m_display_decay));
|
||||
memset(m_display_segmask, 0, sizeof(m_display_segmask));
|
||||
|
||||
m_inp_mux = 0;
|
||||
m_led_select = 0;
|
||||
m_led_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_display_maxy));
|
||||
save_item(NAME(m_display_maxx));
|
||||
save_item(NAME(m_display_wait));
|
||||
|
||||
save_item(NAME(m_display_state));
|
||||
save_item(NAME(m_display_decay));
|
||||
save_item(NAME(m_display_segmask));
|
||||
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_select));
|
||||
save_item(NAME(m_led_data));
|
||||
}
|
||||
|
||||
void ckingbase_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Helper Functions
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// The device may strobe the outputs very fast, it is unnoticeable to the user.
|
||||
// To prevent flickering here, we need to simulate a decay.
|
||||
|
||||
void ckingbase_state::display_update()
|
||||
{
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
{
|
||||
u32 active_state = 0;
|
||||
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
{
|
||||
// turn on powered segments
|
||||
if (m_display_state[y] >> x & 1)
|
||||
m_display_decay[y][x] = m_display_wait;
|
||||
|
||||
// determine active state
|
||||
u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
|
||||
active_state |= (ds << x);
|
||||
|
||||
// output to y.x, or y.a when always-on
|
||||
if (x != m_display_maxx)
|
||||
m_out_x[y][x] = ds;
|
||||
else
|
||||
m_out_a[y] = ds;
|
||||
}
|
||||
|
||||
// output to digity
|
||||
if (m_display_segmask[y] != 0)
|
||||
m_out_digit[y] = active_state & m_display_segmask[y];
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(ckingbase_state::display_decay_tick)
|
||||
{
|
||||
// slowly turn off unpowered segments
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
if (m_display_decay[y][x] != 0)
|
||||
m_display_decay[y][x]--;
|
||||
|
||||
display_update();
|
||||
}
|
||||
|
||||
void ckingbase_state::set_display_size(int maxx, int maxy)
|
||||
{
|
||||
m_display_maxx = maxx;
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void ckingbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
|
||||
// update current state
|
||||
u32 mask = (1 << maxx) - 1;
|
||||
for (int y = 0; y < maxy; y++)
|
||||
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
|
||||
|
||||
if (update)
|
||||
display_update();
|
||||
}
|
||||
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 ckingbase_state::read_inputs(int columns)
|
||||
{
|
||||
u16 ret = 0;
|
||||
|
||||
// read selected input rows
|
||||
for (int i = 0; i < columns; i++)
|
||||
if (m_inp_mux >> i & 1)
|
||||
ret |= m_inp_matrix[i]->read();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// chessboard generic inputs
|
||||
|
||||
INPUT_PORTS_START( cking_cb_buttons )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
INPUT_PORTS_END
|
@ -1,478 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
Chess King generic Z80 based chess computer driver
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
As workaround for the chess games, use an external chess GUI on the side,
|
||||
such as Arena(in editmode).
|
||||
|
||||
TODO:
|
||||
- ckmaster 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
|
||||
(wait state is similar to MSX) but I can't be bothered, better solution
|
||||
is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast.
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Master:
|
||||
- Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer
|
||||
- 8KB ROM(NEC D2764C-3), 2KB RAM(NEC D4016C), ROM is scrambled for easy PCB placement
|
||||
- simple I/O via 2*74373 and a 74145
|
||||
- 8*8 chessboard buttons, 32+1 border leds, piezo
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "ck_master.lh" // clickable
|
||||
|
||||
|
||||
class ckz80_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ckz80_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_dac(*this, "dac"),
|
||||
m_master_map(*this, "master_map"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
|
||||
optional_device<address_map_bank_device> m_master_map;
|
||||
optional_ioport_array<10> m_inp_matrix; // max 10
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
// Master
|
||||
u8 master_input_r();
|
||||
void master_control_w(u8 data);
|
||||
void init_master();
|
||||
u8 master_trampoline_r(offs_t offset);
|
||||
void master_trampoline_w(offs_t offset, u8 data);
|
||||
void master_map(address_map &map);
|
||||
void master_trampoline(address_map &map);
|
||||
void master(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void ckz80_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_x.resolve();
|
||||
m_out_a.resolve();
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
memset(m_display_state, 0, sizeof(m_display_state));
|
||||
memset(m_display_decay, 0, sizeof(m_display_decay));
|
||||
memset(m_display_segmask, 0, sizeof(m_display_segmask));
|
||||
|
||||
m_inp_mux = 0;
|
||||
m_led_select = 0;
|
||||
m_led_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_display_maxy));
|
||||
save_item(NAME(m_display_maxx));
|
||||
save_item(NAME(m_display_wait));
|
||||
|
||||
save_item(NAME(m_display_state));
|
||||
save_item(NAME(m_display_decay));
|
||||
save_item(NAME(m_display_segmask));
|
||||
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_select));
|
||||
save_item(NAME(m_led_data));
|
||||
}
|
||||
|
||||
void ckz80_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Helper Functions
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// The device may strobe the outputs very fast, it is unnoticeable to the user.
|
||||
// To prevent flickering here, we need to simulate a decay.
|
||||
|
||||
void ckz80_state::display_update()
|
||||
{
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
{
|
||||
u32 active_state = 0;
|
||||
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
{
|
||||
// turn on powered segments
|
||||
if (m_display_state[y] >> x & 1)
|
||||
m_display_decay[y][x] = m_display_wait;
|
||||
|
||||
// determine active state
|
||||
u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
|
||||
active_state |= (ds << x);
|
||||
|
||||
// output to y.x, or y.a when always-on
|
||||
if (x != m_display_maxx)
|
||||
m_out_x[y][x] = ds;
|
||||
else
|
||||
m_out_a[y] = ds;
|
||||
}
|
||||
|
||||
// output to digity
|
||||
if (m_display_segmask[y] != 0)
|
||||
m_out_digit[y] = active_state & m_display_segmask[y];
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(ckz80_state::display_decay_tick)
|
||||
{
|
||||
// slowly turn off unpowered segments
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
if (m_display_decay[y][x] != 0)
|
||||
m_display_decay[y][x]--;
|
||||
|
||||
display_update();
|
||||
}
|
||||
|
||||
void ckz80_state::set_display_size(int maxx, int maxy)
|
||||
{
|
||||
m_display_maxx = maxx;
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void ckz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
|
||||
// update current state
|
||||
u32 mask = (1 << maxx) - 1;
|
||||
for (int y = 0; y < maxy; y++)
|
||||
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
|
||||
|
||||
if (update)
|
||||
display_update();
|
||||
}
|
||||
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 ckz80_state::read_inputs(int columns)
|
||||
{
|
||||
u16 ret = 0;
|
||||
|
||||
// read selected input rows
|
||||
for (int i = 0; i < columns; i++)
|
||||
if (m_inp_mux >> i & 1)
|
||||
ret |= m_inp_matrix[i]->read();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Devices, I/O
|
||||
|
||||
/******************************************************************************
|
||||
Master
|
||||
******************************************************************************/
|
||||
|
||||
// TTL/generic
|
||||
|
||||
void ckz80_state::master_control_w(u8 data)
|
||||
{
|
||||
// d0-d3: 74145 A-D
|
||||
// 74145 0-9: input mux, led select
|
||||
u16 sel = 1 << (data & 0xf) & 0x3ff;
|
||||
m_inp_mux = sel;
|
||||
|
||||
// d4,d5: led data
|
||||
display_matrix(2, 9, data >> 4 & 3, sel & 0x1ff);
|
||||
|
||||
// d6,d7: speaker +/-
|
||||
m_dac->write(data >> 6 & 3);
|
||||
}
|
||||
|
||||
u8 ckz80_state::master_input_r()
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(10);
|
||||
}
|
||||
|
||||
void ckz80_state::init_master()
|
||||
{
|
||||
u8 *rom = memregion("maincpu")->base();
|
||||
const u32 len = memregion("maincpu")->bytes();
|
||||
|
||||
// descramble data lines
|
||||
for (int i = 0; i < len; i++)
|
||||
rom[i] = bitswap<8>(rom[i], 4,5,0,7,6,1,3,2);
|
||||
|
||||
// descramble address lines
|
||||
std::vector<u8> buf(len);
|
||||
memcpy(&buf[0], rom, len);
|
||||
for (int i = 0; i < len; i++)
|
||||
rom[i] = buf[bitswap<16>(i, 15,14,13,12,11,3,7,9, 10,8,6,5,4,2,1,0)];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
// Master
|
||||
|
||||
void ckz80_state::master_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).mirror(0x6000).rom().region("maincpu", 0); // _A15
|
||||
map(0xa000, 0xa000).mirror(0x1fff).rw(FUNC(ckz80_state::master_input_r), FUNC(ckz80_state::master_control_w)); // A13
|
||||
map(0xc000, 0xc7ff).mirror(0x3800).ram(); // A14
|
||||
}
|
||||
|
||||
// PCB design is prone to bus conflicts, but should be fine if software obeys
|
||||
void ckz80_state::master_trampoline_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (offset & 0x2000)
|
||||
m_master_map->write8((offset & 0x3fff) | 0x8000, data);
|
||||
if (offset & 0x4000)
|
||||
m_master_map->write8((offset & 0x7fff) | 0x8000, data);
|
||||
}
|
||||
|
||||
u8 ckz80_state::master_trampoline_r(offs_t offset)
|
||||
{
|
||||
u8 data = 0xff;
|
||||
if (~offset & 0x8000)
|
||||
data &= m_master_map->read8(offset);
|
||||
if (offset & 0x2000)
|
||||
data &= m_master_map->read8((offset & 0x3fff) | 0x8000);
|
||||
if (offset & 0x4000)
|
||||
data &= m_master_map->read8((offset & 0x7fff) | 0x8000);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void ckz80_state::master_trampoline(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).rw(FUNC(ckz80_state::master_trampoline_r), FUNC(ckz80_state::master_trampoline_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( cb_buttons )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( master )
|
||||
PORT_INCLUDE( cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Clear Board")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("New Game")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Take Back")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("King")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Queen")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Rook")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("IN.9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Bishop")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_NAME("Knight")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("Pawn")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("White")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Black")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Move")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Level")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Sound")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void ckz80_state::master(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ckz80_state::master_trampoline);
|
||||
ADDRESS_MAP_BANK(config, "master_map").set_map(&ckz80_state::master_map).set_options(ENDIANNESS_LITTLE, 8, 16);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(429); // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(ckz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(ckz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(ckz80_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_ck_master);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( ckmaster )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("ckmaster.ic2", 0x0000, 0x2000, CRC(59cbec9e) SHA1(2e0629e65778da62bed857406b91a334698d2fe8) ) // D2764C, no label
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1984, ckmaster, 0, 0, master, master, ckz80_state, init_master, "Chess King", "Master (Chess King)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
178
src/mame/drivers/cxg_ch2001.cpp
Normal file
178
src/mame/drivers/cxg_ch2001.cpp
Normal file
@ -0,0 +1,178 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
Chess 2001:
|
||||
- Zilog Z8400APS @ 4 MHz (8MHz XTAL)
|
||||
- 2KB RAM HM6116, 16KB ROM D27128D
|
||||
- TTL, piezo, 8*8+9 LEDs, magnetic sensors
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/cxgbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "cxg_ch2001.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class ch2001_state : public cxgbase_state
|
||||
{
|
||||
public:
|
||||
ch2001_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
cxgbase_state(mconfig, type, tag),
|
||||
m_speaker_off(*this, "speaker_off")
|
||||
{ }
|
||||
|
||||
void ch2001(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<timer_device> m_speaker_off;
|
||||
|
||||
void main_map(address_map &map);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); }
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_WRITE8_MEMBER(speaker_w);
|
||||
DECLARE_WRITE8_MEMBER(leds_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(ch2001_state::speaker_w)
|
||||
{
|
||||
// 74ls109 clock pulse to speaker
|
||||
m_dac->write(1);
|
||||
m_speaker_off->adjust(attotime::from_usec(200)); // not accurate
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ch2001_state::leds_w)
|
||||
{
|
||||
// d0-d7: 74ls273 (WR to CLK)
|
||||
// 74ls273 Q1-Q4: 74ls145 A-D
|
||||
// 74ls145 0-9: input mux/led select
|
||||
m_inp_mux = 1 << (data & 0xf) & 0x3ff;
|
||||
|
||||
// 74ls273 Q5-Q8: MC14028 A-D
|
||||
// MC14028 Q0-Q7: led data, Q8,Q9: N/C
|
||||
u8 led_data = 1 << (data >> 4 & 0xf) & 0xff;
|
||||
display_matrix(8, 10, led_data, m_inp_mux);
|
||||
}
|
||||
|
||||
READ8_MEMBER(ch2001_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs
|
||||
return ~read_inputs(10);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void ch2001_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x3fff).rom();
|
||||
map(0x4000, 0x47ff).mirror(0x3800).ram();
|
||||
map(0x8000, 0x8000).mirror(0x3fff).rw(FUNC(ch2001_state::input_r), FUNC(ch2001_state::leds_w));
|
||||
map(0xc000, 0xc000).mirror(0x3fff).w(FUNC(ch2001_state::speaker_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( ch2001 )
|
||||
PORT_INCLUDE( cxg_cb_magnets )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Black")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Queen")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rook")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Bishop")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Knight")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Pawn")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("White")
|
||||
|
||||
PORT_START("IN.9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Set up")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("New Game")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Take Back")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Forward")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Hint")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Move")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Level")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void ch2001_state::ch2001(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ch2001_state::main_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(484); // theoretical frequency from 555 timer (22nF, 100K+33K, 1K2), measurement was 568Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(ch2001_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(ch2001_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, m_speaker_off).configure_generic(FUNC(ch2001_state::speaker_off));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(cxgbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_cxg_ch2001);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( ch2001 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("ch2001.bin", 0x0000, 0x4000, CRC(b3485c73) SHA1(f405c6f67fe70edf45dcc383a4049ee6bad387a9) ) // D27128D, no label
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1984, ch2001, 0, 0, ch2001, ch2001, ch2001_state, empty_init, "CXG", "Chess 2001", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
223
src/mame/drivers/cxgbase.cpp
Normal file
223
src/mame/drivers/cxgbase.cpp
Normal file
@ -0,0 +1,223 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
|
||||
CXG* chess computer driver base class
|
||||
*later known as CXG Newcrest Technology Ltd.
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
As workaround for the chess games, use an external chess GUI on the side,
|
||||
such as Arena(in editmode).
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/cxgbase.h"
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void cxgbase_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_x.resolve();
|
||||
m_out_a.resolve();
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
memset(m_display_state, 0, sizeof(m_display_state));
|
||||
memset(m_display_decay, 0, sizeof(m_display_decay));
|
||||
memset(m_display_segmask, 0, sizeof(m_display_segmask));
|
||||
|
||||
m_inp_mux = 0;
|
||||
m_led_select = 0;
|
||||
m_led_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_display_maxy));
|
||||
save_item(NAME(m_display_maxx));
|
||||
save_item(NAME(m_display_wait));
|
||||
|
||||
save_item(NAME(m_display_state));
|
||||
save_item(NAME(m_display_decay));
|
||||
save_item(NAME(m_display_segmask));
|
||||
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_select));
|
||||
save_item(NAME(m_led_data));
|
||||
}
|
||||
|
||||
void cxgbase_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Helper Functions
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// The device may strobe the outputs very fast, it is unnoticeable to the user.
|
||||
// To prevent flickering here, we need to simulate a decay.
|
||||
|
||||
void cxgbase_state::display_update()
|
||||
{
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
{
|
||||
u32 active_state = 0;
|
||||
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
{
|
||||
// turn on powered segments
|
||||
if (m_display_state[y] >> x & 1)
|
||||
m_display_decay[y][x] = m_display_wait;
|
||||
|
||||
// determine active state
|
||||
u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
|
||||
active_state |= (ds << x);
|
||||
|
||||
// output to y.x, or y.a when always-on
|
||||
if (x != m_display_maxx)
|
||||
m_out_x[y][x] = ds;
|
||||
else
|
||||
m_out_a[y] = ds;
|
||||
}
|
||||
|
||||
// output to digity
|
||||
if (m_display_segmask[y] != 0)
|
||||
m_out_digit[y] = active_state & m_display_segmask[y];
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick)
|
||||
{
|
||||
// slowly turn off unpowered segments
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
if (m_display_decay[y][x] != 0)
|
||||
m_display_decay[y][x]--;
|
||||
|
||||
display_update();
|
||||
}
|
||||
|
||||
void cxgbase_state::set_display_size(int maxx, int maxy)
|
||||
{
|
||||
m_display_maxx = maxx;
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
|
||||
// update current state
|
||||
u32 mask = (1 << maxx) - 1;
|
||||
for (int y = 0; y < maxy; y++)
|
||||
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
|
||||
|
||||
if (update)
|
||||
display_update();
|
||||
}
|
||||
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 cxgbase_state::read_inputs(int columns)
|
||||
{
|
||||
u16 ret = 0;
|
||||
|
||||
// read selected input rows
|
||||
for (int i = 0; i < columns; i++)
|
||||
if (m_inp_mux >> i & 1)
|
||||
ret |= m_inp_matrix[i]->read();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// chessboard generic inputs
|
||||
|
||||
INPUT_PORTS_START( cxg_cb_magnets )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
INPUT_PORTS_END
|
@ -1,442 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
CXG* generic Z80 based chess computer driver
|
||||
*later known as CXG Newcrest Technology Ltd.
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
As workaround for the chess games, use an external chess GUI on the side,
|
||||
such as Arena(in editmode).
|
||||
|
||||
TODO:
|
||||
- nothing
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Chess 2001:
|
||||
- Zilog Z8400APS @ 4 MHz (8MHz XTAL)
|
||||
- 2KB RAM HM6116, 16KB ROM D27128D
|
||||
- TTL, piezo, 8*8+9 LEDs, magnetic sensors
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "cxg_ch2001.lh" // clickable
|
||||
|
||||
|
||||
class cxgz80_state : public driver_device
|
||||
{
|
||||
public:
|
||||
cxgz80_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_dac(*this, "dac"),
|
||||
m_speaker_off_timer(*this, "speaker_off"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_device<dac_bit_interface> m_dac;
|
||||
required_device<timer_device> m_speaker_off_timer;
|
||||
optional_ioport_array<10> m_inp_matrix; // max 10
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
// Chess 2001
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(speaker_off_callback);
|
||||
DECLARE_WRITE8_MEMBER(ch2001_speaker_on_w);
|
||||
DECLARE_WRITE8_MEMBER(ch2001_leds_w);
|
||||
DECLARE_READ8_MEMBER(ch2001_input_r);
|
||||
void ch2001_map(address_map &map);
|
||||
void ch2001(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void cxgz80_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_x.resolve();
|
||||
m_out_a.resolve();
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
memset(m_display_state, 0, sizeof(m_display_state));
|
||||
memset(m_display_decay, 0, sizeof(m_display_decay));
|
||||
memset(m_display_segmask, 0, sizeof(m_display_segmask));
|
||||
|
||||
m_inp_mux = 0;
|
||||
m_led_select = 0;
|
||||
m_led_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_display_maxy));
|
||||
save_item(NAME(m_display_maxx));
|
||||
save_item(NAME(m_display_wait));
|
||||
|
||||
save_item(NAME(m_display_state));
|
||||
save_item(NAME(m_display_decay));
|
||||
save_item(NAME(m_display_segmask));
|
||||
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_select));
|
||||
save_item(NAME(m_led_data));
|
||||
}
|
||||
|
||||
void cxgz80_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Helper Functions
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// The device may strobe the outputs very fast, it is unnoticeable to the user.
|
||||
// To prevent flickering here, we need to simulate a decay.
|
||||
|
||||
void cxgz80_state::display_update()
|
||||
{
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
{
|
||||
u32 active_state = 0;
|
||||
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
{
|
||||
// turn on powered segments
|
||||
if (m_display_state[y] >> x & 1)
|
||||
m_display_decay[y][x] = m_display_wait;
|
||||
|
||||
// determine active state
|
||||
u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
|
||||
active_state |= (ds << x);
|
||||
|
||||
// output to y.x, or y.a when always-on
|
||||
if (x != m_display_maxx)
|
||||
m_out_x[y][x] = ds;
|
||||
else
|
||||
m_out_a[y] = ds;
|
||||
}
|
||||
|
||||
// output to digity
|
||||
if (m_display_segmask[y] != 0)
|
||||
m_out_digit[y] = active_state & m_display_segmask[y];
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cxgz80_state::display_decay_tick)
|
||||
{
|
||||
// slowly turn off unpowered segments
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
for (int x = 0; x <= m_display_maxx; x++)
|
||||
if (m_display_decay[y][x] != 0)
|
||||
m_display_decay[y][x]--;
|
||||
|
||||
display_update();
|
||||
}
|
||||
|
||||
void cxgz80_state::set_display_size(int maxx, int maxy)
|
||||
{
|
||||
m_display_maxx = maxx;
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void cxgz80_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
|
||||
// update current state
|
||||
u32 mask = (1 << maxx) - 1;
|
||||
for (int y = 0; y < maxy; y++)
|
||||
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
|
||||
|
||||
if (update)
|
||||
display_update();
|
||||
}
|
||||
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 cxgz80_state::read_inputs(int columns)
|
||||
{
|
||||
u16 ret = 0;
|
||||
|
||||
// read selected input rows
|
||||
for (int i = 0; i < columns; i++)
|
||||
if (m_inp_mux >> i & 1)
|
||||
ret |= m_inp_matrix[i]->read();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Devices, I/O
|
||||
|
||||
/******************************************************************************
|
||||
Chess 2001
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cxgz80_state::speaker_off_callback)
|
||||
{
|
||||
m_dac->write(0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cxgz80_state::ch2001_speaker_on_w)
|
||||
{
|
||||
// 74ls109 clock pulse to speaker
|
||||
m_dac->write(1);
|
||||
m_speaker_off_timer->adjust(attotime::from_usec(200)); // not accurate
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cxgz80_state::ch2001_leds_w)
|
||||
{
|
||||
// d0-d7: 74ls273 (WR to CLK)
|
||||
// 74ls273 Q1-Q4: 74ls145 A-D
|
||||
// 74ls145 0-9: input mux/led select
|
||||
m_inp_mux = 1 << (data & 0xf) & 0x3ff;
|
||||
|
||||
// 74ls273 Q5-Q8: MC14028 A-D
|
||||
// MC14028 Q0-Q7: led data, Q8,Q9: N/C
|
||||
u8 led_data = 1 << (data >> 4 & 0xf) & 0xff;
|
||||
display_matrix(8, 10, led_data, m_inp_mux);
|
||||
}
|
||||
|
||||
READ8_MEMBER(cxgz80_state::ch2001_input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs
|
||||
return ~read_inputs(10);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
// Chess 2001
|
||||
|
||||
void cxgz80_state::ch2001_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x3fff).rom();
|
||||
map(0x4000, 0x47ff).mirror(0x3800).ram();
|
||||
map(0x8000, 0x8000).mirror(0x3fff).rw(FUNC(cxgz80_state::ch2001_input_r), FUNC(cxgz80_state::ch2001_leds_w));
|
||||
map(0xc000, 0xc000).mirror(0x3fff).w(FUNC(cxgz80_state::ch2001_speaker_on_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( cb_magnets )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( ch2001 )
|
||||
PORT_INCLUDE( cb_magnets )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Black")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Queen")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rook")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Bishop")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Knight")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Pawn")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("White")
|
||||
|
||||
PORT_START("IN.9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Set up")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("New Game")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Take Back")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Forward")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Hint")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Move")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Level")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void cxgz80_state::ch2001(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &cxgz80_state::ch2001_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(484); // theoretical frequency from 555 timer (22nF, 100K+33K, 1K2), measurement was 568Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(cxgz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(cxgz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, m_speaker_off_timer).configure_generic(FUNC(cxgz80_state::speaker_off_callback));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(cxgz80_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_cxg_ch2001);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( ch2001 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("ch2001.bin", 0x0000, 0x4000, CRC(b3485c73) SHA1(f405c6f67fe70edf45dcc383a4049ee6bad387a9) ) // D27128D, no label
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
CONS( 1984, ch2001, 0, 0, ch2001, ch2001, cxgz80_state, empty_init, "CXG", "Chess 2001", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
@ -441,6 +441,7 @@ I/O is via TTL, very similar to Designer Display
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
#include "includes/fidel_desdis_common.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "cpu/m6502/r65c02.h"
|
||||
@ -476,7 +477,6 @@ public:
|
||||
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_ppi8255(*this, "ppi8255"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_mainmap(*this, "mainmap"),
|
||||
m_div_config(*this, "div_config")
|
||||
{ }
|
||||
@ -515,10 +515,6 @@ public:
|
||||
void fdes2000(machine_config &config);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch);
|
||||
|
||||
void fdes2000d(machine_config &config);
|
||||
void fdes2100d(machine_config &config);
|
||||
void init_fdesdis();
|
||||
|
||||
void fphantom(machine_config &config);
|
||||
void init_fphantom();
|
||||
|
||||
@ -529,7 +525,6 @@ public:
|
||||
private:
|
||||
// devices/pointers
|
||||
optional_device<i8255_device> m_ppi8255;
|
||||
optional_memory_bank m_rombank;
|
||||
optional_device<address_map_bank_device> m_mainmap;
|
||||
optional_ioport m_div_config;
|
||||
|
||||
@ -603,11 +598,6 @@ private:
|
||||
void fexcelb_map(address_map &map);
|
||||
void fexcelp_map(address_map &map);
|
||||
|
||||
// Designer Display
|
||||
DECLARE_WRITE8_MEMBER(fdesdis_control_w);
|
||||
DECLARE_WRITE8_MEMBER(fdesdis_lcd_w);
|
||||
DECLARE_READ8_MEMBER(fdesdis_input_r);
|
||||
void fdesdis_map(address_map &map);
|
||||
|
||||
// Phantom
|
||||
DECLARE_MACHINE_RESET(fphantom);
|
||||
@ -616,6 +606,7 @@ private:
|
||||
// Chesster
|
||||
DECLARE_WRITE8_MEMBER(chesster_control_w);
|
||||
DECLARE_WRITE8_MEMBER(kishon_control_w);
|
||||
DECLARE_READ8_MEMBER(chesster_input_r);
|
||||
void chesster_map(address_map &map);
|
||||
void kishon_map(address_map &map);
|
||||
|
||||
@ -644,6 +635,23 @@ void fidel6502_state::machine_reset()
|
||||
|
||||
|
||||
|
||||
class desdis_state : public desdis_common_state
|
||||
{
|
||||
public:
|
||||
desdis_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
desdis_common_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void fdes2000d(machine_config &config);
|
||||
void fdes2100d(machine_config &config);
|
||||
void init_fdes2100d();
|
||||
|
||||
private:
|
||||
void fdes2100d_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Helper Functions
|
||||
@ -1170,7 +1178,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r)
|
||||
|
||||
// TTL/generic
|
||||
|
||||
WRITE8_MEMBER(fidel6502_state::fdesdis_control_w)
|
||||
WRITE8_MEMBER(desdis_common_state::control_w)
|
||||
{
|
||||
u8 q3_old = m_led_select & 8;
|
||||
|
||||
@ -1190,7 +1198,8 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w)
|
||||
display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false);
|
||||
|
||||
// 74259 Q2: book rom A14
|
||||
m_rombank->set_entry(~m_led_select >> 2 & 1);
|
||||
if (m_rombank != nullptr)
|
||||
m_rombank->set_entry(~m_led_select >> 2 & 1);
|
||||
|
||||
// 74259 Q3: lcd common, update on rising edge
|
||||
if (~q3_old & m_led_select & 8)
|
||||
@ -1204,7 +1213,7 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w)
|
||||
display_update();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w)
|
||||
WRITE8_MEMBER(desdis_common_state::lcd_w)
|
||||
{
|
||||
// a0-a2,d0-d3: 4*74259 to lcd digit segments
|
||||
u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5);
|
||||
@ -1215,13 +1224,13 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w)
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidel6502_state::fdesdis_input_r)
|
||||
READ8_MEMBER(desdis_common_state::input_r)
|
||||
{
|
||||
// a0-a2,d7: multiplexed inputs (active low)
|
||||
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
|
||||
}
|
||||
|
||||
void fidel6502_state::init_fdesdis()
|
||||
void desdis_state::init_fdes2100d()
|
||||
{
|
||||
m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000);
|
||||
}
|
||||
@ -1282,6 +1291,12 @@ WRITE8_MEMBER(fidel6502_state::kishon_control_w)
|
||||
m_rombank->set_entry(bank);
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidel6502_state::chesster_input_r)
|
||||
{
|
||||
// a0-a2,d7: multiplexed inputs (active low)
|
||||
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
|
||||
}
|
||||
|
||||
void fidel6502_state::init_chesster()
|
||||
{
|
||||
m_rombank->configure_entries(0, memregion("rombank")->bytes() / 0x4000, memregion("rombank")->base(), 0x4000);
|
||||
@ -1445,12 +1460,12 @@ void fidel6502_state::fexcelb_map(address_map &map)
|
||||
|
||||
// Designer Display, Phantom, Chesster
|
||||
|
||||
void fidel6502_state::fdesdis_map(address_map &map)
|
||||
void desdis_state::fdes2100d_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).ram();
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::fdesdis_control_w));
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(desdis_state::input_r), FUNC(desdis_state::control_w));
|
||||
map(0x4000, 0x7fff).bankr("rombank");
|
||||
map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(fidel6502_state::fdesdis_lcd_w));
|
||||
map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(desdis_state::lcd_w));
|
||||
map(0x8000, 0xffff).rom();
|
||||
}
|
||||
|
||||
@ -1464,7 +1479,7 @@ void fidel6502_state::fphantom_map(address_map &map)
|
||||
void fidel6502_state::chesster_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).ram();
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::chesster_control_w));
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::chesster_input_r), FUNC(fidel6502_state::chesster_control_w));
|
||||
map(0x4000, 0x7fff).bankr("rombank");
|
||||
map(0x6000, 0x6000).mirror(0x1fff).w("dac8", FUNC(dac_byte_interface::data_w));
|
||||
map(0x8000, 0xffff).rom();
|
||||
@ -1473,7 +1488,7 @@ void fidel6502_state::chesster_map(address_map &map)
|
||||
void fidel6502_state::kishon_map(address_map &map)
|
||||
{
|
||||
chesster_map(map);
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::kishon_control_w));
|
||||
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::chesster_input_r), FUNC(fidel6502_state::kishon_control_w));
|
||||
}
|
||||
|
||||
|
||||
@ -1796,7 +1811,7 @@ static INPUT_PORTS_START( fdes )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( fdesdis )
|
||||
INPUT_PORTS_START( desdis )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
@ -1811,13 +1826,17 @@ static INPUT_PORTS_START( fdesdis )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( chesster )
|
||||
PORT_INCLUDE( fdesdis )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_MODIFY("IN.8")
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / No")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Yes")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Repeat")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Replay")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -2208,16 +2227,16 @@ void fidel6502_state::fexceld(machine_config &config)
|
||||
config.set_default_layout(layout_fidel_exd);
|
||||
}
|
||||
|
||||
void fidel6502_state::fdes2100d(machine_config &config)
|
||||
void desdis_state::fdes2100d(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on<M6502_IRQ_LINE>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(desdis_state::irq_off<M6502_IRQ_LINE>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_desdis);
|
||||
@ -2230,13 +2249,13 @@ void fidel6502_state::fdes2100d(machine_config &config)
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void fidel6502_state::fdes2000d(machine_config &config)
|
||||
void desdis_state::fdes2000d(machine_config &config)
|
||||
{
|
||||
fdes2100d(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // R65C02P3
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
|
||||
}
|
||||
|
||||
void fidel6502_state::fphantom(machine_config &config)
|
||||
@ -2901,8 +2920,8 @@ CONS( 1986, granits, fexcelp, 0, granits, fexcel, fidel6502_state, empt
|
||||
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // Excellence series hardware
|
||||
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // "
|
||||
|
||||
CONS( 1988, fdes2100d, 0, 0, fdes2100d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fdes2100d, 0, 0, fdes2100d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1988, fphantom, 0, 0, fphantom, fphantom, fidel6502_state, init_fphantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
|
||||
|
||||
|
@ -181,6 +181,7 @@ B0000x-xxxxxx: see V7, -800000
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
#include "includes/fidel_desdis_common.h"
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/ram.h"
|
||||
@ -195,22 +196,14 @@ B0000x-xxxxxx: see V7, -800000
|
||||
#include "fidel_eag_68k.lh" // clickable
|
||||
|
||||
|
||||
class fidel68k_state : public fidelbase_state
|
||||
class eag_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
fidel68k_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
eag_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_ram(*this, "ram")
|
||||
{ }
|
||||
|
||||
void fex68k(machine_config &config);
|
||||
void fex68km2(machine_config &config);
|
||||
void fex68km3(machine_config &config);
|
||||
|
||||
void fdes2265(machine_config &config);
|
||||
void fdes2325(machine_config &config);
|
||||
void init_fdes2265();
|
||||
|
||||
void eag_base(machine_config &config);
|
||||
void eag(machine_config &config);
|
||||
void eagv5(machine_config &config);
|
||||
@ -218,35 +211,72 @@ public:
|
||||
void eagv9(machine_config &config);
|
||||
void eagv10(machine_config &config);
|
||||
void eagv11(machine_config &config);
|
||||
|
||||
void init_eag();
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
optional_device<ram_device> m_ram;
|
||||
|
||||
// Excel 68000
|
||||
DECLARE_WRITE8_MEMBER(fex68k_mux_w);
|
||||
void fex68k_map(address_map &map);
|
||||
void fex68km2_map(address_map &map);
|
||||
void fex68km3_map(address_map &map);
|
||||
|
||||
// Designer Master
|
||||
DECLARE_WRITE8_MEMBER(fdes68k_control_w);
|
||||
DECLARE_READ8_MEMBER(fdes68k_input_r);
|
||||
DECLARE_WRITE8_MEMBER(fdes68k_lcd_w);
|
||||
void fdes2265_map(address_map &map);
|
||||
void fdes2325_map(address_map &map);
|
||||
|
||||
// EAG(6114/6117)
|
||||
void eag_prepare_display();
|
||||
DECLARE_READ8_MEMBER(eag_input1_r);
|
||||
DECLARE_WRITE8_MEMBER(eag_leds_w);
|
||||
DECLARE_WRITE8_MEMBER(eag_7seg_w);
|
||||
DECLARE_WRITE8_MEMBER(eag_mux_w);
|
||||
DECLARE_READ8_MEMBER(eag_input2_r);
|
||||
void eag_map(address_map &map);
|
||||
void eagv7_map(address_map &map);
|
||||
void eagv11_map(address_map &map);
|
||||
void eagv5_slave_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_READ8_MEMBER(input1_r);
|
||||
DECLARE_READ8_MEMBER(input2_r);
|
||||
DECLARE_WRITE8_MEMBER(leds_w);
|
||||
DECLARE_WRITE8_MEMBER(digit_w);
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
};
|
||||
|
||||
|
||||
class desmas_state : public desdis_common_state
|
||||
{
|
||||
public:
|
||||
desmas_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
desdis_common_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void fdes2265(machine_config &config);
|
||||
void fdes2325(machine_config &config);
|
||||
|
||||
void init_fdes2265();
|
||||
|
||||
private:
|
||||
void fdes2265_map(address_map &map);
|
||||
void fdes2325_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
virtual DECLARE_WRITE8_MEMBER(control_w) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(lcd_w) override;
|
||||
};
|
||||
|
||||
|
||||
class excel68k_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
excel68k_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void fex68k(machine_config &config);
|
||||
void fex68km2(machine_config &config);
|
||||
void fex68km3(machine_config &config);
|
||||
|
||||
private:
|
||||
void fex68k_map(address_map &map);
|
||||
void fex68km2_map(address_map &map);
|
||||
void fex68km3_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(leds_w);
|
||||
DECLARE_WRITE8_MEMBER(digit_w);
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
};
|
||||
|
||||
|
||||
@ -257,14 +287,47 @@ private:
|
||||
Excel 68000
|
||||
******************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::fex68k_mux_w)
|
||||
void excel68k_state::prepare_display()
|
||||
{
|
||||
// 4*7seg leds, 8*8 chessboard leds
|
||||
u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4);
|
||||
set_display_segmask(0x55, 0x7f);
|
||||
display_matrix(16, 8, m_led_data << 8 | seg_data, m_inp_mux);
|
||||
}
|
||||
|
||||
READ8_MEMBER(excel68k_state::input_r)
|
||||
{
|
||||
// a1-a3,d7: multiplexed inputs (active low)
|
||||
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(excel68k_state::leds_w)
|
||||
{
|
||||
// a1-a3,d0: led data
|
||||
m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset);
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(excel68k_state::digit_w)
|
||||
{
|
||||
// a1-a3,d0(d8): digit segment data
|
||||
m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset);
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(excel68k_state::mux_w)
|
||||
{
|
||||
// a1-a3,d0: 74259
|
||||
u8 mask = 1 << offset;
|
||||
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
|
||||
|
||||
// 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
|
||||
eag_mux_w(space, offset, m_led_select & 0xf);
|
||||
// 74145 0-8: input mux, digit/led select
|
||||
// 74145 9: speaker out
|
||||
u16 sel = 1 << (m_led_select & 0xf);
|
||||
m_dac->write(BIT(sel, 9));
|
||||
m_inp_mux = sel & 0x1ff;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
|
||||
@ -273,55 +336,19 @@ WRITE8_MEMBER(fidel68k_state::fex68k_mux_w)
|
||||
Designer Master
|
||||
******************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::fdes68k_control_w)
|
||||
WRITE8_MEMBER(desmas_state::control_w)
|
||||
{
|
||||
u8 q3_old = m_led_select & 8;
|
||||
|
||||
// a1-a3,d0: 74259
|
||||
u8 mask = 1 << offset;
|
||||
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
|
||||
|
||||
// 74259 Q4-Q7: 7442 a0-a3
|
||||
// 7442 0-8: led data, input mux
|
||||
u16 sel = 1 << (m_led_select >> 4 & 0xf) & 0x3ff;
|
||||
m_inp_mux = sel & 0x1ff;
|
||||
|
||||
// 7442 9: speaker out
|
||||
m_dac->write(BIT(sel, 9));
|
||||
|
||||
// 74259 Q0,Q1: led select (active low)
|
||||
display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false);
|
||||
|
||||
// 74259 Q3: lcd common, update on rising edge
|
||||
if (~q3_old & m_led_select & 8)
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_display_state[i+2] = m_7seg_data >> (8*i) & 0xff;
|
||||
}
|
||||
|
||||
m_display_maxy += 4;
|
||||
set_display_segmask(0x3c, 0x7f);
|
||||
display_update();
|
||||
// same as desdis, d0 instead of d7
|
||||
desdis_common_state::control_w(space, offset, data << 7);
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidel68k_state::fdes68k_input_r)
|
||||
WRITE8_MEMBER(desmas_state::lcd_w)
|
||||
{
|
||||
// a1-a3,d7(d15): multiplexed inputs (active low)
|
||||
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
|
||||
// same as desdis, inverted data
|
||||
desdis_common_state::lcd_w(space, offset, ~data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::fdes68k_lcd_w)
|
||||
{
|
||||
// a1-a3,d0-d3: 4*74259 to lcd digit segments
|
||||
u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5);
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_7seg_data = (m_7seg_data & ~mask) | ((data >> i & 1) ? mask : 0);
|
||||
mask <<= 8;
|
||||
}
|
||||
}
|
||||
|
||||
void fidel68k_state::init_fdes2265()
|
||||
void desmas_state::init_fdes2265()
|
||||
{
|
||||
u16 *rom = (u16*)memregion("maincpu")->base();
|
||||
const u32 len = memregion("maincpu")->bytes() / 2;
|
||||
@ -345,42 +372,41 @@ void fidel68k_state::init_fdes2265()
|
||||
|
||||
// TTL/generic
|
||||
|
||||
void fidel68k_state::eag_prepare_display()
|
||||
void eag_state::prepare_display()
|
||||
{
|
||||
// Excel 68000: 4*7seg leds, 8*8 chessboard leds
|
||||
// EAG: 8*7seg leds(2 panels), (8+1)*8 chessboard leds
|
||||
// 8*7seg leds(2 panels), (8+1)*8 chessboard leds
|
||||
u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4);
|
||||
set_display_segmask(0x1ff, 0x7f);
|
||||
set_display_segmask(0x1ef, 0x7f);
|
||||
display_matrix(16, 9, m_led_data << 8 | seg_data, m_inp_mux);
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidel68k_state::eag_input1_r)
|
||||
READ8_MEMBER(eag_state::input1_r)
|
||||
{
|
||||
// a1-a3,d7: multiplexed inputs (active low)
|
||||
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidel68k_state::eag_input2_r)
|
||||
READ8_MEMBER(eag_state::input2_r)
|
||||
{
|
||||
// d7: multiplexed inputs highest bit
|
||||
return (read_inputs(9) & 0x100) ? 0x80 : 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::eag_leds_w)
|
||||
WRITE8_MEMBER(eag_state::leds_w)
|
||||
{
|
||||
// a1-a3,d0: led data
|
||||
m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset);
|
||||
eag_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::eag_7seg_w)
|
||||
WRITE8_MEMBER(eag_state::digit_w)
|
||||
{
|
||||
// a1-a3,d0(d8): digit segment data
|
||||
m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset);
|
||||
eag_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidel68k_state::eag_mux_w)
|
||||
WRITE8_MEMBER(eag_state::mux_w)
|
||||
{
|
||||
// d0-d3: 74145 A-D
|
||||
// 74145 0-8: input mux, digit/led select
|
||||
@ -388,7 +414,7 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w)
|
||||
u16 sel = 1 << (data & 0xf);
|
||||
m_dac->write(BIT(sel, 9));
|
||||
m_inp_mux = sel & 0x1ff;
|
||||
eag_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
|
||||
@ -399,23 +425,23 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w)
|
||||
|
||||
// Excel 68000
|
||||
|
||||
void fidel68k_state::fex68k_map(address_map &map)
|
||||
void excel68k_state::fex68k_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x00ffff).rom();
|
||||
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_leds_w)).umask16(0x00ff);
|
||||
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_7seg_w)).umask16(0xff00);
|
||||
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask16(0x00ff);
|
||||
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask16(0xff00);
|
||||
map(0x044000, 0x047fff).ram();
|
||||
map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::eag_input1_r)).umask16(0x00ff);
|
||||
map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(fidel68k_state::fex68k_mux_w)).umask16(0x00ff);
|
||||
map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask16(0x00ff);
|
||||
map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask16(0x00ff);
|
||||
}
|
||||
|
||||
void fidel68k_state::fex68km2_map(address_map &map)
|
||||
void excel68k_state::fex68km2_map(address_map &map)
|
||||
{
|
||||
fex68k_map(map);
|
||||
map(0x200000, 0x21ffff).ram();
|
||||
}
|
||||
|
||||
void fidel68k_state::fex68km3_map(address_map &map)
|
||||
void excel68k_state::fex68km3_map(address_map &map)
|
||||
{
|
||||
fex68k_map(map);
|
||||
map(0x200000, 0x20ffff).ram();
|
||||
@ -424,24 +450,24 @@ void fidel68k_state::fex68km3_map(address_map &map)
|
||||
|
||||
// Designer Master
|
||||
|
||||
void fidel68k_state::fdes2265_map(address_map &map)
|
||||
void desmas_state::fdes2265_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x000000, 0x00ffff).rom();
|
||||
map(0x000000, 0x00000f).w(FUNC(fidel68k_state::fdes68k_lcd_w)).umask16(0x00ff);
|
||||
map(0x000000, 0x00000f).w(FUNC(desmas_state::lcd_w)).umask16(0x00ff);
|
||||
map(0x044000, 0x047fff).ram();
|
||||
map(0x100000, 0x10ffff).ram();
|
||||
map(0x140000, 0x14000f).r(FUNC(fidel68k_state::fdes68k_input_r)).umask16(0xff00);
|
||||
map(0x140000, 0x14000f).w(FUNC(fidel68k_state::fdes68k_control_w)).umask16(0x00ff);
|
||||
map(0x140000, 0x14000f).r(FUNC(desmas_state::input_r)).umask16(0xff00);
|
||||
map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask16(0x00ff);
|
||||
}
|
||||
|
||||
void fidel68k_state::fdes2325_map(address_map &map)
|
||||
void desmas_state::fdes2325_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x000000, 0x00ffff).rom();
|
||||
map(0x100000, 0x10000f).w(FUNC(fidel68k_state::fdes68k_lcd_w)).umask32(0x00ff00ff);
|
||||
map(0x140000, 0x14000f).w(FUNC(fidel68k_state::fdes68k_control_w)).umask32(0x00ff00ff);
|
||||
map(0x180000, 0x18000f).r(FUNC(fidel68k_state::fdes68k_input_r)).umask32(0xff00ff00);
|
||||
map(0x100000, 0x10000f).w(FUNC(desmas_state::lcd_w)).umask32(0x00ff00ff);
|
||||
map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask32(0x00ff00ff);
|
||||
map(0x180000, 0x18000f).r(FUNC(desmas_state::input_r)).umask32(0xff00ff00);
|
||||
map(0x300000, 0x37ffff).ram();
|
||||
map(0x500000, 0x507fff).ram();
|
||||
}
|
||||
@ -449,55 +475,55 @@ void fidel68k_state::fdes2325_map(address_map &map)
|
||||
|
||||
// EAG
|
||||
|
||||
void fidel68k_state::init_eag()
|
||||
void eag_state::init_eag()
|
||||
{
|
||||
// eag_map: DRAM slots at $200000-$2fffff - V1/V2/V5: 128K, V3: 512K, V4: 1M
|
||||
m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x200000 + m_ram->size() - 1, m_ram->pointer());
|
||||
}
|
||||
|
||||
void fidel68k_state::eag_map(address_map &map)
|
||||
void eag_state::eag_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x01ffff).rom();
|
||||
map(0x104000, 0x107fff).ram();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask16(0xff00).nopr();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask16(0x00ff);
|
||||
map(0x400000, 0x407fff).r(FUNC(fidel68k_state::cartridge_r)).umask16(0xff00);
|
||||
map(0x400001, 0x400001).w(FUNC(fidel68k_state::eag_mux_w));
|
||||
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
|
||||
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask16(0xff00);
|
||||
map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
|
||||
map(0x400002, 0x400007).nopw(); // ?
|
||||
map(0x604000, 0x607fff).ram().share("nvram");
|
||||
map(0x700003, 0x700003).r(FUNC(fidel68k_state::eag_input2_r));
|
||||
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv7_map(address_map &map)
|
||||
void eag_state::eagv7_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x01ffff).rom();
|
||||
map(0x104000, 0x107fff).ram();
|
||||
map(0x200000, 0x2fffff).ram();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask32(0xff00ff00).nopr();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask32(0x00ff00ff);
|
||||
map(0x400000, 0x407fff).r(FUNC(fidel68k_state::cartridge_r)).umask32(0xff00ff00);
|
||||
map(0x400001, 0x400001).w(FUNC(fidel68k_state::eag_mux_w));
|
||||
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
|
||||
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
|
||||
map(0x400000, 0x407fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
|
||||
map(0x400001, 0x400001).w(FUNC(eag_state::mux_w));
|
||||
map(0x400004, 0x400007).nopw(); // ?
|
||||
map(0x604000, 0x607fff).ram().share("nvram");
|
||||
map(0x700003, 0x700003).r(FUNC(fidel68k_state::eag_input2_r));
|
||||
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
|
||||
map(0x800000, 0x807fff).ram();
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv11_map(address_map &map)
|
||||
void eag_state::eagv11_map(address_map &map)
|
||||
{
|
||||
map(0x00000000, 0x0001ffff).rom();
|
||||
map(0x00200000, 0x003fffff).ram();
|
||||
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(fidel68k_state::eag_7seg_w)).umask32(0xff00ff00).nopr();
|
||||
map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(fidel68k_state::eag_input1_r), FUNC(fidel68k_state::eag_leds_w)).umask32(0x00ff00ff);
|
||||
map(0x00c00000, 0x00c07fff).r(FUNC(fidel68k_state::cartridge_r)).umask32(0xff00ff00);
|
||||
map(0x00c00001, 0x00c00001).w(FUNC(fidel68k_state::eag_mux_w));
|
||||
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
|
||||
map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
|
||||
map(0x00c00000, 0x00c07fff).r(FUNC(eag_state::cartridge_r)).umask32(0xff00ff00);
|
||||
map(0x00c00001, 0x00c00001).w(FUNC(eag_state::mux_w));
|
||||
map(0x00c00004, 0x00c00007).nopw(); // ?
|
||||
map(0x00e04000, 0x00e07fff).ram().share("nvram");
|
||||
map(0x00f00003, 0x00f00003).r(FUNC(fidel68k_state::eag_input2_r));
|
||||
map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r));
|
||||
map(0x01000000, 0x0101ffff).ram();
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv5_slave_map(address_map &map)
|
||||
void eag_state::eagv5_slave_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x00ffff).rom();
|
||||
map(0x044000, 0x047fff).ram();
|
||||
@ -509,7 +535,7 @@ void fidel68k_state::eagv5_slave_map(address_map &map)
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( fex68k )
|
||||
static INPUT_PORTS_START( excel68k )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
@ -524,21 +550,6 @@ static INPUT_PORTS_START( fex68k )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( fdes68k )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / Alternate")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Info")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Replay")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Time")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( eag )
|
||||
PORT_INCLUDE( fidel_cb_magnets )
|
||||
|
||||
@ -568,16 +579,16 @@ INPUT_PORTS_END
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void fidel68k_state::fex68k(machine_config &config)
|
||||
void excel68k_state::fex68k(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68k_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68k_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(618); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on<M68K_IRQ_2>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(excel68k_state::irq_on<M68K_IRQ_2>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_2>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(excel68k_state::irq_off<M68K_IRQ_2>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_ex_68k);
|
||||
@ -590,33 +601,33 @@ void fidel68k_state::fex68k(machine_config &config)
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void fidel68k_state::fex68km2(machine_config &config)
|
||||
void excel68k_state::fex68km2(machine_config &config)
|
||||
{
|
||||
fex68k(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68km2_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km2_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::fex68km3(machine_config &config)
|
||||
void excel68k_state::fex68km3(machine_config &config)
|
||||
{
|
||||
fex68k(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_clock(16_MHz_XTAL); // factory overclock
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fex68km3_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::fdes2265(machine_config &config)
|
||||
void desmas_state::fdes2265(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fdes2265_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2265_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(597); // from 555 timer, measured
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on<M68K_IRQ_4>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(desmas_state::irq_on<M68K_IRQ_4>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_4>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(desmas_state::irq_off<M68K_IRQ_4>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_desdis_68kr);
|
||||
@ -629,27 +640,27 @@ void fidel68k_state::fdes2265(machine_config &config)
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void fidel68k_state::fdes2325(machine_config &config)
|
||||
void desmas_state::fdes2325(machine_config &config)
|
||||
{
|
||||
fdes2265(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
M68EC020(config.replace(), m_maincpu, 20_MHz_XTAL); // MC68EC020RP25
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::fdes2325_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2325_map);
|
||||
|
||||
config.set_default_layout(layout_fidel_desdis_68kg);
|
||||
}
|
||||
|
||||
void fidel68k_state::eag_base(machine_config &config)
|
||||
void eag_state::eag_base(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 16_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eag_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eag_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(4.9152_MHz_XTAL/0x2000); // 600Hz
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel68k_state::irq_on<M68K_IRQ_2>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(eag_state::irq_on<M68K_IRQ_2>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(8250)); // active for 8.25us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidel68k_state::irq_off<M68K_IRQ_2>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(eag_state::irq_off<M68K_IRQ_2>), irq_period);
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
|
||||
|
||||
@ -670,13 +681,13 @@ void fidel68k_state::eag_base(machine_config &config)
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc");
|
||||
}
|
||||
|
||||
void fidel68k_state::eag(machine_config &config)
|
||||
void eag_state::eag(machine_config &config)
|
||||
{
|
||||
eag_base(config);
|
||||
RAM(config, m_ram).set_default_size("1M").set_extra_options("128K, 512K, 1M");
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv5(machine_config &config)
|
||||
void eag_state::eagv5(machine_config &config)
|
||||
{
|
||||
eag(config);
|
||||
|
||||
@ -684,44 +695,44 @@ void fidel68k_state::eagv5(machine_config &config)
|
||||
m_ram->set_default_size("128K");
|
||||
|
||||
m68000_device &subcpu(M68000(config, "subcpu", 16_MHz_XTAL));
|
||||
subcpu.set_addrmap(AS_PROGRAM, &fidel68k_state::eagv5_slave_map);
|
||||
subcpu.set_addrmap(AS_PROGRAM, &eag_state::eagv5_slave_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv7(machine_config &config)
|
||||
void eag_state::eagv7(machine_config &config)
|
||||
{
|
||||
eag_base(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
M68020(config.replace(), m_maincpu, 20_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv7_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv9(machine_config &config)
|
||||
void eag_state::eagv9(machine_config &config)
|
||||
{
|
||||
eagv7(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
M68030(config.replace(), m_maincpu, 32_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv7_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv7_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv10(machine_config &config)
|
||||
void eag_state::eagv10(machine_config &config)
|
||||
{
|
||||
eagv7(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
M68040(config.replace(), m_maincpu, 25_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv11_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map);
|
||||
}
|
||||
|
||||
void fidel68k_state::eagv11(machine_config &config)
|
||||
void eag_state::eagv11(machine_config &config)
|
||||
{
|
||||
eagv7(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2*2); // wrong! should be M68EC060 @ 72MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidel68k_state::eagv11_map);
|
||||
m_maincpu->set_periodic_int(FUNC(fidel68k_state::irq2_line_hold), attotime::from_hz(600));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv11_map);
|
||||
m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600));
|
||||
|
||||
config.device_remove("irq_on"); // 8.25us is too long
|
||||
config.device_remove("irq_off");
|
||||
@ -842,20 +853,20 @@ ROM_END
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS
|
||||
CONS( 1987, fex68k, 0, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1987, fex68ka, fex68k, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1987, fex68kb, fex68k, 0, fex68k, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fex68km2, fex68k, 0, fex68km2, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fex68km3, fex68k, 0, fex68km3, fex68k, fidel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1987, fex68k, 0, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1989, fdes2265, 0, 0, fdes2265, fdes68k, fidel68k_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1991, fdes2325, fdes2265, 0, fdes2325, fdes68k, fidel68k_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1989, fdes2265, 0, 0, fdes2265, desdis, desmas_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desdis, desmas_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1989, feagv2, 0, 0, eag, eag, fidel68k_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1989, feagv2a, feagv2, 0, eag, eag, fidel68k_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1989, feagv5, feagv2, 0, eagv5, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1990, feagv7, feagv2, 0, eagv7, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv9, feagv2, 0, eagv9, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv10, feagv2, 0, eagv10, eag, fidel68k_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 2002, feagv11, feagv2, 0, eagv11, eag, fidel68k_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1990, feagv7, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv7a, feagv2, 0, eagv7, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv9, feagv2, 0, eagv9, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1990, feagv10, feagv2, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 2002, feagv11, feagv2, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
|
@ -3,18 +3,6 @@
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Fidelity Electronics generic MCS-48 based chess computer driver
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
As workaround for the chess games, use an external chess GUI on the side,
|
||||
such as Arena(in editmode).
|
||||
|
||||
TODO:
|
||||
- nothing
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Sensory Chess Challenger 6 (model SC6):
|
||||
- PCB label 510-1045B01
|
||||
- INS8040N-11 MCU, 11MHz XTAL
|
||||
@ -41,10 +29,10 @@ SC6 program is contained in BO6 and CG6.
|
||||
#include "fidel_sc6.lh" // clickable
|
||||
|
||||
|
||||
class fidelmcs48_state : public fidelbase_state
|
||||
class sc6_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
fidelmcs48_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
sc6_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
@ -52,30 +40,31 @@ public:
|
||||
void sc6(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<mcs48_cpu_device> m_maincpu;
|
||||
|
||||
// SC6
|
||||
void sc6_prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(sc6_mux_w);
|
||||
DECLARE_WRITE8_MEMBER(sc6_select_w);
|
||||
DECLARE_READ8_MEMBER(sc6_input_r);
|
||||
DECLARE_READ_LINE_MEMBER(sc6_input6_r);
|
||||
DECLARE_READ_LINE_MEMBER(sc6_input7_r);
|
||||
void sc6_map(address_map &map);
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sc6_cartridge);
|
||||
void main_map(address_map &map);
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
DECLARE_WRITE8_MEMBER(select_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_READ_LINE_MEMBER(input6_r);
|
||||
DECLARE_READ_LINE_MEMBER(input7_r);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Devices, I/O
|
||||
|
||||
/******************************************************************************
|
||||
SC6
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// cartridge
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(fidelmcs48_state, sc6_cartridge)
|
||||
DEVICE_IMAGE_LOAD_MEMBER(sc6_state, cartridge)
|
||||
{
|
||||
u32 size = m_cart->common_get_size("rom");
|
||||
|
||||
@ -95,14 +84,14 @@ DEVICE_IMAGE_LOAD_MEMBER(fidelmcs48_state, sc6_cartridge)
|
||||
|
||||
// MCU ports/generic
|
||||
|
||||
void fidelmcs48_state::sc6_prepare_display()
|
||||
void sc6_state::prepare_display()
|
||||
{
|
||||
// 2 7seg leds
|
||||
set_display_segmask(3, 0x7f);
|
||||
display_matrix(7, 2, m_7seg_data, m_led_select);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelmcs48_state::sc6_mux_w)
|
||||
WRITE8_MEMBER(sc6_state::mux_w)
|
||||
{
|
||||
// P24-P27: 7442 A-D
|
||||
u16 sel = 1 << (data >> 4 & 0xf) & 0x3ff;
|
||||
@ -110,32 +99,32 @@ WRITE8_MEMBER(fidelmcs48_state::sc6_mux_w)
|
||||
// 7442 0-8: input mux, 7seg data
|
||||
m_inp_mux = sel & 0x1ff;
|
||||
m_7seg_data = sel & 0x7f;
|
||||
sc6_prepare_display();
|
||||
prepare_display();
|
||||
|
||||
// 7442 9: speaker out
|
||||
m_dac->write(BIT(sel, 9));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelmcs48_state::sc6_select_w)
|
||||
WRITE8_MEMBER(sc6_state::select_w)
|
||||
{
|
||||
// P16,P17: digit select
|
||||
m_led_select = ~data >> 6 & 3;
|
||||
sc6_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelmcs48_state::sc6_input_r)
|
||||
READ8_MEMBER(sc6_state::input_r)
|
||||
{
|
||||
// P10-P15: multiplexed inputs low
|
||||
return (~read_inputs(9) & 0x3f) | 0xc0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(fidelmcs48_state::sc6_input6_r)
|
||||
READ_LINE_MEMBER(sc6_state::input6_r)
|
||||
{
|
||||
// T0: multiplexed inputs bit 6
|
||||
return ~read_inputs(9) >> 6 & 1;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(fidelmcs48_state::sc6_input7_r)
|
||||
READ_LINE_MEMBER(sc6_state::input7_r)
|
||||
{
|
||||
// T1: multiplexed inputs bit 7
|
||||
return ~read_inputs(9) >> 7 & 1;
|
||||
@ -147,9 +136,7 @@ READ_LINE_MEMBER(fidelmcs48_state::sc6_input7_r)
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
// SC6
|
||||
|
||||
void fidelmcs48_state::sc6_map(address_map &map)
|
||||
void sc6_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).r("cartslot", FUNC(generic_slot_device::read_rom));
|
||||
}
|
||||
@ -180,16 +167,16 @@ INPUT_PORTS_END
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void fidelmcs48_state::sc6(machine_config &config)
|
||||
void sc6_state::sc6(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
I8040(config, m_maincpu, 11_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidelmcs48_state::sc6_map);
|
||||
m_maincpu->p2_out_cb().set(FUNC(fidelmcs48_state::sc6_mux_w));
|
||||
m_maincpu->p1_in_cb().set(FUNC(fidelmcs48_state::sc6_input_r));
|
||||
m_maincpu->p1_out_cb().set(FUNC(fidelmcs48_state::sc6_select_w));
|
||||
m_maincpu->t0_in_cb().set(FUNC(fidelmcs48_state::sc6_input6_r));
|
||||
m_maincpu->t1_in_cb().set(FUNC(fidelmcs48_state::sc6_input7_r));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::main_map);
|
||||
m_maincpu->p2_out_cb().set(FUNC(sc6_state::mux_w));
|
||||
m_maincpu->p1_in_cb().set(FUNC(sc6_state::input_r));
|
||||
m_maincpu->p1_out_cb().set(FUNC(sc6_state::select_w));
|
||||
m_maincpu->t0_in_cb().set(FUNC(sc6_state::input6_r));
|
||||
m_maincpu->t1_in_cb().set(FUNC(sc6_state::input7_r));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_sc6);
|
||||
@ -203,7 +190,7 @@ void fidelmcs48_state::sc6(machine_config &config)
|
||||
|
||||
/* cartridge */
|
||||
generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_sc6", "bin"));
|
||||
cartslot.set_device_load(device_image_load_delegate(&fidelmcs48_state::device_image_load_sc6_cartridge, this));
|
||||
cartslot.set_device_load(device_image_load_delegate(&sc6_state::device_image_load_cartridge, this));
|
||||
cartslot.set_must_be_loaded(true);
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("fidel_sc6");
|
||||
@ -226,5 +213,5 @@ ROM_END
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
CONS( 1982, fscc6, 0, 0, sc6, sc6, fidelmcs48_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 6", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
CONS( 1982, fscc6, 0, 0, sc6, sc6, sc6_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 6", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
@ -513,62 +513,6 @@ expect that the software reads these once on startup only.
|
||||
#include "fidel_bv3.lh" // clickable
|
||||
#include "fidel_vsc.lh" // clickable
|
||||
|
||||
|
||||
class fidelz80_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
fidelz80_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_z80pio(*this, "z80pio"),
|
||||
m_ppi8255(*this, "ppi8255")
|
||||
{ }
|
||||
|
||||
void bcc(machine_config &config);
|
||||
void bkc(machine_config &config);
|
||||
void scc(machine_config &config);
|
||||
void vsc(machine_config &config);
|
||||
void dsc(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
optional_device<z80pio_device> m_z80pio;
|
||||
optional_device<i8255_device> m_ppi8255;
|
||||
|
||||
// BCC, BKC
|
||||
DECLARE_READ8_MEMBER(bcc_input_r);
|
||||
DECLARE_WRITE8_MEMBER(bcc_control_w);
|
||||
void bcc_io(address_map &map);
|
||||
void bcc_map(address_map &map);
|
||||
|
||||
// SCC
|
||||
DECLARE_READ8_MEMBER(scc_input_r);
|
||||
DECLARE_WRITE8_MEMBER(scc_control_w);
|
||||
void scc_io(address_map &map);
|
||||
void scc_map(address_map &map);
|
||||
|
||||
// VSC
|
||||
void vsc_prepare_display();
|
||||
DECLARE_READ8_MEMBER(vsc_speech_r);
|
||||
DECLARE_READ8_MEMBER(vsc_io_trampoline_r);
|
||||
DECLARE_WRITE8_MEMBER(vsc_io_trampoline_w);
|
||||
DECLARE_WRITE8_MEMBER(vsc_ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(vsc_ppi_portb_w);
|
||||
DECLARE_WRITE8_MEMBER(vsc_ppi_portc_w);
|
||||
DECLARE_READ8_MEMBER(vsc_pio_porta_r);
|
||||
DECLARE_READ8_MEMBER(vsc_pio_portb_r);
|
||||
DECLARE_WRITE8_MEMBER(vsc_pio_portb_w);
|
||||
void vsc_io(address_map &map);
|
||||
void vsc_map(address_map &map);
|
||||
|
||||
// DSC
|
||||
void dsc_prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(dsc_control_w);
|
||||
DECLARE_WRITE8_MEMBER(dsc_select_w);
|
||||
DECLARE_READ8_MEMBER(dsc_input_r);
|
||||
void dsc_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void fidelbase_state::machine_start()
|
||||
@ -613,6 +557,98 @@ void fidelbase_state::machine_reset()
|
||||
|
||||
|
||||
|
||||
class scc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
scc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void scc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
class dsc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
dsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void dsc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
DECLARE_WRITE8_MEMBER(select_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
};
|
||||
|
||||
|
||||
class bcc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
bcc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void bcc(machine_config &config);
|
||||
void bkc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
class vsc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
vsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_z80pio(*this, "z80pio"),
|
||||
m_ppi8255(*this, "ppi8255")
|
||||
{ }
|
||||
|
||||
void vsc(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<z80pio_device> m_z80pio;
|
||||
required_device<i8255_device> m_ppi8255;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
DECLARE_READ8_MEMBER(main_io_trampoline_r);
|
||||
DECLARE_WRITE8_MEMBER(main_io_trampoline_w);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_READ8_MEMBER(speech_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portb_w);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portc_w);
|
||||
DECLARE_READ8_MEMBER(pio_porta_r);
|
||||
DECLARE_READ8_MEMBER(pio_portb_r);
|
||||
DECLARE_WRITE8_MEMBER(pio_portb_w);
|
||||
};
|
||||
|
||||
|
||||
class ccx_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
@ -635,13 +671,15 @@ private:
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
|
||||
|
||||
void ccx_prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(ccx_ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(ccx_ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(ccx_ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ccx_ppi_portc_w);
|
||||
void ccx_io(address_map &map);
|
||||
void ccx_map(address_map &map);
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portc_w);
|
||||
};
|
||||
|
||||
|
||||
@ -666,13 +704,14 @@ private:
|
||||
required_device<i8041_device> m_mcu;
|
||||
required_device<i8243_device> m_i8243;
|
||||
|
||||
void vbrc_prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(vbrc_speech_w);
|
||||
DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w);
|
||||
DECLARE_READ8_MEMBER(vbrc_mcu_p2_r);
|
||||
template<int P> void vbrc_ioexp_port_w(uint8_t data);
|
||||
void vbrc_main_io(address_map &map);
|
||||
void vbrc_main_map(address_map &map);
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(speech_w);
|
||||
DECLARE_WRITE8_MEMBER(mcu_p1_w);
|
||||
DECLARE_READ8_MEMBER(mcu_p2_r);
|
||||
template<int P> void ioexp_port_w(uint8_t data);
|
||||
};
|
||||
|
||||
|
||||
@ -695,15 +734,17 @@ private:
|
||||
// devices/pointers
|
||||
required_device<i8255_device> m_ppi8255;
|
||||
|
||||
void vcc_prepare_display();
|
||||
DECLARE_READ8_MEMBER(vcc_speech_r);
|
||||
DECLARE_WRITE8_MEMBER(vcc_ppi_porta_w);
|
||||
DECLARE_READ8_MEMBER(vcc_ppi_portb_r);
|
||||
DECLARE_WRITE8_MEMBER(vcc_ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(vcc_ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(vcc_ppi_portc_w);
|
||||
void vcc_io(address_map &map);
|
||||
void vcc_map(address_map &map);
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_READ8_MEMBER(speech_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portb_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portc_w);
|
||||
};
|
||||
|
||||
void vcc_state::machine_start()
|
||||
@ -851,7 +892,7 @@ READ8_MEMBER(fidelbase_state::cartridge_r)
|
||||
|
||||
// misc handlers
|
||||
|
||||
void vcc_state::vcc_prepare_display()
|
||||
void vcc_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds (note: sel d0 for extra leds)
|
||||
u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80);
|
||||
@ -859,7 +900,7 @@ void vcc_state::vcc_prepare_display()
|
||||
display_matrix(8, 4, outdata, m_led_select >> 2 & 0xf);
|
||||
}
|
||||
|
||||
READ8_MEMBER(vcc_state::vcc_speech_r)
|
||||
READ8_MEMBER(vcc_state::speech_r)
|
||||
{
|
||||
return m_speech_rom[m_speech_bank << 12 | offset];
|
||||
}
|
||||
@ -867,11 +908,11 @@ READ8_MEMBER(vcc_state::vcc_speech_r)
|
||||
|
||||
// I8255 PPI
|
||||
|
||||
WRITE8_MEMBER(vcc_state::vcc_ppi_porta_w)
|
||||
WRITE8_MEMBER(vcc_state::ppi_porta_w)
|
||||
{
|
||||
// d0-d6: digit segment data, bits are xABCDEFG
|
||||
m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6);
|
||||
vcc_prepare_display();
|
||||
prepare_display();
|
||||
|
||||
// d0-d5: TSI C0-C5
|
||||
// d7: TSI START line
|
||||
@ -887,28 +928,28 @@ WRITE8_MEMBER(vcc_state::vcc_ppi_porta_w)
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(vcc_state::vcc_ppi_portb_r)
|
||||
READ8_MEMBER(vcc_state::ppi_portb_r)
|
||||
{
|
||||
// d7: TSI BUSY line
|
||||
return (m_speech->busy_r()) ? 0x80 : 0x00;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(vcc_state::vcc_ppi_portb_w)
|
||||
WRITE8_MEMBER(vcc_state::ppi_portb_w)
|
||||
{
|
||||
// d0,d2-d5: digit/led select
|
||||
// _d6: enable language switches
|
||||
m_led_select = data;
|
||||
vcc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(vcc_state::vcc_ppi_portc_r)
|
||||
READ8_MEMBER(vcc_state::ppi_portc_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs (active low), also language switches
|
||||
u8 lan = (~m_led_select & 0x40) ? m_inp_matrix[4]->read() : 0;
|
||||
return ~(lan | read_inputs(4)) & 0xf;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(vcc_state::vcc_ppi_portc_w)
|
||||
WRITE8_MEMBER(vcc_state::ppi_portc_w)
|
||||
{
|
||||
// d4-d7: input mux (inverted)
|
||||
m_inp_mux = ~data >> 4 & 0xf;
|
||||
@ -917,7 +958,7 @@ WRITE8_MEMBER(vcc_state::vcc_ppi_portc_w)
|
||||
|
||||
// CCX-specific (no speech chip, 1-bit beeper instead)
|
||||
|
||||
void ccx_state::ccx_prepare_display()
|
||||
void ccx_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds (note: sel d0 for extra leds)
|
||||
u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80);
|
||||
@ -928,7 +969,7 @@ void ccx_state::ccx_prepare_display()
|
||||
|
||||
// I8255 PPI
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ccx_ppi_porta_w)
|
||||
WRITE8_MEMBER(ccx_state::ppi_porta_w)
|
||||
{
|
||||
// d7: enable beeper on falling edge (555 monostable)
|
||||
if (m_beeper && ~data & m_7seg_data & 0x80)
|
||||
@ -939,23 +980,23 @@ WRITE8_MEMBER(ccx_state::ccx_ppi_porta_w)
|
||||
|
||||
// d0-d6: digit segment data
|
||||
m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6);
|
||||
ccx_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ccx_ppi_portb_w)
|
||||
WRITE8_MEMBER(ccx_state::ppi_portb_w)
|
||||
{
|
||||
// d0,d2-d5: digit/led select
|
||||
m_led_select = data;
|
||||
ccx_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(ccx_state::ccx_ppi_portc_r)
|
||||
READ8_MEMBER(ccx_state::ppi_portc_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs (active low)
|
||||
return ~read_inputs(4) & 0xf;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ccx_ppi_portc_w)
|
||||
WRITE8_MEMBER(ccx_state::ppi_portc_w)
|
||||
{
|
||||
// d4-d7: input mux (inverted)
|
||||
m_inp_mux = ~data >> 4 & 0xf;
|
||||
@ -969,7 +1010,7 @@ WRITE8_MEMBER(ccx_state::ccx_ppi_portc_w)
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::bcc_control_w)
|
||||
WRITE8_MEMBER(bcc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: digit segment data via NE591
|
||||
u8 mask = 1 << (offset & 7);
|
||||
@ -986,7 +1027,7 @@ WRITE8_MEMBER(fidelz80_state::bcc_control_w)
|
||||
m_inp_mux = data & 0xf;
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelz80_state::bcc_input_r)
|
||||
READ8_MEMBER(bcc_state::input_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs
|
||||
return read_inputs(4);
|
||||
@ -1000,7 +1041,7 @@ READ8_MEMBER(fidelz80_state::bcc_input_r)
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::scc_control_w)
|
||||
WRITE8_MEMBER(scc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: led data
|
||||
u8 mask = 1 << (offset & 7);
|
||||
@ -1013,7 +1054,7 @@ WRITE8_MEMBER(fidelz80_state::scc_control_w)
|
||||
display_matrix(8, 9, m_led_data, (m_inp_mux & 0xff) | (data << 4 & 0x100));
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelz80_state::scc_input_r)
|
||||
READ8_MEMBER(scc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(9);
|
||||
@ -1027,14 +1068,14 @@ READ8_MEMBER(fidelz80_state::scc_input_r)
|
||||
|
||||
// misc handlers
|
||||
|
||||
void fidelz80_state::vsc_prepare_display()
|
||||
void vsc_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds+H, 8*8 chessboard leds
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(16, 8, m_led_data << 8 | m_7seg_data, m_led_select);
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelz80_state::vsc_speech_r)
|
||||
READ8_MEMBER(vsc_state::speech_r)
|
||||
{
|
||||
return m_speech_rom[m_speech_bank << 12 | offset];
|
||||
}
|
||||
@ -1042,42 +1083,42 @@ READ8_MEMBER(fidelz80_state::vsc_speech_r)
|
||||
|
||||
// I8255 PPI
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::vsc_ppi_porta_w)
|
||||
WRITE8_MEMBER(vsc_state::ppi_porta_w)
|
||||
{
|
||||
// d0-d5: TSI C0-C5
|
||||
m_speech->data_w(space, 0, data & 0x3f);
|
||||
|
||||
// d0-d7: data for the 4 7seg leds, bits are HGCBAFED (H is extra led)
|
||||
m_7seg_data = bitswap<8>(data,7,6,2,1,0,5,4,3);
|
||||
vsc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::vsc_ppi_portb_w)
|
||||
WRITE8_MEMBER(vsc_state::ppi_portb_w)
|
||||
{
|
||||
// d0-d7: led row data
|
||||
m_led_data = data;
|
||||
vsc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::vsc_ppi_portc_w)
|
||||
WRITE8_MEMBER(vsc_state::ppi_portc_w)
|
||||
{
|
||||
// d0-d3: select digits
|
||||
// d0-d7: select leds, input mux low bits
|
||||
m_inp_mux = (m_inp_mux & ~0xff) | data;
|
||||
m_led_select = data;
|
||||
vsc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
|
||||
// Z80 PIO
|
||||
|
||||
READ8_MEMBER(fidelz80_state::vsc_pio_porta_r)
|
||||
READ8_MEMBER(vsc_state::pio_porta_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs
|
||||
return read_inputs(11);
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
|
||||
READ8_MEMBER(vsc_state::pio_portb_r)
|
||||
{
|
||||
u8 data = 0;
|
||||
|
||||
@ -1087,7 +1128,7 @@ READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
|
||||
WRITE8_MEMBER(vsc_state::pio_portb_w)
|
||||
{
|
||||
// d0,d1: input mux highest bits
|
||||
// d5: enable language switch
|
||||
@ -1112,7 +1153,7 @@ WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
|
||||
|
||||
// misc handlers
|
||||
|
||||
void card_state::vbrc_prepare_display()
|
||||
void card_state::prepare_display()
|
||||
{
|
||||
// 14seg led segments, d15(12) is extra led
|
||||
u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8);
|
||||
@ -1120,7 +1161,7 @@ void card_state::vbrc_prepare_display()
|
||||
display_matrix(16, 8, outdata, m_led_select);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(card_state::vbrc_speech_w)
|
||||
WRITE8_MEMBER(card_state::speech_w)
|
||||
{
|
||||
if (m_speech == nullptr)
|
||||
return;
|
||||
@ -1134,11 +1175,11 @@ WRITE8_MEMBER(card_state::vbrc_speech_w)
|
||||
// I8243 I/O expander
|
||||
|
||||
template<int P>
|
||||
void card_state::vbrc_ioexp_port_w(uint8_t data)
|
||||
void card_state::ioexp_port_w(uint8_t data)
|
||||
{
|
||||
// P4x-P7x: digit segment data
|
||||
m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P));
|
||||
vbrc_prepare_display();
|
||||
prepare_display();
|
||||
|
||||
// P71 is tone (not on speech model)
|
||||
if (P == 3 && m_dac != nullptr)
|
||||
@ -1148,14 +1189,14 @@ void card_state::vbrc_ioexp_port_w(uint8_t data)
|
||||
|
||||
// I8041 MCU
|
||||
|
||||
WRITE8_MEMBER(card_state::vbrc_mcu_p1_w)
|
||||
WRITE8_MEMBER(card_state::mcu_p1_w)
|
||||
{
|
||||
// P10-P17: select digits, input mux
|
||||
m_inp_mux = m_led_select = data;
|
||||
vbrc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(card_state::vbrc_mcu_p2_r)
|
||||
READ8_MEMBER(card_state::mcu_p2_r)
|
||||
{
|
||||
// P20-P23: I8243 P2
|
||||
// P24-P27: multiplexed inputs (active low)
|
||||
@ -1170,32 +1211,32 @@ READ8_MEMBER(card_state::vbrc_mcu_p2_r)
|
||||
|
||||
// TTL
|
||||
|
||||
void fidelz80_state::dsc_prepare_display()
|
||||
void dsc_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 4, m_7seg_data, m_led_select);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::dsc_control_w)
|
||||
WRITE8_MEMBER(dsc_state::control_w)
|
||||
{
|
||||
// d0-d7: input mux, 7seg data
|
||||
m_inp_mux = ~data;
|
||||
m_7seg_data = data;
|
||||
dsc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::dsc_select_w)
|
||||
WRITE8_MEMBER(dsc_state::select_w)
|
||||
{
|
||||
// d4: speaker out
|
||||
m_dac->write(BIT(~data, 4));
|
||||
|
||||
// d0-d3: digit select
|
||||
m_led_select = data & 0xf;
|
||||
dsc_prepare_display();
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(fidelz80_state::dsc_input_r)
|
||||
READ8_MEMBER(dsc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(8);
|
||||
@ -1209,7 +1250,7 @@ READ8_MEMBER(fidelz80_state::dsc_input_r)
|
||||
|
||||
// CCX, VCC/UVC
|
||||
|
||||
void ccx_state::ccx_map(address_map &map)
|
||||
void ccx_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
@ -1218,20 +1259,20 @@ void ccx_state::ccx_map(address_map &map)
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void ccx_state::ccx_io(address_map &map)
|
||||
void ccx_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x03);
|
||||
map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
}
|
||||
|
||||
void vcc_state::vcc_map(address_map &map)
|
||||
void vcc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x2fff).rom();
|
||||
map(0x4000, 0x43ff).mirror(0x1c00).ram();
|
||||
}
|
||||
|
||||
void vcc_state::vcc_io(address_map &map)
|
||||
void vcc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x03);
|
||||
map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
@ -1240,7 +1281,7 @@ void vcc_state::vcc_io(address_map &map)
|
||||
|
||||
// BCC, BKC
|
||||
|
||||
void fidelz80_state::bcc_map(address_map &map)
|
||||
void bcc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
@ -1248,31 +1289,31 @@ void fidelz80_state::bcc_map(address_map &map)
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void fidelz80_state::bcc_io(address_map &map)
|
||||
void bcc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(fidelz80_state::bcc_input_r), FUNC(fidelz80_state::bcc_control_w));
|
||||
map(0x00, 0x07).rw(FUNC(bcc_state::input_r), FUNC(bcc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
// SCC
|
||||
|
||||
void fidelz80_state::scc_map(address_map &map)
|
||||
void scc_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x5000, 0x50ff).ram();
|
||||
}
|
||||
|
||||
void fidelz80_state::scc_io(address_map &map)
|
||||
void scc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(fidelz80_state::scc_input_r), FUNC(fidelz80_state::scc_control_w));
|
||||
map(0x00, 0x07).rw(FUNC(scc_state::input_r), FUNC(scc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
// VSC
|
||||
|
||||
void fidelz80_state::vsc_map(address_map &map)
|
||||
void vsc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x3fff).rom();
|
||||
@ -1281,7 +1322,7 @@ void fidelz80_state::vsc_map(address_map &map)
|
||||
}
|
||||
|
||||
// VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously
|
||||
READ8_MEMBER(fidelz80_state::vsc_io_trampoline_r)
|
||||
READ8_MEMBER(vsc_state::main_io_trampoline_r)
|
||||
{
|
||||
u8 data = 0xff; // open bus
|
||||
if (~offset & 4)
|
||||
@ -1292,7 +1333,7 @@ READ8_MEMBER(fidelz80_state::vsc_io_trampoline_r)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fidelz80_state::vsc_io_trampoline_w)
|
||||
WRITE8_MEMBER(vsc_state::main_io_trampoline_w)
|
||||
{
|
||||
if (~offset & 4)
|
||||
m_ppi8255->write(offset & 3, data);
|
||||
@ -1300,24 +1341,24 @@ WRITE8_MEMBER(fidelz80_state::vsc_io_trampoline_w)
|
||||
m_z80pio->write(space, offset & 3, data);
|
||||
}
|
||||
|
||||
void fidelz80_state::vsc_io(address_map &map)
|
||||
void vsc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x0f);
|
||||
map(0x00, 0x0f).rw(FUNC(fidelz80_state::vsc_io_trampoline_r), FUNC(fidelz80_state::vsc_io_trampoline_w));
|
||||
map(0x00, 0x0f).rw(FUNC(vsc_state::main_io_trampoline_r), FUNC(vsc_state::main_io_trampoline_w));
|
||||
}
|
||||
|
||||
|
||||
// VBRC/UBC, BV3
|
||||
|
||||
void card_state::vbrc_main_map(address_map &map)
|
||||
void card_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x5fff).rom();
|
||||
map(0x6000, 0x63ff).mirror(0x1c00).ram();
|
||||
map(0xe000, 0xe000).mirror(0x1fff).w(FUNC(card_state::vbrc_speech_w));
|
||||
map(0xe000, 0xe000).mirror(0x1fff).w(FUNC(card_state::speech_w));
|
||||
}
|
||||
|
||||
void card_state::vbrc_main_io(address_map &map)
|
||||
void card_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x01);
|
||||
map(0x00, 0x01).rw(m_mcu, FUNC(i8041_device::upi41_master_r), FUNC(i8041_device::upi41_master_w));
|
||||
@ -1326,13 +1367,13 @@ void card_state::vbrc_main_io(address_map &map)
|
||||
|
||||
// DSC
|
||||
|
||||
void fidelz80_state::dsc_map(address_map &map)
|
||||
void dsc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x1fff).rom();
|
||||
map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(fidelz80_state::dsc_control_w));
|
||||
map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(fidelz80_state::dsc_select_w));
|
||||
map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(fidelz80_state::dsc_input_r));
|
||||
map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::control_w));
|
||||
map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::select_w));
|
||||
map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::input_r));
|
||||
map(0xa000, 0xa3ff).mirror(0x1c00).ram();
|
||||
}
|
||||
|
||||
@ -1868,18 +1909,18 @@ INPUT_PORTS_END
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void fidelz80_state::bkc(machine_config &config)
|
||||
void bcc_state::bkc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.579545_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::bcc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &fidelz80_state::bcc_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &bcc_state::main_io);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_bkc);
|
||||
}
|
||||
|
||||
void fidelz80_state::bcc(machine_config &config)
|
||||
void bcc_state::bcc(machine_config &config)
|
||||
{
|
||||
bkc(config);
|
||||
config.set_default_layout(layout_fidel_bcc);
|
||||
@ -1892,12 +1933,12 @@ void fidelz80_state::bcc(machine_config &config)
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void fidelz80_state::scc(machine_config &config)
|
||||
void scc_state::scc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::scc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &fidelz80_state::scc_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &scc_state::main_io);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_sc8);
|
||||
@ -1914,17 +1955,17 @@ void ccx_state::ccx(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 4_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::ccx_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccx_state::ccx_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccx_state::main_io);
|
||||
|
||||
I8255(config, m_ppi8255);
|
||||
m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ccx_ppi_porta_w));
|
||||
m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ppi_porta_w));
|
||||
m_ppi8255->tri_pa_callback().set_constant(0);
|
||||
m_ppi8255->in_pb_callback().set_ioport("LEVEL");
|
||||
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ccx_ppi_portb_w));
|
||||
m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ccx_ppi_portc_r));
|
||||
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w));
|
||||
m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
|
||||
m_ppi8255->tri_pb_callback().set_constant(0);
|
||||
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ccx_ppi_portc_w));
|
||||
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_cc10);
|
||||
@ -1940,17 +1981,17 @@ void vcc_state::vcc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 4_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &vcc_state::vcc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &vcc_state::vcc_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &vcc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &vcc_state::main_io);
|
||||
|
||||
I8255(config, m_ppi8255);
|
||||
m_ppi8255->out_pa_callback().set(FUNC(vcc_state::vcc_ppi_porta_w));
|
||||
m_ppi8255->out_pa_callback().set(FUNC(vcc_state::ppi_porta_w));
|
||||
m_ppi8255->tri_pa_callback().set_constant(0);
|
||||
m_ppi8255->in_pb_callback().set(FUNC(vcc_state::vcc_ppi_portb_r));
|
||||
m_ppi8255->out_pb_callback().set(FUNC(vcc_state::vcc_ppi_portb_w));
|
||||
m_ppi8255->in_pb_callback().set(FUNC(vcc_state::ppi_portb_r));
|
||||
m_ppi8255->out_pb_callback().set(FUNC(vcc_state::ppi_portb_w));
|
||||
m_ppi8255->tri_pb_callback().set_constant(0);
|
||||
m_ppi8255->in_pc_callback().set(FUNC(vcc_state::vcc_ppi_portc_r));
|
||||
m_ppi8255->out_pc_callback().set(FUNC(vcc_state::vcc_ppi_portc_w));
|
||||
m_ppi8255->in_pc_callback().set(FUNC(vcc_state::ppi_portc_r));
|
||||
m_ppi8255->out_pc_callback().set(FUNC(vcc_state::ppi_portc_w));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_vcc);
|
||||
@ -1958,31 +1999,31 @@ void vcc_state::vcc(machine_config &config)
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
S14001A(config, m_speech, 25000); // R/C circuit, around 25khz
|
||||
m_speech->ext_read().set(FUNC(vcc_state::vcc_speech_r));
|
||||
m_speech->ext_read().set(FUNC(vcc_state::speech_r));
|
||||
m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75);
|
||||
}
|
||||
|
||||
void fidelz80_state::vsc(machine_config &config)
|
||||
void vsc_state::vsc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::vsc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &fidelz80_state::vsc_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(587); // 555 timer, measured
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on<INPUT_LINE_NMI>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(vsc_state::irq_on<INPUT_LINE_NMI>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half)
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off<INPUT_LINE_NMI>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off<INPUT_LINE_NMI>), irq_period);
|
||||
|
||||
I8255(config, m_ppi8255);
|
||||
m_ppi8255->out_pa_callback().set(FUNC(fidelz80_state::vsc_ppi_porta_w));
|
||||
m_ppi8255->out_pb_callback().set(FUNC(fidelz80_state::vsc_ppi_portb_w));
|
||||
m_ppi8255->out_pc_callback().set(FUNC(fidelz80_state::vsc_ppi_portc_w));
|
||||
m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w));
|
||||
m_ppi8255->out_pb_callback().set(FUNC(vsc_state::ppi_portb_w));
|
||||
m_ppi8255->out_pc_callback().set(FUNC(vsc_state::ppi_portc_w));
|
||||
|
||||
Z80PIO(config, m_z80pio, 3.9_MHz_XTAL);
|
||||
m_z80pio->in_pa_callback().set(FUNC(fidelz80_state::vsc_pio_porta_r));
|
||||
m_z80pio->in_pb_callback().set(FUNC(fidelz80_state::vsc_pio_portb_r));
|
||||
m_z80pio->out_pb_callback().set(FUNC(fidelz80_state::vsc_pio_portb_w));
|
||||
m_z80pio->in_pa_callback().set(FUNC(vsc_state::pio_porta_r));
|
||||
m_z80pio->in_pb_callback().set(FUNC(vsc_state::pio_portb_r));
|
||||
m_z80pio->out_pb_callback().set(FUNC(vsc_state::pio_portb_w));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_vsc);
|
||||
@ -1990,7 +2031,7 @@ void fidelz80_state::vsc(machine_config &config)
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
S14001A(config, m_speech, 25000); // R/C circuit, around 25khz
|
||||
m_speech->ext_read().set(FUNC(fidelz80_state::vsc_speech_r));
|
||||
m_speech->ext_read().set(FUNC(vsc_state::speech_r));
|
||||
m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75);
|
||||
}
|
||||
|
||||
@ -1998,13 +2039,13 @@ void card_state::brc_base(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 5_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &card_state::vbrc_main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &card_state::vbrc_main_io);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &card_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &card_state::main_io);
|
||||
config.m_perfect_cpu_quantum = subtag("maincpu");
|
||||
|
||||
I8041(config, m_mcu, 5_MHz_XTAL);
|
||||
m_mcu->p1_out_cb().set(FUNC(card_state::vbrc_mcu_p1_w));
|
||||
m_mcu->p2_in_cb().set(FUNC(card_state::vbrc_mcu_p2_r));
|
||||
m_mcu->p1_out_cb().set(FUNC(card_state::mcu_p1_w));
|
||||
m_mcu->p2_in_cb().set(FUNC(card_state::mcu_p2_r));
|
||||
m_mcu->p2_out_cb().set(m_i8243, FUNC(i8243_device::p2_w));
|
||||
m_mcu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
|
||||
m_mcu->t0_in_cb().set_ioport("BARCODE"); // card scanner
|
||||
@ -2014,10 +2055,10 @@ void card_state::brc_base(machine_config &config)
|
||||
m_mcu->t1_in_cb().set("t1_clock", FUNC(clock_device::signal_r)).invert();
|
||||
|
||||
I8243(config, m_i8243);
|
||||
m_i8243->p4_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<0>));
|
||||
m_i8243->p5_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<1>));
|
||||
m_i8243->p6_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<2>));
|
||||
m_i8243->p7_out_cb().set(FUNC(card_state::vbrc_ioexp_port_w<3>));
|
||||
m_i8243->p4_out_cb().set(FUNC(card_state::ioexp_port_w<0>));
|
||||
m_i8243->p5_out_cb().set(FUNC(card_state::ioexp_port_w<1>));
|
||||
m_i8243->p6_out_cb().set(FUNC(card_state::ioexp_port_w<2>));
|
||||
m_i8243->p7_out_cb().set(FUNC(card_state::ioexp_port_w<3>));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_vbrc);
|
||||
@ -2052,16 +2093,16 @@ void card_state::bv3(machine_config &config)
|
||||
config.set_default_layout(layout_fidel_bv3);
|
||||
}
|
||||
|
||||
void fidelz80_state::dsc(machine_config &config)
|
||||
void dsc_state::dsc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::dsc_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::main_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K)
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(fidelz80_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(dsc_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(fidelz80_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(dsc_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_dsc);
|
||||
@ -2277,10 +2318,10 @@ ROM_END
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS
|
||||
CONS( 1978, cc10, 0, 0, ccx, ccx, ccx_state, empty_init, "Fidelity Electronics", "Chess Challenger 10 (model CCX, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, cc7, 0, 0, bcc, bcc, fidelz80_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, backgamc, 0, 0, bkc, bkc, fidelz80_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||
CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||
|
||||
CONS( 1980, fscc8, 0, 0, scc, scc, fidelz80_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, fscc8, 0, 0, scc, scc, scc_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1979, vcc, 0, 0, vcc, vcc, vcc_state, empty_init, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, vccsp, vcc, 0, vcc, vccsp, vcc_state, empty_init, "Fidelity Electronics", "Voice Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
@ -2292,13 +2333,13 @@ CONS( 1980, uvcsp, vcc, 0, vcc, vccsp, vcc_state, empty_init, "Fidelit
|
||||
CONS( 1980, uvcg, vcc, 0, vcc, vccg, vcc_state, empty_init, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1980, uvcfr, vcc, 0, vcc, vccfr, vcc_state, empty_init, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
CONS( 1980, vsc, 0, 0, vsc, vsc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscsp, vsc, 0, vsc, vscsp, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscg, vsc, 0, vsc, vscg, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscfr, vsc, 0, vsc, vscfr, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vsc, 0, 0, vsc, vsc, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscsp, vsc, 0, vsc, vscsp, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscg, vsc, 0, vsc, vscg, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1980, vscfr, vsc, 0, vsc, vscfr, vsc_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1980, vbrc, 0, 0, vbrc, vbrc, card_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, card_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1982, bridgec3, 0, 0, bv3, bv3, card_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
|
||||
CONS( 1981, damesc, 0, 0, dsc, dsc, fidelz80_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1981, damesc, 0, 0, dsc, dsc, dsc_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
@ -327,19 +327,21 @@ Crazy Taxi 840-0002C ? 13 (64Mb) ?
|
||||
Ferrari F355 Challenge (twin/deluxe, preview) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * other ROM board we've seen had 2x flashroms PCB instead of IC22 EEPROM, contents is the same.
|
||||
/Ferrari F355 Challenge 2 - International
|
||||
\Course Edition (twin/deluxe, prototype) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart
|
||||
Mushiking (MUSHIUSA '04 1ST, Prototype) no sticker none 11*(64Mb) present 315-6206 not present * only first 7 flash roms contain game data, PCB have label 840-0150B-FLS.
|
||||
Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present 315-6206 317-0316-JPN requires 837-13844 JVS IO with DIPSW 1 ON
|
||||
Samba de Amigo (prototype) no cart * 21*(64Mb) present 315-6206 317-0270-COM * only first 14 flash roms contain game data, instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
Shootout Pool Prize Ver.B -P 840-0136C ** 21*(64Mb) present 317-6206 not present * only first 4 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
/Mushiking The King Of Beetle
|
||||
\(MUSHIUSA '04 1ST, Prototype) not present none 11*(64Mb) present 315-6206 not present * only first 7 flash roms contain game data, PCB have label 840-0150B-FLS.
|
||||
Samba de Amigo (prototype) no cart ** 21*(64Mb) present 315-6206 317-0270-COM * only first 14 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
/Shootout Pool Prize (Export) / Shootout
|
||||
\Pool The Medal (Japan) Version B (prototype) 840-0136C ** 21*(64Mb) present 317-6206 not present * only first 4 flash roms contain game data, ** instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
Soul Surfer (Rev A) 840-0095C 23838C 21 (64Mb) present 315-6206 not present
|
||||
Star Horse (live and backup) 840-0055B 23626 17 (64Mb) present 315-6206 not present requires 837-13785 ARCNET&IO BD
|
||||
Horse Data 840-0034B - 2 (64Mb) present 315-6206 not present not contain game data, used in stack with 840-0121(sound&backup) ROM board as game backup data storage, have JP3 and JP4 in position 2-3
|
||||
Star Horse Progress (backup data) 840-0034B - 2 (64Mb) present 315-6206 not present not contain game data, used in stack with 840-0121(sound&backup) ROM board as game backup data storage, have JP3 and JP4 in position 2-3
|
||||
The House of the Dead 2 (prototype) no cart A1E2 21 (64Mb) present 315-6206 present no label on IC42
|
||||
The King of Route 66 (prototype) no cart 23819* 21 (64Mb) present 315-6206 not present * flash-PCB with printed label "EPR-23819 IC22 0109 CHK" handwritten "1/11"
|
||||
The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present 315-6206 not present content is the same as regular 171-8132A cart
|
||||
The King of Route 66 (prototype) no cart 23819* 21 (64Mb) present 315-6206 not present * flash-PCB with printed label "EPR-23819 IC22 0109 CHK" handwritten "1/11" - it is assumed that only 20 flash roms are used
|
||||
The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present 315-6206 not present content is the same as regular 171-8132B cart
|
||||
The Maze of the Kings (prototype) no cart * 21 (64Mb) present 315-6206 FRI * flash-PCB, not dumped but known to exist
|
||||
Tokyo Bus Guide (Rev A) 840-0045C 23468A 18 (64Mb) present 315-6206 317-0290-COM requires 837-13844 JVS IO
|
||||
Virtua Athletics (prototype) no cart none 21*(64Mb) present 315-6206 present * only first 14 flash roms contain game data, have Japan text label "Overseas sales (NA & EU)"
|
||||
Virtua Athletics / Virtua Athlete (prototype) no cart none 21*(64Mb) present 315-6206 present * only first 14 flash roms contain game data, have Japan text label "Overseas sales (NA & EU)"
|
||||
Virtua NBA (prototype) no cart * 21 (64Mb) present 315-6206 317-0271-COM * instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
Virtua NBA (prototype, 15.11) no cart * 21 (64Mb) present 315-6206 317-0271-COM * instead of EPROM have tiny PCB with 2 flashroms on it
|
||||
Virtua Tennis / Power Smash (prototype) no cart * 21 (64Mb) present 315-6206 317-0263-COM * flash-PCB, title screen have label "SOFT R&D Dept.#3", not dumped but known to exist
|
||||
@ -379,7 +381,9 @@ Games known to use this PCB include....
|
||||
Sticker EPROM mask ROMs X76F100 XC9536 315-5881
|
||||
Game on cart IC22# # of SOP44 IC37# IC41# IC42# Notes
|
||||
------------------------------------------------------------------------------------------------------------------------------
|
||||
18 Wheeler (deluxe) (Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM
|
||||
18 Wheeler (deluxe) ? 22185 20 (64Mb) ? ? ?
|
||||
18 Wheeler (deluxe, Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM
|
||||
18 Wheeler (deluxe, Rev T) ? 22185T 20 (64Mb) ? ? ?
|
||||
18 Wheeler (standard) 840-0036C 23298 20 (64Mb) present 315-6213 317-0273-COM
|
||||
18 Wheeler (upright) 840-0037C 23299 20 (64Mb) present 315-6213 317-0273-COM
|
||||
Airline Pilots (World, Rev B) ? 21787B 11 (64Mb) present 315-6213 317-0251-COM 2 known BIOS 21801 (USA), 21802 (EXP)
|
||||
@ -391,16 +395,17 @@ Dead Or Alive 2 (Rev A) 841-0003C 22121A 21 (64Mb)
|
||||
Dead Or Alive 2 841-0003C-01 22207 21 (64Mb) present 315-6213 317-5048-COM have unlocked Tag and Survival game modes, possible USA or international release
|
||||
Dead Or Alive 2 Millennium 841-0003C DOA2 Ver.M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
|
||||
Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM
|
||||
Death Crimson OX 841-0016C 23524A 10 (64Mb) present 315-6213 317-5066-COM cart case had no revision label
|
||||
Death Crimson OX (Rev A) 841-0016C 23524A 10 (64Mb) present 315-6213 317-5066-COM cart case had no revision label
|
||||
Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN
|
||||
Derby Owners Club (Japan) (Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader
|
||||
Derby Owners Club (Japan, Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader
|
||||
Derby Owners Club 2000 (Japan) * 22222 16 (64Mb) present 315-6213 not present * no cart, master unit stickers: 833-13937-01, DOC 4050-01, DOC S. not dumped.
|
||||
Derby Owners Club 2000 Ver.2 (Japan) (Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present
|
||||
Dynamite Baseball '99 (Japan) (Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
|
||||
Derby Owners Club 2000 Ver.2 (Japan, Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present
|
||||
Dynamite Baseball '99 (Japan, Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
|
||||
Dynamite Baseball NAOMI (Japan) 840-0001C 21575 21 (64Mb) ? 315-6213 317-0246-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
|
||||
Ferrari F355 Challenge (deluxe, no link) 834-13842 21902 21 (64Mb) present 315-6213 317-0254-COM BIOS 21862 (JPN), 21863 (USA), 21864 (EXP)
|
||||
Ferrari F355 Challenge (twin/deluxe) 834-13950 22848 21 (64Mb) present 315-6213 317-0267-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP)
|
||||
Ferrari F355 Challenge 2 (twin/deluxe) 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP)
|
||||
/Ferrari F355 Challenge 2 - International
|
||||
\Course Edition (twin/deluxe) 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM BIOS 22849 (JPN), 22850 (USA), 22851 (EXP)
|
||||
Giant Gram: All Japan Pro Wrestling 2 840-0007C 21820 9 (64Mb) ? 315-6213 317-0253-JPN joystick + 3 buttons
|
||||
Guilty Gear X 841-0013C 23356 14 (64Mb) present 315-6213 317-5063-COM
|
||||
Gun Spike 841-0012C 23210 12 (64Mb) present 315-6213 317-5060-COM \same ROM board
|
||||
@ -409,13 +414,15 @@ Heavy Metal Geomatrix (Rev B) HMG016007 23716A 11 (64Mb)
|
||||
Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires mahjong panel
|
||||
Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM
|
||||
Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0274-JPN
|
||||
Marvel Vs. Capcom 2 (USA) (Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM
|
||||
Marvel Vs. Capcom 2 (USA, Rev A) 841-0007C-01 23062A 14 (64Mb) present 315-6213 317-5053-COM
|
||||
OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires regular 837-13551 and 837-13938 rotary JVS boards, and special panel
|
||||
Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons
|
||||
Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons
|
||||
Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? 315-6213 317-5052-COM
|
||||
Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards
|
||||
Samba de Amigo (Rev B) (Rev A) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
|
||||
Ring Out 4x4 ? 21779 10 (64Mb) ? ? ?
|
||||
Ring Out 4x4 (Rev A) 840-0004C 21779A 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards
|
||||
Samba de Amigo (Rev A) 840-0020C 22966A 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
|
||||
Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
|
||||
Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller
|
||||
Sega Strike Fighter (Rev A) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on case
|
||||
Sega Strike Fighter (Rev A, no training mode) 840-0035C 23786A 20 (64Mb) present 315-6213 317-0281-COM have no training mode, "Rev. A" label on PCB, cart case have no revision label
|
||||
@ -425,17 +432,20 @@ Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb)
|
||||
World Series 99 840-0012C 22059 21 (64Mb) ? 315-6213 317-0259-COM \same ROM board
|
||||
Super Major League 99 840-0012C-01 22059 21 (64Mb) ? 315-6213 317-0259-COM /
|
||||
The House of the Dead 2 834-13636 21385 20 (64Mb) not present not present \ ROM board type is 837-13390
|
||||
The House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) not present not present / uses Lattice ispLSI 2032 80LJ instead of Xilinx
|
||||
The House of the Dead 2 (Export) ? 21805 20 (64Mb) ? not present | uses Lattice ispLSI 2032 80LJ instead of Xilinx
|
||||
The House of the Dead 2 (USA) 834-13636-01 21585 20 (64Mb) not present not present /
|
||||
The Typing of the Dead 840-0026C 23021 20 (64Mb) present 315-6213 not present
|
||||
The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present
|
||||
Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
|
||||
Touch de Uno! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
|
||||
Toy Fighter 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons
|
||||
Virtua NBA 840-0021C 22949 21 (64Mb) present 315-6213 317-0271-COM
|
||||
Virtua NBA (USA) 840-0021C-01 23073 21 (64Mb) present 315-6213 not present PCB s/n is 840-0021B-01
|
||||
Virtua Striker 2 Ver. 2000 840-0010C 21929 14 (64Mb) ? ? ?
|
||||
Virtua Striker 2 Ver. 2000 (Rev C) 840-0010C 21929C 14 (64Mb)* present 315-6213 317-0258-COM joystick + 3 buttons *(+1x 32Mb)
|
||||
Virtua Tennis / Power Smash 840-0015C 22927 11 (64Mb) present 315-6213 317-0263-COM
|
||||
Virtual On Oratorio Tangram M.S.B.S. ver5.66 840-0028C 23198 13 (64Mb) ? 315-6213 317-0279-COM
|
||||
Zombie Revenge 840-0003C 21707 19 (64Mb) ? 315-6213 317-0249-COM joystick + 3 buttons
|
||||
Zombie Revenge (Export) ? 21834 19 (64Mb) ? ? ?
|
||||
Zombie Revenge (Rev A) 840-0003C 21707A 19 (64Mb) present 315-6213 317-0249-COM joystick + 3 buttons
|
||||
|
||||
|
||||
@ -477,7 +487,7 @@ Notes:
|
||||
JP6 - JUMPER Unknown function (1-2)
|
||||
SW1 - PUSHBUTTON
|
||||
SW2 - 8X2 DIPswitch
|
||||
SCSI-CTRL - SCSI-II controller MB86604A
|
||||
SCSI-CTRL - SCSI-II controller MB86604A (ic45)
|
||||
CNDB25 - DB-25 SCSI-II connector
|
||||
IC17S-IC38S - Intel DA28F640J5 FlashROM (SOP56), 64Mb.
|
||||
IC16 - EPROM (DIP42), not populated.
|
||||
@ -529,7 +539,7 @@ Notes:
|
||||
On the end of the number, -JPN means it requires Japanese BIOS, -COM will run with any BIOS
|
||||
IC11 - EPROM (DIP42), either 27C160 or 27C322
|
||||
JP1 - JUMPER Sets the size of the EPROM. 1-2 = 32M, 2-3 = 16M
|
||||
IC13S - EEPROM (SOIC8) 25LC040 serial EEPROM
|
||||
IC13S - EEPROM (SOIC8) 25LC040 serial EEPROM (on PCB etched as AT25010)
|
||||
IC14 - 256 x 9 AsyncFIFO, 5.0V (SOP28)
|
||||
IC15 - SRAM (SOJ28) 32kx8, IDT71256
|
||||
IC17S-IC38S - MaskROM (SOP44), either 32Mb or 64Mb. Not all positions are populated
|
||||
@ -540,25 +550,27 @@ from NAOMI side it read as X76F100-type, probably simulated by ACTEL FPGA.
|
||||
Actual data is shuffled, address bits 3 to 6 have reversed order, i.e. 8 7 3 4 5 6 2 1 0.
|
||||
|
||||
Games known to use this PCB include....
|
||||
Sticker EPROM mask ROMs 25LC040 A54SX32
|
||||
Game on cart IC11# # of SOP44 IC13S# IC1# Notes
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Club Kart: European Session (2003, Rev A) 840-0139C 24173A 18 (64Mb) present 317-0382-COM
|
||||
Club Kart Prize (Rev A) 840-0129C 24082A 16 (64Mb) present 317-0368-COM requires Naomi-based hopper controller (Naomi bd + 840-0130 cart + 837-14381 "G2 EXPANSION BD")
|
||||
Club Kart Prize Version B 840-0137C 24149 16 (64Mb) present 317-0368-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
|
||||
Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM
|
||||
Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller
|
||||
Marvel Vs. Capcom 2 New Age of Heroes (Export) (Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
|
||||
Marvel Vs. Capcom 2 New Age of Heroes (Korea) (Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
|
||||
MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN
|
||||
Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards
|
||||
Shootout Pool Prize / Shootout Pool The Medal (Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller
|
||||
Shootout Pool Prize Ver. B / Shootout Pool The Medal Ver. B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
|
||||
SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM reused VF4 Evo ROM board with all maskroms still in place; there is an additional 837-14381 IO board
|
||||
Touch de UNO! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
|
||||
Virtua Fighter 4 Evolution 840-0106B 23934 20 (64Mb) present 317-0339-COM
|
||||
Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM
|
||||
Sticker EPROM mask ROMs 25LC040 A54SX32
|
||||
Game on cart IC11# # of SOP44 IC13S# IC1# Notes
|
||||
------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Club Kart: European Session (2003, Rev A) 840-0139C 24173A 18 (64Mb) present 317-0382-COM
|
||||
Club Kart Prize (Export, Japan, Rev A) 840-0129C 24082A 16 (64Mb) present 317-0368-COM requires Naomi-based hopper controller (Naomi bd + 840-0130 cart + 837-14381 "G2 EXPANSION BD")
|
||||
Club Kart Prize Version B (Export, Japan) 840-0137C 24149 16 (64Mb) present 317-0368-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
|
||||
Giant Gram 2000 840-0039C 23377 20 (64Mb) present 317-0296-COM
|
||||
Kick '4' Cash 840-0140C 24212 16 (64Mb) present 317-0397-COM requires 837-14438 "SH I/O BD" hopper controller
|
||||
Marvel Vs. Capcom 2 New Age of Heroes (Export, Rev A) 841-0007C-02 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
|
||||
Marvel Vs. Capcom 2 New Age of Heroes (Korea, Rev A) 841-0007C-03 23085A 14 (64Mb)* present 317-5058-COM *(+2x 32Mb) have factory wire-mod connecting IC13S serial EEPROM CLK pin to IC11 ROM /OE pin
|
||||
MushiKing The King of Beetles 2K3 2ND 840-0150C 24217 6 (64Mb) present 317-0394-COM requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
Quiz Ah Megamisama 840-0030C 23227 16 (64Mb) present 317-0280-JPN
|
||||
Shootout Pool 840-0098C 23844 4 (64Mb) present 317-0336-COM requires regular 837-13551 and 837-13938 rotary JVS boards
|
||||
/Shootout Pool Prize (Export) /
|
||||
\Shootout Pool The Medal (Japan, Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller
|
||||
/Shootout Pool Prize (Export) /
|
||||
\Shootout Pool The Medal (Japan) Version B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller (selected by P1 BUTTON1 bit)
|
||||
SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM reused VF4 Evo ROM board with all maskROMs still in place; there is an additional 837-14381 IO board
|
||||
Touch de Uno! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
|
||||
Virtua Fighter 4 Evolution (World) 840-0106B 23934 20 (64Mb) present 317-0339-COM
|
||||
Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM
|
||||
|
||||
|
||||
PFSB 128M Mask ROM board
|
||||
@ -602,10 +614,11 @@ Capcom Vs. SNK Millennium Fight 2000 841-0011C 23511 7 (128Mb) 3
|
||||
Capcom Vs. SNK Millennium Fight 2000 (Rev A) 841-0011C 23511A 7 (128Mb) 315-6219 315-6213 317-5059-COM ? Date on screen: 000804
|
||||
Capcom Vs. SNK Millennium Fight 2000 (Rev C) 841-0011C 23511C 7 (128Mb) 315-6319 315-6213 317-5059-COM ? Date on screen: 000904
|
||||
Club Kart: European Session 840-0062C 23704 11 (128Mb) 315-6319A 315-6213 317-0313-COM present
|
||||
Club Kart: European Session (Rev C) 840-0062C * 11 (128Mb) 315-6319A 315-6213 317-0313-COM present * EPR have handwritten Japanese label possibly readable as 'teteto 74 lcl'
|
||||
Club Kart: European Session (Rev A) 840-0062C * 11 (128Mb) 315-6319A 315-6213 317-0313-COM present * EPR have handwritten Japanese label possibly readable as 'teteto 74 lcl'
|
||||
Club Kart: European Session (Rev C) ? 23704C 11 (128Mb) ? ? ? ?
|
||||
Club Kart: European Session (Rev D) 840-0062C 23704D 11 (128Mb) 315-6319A 315-6213 317-0313-COM present
|
||||
Crackin' DJ 840-0043C 23450 10 (128Mb) 315-6319 315-6213 317-0288-COM ? requires regular 837-13551 and 837-13938 rotary JVS boards, and turntable simulation
|
||||
Derby Owners Club II Ver.2.1 (Japan) (Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A 315-6213 317-0327-JPN present
|
||||
Derby Owners Club II Ver.2.1 (Japan, Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A 315-6213 317-0327-JPN present
|
||||
Derby Owners Club World Edition (Rev B) 840-0088C 22336B 7 (128Mb) 315-6319A 315-6213 not present present
|
||||
Derby Owners Club World Edition (Rev C) 840-0088C 22336C 7 (128Mb) 315-6319A 315-6213 not present not present
|
||||
Derby Owners Club World Edition EX (Rev D) 840-0088C 22336D 7 (128Mb) 315-6319A 315-6213 not present not present 2 MaskROM are different from Rev C
|
||||
@ -614,19 +627,19 @@ Mobile Suit Gundam: Federation Vs. Zeon 841-0017C 23638 10 (128Mb) 3
|
||||
Moero! Justice Gakuen / Project Justice (Rev A) 841-0015C 23548A 11 (128Mb) 315-6319A 315-6213 317-5065-COM present
|
||||
MushiKing The King Of Beetles 2004 Second (Jpn) 840-0152C 24241 5 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader
|
||||
MushiKing The King Of Beetles 2005 First (Jpn) 840-0158C 24286 7 (128Mb) 315-6319A 315-6213 not present not present requires 610-0669 barcode reader
|
||||
Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A 315-6213 not present not present requires 837-14274 "G2 EXPANSION BD" (similar to hopper 837-14381 but with ARC NET chip)
|
||||
Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A 315-6213 not present not present no cart, requires 837-14274 "G2 EXPANSION BD" (similar to hopper 837-14381 but with ARC NET chip)
|
||||
Samba de Amigo Ver. 2000 840-0047C 23600 11 (128Mb) 315-6319A 315-6213 317-0295-COM ?
|
||||
Star Horse (main screens) 840-0054C 23625 4 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse (satellite) 840-0056C 23627 6 (128Mb)* 315-6319 315-6213 not present present * +1 (64Mb), requires 837-13785 ARCNET&IO BD
|
||||
Star Horse 2001 (satellite) (Rev B) 840-0078B 23739B 7 (128Mb) 315-6319 315-6213 not present present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse 2001 (satellite, Rev B) 840-0078B 23739B 7 (128Mb) 315-6319A 315-6213 not present present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse Progress (main screen, Rev B) 840-0120B 24087B 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse Progress (sound & backup, Rev A) 840-0121B 24097A 6 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse Progress (live, Rev A) 840-0122B 24107A 11 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
|
||||
Star Horse Progress (satellite, Rev A) 840-0123B 24122A 7 (128Mb) 315-6319A 315-6213 not present not present requires 837-13785 ARCNET&IO BD
|
||||
The King of Route 66 (Rev A) 840-0087C 23819A 10 (128Mb) 315-6319A 315-6213 not present present
|
||||
Virtua Fighter 4 840-0080C 23785 11 (128Mb) ? ? 317-0324-COM ?
|
||||
Virtua Striker 3 840-0061C 23663 11 (128Mb) 315-6319A 315-6213 317-0310-COM ?
|
||||
Virtua Striker 3 (Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A 315-6213 317-0310-COM present
|
||||
Virtua Fighter 4 (World) 840-0080C 23785 11 (128Mb) ? ? 317-0324-COM ?
|
||||
Virtua Striker 3 (World) 840-0061C 23663 11 (128Mb) 315-6319A 315-6213 317-0310-COM present
|
||||
Virtua Striker 3 (World, Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A 315-6213 317-0310-COM present
|
||||
Wave Runner GP 840-0064C 24059 6 (128Mb) 315-6319A 315-6213 not present present
|
||||
Wild Riders 840-0046C 23622 10 (128Mb) 315-6319A 315-6213 317-0301-COM ?
|
||||
WWF Royal Rumble 840-0040C 22261 8 (128Mb) 315-6319 315-6213 317-0285-COM ?
|
||||
@ -667,20 +680,23 @@ Notes:
|
||||
CN4 - 6 legs connector for ISP programming
|
||||
|
||||
Games known to use this PCB include....
|
||||
Sticker EPROM FLASHROMs XC3S50 PIC16C621A XCF01S
|
||||
Game on cart IC7# # of SOP56 IC2# IC3# IC4# Notes
|
||||
Sticker EPROM FLASHROMs XC3S50 PIC16C621A XCF01S
|
||||
Game on cart IC7# # of SOP56 IC2# IC3# IC4# Notes
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Akatsuki Blitzkampf Ausf. Achse 841-0058C not present 4 (512Mb) present 317-5130-JPN present IC2# is labeled "VER.2" - IC4# is marked "5A" - IC#10 & IC#11 are empty
|
||||
Dynamite Deka EX / Asian Dynamite 840-0175C not present 4 (512Mb) present 317-0495-COM present IC2# is labeled "VER.2"
|
||||
Dynamite Deka EX / Asian Dynamite (older) 840-0175C not present 4 (512Mb) present 317-0495-COM present 2x PCBs dumped, 840-0175B and 840-0168B, contents is the same.
|
||||
Asian Dynamite / Dynamite Deka EX 840-0175C not present 4 (512Mb) present 317-0495-COM present IC2# is labeled "VER.2"
|
||||
Asian Dynamite / Dynamite Deka EX (older) 840-0175C not present 4 (512Mb) present 317-0495-COM present 2x PCBs dumped, 840-0175B and 840-0168B, contents is the same.
|
||||
Illvelo (Illmatic Envelope) 841-0059C not present 4 (512Mb) present 317-5131-JPN present IC2# is labeled "VER.2" - IC#11 is empty
|
||||
Mamoru-kun wa Norowarete Shimatta 841-0060C not present 4 (512Mb) present 317-5132-JPN present IC2# is labeled "VER.2"
|
||||
Manic Panic Ghost! (USA) 840-0170C-01 not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based) - PCB s/n is 840-0170B-01
|
||||
Melty Blood Actress Again 841-0061C not present 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A"
|
||||
Melty Blood Actress Again (Japan) 841-0061C not present 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A"
|
||||
Melty Blood Actress Again Version A (Rev A) 841-0061C 24455 6 (512Mb) present 317-5133-JPN present IC2# is labeled "REV.A" - IC4# is marked "5A"
|
||||
Mushiking - The King Of Beetles II ENG (Ver. 1.001) 840-0164C not present 2 (512Mb) present 317-0437-COM present requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
Mushiking - The King Of Beetles II ENG (Ver. 2.001) 840-0164C 24357 2 (512Mb) present 317-0437-COM present IC4# is marked "18"
|
||||
Mushiking - The King Of Beetles IV ENG 840-0180C not present 2 (512Mb) present 317-0437-COM present IC2# is labeled "VER.1", IC4# is marked "8A", requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
/Mushiking The King Of Beetles
|
||||
\Mushiking II / III / III+ (Ver. 1.001) (World) 840-0164C not present 2 (512Mb) present 317-0437-COM present requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
/Mushiking The King Of Beetles
|
||||
\Mushiking II / III / III+ (Ver. 2.001) (World) 840-0164C 24357 2 (512Mb) present 317-0437-COM present IC4# is marked "18"
|
||||
/Mushiking The King Of Beetles
|
||||
\Mushiking IV / V / VI (World) 840-0180C not present 2 (512Mb) present 317-0437-COM present IC2# is labeled "VER.1", IC4# is marked "8A", requires 610-0669 barcode reader, 838-14245-92 "MAPLE/232C CONVERT BD" (MIE-based), 838-14243 "RFID CHIP R/W BD" and RFID chip
|
||||
Pokasuka Ghost! 840-0170C not present 5 (512Mb) present 317-0461-COM present requires 837-14672 sensor board (SH4 based)
|
||||
Radirgy Noa 841-0062C not present 4 (512Mb) present 317-5138-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A"
|
||||
Rhythm Tengoku 841-0177C not present 4 (512Mb) present 317-0503-JPN present IC2# is labeled "VER.2" - IC4# is marked "8A"
|
||||
@ -730,22 +746,23 @@ Notes:
|
||||
CN1/2/3 - connectors joining to main board
|
||||
|
||||
Games known to use this PCB include....
|
||||
Cart Sticker FL0-FL3 FLASHROMs X76F100 EPM7064 EPM7064 315-5881 Known Game
|
||||
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 1H IC @ 2K IC @ 1M code (1) Notes
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Cart Sticker FL0-FL3 FLASHROMs X76F100 EPM7064 EPM7064 315-5881 Known Game
|
||||
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 1H IC @ 2K IC @ 1M code (1) Notes
|
||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
/Gun Survivor 2 Biohazard
|
||||
\Code: Veronica (Japan, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF1 uses Namco FCA JVS I/O (not dumped), will crash if COMM.BOARD not present
|
||||
\Code: Veronica (Japan, BHF1 Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF1 uses Namco FCA JVS I/O (not dumped), will crash if COMM.BOARD not present
|
||||
/Gun Survivor 2 Biohazard
|
||||
\Code: Veronica (World, Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF2
|
||||
/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 PCB (World, WKC2 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC2
|
||||
World Kicks (Japan, WK1 Ver.A) F2 25209801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1A 317-5040-COM WK1
|
||||
World Kicks (World, 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
|
||||
\Code: Veronica (World, BHF2 Ver.E) F1X 25709801 1 (64Mb) 14 (128Mb) not present NAODEC2A NAODEC1B 317-5075-COM BHF2
|
||||
/Shin Nihon Prowrestling Toukon Retsuden 4 /FL0 & FL1 have pin55 raised from PCB.
|
||||
\Arcade Edition (Japan, TRF1 Ver.A) F2X 25349801 2 (64Mb) 15 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM TRF1 \They are connected together and go to pin89 on 2K.
|
||||
World Kicks PCB (Japan, WKC1 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC1 uses Namco V226 JVS I/O (not dumped)
|
||||
World Kicks PCB (World, WKC2 Ver.A) F2 25509801 2 (64Mb) 9 (128Mb) not present NAODEC2A NAODEC1B 317-5040-COM WKC2 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
|
||||
World Kicks (World, 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
|
||||
|
||||
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World.
|
||||
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = World, 3 = US, 4 = Asia.
|
||||
real meaning of 2 and 4 is not clear, it can be like "some other part of World", also possible Europe
|
||||
|
||||
|
||||
MASK C (C) Namco 2000
|
||||
@ -786,17 +803,18 @@ Notes:
|
||||
CN1/2/3 - connectors joining to main board
|
||||
|
||||
Games known to use this PCB include....
|
||||
Cart Sticker FL0-FL3 FLASHROMs X76F100 CY37128 315-5881 Known Game
|
||||
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 2J IC @ 1M code (1) Notes
|
||||
Cart Sticker FL0-FL3 FLASHROMs X76F100 CY37128 315-5881 Known Game
|
||||
Game Type on cart FLASHROM # of SOP48 IC @ 1F IC @ 2J IC @ 1M code (1) Notes
|
||||
----------------------------------------------------------------------------------------------------------------------------------------
|
||||
Mazan: Flash of the Blade (World, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ2 uses 2x Namco FCB JVS I/O (not dumped)
|
||||
Mazan: Flash of the Blade (US, Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ3
|
||||
Ninja Assault (Japan, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA1 uses Namco JYU JVS I/O
|
||||
Ninja Assault (World, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA2
|
||||
Ninja Assault (US, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA3
|
||||
Ninja Assault (Asia, Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA4
|
||||
Mazan: Flash of the Blade (World, MAZ2 Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ2 uses 2x Namco FCB JVS I/O (not dumped)
|
||||
Mazan: Flash of the Blade (US, MAZ3 Ver.A) F1X 25869812 1 (64Mb) 8 (128Mb) present NAODEC3 317-0266-COM MAZ3
|
||||
Ninja Assault (Japan, NJA1 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA1 uses Namco JYU JVS I/O
|
||||
Ninja Assault (World, NJA2 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA2
|
||||
Ninja Assault (US, NJA3 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA3
|
||||
Ninja Assault (Asia, NJA4 Ver.A) F3 25469801 3 (64Mb) 9 (128Mb) present NAODEC3 317-5068-COM NJA4
|
||||
|
||||
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = Asia, 3 = US, 4 = World.
|
||||
(1) note: the number in the game code has the following meaning: 1 = Japan, 2 = World, 3 = US, 4 = Asia.
|
||||
real meaning of 2 and 4 is not clear, it can be like "some other part of World", also possible Europe
|
||||
|
||||
Note! Generally, games that require a special I/O board or controller will not boot at all with a
|
||||
standard NAOMI I/O board. Usually they display a message saying the I/O board is not acceptable
|
||||
@ -5487,7 +5505,7 @@ ROM_START( 18wheelro )
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "2807cf54" )
|
||||
ROM_END
|
||||
|
||||
/* 18 Wheeler (deluxe) (Rev A) */
|
||||
/* 18 Wheeler (deluxe, Rev A) */
|
||||
ROM_START( 18wheelr )
|
||||
NAOMI_BIOS
|
||||
NAOMI_DEFAULT_EEPROM
|
||||
@ -5531,7 +5549,7 @@ ROM_START( 18wheelr )
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "2807cf54" )
|
||||
ROM_END
|
||||
|
||||
/* 18 Wheeler (deluxe) (Rev T) */
|
||||
/* 18 Wheeler (deluxe, Rev T) */
|
||||
ROM_START( 18wheelrt )
|
||||
NAOMI_BIOS
|
||||
NAOMI_DEFAULT_EEPROM
|
||||
@ -6085,6 +6103,9 @@ ROM_START( qmegamis )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0030 2000 317-0280-JPN Naomi
|
||||
ROM_PARAMETER( ":rom_board:key", "cd9b4896" )
|
||||
ROM_END
|
||||
@ -6246,6 +6267,9 @@ ROM_START( shootopl )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0098 2002 317-0336-COM Naomi
|
||||
ROM_PARAMETER( ":rom_board:key", "a0f37ca7" )
|
||||
ROM_END
|
||||
@ -6285,6 +6309,9 @@ ROM_START( shootplm )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0136 2002 317-0367-COM Naomi
|
||||
ROM_PARAMETER( ":rom_board:key", "9dbde9cd" )
|
||||
ROM_END
|
||||
@ -7507,6 +7534,9 @@ ROM_START( vtenis2c )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0084 2001 317-0320-COM Naomi
|
||||
ROM_PARAMETER( ":rom_board:key", "2d2d4743" )
|
||||
ROM_END
|
||||
@ -9589,6 +9619,9 @@ ROM_START( vf4evoct )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0106 2002 317-0339-COM Naomi 2
|
||||
ROM_PARAMETER( ":rom_board:key", "1e5bb0cd" )
|
||||
ROM_END
|
||||
@ -9793,6 +9826,9 @@ ROM_START( clubk2k3 )
|
||||
|
||||
ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 )
|
||||
|
||||
/* ROM_REGION(0x200, "some_eeprom", 0)
|
||||
ROM_LOAD( "25lc040.ic13s", 0x000, 0x200, NO_DUMP ) */
|
||||
|
||||
// 840-0139 2003 317-0382-COM Naomi 2
|
||||
ROM_PARAMETER( ":rom_board:key", "d8b0fa4c" )
|
||||
ROM_END
|
||||
@ -9803,7 +9839,7 @@ ROM_START( clubk2kp )
|
||||
NAOMI_DEFAULT_EEPROM
|
||||
|
||||
ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(1e601d98) SHA1(70d244c1b7cde236d833585b8d2064ba6d727825) ) // flash ROM module
|
||||
ROM_LOAD( "ic22.bin", 0x0000000, 0x400000, CRC(334fc561) SHA1(e8c8707b0d13216ec7071da05823e330deb810d4) ) // flash ROM module
|
||||
// game data ROMs not dumped, not the same as regular revision. technically, all below should be marked as NO_DUMP.
|
||||
ROM_LOAD32_WORD( "opr-24151.ic17s", 0x1000000, 0x800000, CRC(91594439) SHA1(a195bfe0c70a0c7048b547af0a92c98d126230c6) )
|
||||
ROM_LOAD32_WORD( "opr-24152.ic18", 0x1000002, 0x800000, CRC(fd131f88) SHA1(bc27b3ab5b41a3fe33b541b7cca28d6baed157b3) )
|
||||
@ -10721,7 +10757,7 @@ ROM_START( ggisuka )
|
||||
|
||||
ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
|
||||
ROM_LOAD( "ax1201p01.ic18", 0x0000000, 0x0800000, CRC(0a78d52c) SHA1(e9006dc43cd11d5ba49a092a1dff31dc10700c28) )
|
||||
ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) ) // 2x mirrored 8MB data, TODO: check is IC10 Mask ROM not 16MB but 8MB
|
||||
ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) ) // 2x mirrored 8MB data, TODO: check if IC10 mask ROM not 16MB but 8MB
|
||||
ROM_LOAD( "ax1202m01.ic11", 0x1000000, 0x1000000, CRC(dfc6fd67) SHA1(f9d35b18a03d22f70feda42d314b0f9dd54eea55) )
|
||||
ROM_LOAD( "ax1203m01.ic12", 0x2000000, 0x1000000, CRC(bf623df9) SHA1(8b9a8e8100ff6d2ce9a982ab8eb1d542f1c7af03) )
|
||||
ROM_LOAD( "ax1204m01.ic13", 0x3000000, 0x1000000, CRC(c80c3930) SHA1(5c39fde36e2ebbfe72967d7d0202eb454a8d3bbe) )
|
||||
@ -11086,8 +11122,8 @@ ROM_END
|
||||
/* 0021-01 */ GAME( 2000, virnba, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua NBA (USA)", GAME_FLAGS )
|
||||
/* 0022 */ GAME( 2000, tduno2, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Touch de Uno! 2 (Japan)", GAME_FLAGS )
|
||||
/* 0023 */ GAME( 2000, 18wheelro, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe)", GAME_FLAGS )
|
||||
/* 0023 */ GAME( 2000, 18wheelr, naomi, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe) (Rev A)", GAME_FLAGS )
|
||||
/* 0023 */ GAME( 2000, 18wheelrt, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe) (Rev T)", GAME_FLAGS )
|
||||
/* 0023 */ GAME( 2000, 18wheelr, naomi, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe, Rev A)", GAME_FLAGS )
|
||||
/* 0023 */ GAME( 2000, 18wheelrt, 18wheelr, naomim2, 18wheelr,naomi_state, init_naomi, ROT0, "Sega", "18 Wheeler (deluxe, Rev T)", GAME_FLAGS )
|
||||
/* 0025 */ GAME( 1999, marstv, naomi, naomim2, marstv, naomi_state, init_naomi, ROT0, "Sega", "Mars TV (Japan)", GAME_FLAGS )
|
||||
/* 0026 */ GAME( 2000, totdo, totd, naomim2_kb, naomi_kb, naomi_state, init_naomi, ROT0, "Sega", "The Typing of the Dead", GAME_FLAGS )
|
||||
/* 0026 */ GAME( 2000, totd, naomi, naomim2_kb, naomi_kb, naomi_state, init_naomi, ROT0, "Sega", "The Typing of the Dead (Rev A)", GAME_FLAGS )
|
||||
@ -11117,7 +11153,7 @@ ROM_END
|
||||
/* 0064 */ GAME( 2001, wrungpo, wrungp, naomim2, naomi, naomi_state, init_naomi, ROT0, "CRI / Sega", "Wave Runner GP (USA, Rev A)", GAME_FLAGS )
|
||||
/* 0064 */ GAME( 2001, wrungp, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "CRI / Sega", "Wave Runner GP", GAME_FLAGS )
|
||||
/* 0068 */ GAME( 2001, crakndj2, naomi, naomim2, crackndj,naomi_state, init_naomi, ROT0, "Sega", "Crackin' DJ Part 2 (Japan)", GAME_FLAGS )
|
||||
/* 0073 */ GAME( 2001, inunoos, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega / Cave", "Inu No Osanpo / Dog Walking (Japan, Export, Rev A)", GAME_FLAGS )
|
||||
/* 0073 */ GAME( 2001, inunoos, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Wow Entertainment / Sega", "Inu No Osanpo / Dog Walking (Japan, Export, Rev A)", GAME_FLAGS )
|
||||
/* 0078 */ GAME( 2002, shors2k1, naomi, naomim2, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse 2001 (satellite, Rev B)", GAME_FLAGS )
|
||||
/* 0083 */ GAME( 2001, derbyoc2, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Derby Owners Club II Ver.2.1 (Japan, Rev B)", GAME_FLAGS )
|
||||
/* 0084 */ GAME( 2001, vtenis2c, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (Rev A)", GAME_FLAGS )
|
||||
@ -11130,7 +11166,7 @@ ROM_END
|
||||
/* 0122 */ GAME( 2003, shorsepl, shorsep, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Star Horse Progress (live, Rev A)", GAME_FLAGS )
|
||||
/* 0123 */ GAME( 2003, shorsep, naomi, naomim2, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse Progress (satellite, Rev A)", GAME_FLAGS )
|
||||
/* 0126 */ GAME( 2003, oinori, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Oinori-daimyoujin Matsuri", GAME_FLAGS )
|
||||
/* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) (Rev A)", GAME_FLAGS )
|
||||
/* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, init_naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS )
|
||||
// 0132 Mushiking 2K3 2ND (Japan)
|
||||
/* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004
|
||||
@ -11145,41 +11181,41 @@ ROM_END
|
||||
/* 0166 */ GAME( 2006, zunou, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Touch De Zunou (Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0170-01 */ GAME( 2007, manicpnc, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Manic Panic Ghosts! (USA, Export)", GAME_FLAGS )
|
||||
/* 0170 */ GAME( 2007, pokasuka, manicpnc, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Pokasuka Ghost! (Japan)", GAME_FLAGS )
|
||||
// 0171 Mushiking 2K6 2ND (Japan)
|
||||
// 0171 Mushiking 2K6 2ND (Japan) note: starting from ver 2K6 was moved to SystemSP platform and later to PC-based hardware
|
||||
/* 0175 */ GAME( 2007, asndynmt, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Asian Dynamite / Dynamite Deka EX", GAME_FLAGS )
|
||||
/* 0175 */ GAME( 2007, asndynmto, asndynmt, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Asian Dynamite / Dynamite Deka EX (older)", GAME_FLAGS ) // no revision stickers, presumably older revision but might be release for Asian market
|
||||
/* 0177 */ GAME( 2007, rhytngk, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega / Nintendo - J.P ROOM", "Rhythm Tengoku (Japan)", GAME_FLAGS )
|
||||
/* 0180 */ GAME( 2007, mushik4e, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetles - Mushiking IV / V / VI (World)", GAME_FLAGS ) // not for Japan or Korea, version can be changed in secret menu, ~equivalent of Japanese 2K6 versions.
|
||||
/* 0186 */ GAME( 2009, shorsepr, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"Sega", "Star Horse Progress Returns (satellite)", GAME_FLAGS )
|
||||
// 0xxx Mushiking 2K3 1ST (Japan)
|
||||
// 0xxx Mushiking 2K4 1ST (Japan)
|
||||
// 0xxx Mushiking 2K5 2ND (Japan) note: starting from ver 2K6 2ND was moved to SystemSP platform and later to PC-based hardware
|
||||
// 00xx Mayjinsen (Formation Battle in May) - prototype, never released
|
||||
// 01xx Mushiking 2K3 1ST (Japan)
|
||||
// 01xx Mushiking 2K4 1ST (Japan)
|
||||
// 01xx Mushiking 2K5 2ND (Japan)
|
||||
// 0xxx Star Horse 2001 (main screens, server)
|
||||
// 0xxx Star Horse 2002 (whole set)
|
||||
// 0xxx Star Horse Progress Returns (main screens, server)
|
||||
// 00xx Mayjinsen (Formation Battle in May) - prototype, never released
|
||||
|
||||
/* Cartridge prototypes of games released on GD-ROM */
|
||||
/* none */ GAME( 2003, puyofevp, puyofev, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Puyo Puyo Fever (prototype ver 0.01)", GAME_FLAGS )
|
||||
/* none */ GAME( 2001, vathletep, vathlete, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Virtua Athletics / Virtua Athlete (prototype)", GAME_FLAGS )
|
||||
|
||||
/* 840-xxxxx (Sega Naomi 2 cart games) */
|
||||
/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Wild Riders", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan
|
||||
/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrta, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev A)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS )
|
||||
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* none */ GAME( 2002, kingrt66p,kingrt66,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (prototype)", GAME_FLAGS )
|
||||
/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS )
|
||||
/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS )
|
||||
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan)", GAME_FLAGS )
|
||||
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS )
|
||||
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS )
|
||||
/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS )
|
||||
/* 0046 */ GAME( 2001, wldrider, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Wow Entertainment / Sega", "Wild Riders", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2001, vstrik3co,vstrik3c,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Amusement Vision / Sega", "Virtua Striker 3 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0061 */ GAME( 2001, vstrik3c, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Amusement Vision / Sega", "Virtua Striker 3 (World, Rev B)", GAME_FLAGS ) // not for Japan
|
||||
/* 0062 */ GAME( 2001, clubkrto, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrta, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev A)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrtc, clubkrt, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2001, clubkrt, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS )
|
||||
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (World)", GAME_FLAGS ) // not for Japan
|
||||
/* none */ GAME( 2002, kingrt66p,kingrt66,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (prototype)", GAME_FLAGS )
|
||||
/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "The King of Route 66 (Rev A)", GAME_FLAGS )
|
||||
/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS )
|
||||
/* 0106 */ GAME( 2002, vf4evoct, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (World)", GAME_FLAGS ) // not for Japan
|
||||
/* 0129 */ GAME( 2003, clubkprz, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize (Export, Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart Prize Version B (Export, Japan)", GAME_FLAGS )
|
||||
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, Rev A)", GAME_FLAGS )
|
||||
/* none */ GAME( 2003, clubk2kp, clubk2k3,naomi2m2, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS )
|
||||
|
||||
/* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/
|
||||
/* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Capcom", "Power Stone", GAME_FLAGS )
|
||||
@ -11209,9 +11245,9 @@ ROM_END
|
||||
/* 0058 */ GAME( 2008, ausfache, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Subtle Style", "Akatsuki Blitzkampf Ausf. Achse (Japan)", GAME_FLAGS )
|
||||
/* 0059 */ GAME( 2008, illvelo, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"Milestone", "Illvelo (Illmatic Envelope) (Japan)", GAME_FLAGS )
|
||||
/* 0060 */ GAME( 2008, mamonoro, naomi, naomim4, naomi, naomi_state, init_naomi, ROT270,"G.Rev", "Mamoru-kun wa Norowarete Shimatta! (Japan)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2008, mbaao, mbaa, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon/Ecole", "Melty Blood Actress Again (Japan)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2008, mbaa, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon/Ecole", "Melty Blood Actress Again Version A (Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2009, radirgyn, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Milestone/Lucky", "Radirgy Noa (Japan)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2008, mbaao, mbaa, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon / Ecole", "Melty Blood Actress Again (Japan)", GAME_FLAGS )
|
||||
/* 0061 */ GAME( 2008, mbaa, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Type-Moon / Ecole", "Melty Blood Actress Again Version A (Japan, Rev A)", GAME_FLAGS )
|
||||
/* 0062 */ GAME( 2009, radirgyn, naomi, naomim4, naomi, naomi_state, init_naomi, ROT0, "Milestone / Lucky", "Radirgy Noa (Japan)", GAME_FLAGS )
|
||||
/* HMG016007 */ GAME( 2001, hmgeo, naomi, naomim2, naomi, naomi_state, init_naomi, ROT0, "Capcom", "Heavy Metal Geomatrix (Rev B)", GAME_FLAGS )
|
||||
|
||||
/* Cart games on Namco custom ROM board
|
||||
@ -11251,13 +11287,13 @@ ROM_END
|
||||
// 0009 Dynamic Golf / Virtua Golf (GDS-0009)
|
||||
/* 0009A */ GAME( 2001, dygolf, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Golf / Dynamic Golf (Rev A) (GDS-0009A)", GAME_FLAGS )
|
||||
/* 0010 */ GAME( 2001, wsbbgd, naomigd, naomigd, dybbnao, naomi_state, init_naomigd, ROT0, "Sega", "World Series Baseball / Super Major League (GDS-0010)", GAME_FLAGS )
|
||||
/* 0011 */ GAME( 1999, vtennisg, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis / Power Smash (GDS-0011)", GAME_FLAGS )
|
||||
/* 0011 */ GAME( 2001, vtennisg, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis / Power Smash (GDS-0011)", GAME_FLAGS )
|
||||
/* 0012 */ GAME( 2001, vf4o, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (GDS-0012)", GAME_FLAGS )
|
||||
// 0012A Virtua Fighter 4 (Rev A) (GDS-0012A)
|
||||
/* 0012B */ GAME( 2001, vf4b, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev B) (GDS-0012B)", GAME_FLAGS )
|
||||
/* 0012C */ GAME( 2001, vf4, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Version C (GDS-0012C)", GAME_FLAGS )
|
||||
/* 0012B */ GAME( 2001, vf4b, vf4, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 (Rev B) (GDS-0012B)", GAME_FLAGS )
|
||||
/* 0012C */ GAME( 2001, vf4, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Version C (GDS-0012C)", GAME_FLAGS )
|
||||
/* 0013 */ GAME( 2001, shaktmsp, naomigd, naomigd, shaktamb, naomi_state, init_naomigd, ROT0, "Sega", "Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR) (GDS-0013)", GAME_FLAGS )
|
||||
/* 0014 */ GAME( 2001, beachspi, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Beach Spikers (GDS-0014)", GAME_FLAGS )
|
||||
/* 0014 */ GAME( 2001, beachspi, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "CRI / Sega", "Beach Spikers (GDS-0014)", GAME_FLAGS )
|
||||
// 0015 Virtua Tennis 2 / Power Smash 2 (GDS-0015)
|
||||
/* 0015A */ GAME( 2001, vtennis2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A)", GAME_FLAGS )
|
||||
/* 0016 */ GAME( 2001, shaktamb, naomigd, naomigd, shaktamb, naomi_state, init_naomigd, ROT0, "Sega", "Shakatto Tambourine Cho Powerup Chu (2K1 AUT) (GDS-0016)", GAME_FLAGS )
|
||||
@ -11266,8 +11302,8 @@ ROM_END
|
||||
/* 0018A */ GAME( 2001, lupinsho, naomigd, naomigd, hotd2, naomi_state, init_naomigd, ROT0, "Sega / Eighting", "Lupin The Third - The Shooting (Rev A) (GDS-0018A)", GAME_FLAGS )
|
||||
/* 0019 */ GAME( 2001, vathlete, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Virtua Athletics / Virtua Athlete (GDS-0019)", GAME_FLAGS )
|
||||
/* 0020 */ GAME( 2002, initdo, initd, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Japan) (GDS-0020)", GAME_FLAGS )
|
||||
// 0020A Initial D Arcade Stage (Rev A) (GDS-0020A)
|
||||
/* 0020B */ GAME( 2002, initd, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B)", GAME_FLAGS )
|
||||
// 0020A Initial D Arcade Stage (Japan, Rev A) (GDS-0020A)
|
||||
/* 0020B */ GAME( 2002, initd, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Japan, Rev B) (GDS-0020B)", GAME_FLAGS )
|
||||
// 0021 Lupin The Third - The Typing (GDS-0021)
|
||||
/* 0021A */ GAME( 2002, luptype, naomigd, naomigd_kb, naomi_kb, naomi_state, init_naomigd, ROT0, "Sega", "Lupin The Third - The Typing (Rev A) (GDS-0021A)", GAME_FLAGS )
|
||||
/* 0022 */ GAME( 2002, mok, naomigd, naomigd, hotd2, naomi_state, init_naomigd, ROT0, "Sega", "The Maze of the Kings (GDS-0022)", GAME_FLAGS )
|
||||
@ -11282,10 +11318,10 @@ ROM_END
|
||||
/* 0024B */ GAME( 2002, vf4evob, vf4evo, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (Version B) (Japan) (GDS-0024B)", GAME_FLAGS )
|
||||
/* 0024C */ GAME( 2002, vf4evo, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Evolution (Version B) (Japan) (GDS-0024C)", GAME_FLAGS )
|
||||
/* 0025 */ GAME( 2002, initdexpo,initdexp,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export) (GDS-0025)", GAME_FLAGS )
|
||||
/* 0025A */ GAME( 2002, initdexp, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export) (Rev A) (GDS-0025A)", GAME_FLAGS )
|
||||
/* 0025A */ GAME( 2002, initdexp, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage (Export, Rev A) (GDS-0025A)", GAME_FLAGS )
|
||||
/* 0026 */ GAME( 2002, initdv2jo,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (GDS-0026)", GAME_FLAGS )
|
||||
/* 0026A */ GAME( 2002, initdv2ja,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (Rev A) (GDS-0026A)", GAME_FLAGS )
|
||||
/* 0026B */ GAME( 2003, initdv2j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan) (Rev B) (GDS-0026B)", GAME_FLAGS )
|
||||
/* 0026A */ GAME( 2002, initdv2ja,initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan, Rev A) (GDS-0026A)", GAME_FLAGS )
|
||||
/* 0026B */ GAME( 2003, initdv2j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Japan, Rev B) (GDS-0026B)", GAME_FLAGS )
|
||||
/* 0027 */ GAME( 2003, initdv2e, initdv2j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)", GAME_FLAGS )
|
||||
// 0028 Shakka to Tambourine 4EVER (GD SOFT TMB 4EVER)
|
||||
/* 0029 */ GAME( 2003, clubkcyco,clubkcyc,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Club Kart for Cycraft (GDS-0029)", GAME_FLAGS )
|
||||
@ -11294,25 +11330,25 @@ ROM_END
|
||||
/* 0030B */ GAME( 2003, dragntr, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure (Rev B) (GDS-0030B)", GAME_FLAGS )
|
||||
/* 0031 */ GAME( 2003, puyofevj, puyofev, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Puyo Puyo Fever (Japan) (GDS-0031)", GAME_FLAGS )
|
||||
// 0032 Initial D Arcade Stage Ver. 3 (Japan) (GDS-0032)
|
||||
// 0032A Initial D Arcade Stage Ver. 3 (Japan) (Rev A) (GDS-0032A)
|
||||
/* 0032B */ GAME( 2004, initdv3jb,initdv3j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan) (Rev B) (GDS-0032B)", GAME_FLAGS )
|
||||
/* 0032C */ GAME( 2004, initdv3j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan) (Rev C) (GDS-0032C)", GAME_FLAGS )
|
||||
// 0032A Initial D Arcade Stage Ver. 3 (Japan, Rev A) (GDS-0032A)
|
||||
/* 0032B */ GAME( 2004, initdv3jb,initdv3j,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan, Rev B) (GDS-0032B)", GAME_FLAGS )
|
||||
/* 0032C */ GAME( 2004, initdv3j, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Japan, Rev C) (GDS-0032C)", GAME_FLAGS )
|
||||
/* 0033 */ GAME( 2004, initdv3e, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 (Export) (GDS-0033)", GAME_FLAGS )
|
||||
/* 0034 */ GAME( 2003, puyofev, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Puyo Pop Fever (World) (GDS-0034)", GAME_FLAGS )
|
||||
// 0035 GD SOFT KIT DKG
|
||||
// 0036 Virtua Fighter 4 Final Tuned (GDS-0036)
|
||||
/* 0036A */ GAME( 2004, vf4tuneda,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (GDS-0036A)", GAME_FLAGS )
|
||||
// 0036B Virtua Fighter 4 Final Tuned (GDS-0036B)
|
||||
// 0036C Virtua Fighter 4 Final Tuned (GDS-0036C)
|
||||
/* 0036A */ GAME( 2004, vf4tuneda,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A)", GAME_FLAGS )
|
||||
// 0036B Virtua Fighter 4 Final Tuned (Rev B) (GDS-0036B)
|
||||
// 0036C Virtua Fighter 4 Final Tuned (Rev C) (GDS-0036C)
|
||||
/* 0036D */ GAME( 2004, vf4tunedd,vf4tuned,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Ver. A) (GDS-0036D)", GAME_FLAGS )
|
||||
// 0036E Virtua Fighter 4 Final Tuned (GDS-0036E)
|
||||
// 0036E Virtua Fighter 4 Final Tuned (Rev E) (GDS-0036E)
|
||||
/* 0036F */ GAME( 2004, vf4tuned, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Virtua Fighter 4 Final Tuned (Ver. B) (GDS-0036F)", GAME_FLAGS )
|
||||
// 0037 Dragon Treasure 2 (GDS-0037)
|
||||
/* 0037A */ GAME( 2004, dragntr2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure 2 (Rev A) (GDS-0037A)", GAME_FLAGS )
|
||||
// 0038 Initial D Arcade Stage Ver. 3 Cycraft Edition (Japan) (NAOMI2 GDROM TOS SP)
|
||||
// 0039 Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (GDS-0039)
|
||||
/* 0039A */ GAME( 2004, inidv3ca, inidv3cy,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (Rev A) (GDS-0039A)", GAME_FLAGS )
|
||||
/* 0039B */ GAME( 2006, inidv3cy, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export) (Rev B) (GDS-0039B)", GAME_FLAGS )
|
||||
/* 0039A */ GAME( 2004, inidv3ca, inidv3cy,naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev A) (GDS-0039A)", GAME_FLAGS )
|
||||
/* 0039B */ GAME( 2006, inidv3cy, naomi2, naomi2gd, naomi, naomi2_state, init_naomi2, ROT0, "Sega", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev B) (GDS-0039B)", GAME_FLAGS )
|
||||
// 0040 NAOMI2 GDROM MTG
|
||||
// 0041 Dragon Treasure 3 (GDS-0041)
|
||||
/* 0041A */ GAME( 2005, dragntr3, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Sega", "Dragon Treasure 3 (Rev A) (GDS-0041A)", GAME_FLAGS )
|
||||
@ -11329,12 +11365,12 @@ ROM_END
|
||||
/* 0005 */ GAME( 2001, starseek, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "G.Rev", "Doki Doki Idol Star Seeker (GDL-0005)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND )
|
||||
/* 0006 */ GAME( 2001, gundmxgd, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom", "Mobile Suit Gundam: Federation Vs. Zeon DX (USA, Japan) (GDL-0006)", GAME_FLAGS )
|
||||
// 0007 Capcom Vs. SNK 2 (Japan) (GDL-0007)
|
||||
/* 0007A */ GAME( 2001, cvs2mf, cvs2, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Japan) (Rev A) (GDL-0007A)", GAME_FLAGS )
|
||||
/* 0007A */ GAME( 2001, cvs2mf, cvs2, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Japan, Rev A) (GDL-0007A)", GAME_FLAGS )
|
||||
/* 0008 */ GAME( 2001, cvs2, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Capcom / SNK", "Capcom Vs. SNK 2 Mark Of The Millennium 2001 (USA) (GDL-0008)", GAME_FLAGS )
|
||||
// 0009 Capcom Vs. SNK 2 (Export)
|
||||
/* 0010 */ GAME( 2001, ikaruga, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT270, "Treasure", "Ikaruga (GDL-0010)", GAME_FLAGS )
|
||||
/* 0011 */ GAME( 2002, ggxx, naomigd, naomigd, naomi, naomi_state, init_ggxx, ROT0,"Arc System Works","Guilty Gear XX (GDL-0011)", GAME_FLAGS )
|
||||
/* 0012 */ GAME( 2002, cleoftp, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron", "Cleopatra Fortune Plus (GDL-0012)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND )
|
||||
/* 0012 */ GAME( 2002, cleoftp, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron / Taito", "Cleopatra Fortune Plus (GDL-0012)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND )
|
||||
/* 0013 */ GAME( 2002, moeru, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Altron", "Moeru Casinyo (Japan) (GDL-0013)", GAME_FLAGS )
|
||||
// 0014 Musapey's Choco Marker (GDL-0014)
|
||||
/* 0014A */ GAME( 2002, chocomk, naomigd, naomigd, naomi, naomi_state, init_naomigd, ROT0, "Ecole Software", "Musapey's Choco Marker (Rev A) (GDL-0014A)", GAME_FLAGS )
|
||||
|
@ -14,11 +14,11 @@
|
||||
- HDL is also connected to WP/TS input where TS is used to detect motor status
|
||||
- 3 second motor off delay timer
|
||||
- video (video RAM is at memory top - 0x1400, i.e. 0x1ec00)
|
||||
- keyboard ROM
|
||||
- hires graphics board
|
||||
- keyboard ROM, same as earlier tandy 1000
|
||||
- WD1010
|
||||
- hard disk
|
||||
- mouse
|
||||
- clock/mouse 8042 mcu ROM, probably same as tandy 1000 isa clock/mouse adapter
|
||||
- sab3019 rtc
|
||||
|
||||
*/
|
||||
|
||||
@ -219,6 +219,77 @@ READ8_MEMBER( tandy2k_state::kbint_clr_r )
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER( tandy2k_state::clkmouse_r )
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (!m_clkmouse_cnt)
|
||||
return 0;
|
||||
ret = m_clkmouse_cmd[--m_clkmouse_cnt];
|
||||
m_pic1->ir2_w(0);
|
||||
if (m_clkmouse_cnt > 0)
|
||||
m_mcu_delay->adjust(attotime::from_msec(1));
|
||||
break;
|
||||
case 2:
|
||||
ret = m_buttons->read();
|
||||
if (m_clkmouse_cnt)
|
||||
ret |= 1;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tandy2k_state::clkmouse_w )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
m_pic1->ir2_w(0);
|
||||
if (m_clkmouse_cnt < 8)
|
||||
m_clkmouse_cmd[m_clkmouse_cnt++] = data;
|
||||
break;
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
if (m_clkmouse_cnt < 8)
|
||||
m_clkmouse_cmd[m_clkmouse_cnt++] = data;
|
||||
switch (m_clkmouse_cmd[0])
|
||||
{
|
||||
case 0x01: //set time
|
||||
break;
|
||||
case 0x02: //read time
|
||||
break;
|
||||
case 0x08:
|
||||
if(m_clkmouse_cmd[1] > 0)
|
||||
m_clkmouse_irq |= MO_IRQ;
|
||||
else
|
||||
m_clkmouse_irq &= ~MO_IRQ;
|
||||
if(m_clkmouse_cmd[2] > 0)
|
||||
m_clkmouse_irq |= BT_IRQ;
|
||||
else
|
||||
m_clkmouse_irq &= ~BT_IRQ;
|
||||
break;
|
||||
case 0x20:
|
||||
if(m_clkmouse_cmd[1] > 0)
|
||||
m_mouse_timer->adjust(attotime::from_hz(40), 0, attotime::from_hz(40));
|
||||
else
|
||||
m_mouse_timer->adjust(attotime::never);
|
||||
break;
|
||||
}
|
||||
m_clkmouse_cnt = 0;
|
||||
break;
|
||||
case 3:
|
||||
m_pic1->ir2_w(0);
|
||||
m_clkmouse_cnt = 0;
|
||||
m_clkmouse_irq = 0;
|
||||
m_mouse_x = m_x_axis->read();
|
||||
m_mouse_y = m_y_axis->read();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER( tandy2k_state::fldtc_r )
|
||||
{
|
||||
if (LOG) logerror("FLDTC\n");
|
||||
@ -315,6 +386,7 @@ void tandy2k_state::tandy2k_io(address_map &map)
|
||||
map(0x00180, 0x00180).r(FUNC(tandy2k_state::hires_status_r)).umask16(0x00ff);
|
||||
map(0x00180, 0x0018f).mirror(0x10).w(m_colpal, FUNC(palette_device::write8)).umask16(0x00ff).share("colpal");
|
||||
map(0x001a0, 0x001a0).w(FUNC(tandy2k_state::hires_plane_w)).umask16(0x00ff);
|
||||
map(0x002fc, 0x002ff).rw(FUNC(tandy2k_state::clkmouse_r), FUNC(tandy2k_state::clkmouse_w));
|
||||
}
|
||||
|
||||
void tandy2k_state::tandy2k_hd_io(address_map &map)
|
||||
@ -368,8 +440,47 @@ static INPUT_PORTS_START( tandy2k )
|
||||
PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) /* HOME 58 D8 */
|
||||
PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) /* F11 59 D9 */
|
||||
PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) /* F12 5a Da */
|
||||
|
||||
PORT_START("MOUSEBTN")
|
||||
PORT_BIT( 0xff8f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(MOUSECODE_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(MOUSECODE_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) /* this would be button three but AFAIK no tandy mouse ever had one */
|
||||
|
||||
PORT_START("MOUSEX")
|
||||
PORT_BIT( 0xffff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr)
|
||||
|
||||
PORT_START("MOUSEY")
|
||||
PORT_BIT( 0xffff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(0) PORT_CHANGED_MEMBER(DEVICE_SELF, tandy2k_state, input_changed, nullptr)
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_CHANGED_MEMBER(tandy2k_state::input_changed)
|
||||
{
|
||||
if (m_clkmouse_cnt || !m_clkmouse_irq)
|
||||
return;
|
||||
if ((m_clkmouse_irq & BT_IRQ) && (field.name()[5] == 'B'))
|
||||
{
|
||||
m_clkmouse_cnt = 1;
|
||||
m_clkmouse_cmd[0] = 'B';
|
||||
}
|
||||
else if ((m_clkmouse_irq & MO_IRQ))
|
||||
{
|
||||
uint16_t x = m_x_axis->read();
|
||||
uint16_t y = m_y_axis->read();
|
||||
uint16_t dx = x - m_mouse_x;
|
||||
uint16_t dy = y - m_mouse_y;
|
||||
m_mouse_x = x;
|
||||
m_mouse_y = y;
|
||||
m_clkmouse_cnt = 5;
|
||||
m_clkmouse_cmd[4] = 'M';
|
||||
m_clkmouse_cmd[3] = dx & 0xff;
|
||||
m_clkmouse_cmd[2] = dx >> 8;
|
||||
m_clkmouse_cmd[1] = dy & 0xff;
|
||||
m_clkmouse_cmd[0] = dy >> 8;
|
||||
}
|
||||
m_pic1->ir2_w(1);
|
||||
}
|
||||
|
||||
// Video
|
||||
|
||||
uint32_t tandy2k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
@ -788,7 +899,8 @@ void tandy2k_state::machine_start()
|
||||
program.install_ram(0x00000, ram_size - 1, ram);
|
||||
|
||||
m_char_ram.allocate(0x1000);
|
||||
m_hires_en = 0;
|
||||
m_mouse_timer = timer_alloc(MOUS_TIMER);
|
||||
m_mcu_delay = timer_alloc(MCU_DELAY);
|
||||
|
||||
// register for state saving
|
||||
save_item(NAME(m_dma_mux));
|
||||
@ -804,6 +916,19 @@ void tandy2k_state::machine_start()
|
||||
save_item(NAME(m_clkcnt));
|
||||
save_item(NAME(m_outspkr));
|
||||
save_item(NAME(m_spkrdata));
|
||||
save_item(NAME(m_clkmouse_cmd));
|
||||
save_item(NAME(m_clkmouse_cnt));
|
||||
save_item(NAME(m_clkmouse_irq));
|
||||
save_item(NAME(m_mouse_x));
|
||||
save_item(NAME(m_mouse_y));
|
||||
save_item(NAME(m_hires_en));
|
||||
}
|
||||
|
||||
void tandy2k_state::machine_reset()
|
||||
{
|
||||
m_hires_en = 0;
|
||||
m_clkmouse_cnt = 0;
|
||||
m_clkmouse_irq = 0;
|
||||
}
|
||||
|
||||
void tandy2k_state::device_reset_after_children()
|
||||
@ -811,6 +936,33 @@ void tandy2k_state::device_reset_after_children()
|
||||
m_pc_keyboard->enable(0);
|
||||
}
|
||||
|
||||
void tandy2k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case MOUS_TIMER:
|
||||
{
|
||||
uint16_t x = m_x_axis->read();
|
||||
uint16_t y = m_y_axis->read();
|
||||
uint16_t dx = x - m_mouse_x;
|
||||
uint16_t dy = y - m_mouse_y;
|
||||
m_mouse_x = x;
|
||||
m_mouse_y = y;
|
||||
m_clkmouse_cnt = 5;
|
||||
m_clkmouse_cmd[4] = 'A';
|
||||
m_clkmouse_cmd[3] = dx & 0xff;
|
||||
m_clkmouse_cmd[2] = dx >> 8;
|
||||
m_clkmouse_cmd[1] = dy & 0xff;
|
||||
m_clkmouse_cmd[0] = dy >> 8;
|
||||
m_pic1->ir2_w(1);
|
||||
break;
|
||||
}
|
||||
case MCU_DELAY:
|
||||
m_pic1->ir2_w(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rgb_t tandy2k_state::IRGB(uint32_t raw)
|
||||
{
|
||||
uint8_t i = (raw >> 3) & 1;
|
||||
|
72
src/mame/includes/ckingbase.h
Normal file
72
src/mame/includes/ckingbase.h
Normal file
@ -0,0 +1,72 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* Chess King chess computer driver base class
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef MAME_INCLUDES_CKINGBASE_H
|
||||
#define MAME_INCLUDES_CKINGBASE_H
|
||||
|
||||
#include "machine/timer.h"
|
||||
|
||||
class ckingbase_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ckingbase_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<timer_device> m_irq_on;
|
||||
optional_ioport_array<10> m_inp_matrix; // max 10
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_EXTERN( cking_cb_buttons );
|
||||
|
||||
#endif // MAME_INCLUDES_CKINGBASE_H
|
75
src/mame/includes/cxgbase.h
Normal file
75
src/mame/includes/cxgbase.h
Normal file
@ -0,0 +1,75 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* CXG chess computer driver base class
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef MAME_INCLUDES_CXGBASE_H
|
||||
#define MAME_INCLUDES_CXGBASE_H
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
|
||||
class cxgbase_state : public driver_device
|
||||
{
|
||||
public:
|
||||
cxgbase_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_dac(*this, "dac"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<timer_device> m_irq_on;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
optional_ioport_array<10> m_inp_matrix; // max 10
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(L, ASSERT_LINE); }
|
||||
template<int L> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(L, CLEAR_LINE); }
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_EXTERN( cxg_cb_magnets );
|
||||
|
||||
#endif // MAME_INCLUDES_CXGBASE_H
|
33
src/mame/includes/fidel_desdis_common.h
Normal file
33
src/mame/includes/fidel_desdis_common.h
Normal file
@ -0,0 +1,33 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* Fidelity Electronics Designer Display common class
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef MAME_INCLUDES_DESDIS_COMMON_H
|
||||
#define MAME_INCLUDES_DESDIS_COMMON_H
|
||||
|
||||
#include "includes/fidelbase.h"
|
||||
|
||||
class desdis_common_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
desdis_common_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
protected:
|
||||
// I/O handlers
|
||||
virtual DECLARE_WRITE8_MEMBER(control_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(lcd_w);
|
||||
virtual DECLARE_READ8_MEMBER(input_r);
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_EXTERN( desdis );
|
||||
|
||||
#endif // MAME_INCLUDES_DESDIS_COMMON_H
|
@ -26,6 +26,7 @@ public:
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
@ -42,6 +43,7 @@ public:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<timer_device> m_irq_on;
|
||||
optional_memory_bank m_rombank;
|
||||
optional_ioport_array<11> m_inp_matrix; // max 11
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
|
@ -100,7 +100,10 @@ public:
|
||||
m_centronics_fault(0),
|
||||
m_centronics_select(0),
|
||||
m_centronics_perror(0),
|
||||
m_centronics_busy(0)
|
||||
m_centronics_busy(0),
|
||||
m_buttons(*this, "MOUSEBTN"),
|
||||
m_x_axis(*this, "MOUSEX"),
|
||||
m_y_axis(*this, "MOUSEY")
|
||||
{
|
||||
for (auto & elem : m_busdmarq)
|
||||
{
|
||||
@ -110,6 +113,7 @@ public:
|
||||
|
||||
void tandy2k_hd(machine_config &config);
|
||||
void tandy2k(machine_config &config);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
|
||||
|
||||
private:
|
||||
required_device<i80186_cpu_device> m_maincpu;
|
||||
@ -138,7 +142,9 @@ private:
|
||||
required_device<pc_keyboard_device> m_pc_keyboard; // temporary until the tandy keyboard has a rom dump
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void device_reset_after_children() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
@ -176,6 +182,8 @@ private:
|
||||
DECLARE_WRITE8_MEMBER( drb_attr_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( kbdclk_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( kbddat_w );
|
||||
DECLARE_READ8_MEMBER( clkmouse_r );
|
||||
DECLARE_WRITE8_MEMBER( clkmouse_w );
|
||||
DECLARE_READ8_MEMBER( irq_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_hdl_w );
|
||||
@ -240,11 +248,32 @@ private:
|
||||
int m_centronics_perror;
|
||||
int m_centronics_busy;
|
||||
|
||||
enum
|
||||
{
|
||||
MO_IRQ = 1,
|
||||
BT_IRQ = 2
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MOUS_TIMER,
|
||||
MCU_DELAY
|
||||
};
|
||||
|
||||
uint8_t m_clkmouse_cmd[8];
|
||||
int m_clkmouse_cnt;
|
||||
uint8_t m_clkmouse_irq;
|
||||
uint16_t m_mouse_x, m_mouse_y;
|
||||
emu_timer *m_mouse_timer;
|
||||
emu_timer *m_mcu_delay;
|
||||
|
||||
void tandy2k_hd_io(address_map &map);
|
||||
void tandy2k_io(address_map &map);
|
||||
void tandy2k_mem(address_map &map);
|
||||
void vpac_mem(address_map &map);
|
||||
void vrambank_mem(address_map &map);
|
||||
|
||||
required_ioport m_buttons, m_x_axis, m_y_axis;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_TANDY2K_H
|
||||
|
@ -200,7 +200,7 @@ static INPUT_PORTS_START(tv950kb)
|
||||
|
||||
PORT_START("FUNCT")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Funct") PORT_CHAR(UCHAR_MAMEKEY(LALT)) PORT_CODE(KEYCODE_LALT)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
|
||||
PORT_BIT(0x9f, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
@ -73,7 +73,7 @@ static INPUT_PORTS_START(vt100_kbd)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("~") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line feed") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line feed") PORT_CODE(KEYCODE_RALT) PORT_CHAR(0x0a)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
@ -152,7 +152,7 @@ static INPUT_PORTS_START(vt100_kbd)
|
||||
|
||||
PORT_START("LINEE")
|
||||
PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE
|
||||
|
||||
PORT_START("LINEF")
|
||||
PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
@ -472,11 +472,11 @@ static INPUT_PORTS_START(ms7002)
|
||||
|
||||
PORT_START("LINED")
|
||||
PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\x92\xd0\xa0") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // ВР = верхний регистр
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\xa1\xd0\x94\xd0\x92") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // СДВ = сдвинуть
|
||||
|
||||
PORT_START("LINEE")
|
||||
PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // maybe
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xd0\x92\xd0\xa0") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE // ВР = верхний регистр
|
||||
|
||||
PORT_START("LINEF")
|
||||
PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
@ -9897,7 +9897,7 @@ citycon // (c) 1985 Jaleco
|
||||
citycona // (c) 1985 Jaleco
|
||||
cruisin // (c) 1985 Jaleco/Kitkorp
|
||||
|
||||
@source:ckz80.cpp
|
||||
@source:cking_master.cpp
|
||||
ckmaster //
|
||||
|
||||
@source:clayshoo.cpp
|
||||
@ -10915,7 +10915,7 @@ wallst // (c) 1982 Century
|
||||
@source:cwheel.cpp
|
||||
cwheel // (c) 19?? Gamebar
|
||||
|
||||
@source:cxgz80.cpp
|
||||
@source:cxg_ch2001.cpp
|
||||
ch2001 //
|
||||
|
||||
@source:cxhumax.cpp
|
||||
@ -12849,6 +12849,9 @@ feversoc // (c) 2004
|
||||
fgoal // TF (c) 1979 Taito Corporation
|
||||
fgoala // MF (c) 1979 Taito Corporation
|
||||
|
||||
@source:fidel_sc6.cpp
|
||||
fscc6 //
|
||||
|
||||
@source:fidel6502.cpp
|
||||
chesster //
|
||||
chesstera //
|
||||
@ -12921,10 +12924,7 @@ fex68kb //
|
||||
fex68km2 //
|
||||
fex68km3 //
|
||||
|
||||
@source:fidelmcs48.cpp
|
||||
fscc6 //
|
||||
|
||||
@source:fidelz80.cpp
|
||||
@source:fidelbase.cpp
|
||||
backgamc //
|
||||
bridgec3 //
|
||||
bridgeca //
|
||||
|
@ -138,7 +138,8 @@ chessmst.cpp
|
||||
chesstrv.cpp
|
||||
cit101.cpp
|
||||
cit220.cpp
|
||||
ckz80.cpp
|
||||
cking_master.cpp
|
||||
ckingbase.cpp
|
||||
clcd.cpp
|
||||
clickstart.cpp
|
||||
cm1800.cpp
|
||||
@ -163,7 +164,8 @@ crimson.cpp
|
||||
crvision.cpp
|
||||
ct486.cpp
|
||||
cvicny.cpp
|
||||
cxgz80.cpp
|
||||
cxg_ch2001.cpp
|
||||
cxgbase.cpp
|
||||
cxhumax.cpp
|
||||
cybiko.cpp
|
||||
cz101.cpp
|
||||
@ -239,10 +241,10 @@ fb01.cpp
|
||||
fc100.cpp
|
||||
fccpu20.cpp
|
||||
fccpu30.cpp
|
||||
fidel_sc6.cpp
|
||||
fidel6502.cpp
|
||||
fidel68k.cpp
|
||||
fidelmcs48.cpp
|
||||
fidelz80.cpp
|
||||
fidelbase.cpp
|
||||
fk1.cpp
|
||||
fm7.cpp
|
||||
fmtowns.cpp
|
||||
|
@ -375,6 +375,7 @@ static void osd_sdl_info(void)
|
||||
void sdl_osd_interface::video_register()
|
||||
{
|
||||
video_options_add("soft", nullptr);
|
||||
video_options_add("accel", nullptr);
|
||||
#if USE_OPENGL
|
||||
video_options_add("opengl", nullptr);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user