never hurts to srcclean (nw)

This commit is contained in:
Vas Crabb 2017-07-09 03:21:32 +10:00
parent 962fa2ffac
commit d18aa3e097
56 changed files with 674 additions and 674 deletions

View File

@ -2086,7 +2086,7 @@ files {
MAME_DIR .. "src/mame/drivers/hp9k_3xx.cpp",
MAME_DIR .. "src/mame/drivers/hp64k.cpp",
MAME_DIR .. "src/mame/drivers/hp_ipc.cpp",
MAME_DIR .. "src/mame/drivers/hp80.cpp",
MAME_DIR .. "src/mame/drivers/hp80.cpp",
}
createMESSProjects(_target, _subtarget, "hec2hrp")

View File

@ -185,4 +185,4 @@ void i82371sb_device::device_reset()
void i82371sb_device::port80_debug_write(uint8_t value)
{
m_boot_state_hook((offs_t)0, value);
}
}

View File

@ -109,32 +109,32 @@ namespace {
}
// Bits in m_flags
static constexpr unsigned FLAGS_DCM_BIT = 0; // Decimal/binary mode
static constexpr unsigned FLAGS_CY_BIT = 1; // Carry
static constexpr unsigned FLAGS_OVF_BIT = 2; // Overflow
static constexpr unsigned FLAGS_LSB_BIT = 3; // LSB
static constexpr unsigned FLAGS_MSB_BIT = 4; // MSB
static constexpr unsigned FLAGS_Z_BIT = 5; // Zero
static constexpr unsigned FLAGS_LDZ_BIT = 6; // Left digit zero
static constexpr unsigned FLAGS_RDZ_BIT = 7; // Right digit zero
static constexpr unsigned FLAGS_IRL_BIT = 8; // Interrupt request
static constexpr unsigned FLAGS_DCM_BIT = 0; // Decimal/binary mode
static constexpr unsigned FLAGS_CY_BIT = 1; // Carry
static constexpr unsigned FLAGS_OVF_BIT = 2; // Overflow
static constexpr unsigned FLAGS_LSB_BIT = 3; // LSB
static constexpr unsigned FLAGS_MSB_BIT = 4; // MSB
static constexpr unsigned FLAGS_Z_BIT = 5; // Zero
static constexpr unsigned FLAGS_LDZ_BIT = 6; // Left digit zero
static constexpr unsigned FLAGS_RDZ_BIT = 7; // Right digit zero
static constexpr unsigned FLAGS_IRL_BIT = 8; // Interrupt request
// Special registers
static constexpr unsigned REG_BANK_PTR = 0; // R0: register bank pointer
static constexpr unsigned REG_INDEX_SCRATCH = 2; // R2 & R3: index scratch registers
static constexpr unsigned REG_PC = 4; // R4 & R5: PC
static constexpr unsigned REG_SP = 6; // R6 & R7: return stack pointer
static constexpr unsigned REG_BANK_PTR = 0; // R0: register bank pointer
static constexpr unsigned REG_INDEX_SCRATCH = 2; // R2 & R3: index scratch registers
static constexpr unsigned REG_PC = 4; // R4 & R5: PC
static constexpr unsigned REG_SP = 6; // R6 & R7: return stack pointer
// Bit in address values that specifies external address (0) or internal register (1)
static constexpr unsigned GP_REG_BIT = 17;
static constexpr unsigned GP_REG_MASK = BIT_MASK(GP_REG_BIT);
static constexpr unsigned ADDR_MASK = 0xffff;
static constexpr unsigned GP_REG_BIT = 17;
static constexpr unsigned GP_REG_MASK = BIT_MASK(GP_REG_BIT);
static constexpr unsigned ADDR_MASK = 0xffff;
// Mask of bits in ARP & DRP
static constexpr uint8_t ARP_DRP_MASK = 0x3f;
static constexpr uint8_t ARP_DRP_MASK = 0x3f;
// Mask of bits in E
static constexpr uint8_t E_MASK = 0xf;
static constexpr uint8_t E_MASK = 0xf;
DEFINE_DEVICE_TYPE(HP_CAPRICORN , capricorn_cpu_device , "capricorn" , "HP-Capricorn")
@ -483,44 +483,44 @@ uint8_t capricorn_cpu_device::sub_bcd_bytes(uint8_t first , uint8_t second , boo
return (ld << 4) | rd;
}
#define OP_ITERATION_START_FWD(idx , multi) \
unsigned boundary = multi ? get_upper_boundary() : m_drp; \
BIT_SET(m_flags , FLAGS_Z_BIT); \
bool first = true; \
#define OP_ITERATION_START_FWD(idx , multi) \
unsigned boundary = multi ? get_upper_boundary() : m_drp; \
BIT_SET(m_flags , FLAGS_Z_BIT); \
bool first = true; \
for (unsigned idx = m_drp; idx <= boundary; idx++)
#define OP_ITERATION_START_REV(idx , multi) \
int boundary = multi ? get_lower_boundary() : m_drp; \
BIT_SET(m_flags , FLAGS_Z_BIT); \
bool first = true; \
#define OP_ITERATION_START_REV(idx , multi) \
int boundary = multi ? get_lower_boundary() : m_drp; \
BIT_SET(m_flags , FLAGS_Z_BIT); \
bool first = true; \
for (int idx = m_drp; idx >= boundary; idx--)
#define OP1_GET(idx , op1) \
m_icount--; \
#define OP1_GET(idx , op1) \
m_icount--; \
uint8_t op1 = m_reg[ idx ];
#define OP2_GET(idx , ea , op1 , op2) \
m_icount--; \
uint8_t op1 = m_reg[ idx ]; \
#define OP2_GET(idx , ea , op1 , op2) \
m_icount--; \
uint8_t op1 = m_reg[ idx ]; \
uint8_t op2 = RM(ea);
#define RES_SET(idx , res) \
#define RES_SET(idx , res) \
m_reg[ idx ] = res;
#define OP_ITERATION_END_FWD(res) \
if (first) { \
update_flags_right(res); \
first = false; \
} \
update_flags_left(res); \
#define OP_ITERATION_END_FWD(res) \
if (first) { \
update_flags_right(res); \
first = false; \
} \
update_flags_left(res); \
update_flags_every(res);
#define OP_ITERATION_END_REV(res) \
if (first) { \
update_flags_left(res); \
first = false; \
} \
update_flags_right(res); \
#define OP_ITERATION_END_REV(res) \
if (first) { \
update_flags_left(res); \
first = false; \
} \
update_flags_right(res); \
update_flags_every(res);
void capricorn_cpu_device::do_AN_op(ea_addr_t ea)

View File

@ -54,16 +54,16 @@ private:
// State of processor
uint8_t m_reg[ 64 ];// Registers R00-R77
uint8_t m_arp; // ARP register (6 bits)
uint8_t m_drp; // DRP register (6 bits)
uint8_t m_reg_E; // E register (4 bits)
uint16_t m_flags; // Flags
uint16_t m_genpc; // PC
uint8_t m_arp; // ARP register (6 bits)
uint8_t m_drp; // DRP register (6 bits)
uint8_t m_reg_E; // E register (4 bits)
uint16_t m_flags; // Flags
uint16_t m_genpc; // PC
// Burst memory accesses
bool m_flatten; // Consecutive accesses to memory are "flattened"
uint16_t m_start_addr; // Start address of burst
uint16_t m_curr_addr; // Current address in burst
bool m_flatten; // Consecutive accesses to memory are "flattened"
uint16_t m_start_addr; // Start address of burst
uint16_t m_curr_addr; // Current address in burst
// Effective Addresses
// When b17 = 0, b15..b0 hold 16-bit memory address

View File

@ -3,7 +3,7 @@
/*
uPD7811 - variant of uPD7810 with internal ROM
uPD7811 - variant of uPD7810 with internal ROM
*/
@ -11,15 +11,15 @@
#include "upd7811.h"
/*
the MODE pins can cause this to work with external ROM instead
todo: document MODE pins
M0 M1
the MODE pins can cause this to work with external ROM instead
todo: document MODE pins
0 0 -
0 1 -
1 0 -
1 1 -
M0 M1
0 0 -
0 1 -
1 0 -
1 1 -
*/
@ -33,4 +33,4 @@ DEFINE_DEVICE_TYPE(UPD7811, upd7811_device, "upd78c11", "uPD78C11")
upd7811_device::upd7811_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: upd7810_device(mconfig, UPD7811, tag, owner, clock, ADDRESS_MAP_NAME(upd_internal_4096_rom_map))
{
}
}

View File

@ -439,7 +439,7 @@ void ncr5390_device::step(bool timeout)
dma_set(dma_command ? DMA_IN : DMA_NONE);
// if it's the last message byte, ACK remains asserted, terminate with function_complete()
state = (xfr_phase == S_PHASE_MSG_IN && (!dma_command || tcounter == 1)) ? INIT_XFR_RECV_BYTE_NACK : INIT_XFR_RECV_BYTE_ACK;
state = (xfr_phase == S_PHASE_MSG_IN && (!dma_command || tcounter == 1)) ? INIT_XFR_RECV_BYTE_NACK : INIT_XFR_RECV_BYTE_ACK;
recv_byte();
break;

View File

@ -24,13 +24,13 @@
* Memory - Mitsubishi M5M187AJ 046101-35 SRAM 64K X 1?? - U37
Logic:
* U8 - 22V10-25JC
* U33 - 22V10-25JC
* U61 - 22V10-25JC
* U63 - 22V10-25JC
* U87 - 22V10-20JC
* U88 - 22V10-20JC
* U102 - 22V10-25JC
* U111 - 22V10-25JC
* U33 - 22V10-25JC
* U61 - 22V10-25JC
* U63 - 22V10-25JC
* U87 - 22V10-20JC
* U88 - 22V10-20JC
* U102 - 22V10-25JC
* U111 - 22V10-25JC
Switches:
* S1 - Board reset

View File

@ -462,7 +462,7 @@ void debug_view_disasm::print(int row, std::string text, int start, int end, u8
*dest++ = { ' ', attrib };
else
*dest++ = { u8(text[spos]), attrib };
}
}
}
//-------------------------------------------------

View File

@ -343,7 +343,7 @@ public:
static rgb_t xRGBRRRRGGGGBBBB_bit0_decoder(u32 raw); // bits 14/13/12 are LSb
static rgb_t xRGBRRRRGGGGBBBB_bit4_decoder(u32 raw); // bits 14/13/12 are MSb
private:
// internal data
int m_bytes_per_entry;

View File

@ -130,28 +130,28 @@ public:
m_query = m_request->path.find('?');
m_path_end = m_query == std::string::npos ? m_query_end : m_query;
}
/** Retrieves the requested resource. */
virtual const std::string get_resource() {
// The entire resource: path, query and fragment.
return m_request->path;
}
/** Returns the path part of the requested resource. */
virtual const std::string get_path() {
return m_request->path.substr(0, m_path_end);
}
/** Returns the query part of the requested resource. */
virtual const std::string get_query() {
return m_query == std::string::npos ? "" : m_request->path.substr(m_query, m_query_end);
}
/** Returns the fragment part of the requested resource. */
virtual const std::string get_fragment() {
return m_fragment == std::string::npos ? "" : m_request->path.substr(m_fragment);
}
/** Retrieves a header from the HTTP request. */
virtual const std::string get_header(const std::string &header_name) {
auto i = m_request->header.find(header_name);
@ -171,7 +171,7 @@ public:
}
return result;
}
/** Returns the body that was submitted with the HTTP request. */
virtual const std::string get_body() {
// TODO(cbrunschen): What to return here - http_server::Request has a 'content' feld that is never filled in!
@ -193,7 +193,7 @@ struct http_response_impl : public http_manager::http_response {
virtual void set_status(int status) {
m_status = status;
}
/** Sets the HTTP content type to be returned to the client. */
virtual void set_content_type(const std::string &content_type) {
m_content_type = content_type;
@ -209,7 +209,7 @@ struct http_response_impl : public http_manager::http_response {
virtual void append_body(const std::string &body) {
m_body << body;
}
/** Sends the response to the client. */
void send() {
m_response->type(m_content_type);
@ -221,12 +221,12 @@ struct http_response_impl : public http_manager::http_response {
struct websocket_endpoint_impl : public http_manager::websocket_endpoint {
/** The underlying edpoint. */
std::shared_ptr<webpp::ws_server::Endpoint> m_endpoint;
websocket_endpoint_impl(std::shared_ptr<webpp::ws_server::Endpoint> endpoint,
websocket_endpoint_impl(std::shared_ptr<webpp::ws_server::Endpoint> endpoint,
http_manager::websocket_open_handler on_open,
http_manager::websocket_message_handler on_message,
http_manager::websocket_close_handler on_close,
http_manager::websocket_error_handler on_error)
http_manager::websocket_error_handler on_error)
: m_endpoint(endpoint) {
this->on_open = on_open;
this->on_message = on_message;
@ -240,7 +240,7 @@ struct websocket_connection_impl : public http_manager::websocket_connection {
webpp::ws_server *m_wsserver;
/* The underlying Commection. */
std::shared_ptr<webpp::ws_server::Connection> m_connection;
websocket_connection_impl(webpp::ws_server *server, std::shared_ptr<webpp::ws_server::Connection> connection)
websocket_connection_impl(webpp::ws_server *server, std::shared_ptr<webpp::ws_server::Connection> connection)
: m_wsserver(server), m_connection(connection) { }
/** Sends a message to the client that is connected on the other end of this Websocket connection. */
@ -358,7 +358,7 @@ void http_manager::on_open(http_manager::websocket_endpoint_ptr endpoint, void *
std::shared_ptr<webpp::ws_server::Connection> conn = (static_cast<webpp::ws_server::Connection *>(connection))->ptr();
http_manager::websocket_connection_ptr connection_impl = std::make_shared<websocket_connection_impl>(ws_server, conn);
m_connections[connection] = connection_impl;
if (endpoint->on_open) {
endpoint->on_open(connection_impl);
}
@ -384,7 +384,7 @@ void http_manager::on_close(http_manager::websocket_endpoint_ptr endpoint, void
http_manager::websocket_connection_ptr websocket_connection_impl = (*i).second;
endpoint->on_close(websocket_connection_impl, status, reason);
}
m_connections.erase(connection);
}
}
@ -434,7 +434,7 @@ void http_manager::serve_document(http_request_ptr request, http_response_ptr re
}
}
void http_manager::serve_template(http_request_ptr request, http_response_ptr response,
void http_manager::serve_template(http_request_ptr request, http_response_ptr response,
const std::string &filename, substitution substitute, char init, char term)
{
if (!m_active) return;
@ -494,10 +494,10 @@ void http_manager::add_http_handler(const std::string &path, http_manager::http_
m_server->on_get(path, std::bind(on_get, handler, _1, _2));
std::lock_guard<std::mutex> lock(m_handlers_mutex);
m_handlers.emplace(path, handler);
m_handlers.emplace(path, handler);
}
void http_manager::remove_http_handler(const std::string &path) {
void http_manager::remove_http_handler(const std::string &path) {
if (!m_active) return;
m_server->remove_handler(path);
@ -515,7 +515,7 @@ void http_manager::clear() {
m_handlers.clear();
}
http_manager::websocket_endpoint_ptr http_manager::add_endpoint(const std::string &path,
http_manager::websocket_endpoint_ptr http_manager::add_endpoint(const std::string &path,
http_manager::websocket_open_handler on_open,
http_manager::websocket_message_handler on_message,
http_manager::websocket_close_handler on_close,
@ -533,21 +533,21 @@ http_manager::websocket_endpoint_ptr http_manager::add_endpoint(const std::strin
endpoint.on_open = [&, this, endpoint_impl](std::shared_ptr<webpp::ws_server::Connection> conn) {
this->on_open(endpoint_impl, conn.get());
};
endpoint.on_message = [&, this, endpoint_impl](std::shared_ptr<webpp::ws_server::Connection> conn, std::shared_ptr<webpp::ws_server::Message> message) {
std::string payload = message->string();
int opcode = message->fin_rsv_opcode & 0x0f;
this->on_message(endpoint_impl, conn.get(), payload, opcode);
};
endpoint.on_close = [&, this, endpoint_impl](std::shared_ptr<webpp::ws_server::Connection> conn, int status, const std::string& reason) {
this->on_close(endpoint_impl, conn.get(), status, reason);
};
endpoint.on_error = [&, this, endpoint_impl](std::shared_ptr<webpp::ws_server::Connection> conn, const std::error_code& error_code) {
this->on_error(endpoint_impl, conn.get(), error_code);
};
m_endpoints[path] = endpoint_impl;
return endpoint_impl;
} else {

View File

@ -39,28 +39,28 @@ class http_manager
{
DISABLE_COPYING(http_manager);
public:
/** An HTTP Request. */
struct http_request : public std::enable_shared_from_this<http_request>
{
/** Retrieves the requested resource. */
virtual const std::string get_resource() = 0; // The entire resource: path, query and fragment.
/** Returns the path part of the requested resource. */
virtual const std::string get_path() = 0;
/** Returns the query part of the requested resource. */
virtual const std::string get_query() = 0;
/** Returns the fragment part of the requested resource. */
virtual const std::string get_fragment() = 0;
/** Retrieves a header from the HTTP request. */
virtual const std::string get_header(const std::string &header_name) = 0;
/** Retrieves a header from the HTTP request. */
virtual const std::list<std::string> get_headers(const std::string &header_name) = 0;
/** Returns the body that was submitted with the HTTP request. */
virtual const std::string get_body() = 0;
};
@ -71,7 +71,7 @@ public:
{
/** Sets the HTTP status to be returned to the client. */
virtual void set_status(int status) = 0;
/** Sets the HTTP content type to be returned to the client. */
virtual void set_content_type(const std::string &type) = 0;
@ -88,29 +88,29 @@ public:
{
/** Sends a message to the client that is connected on the other end of this Websocket connection. */
virtual void send_message(const std::string &payload, int opcode) = 0;
/** Closes this open Websocket connection. */
virtual void close() = 0;
virtual ~websocket_connection() { }
};
typedef std::shared_ptr<websocket_connection> websocket_connection_ptr;
/** Handles opening an incoming Websocket connection. */
typedef std::function<void(websocket_connection_ptr connection)> websocket_open_handler;
/** Handles an incoming message on an open Websocket connection. */
typedef std::function<void(websocket_connection_ptr connection, const std::string &payload, int opcode)> websocket_message_handler;
/** Handles when the client has closed a websocket connection. */
typedef std::function<void(websocket_connection_ptr connection, int status, const std::string& reason)> websocket_close_handler;
/** Handles when there has been an error on a websocket connection. */
typedef std::function<void(websocket_connection_ptr connection, const std::error_code& error_code)> websocket_error_handler;
/** Handles an incoming HTTP request, generating an HTTP response. */
typedef std::function<void(http_request_ptr, http_response_ptr)> http_handler;
struct websocket_endpoint : public std::enable_shared_from_this<websocket_endpoint> {
websocket_open_handler on_open;
websocket_message_handler on_message;
@ -118,11 +118,11 @@ public:
websocket_error_handler on_error;
};
typedef std::shared_ptr<websocket_endpoint> websocket_endpoint_ptr;
/** Substitutes one string with another, and returns whether the substitution should be performed.
* Used when evaluating a template. */
typedef std::function<bool(std::string &)> substitution;
http_manager(bool active, short port, const char *root);
virtual ~http_manager();
void clear();
@ -132,10 +132,10 @@ public:
* will be used instead.
*/
void add_template(const std::string &path, substitution substitute, char init, char term);
/** Removes a template from the web server. */
void remove_template(const std::string &path);
/** Serves a template at an explicit path, which may be diffrent from the request path, under the document root.
* The template will be read and parsed:
* strings between each pair of <init, term> characters will be passed to the substitute function and the result
@ -144,23 +144,23 @@ public:
void serve_template(http_request_ptr request, http_response_ptr response, const std::string &path, substitution substitute, char init, char term);
void serve_document(http_request_ptr request, http_response_ptr response, const std::string &path);
/** Adds an HTTP handler. When the specified path is requested, the specified HTTP handler will be called. */
void add_http_handler(const std::string &path, http_handler handler);
/** Removes the HTTP handler at the specified path. */
void remove_http_handler(const std::string &path);
/** Retrieves a websocket endpoint, possibly adding it if it does not already exist. */
websocket_endpoint_ptr add_endpoint(const std::string &path, websocket_open_handler on_open, websocket_message_handler on_message, websocket_close_handler on_close, websocket_error_handler on_error);
/** Removes the websocket endpoint at the specified path. */
void remove_endpoint(const std::string &path);
bool is_active() {
return m_active;
}
private:
void on_open(http_manager::websocket_endpoint_ptr endpoint, void *onnection);
@ -169,26 +169,26 @@ private:
void on_close(http_manager::websocket_endpoint_ptr endpoint, void *connection, int status, const std::string& reason);
void on_error(http_manager::websocket_endpoint_ptr endpoint, void *connection, const std::error_code& error_code);
bool read_file(std::ostream &os, const std::string &path);
bool m_active;
std::shared_ptr<asio::io_context> m_io_context;
std::unique_ptr<webpp::http_server> m_server;
std::unique_ptr<webpp::ws_server> m_wsserver;
std::thread m_server_thread;
std::string m_root;
std::unordered_map<std::string, http_handler> m_handlers;
std::mutex m_handlers_mutex;
std::unordered_map<std::string, websocket_endpoint_ptr> m_endpoints;
std::mutex m_endpoints_mutex;
std::unordered_map<void *, websocket_connection_ptr> m_connections; // the keys are really webpp::ws_server::Connection pointers
std::mutex m_connections_mutex;
};

View File

@ -191,8 +191,8 @@ void image_manager::options_extract()
// 2. When is_reset_on_load(), and this results in a device being unmounted (unmounting is_reset_and_load()
// doesn't force an unmount).
//
// Note that as a part of #2, we cannot extract the option when the image in question is a part of an
// active reset_on_load; hence the check for is_reset_and_loading() (see issue #2414)
// Note that as a part of #2, we cannot extract the option when the image in question is a part of an
// active reset_on_load; hence the check for is_reset_and_loading() (see issue #2414)
if (!image.is_reset_on_load()
|| (!image.exists() && !image.is_reset_and_loading() && !machine().options().image_option(image.instance_name()).value().empty()))
{

View File

@ -1209,7 +1209,7 @@ void running_machine::export_http_api()
writer.EndArray();
writer.EndObject();
response->set_status(200);
response->set_content_type("application/json");
response->set_body(s.GetString());

View File

@ -1428,7 +1428,7 @@ void bios_selection::handle()
moptions.set_value(OPTION_SOFTWARENAME,
ui_swinfo->listname + ":" + ui_swinfo->shortname,
OPTION_PRIORITY_CMDLINE);
moptions.set_value(OPTION_SNAPNAME,
moptions.set_value(OPTION_SNAPNAME,
ui_swinfo->listname + std::string(PATH_SEPARATOR) + ui_swinfo->shortname,
OPTION_PRIORITY_CMDLINE);
reselect_last::driver = drivlist.driver().name;

View File

@ -80,7 +80,7 @@ namespace webpp {
std::string remote_endpoint_address;
unsigned short remote_endpoint_port;
std::shared_ptr<Connection> ptr() {
return this->shared_from_this();
}
@ -432,7 +432,7 @@ namespace webpp {
}
}
}
void write_handshake(const std::shared_ptr<Connection> &connection, const std::shared_ptr<asio::streambuf> &read_buffer) {
//Find path- and method-match, and generate response
std::lock_guard<std::mutex> lock(m_endpoint_mutex);

View File

@ -18,12 +18,12 @@
* M4T28-8R128H1 TimeKeeper RTC/CMOS
* PLX PCI9050 Bus Target Interface Chip (interfaces ISA-style designs to PCI)
* Midway Zeus-series custom video
* Actiontec PM560LKI PCI Data/Fax Modem (PCI\VEN_11C1&DEV_0480&SUBSYS_04801668)
* TL16c552 dual UART
* ADSP-2181 based DCS2 audio (unclear which variant)
* Cirrus Logic CS4338 16 bit stereo audio serial DAC, PCB has space for 3 chips (6-channels), only 1 is populated
* Maxim MAX192 8 channel 10 bit serial ADC
* PIC16C57 (protection? serial #?)
* Actiontec PM560LKI PCI Data/Fax Modem (PCI\VEN_11C1&DEV_0480&SUBSYS_04801668)
* TL16c552 dual UART
* ADSP-2181 based DCS2 audio (unclear which variant)
* Cirrus Logic CS4338 16 bit stereo audio serial DAC, PCB has space for 3 chips (6-channels), only 1 is populated
* Maxim MAX192 8 channel 10 bit serial ADC
* PIC16C57 (protection? serial #?)
* Quantum Fireball CX 6.4GB IDE HDD (C/H/S 13328/15/63)
TODO:

View File

@ -61,7 +61,7 @@ Bugs (all of these looks BTANBs):
00E8E0: 6700 001A beq $e8fc
00E8E4: 0C39 000F 00C0 008E cmpi.b #$f, $c0008e.l
00E8EC: 6700 000E beq $e8fc
00E8F0: 33FC 2000 00C0 1982 move.w #$2000, $c01982.l // timer inited again???
00E8F0: 33FC 2000 00C0 1982 move.w #$2000, $c01982.l // timer inited again???
00E8F8: 6100 0118 bsr $ea12
00E8FC: 4E75 rts
---
@ -73,7 +73,7 @@ Bugs (all of these looks BTANBs):
- flip screen doesn't work properly,
game code explicitly sets flip screen off & the correlated work RAM buffer at 0xee2 no matter the dip setting
- some service mode items are buggy or not functioning properly (font, color, inputs, sound, 2nd item);
*/
@ -103,19 +103,19 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<snk68_spr_device> m_sprites;
tilemap_t *m_tx_tilemap;
DECLARE_WRITE8_MEMBER(output_w);
DECLARE_WRITE8_MEMBER(sound_cmd_w);
DECLARE_WRITE16_MEMBER(tx_vram_w);
DECLARE_WRITE8_MEMBER(blackt96_soundio_port00_w);
DECLARE_READ8_MEMBER(blackt96_soundio_port01_r);
DECLARE_WRITE8_MEMBER(blackt96_soundio_port01_w);
DECLARE_READ8_MEMBER(blackt96_soundio_port02_r);
DECLARE_WRITE8_MEMBER(blackt96_soundio_port02_w);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
void tile_callback(int &tile, int& fx, int& fy, int& region);
@ -158,7 +158,7 @@ uint32_t blackt96_state::screen_update_blackt96(screen_device &screen, bitmap_in
m_sprites->draw_sprites_all(bitmap, cliprect);
m_tx_tilemap->draw(screen,bitmap, cliprect, 0, 0);
return 0;
}
@ -183,8 +183,8 @@ WRITE8_MEMBER(blackt96_state::output_w)
m_sprites->set_flip(data & 0x08);
machine().bookkeeping().coin_counter_w(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2);
// printf("blackt96_c0000_w %04x %04x\n",data & 0xfc,mem_mask);
// printf("blackt96_c0000_w %04x %04x\n",data & 0xfc,mem_mask);
}
WRITE16_MEMBER(blackt96_state::tx_vram_w)
@ -198,7 +198,7 @@ static ADDRESS_MAP_START( blackt96_map, AS_PROGRAM, 16, blackt96_state )
AM_RANGE(0x080000, 0x080001) AM_READ_PORT("P1_P2") AM_WRITE8(sound_cmd_w,0xff00) // soundlatch
AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1") AM_WRITE8(output_w,0x00ff) // COIN INPUT
AM_RANGE(0x0e0000, 0x0e0001) AM_READ( random_r ) // unk, from sound? - called in tandem with result discarded, watchdog?
AM_RANGE(0x0e8000, 0x0e8001) AM_READ( random_r ) // unk, from sound? /
AM_RANGE(0x0e8000, 0x0e8001) AM_READ( random_r ) // unk, from sound? /
AM_RANGE(0x0f0000, 0x0f0001) AM_READ_PORT("DSW1")
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2") AM_WRITENOP // service mode, left-over?

View File

@ -10,14 +10,14 @@
The 'FX' board is filled with 'FU' roms except for the 4 program roms,
both boards have 'export' stickers which usually indicates a World version.
Maybe one is a UK or European version. Some boards exist with 'FU-1' roms
which are binary identical to the FX roms.
which are binary identical to the FX roms.
The FX/FU-1 roms are largely translation corrections from the first revision:
THEIR SOLDIERS ARE ARMED WITH THE ADVANCED AND BIZARRE WEAPONS
-> THEIR SOLDIERS ARE ARMED WITH THE MOST ADVANCED AND BIZARRE WEAPONS.
etc
DE-0333-3 PCB
Data East 59 - 64 pin (68k)

View File

@ -183,7 +183,7 @@ CC-DAC is a TDA1311A Stereo Continuous Calibration DAC
Service Switch | P | 14| Video GND
Video Horizontal Sync | R | 15| Test Switch
| S | 16| Coin Switch
Start Player 2 | T | 17| Start Player 1
Start Player 2 | T | 17| Start Player 1
| U | 18|
| V | 19|
| W | 20|

View File

@ -2021,7 +2021,7 @@ static MACHINE_CONFIG_START( lastmisn )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", shackled)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,lastmisn)
/* sound hardware */
@ -2075,7 +2075,7 @@ static MACHINE_CONFIG_START( shackled )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", shackled)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,shackled)
/* sound hardware */
@ -2129,7 +2129,7 @@ static MACHINE_CONFIG_START( gondo )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", gondo)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,gondo)
/* sound hardware */
@ -2183,7 +2183,7 @@ static MACHINE_CONFIG_START( garyoret )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", gondo)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,garyoret)
/* sound hardware */
@ -2298,7 +2298,7 @@ static MACHINE_CONFIG_START( csilver )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", shackled)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,lastmisn)
/* sound hardware */
@ -2361,7 +2361,7 @@ static MACHINE_CONFIG_START( oscar )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", oscar)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024)
MCFG_VIDEO_START_OVERRIDE(dec8_state,oscar)
/* sound hardware */
@ -2407,7 +2407,7 @@ static MACHINE_CONFIG_START( srdarwin )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", srdarwin)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(144)
MCFG_VIDEO_START_OVERRIDE(dec8_state,srdarwin)
/* sound hardware */
@ -2465,7 +2465,7 @@ static MACHINE_CONFIG_START( cobracom )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", cobracom)
MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting
MCFG_DECO_RMC3_SET_PALETTE_SIZE(256)
MCFG_VIDEO_START_OVERRIDE(dec8_state,cobracom)
/* sound hardware */
@ -3756,7 +3756,7 @@ GAME( 1987, oscarj2, oscar, oscar, oscarj, dec8_state, oscar, R
GAME( 1987, srdarwin, 0, srdarwin, srdarwin, dec8_state, srdarwin, ROT270, "Data East Corporation", "Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, dec8_state, srdarwin, ROT270, "Data East Corporation", "Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE )
// Unlike most Deco games of this period Cobra Command does not seem to have a Data East USA release. Instead the Data East Corporation release
// Unlike most Deco games of this period Cobra Command does not seem to have a Data East USA release. Instead the Data East Corporation release
// was used in the US as evidenced by boards with the EL romset bearing AAMA seal stickers (American Amusement Machine Association)
GAME( 1988, cobracom, 0, cobracom, cobracom, dec8_state, cobracom, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, cobracoma, cobracom, cobracom, cobracom, dec8_state, cobracom, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE )

View File

@ -980,7 +980,7 @@ ROM_START( dectalk )
// older dsp firmware from earlier dectalk firmware 2.0 units, both proms are 82s191 equivalent; this firmware clips with the 1.8 dectalk firmware
ROM_LOAD16_BYTE("23-205f4.e70", 0x000, 0x800, CRC(ed76a3ad) SHA1(3136bae243ef48721e21c66fde70dab5fc3c21d0)) // Label: "LM8506205F4 // M1-76161-5" @ E70
ROM_LOAD16_BYTE("23-204f4.e69", 0x001, 0x800, CRC(79bb54ff) SHA1(9409f90f7a397b041e4440341f2d7934cb479285)) // Label: "LM8504204F4 // 78S191" @ E69
// older dsp firmware from dectalk firmware 1.8 units; while this firmware works with 2.0 dectalk firmware, its a bit quieter than the proper one.
// older dsp firmware from dectalk firmware 1.8 units; while this firmware works with 2.0 dectalk firmware, its a bit quieter than the proper one.
ROM_LOAD16_BYTE("23-166f4.e70", 0x000, 0x800, CRC(2d036ffc) SHA1(e8c25ca092dde2dc0aec73921af806026bdfbbc3)) // HM1-76161-5
ROM_LOAD16_BYTE("23-165f4.e69", 0x001, 0x800, CRC(a3019ca4) SHA1(249f269c38f7f44edb6d025bcc867c8ca0de3e9c)) // HM1-76161-5

View File

@ -48,7 +48,7 @@ public:
// misc common
u16 m_inp_mux; // multiplexed inputs mask
int m_inp_lines; // number of input mux columns
u8 read_inputs(int columns);
virtual void update_k_line();
@ -124,7 +124,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(hh_sm510_state::display_decay_tick)
{
u8 z_mask = (1 << m_display_z_len) - 1;
u8 zx_len = 1 << (m_display_x_len + m_display_z_len);
for (int zx = 0; zx < zx_len; zx++)
{
for (int y = 0; y < m_display_y_len; y++)
@ -153,7 +153,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(hh_sm510_state::display_decay_tick)
char buf[0x10];
sprintf(buf, "%d.%d.%d", zx >> m_display_z_len, y, zx & z_mask);
output().set_value(buf, active_state);
m_display_cache[y][zx] = active_state;
}
}

View File

@ -6426,7 +6426,7 @@ WRITE16_MEMBER(arcmania_state::write_o)
// O3,O4,O6: input mux
m_inp_mux = (data >> 3 & 3) | (data >> 4 & 4);
// O5: power off when low (turn back on with button row 1)
if (~data & 0x20)
power_off();

View File

@ -43,25 +43,25 @@ namespace {
}
// **** Constants ****
static constexpr unsigned MASTER_CLOCK = 9808000;
static constexpr unsigned MASTER_CLOCK = 9808000;
// Video memory is actually made of 16384 4-bit nibbles
static constexpr unsigned VIDEO_MEM_SIZE= 8192;
static constexpr unsigned ALPHA_MEM_SIZE= 4096;
static constexpr unsigned GRAPH_MEM_SIZE= 16384;
static constexpr unsigned CRT_STS_READY_BIT = 0;
static constexpr unsigned CRT_STS_DISPLAY_BIT = 1;
//static constexpr unsigned CRT_STS_BUSY_BIT = 7;
static constexpr unsigned CRT_CTL_RD_RQ_BIT = 0;
static constexpr unsigned CRT_CTL_WIPEOUT_BIT = 1;
static constexpr unsigned CRT_CTL_POWERDN_BIT = 2;
static constexpr unsigned CRT_CTL_GRAPHICS_BIT = 7;
static constexpr unsigned IRQ_KEYBOARD_BIT = 0;
static constexpr unsigned IRQ_TIMER0_BIT = 1;
static constexpr unsigned TIMER_COUNT = 4;
static constexpr unsigned IRQ_IOP0_BIT = IRQ_TIMER0_BIT + TIMER_COUNT;
static constexpr unsigned IOP_COUNT = 0;
static constexpr unsigned IRQ_BIT_COUNT = IRQ_IOP0_BIT + IOP_COUNT;
static constexpr unsigned NO_IRQ = IRQ_BIT_COUNT;
static constexpr unsigned CRT_STS_READY_BIT = 0;
static constexpr unsigned CRT_STS_DISPLAY_BIT = 1;
//static constexpr unsigned CRT_STS_BUSY_BIT = 7;
static constexpr unsigned CRT_CTL_RD_RQ_BIT = 0;
static constexpr unsigned CRT_CTL_WIPEOUT_BIT = 1;
static constexpr unsigned CRT_CTL_POWERDN_BIT = 2;
static constexpr unsigned CRT_CTL_GRAPHICS_BIT = 7;
static constexpr unsigned IRQ_KEYBOARD_BIT = 0;
static constexpr unsigned IRQ_TIMER0_BIT = 1;
static constexpr unsigned TIMER_COUNT = 4;
static constexpr unsigned IRQ_IOP0_BIT = IRQ_TIMER0_BIT + TIMER_COUNT;
static constexpr unsigned IOP_COUNT = 0;
static constexpr unsigned IRQ_BIT_COUNT = IRQ_IOP0_BIT + IOP_COUNT;
static constexpr unsigned NO_IRQ = IRQ_BIT_COUNT;
// ************
// hp85_state
@ -251,11 +251,11 @@ WRITE_LINE_MEMBER(hp85_state::vblank_w)
// Vector table (indexed by bit no. in m_int_serv)
static const uint8_t vector_table[] = {
0x04, // Keyboard
0x08, // Timer 0
0x0a, // Timer 1
0x0c, // Timer 2
0x0e // Timer 3
0x04, // Keyboard
0x08, // Timer 0
0x0a, // Timer 1
0x0c, // Timer 2
0x0e // Timer 3
};
IRQ_CALLBACK_MEMBER(hp85_state::irq_callback)
@ -401,86 +401,86 @@ WRITE8_MEMBER(hp85_state::rselec_w)
// Inner index: SHIFT state (0 = no SHIFT, 1 = SHIFT)
static const uint8_t keyboard_table[ 80 ][ 2 ] = {
// -- SHIFT
{ 0xa2 , 0xac }, // 0,0: Down / Auto
{ 0xa1 , 0xa5 }, // 0,1: Up / Home
{ 0x83 , 0x87 }, // 0,2: k4 / k8
{ 0x82 , 0x86 }, // 0,3: k3 / k7
{ 0x81 , 0x85 }, // 0,4: k2 / k6
{ 0x80 , 0x84 }, // 0,5: k1 / k5
{ 0x96 , 0x60 }, // 0,6: LABEL KEY
{ 0xff , 0xff }, // 0,7: N/U
{ 0x38 , 0x2a }, // 1,0: 8
{ 0x37 , 0x26 }, // 1,1: 7
{ 0x36 , 0x5e }, // 1,2: 6
{ 0x35 , 0x25 }, // 1,3: 5
{ 0x34 , 0x24 }, // 1,4: 4
{ 0x33 , 0x23 }, // 1,5: 3
{ 0x32 , 0x40 }, // 1,6: 2
{ 0x31 , 0x21 }, // 1,7: 1
{ 0x49 , 0x69 }, // 2,0: I
{ 0x55 , 0x75 }, // 2,1: U
{ 0x59 , 0x79 }, // 2,2: Y
{ 0x54 , 0x74 }, // 2,3: T
{ 0x52 , 0x72 }, // 2,4: R
{ 0x45 , 0x65 }, // 2,5: E
{ 0x57 , 0x77 }, // 2,6: W
{ 0x51 , 0x71 }, // 2,7: Q
{ 0x4b , 0x6b }, // 3,0: K
{ 0x4a , 0x6a }, // 3,1: J
{ 0x48 , 0x68 }, // 3,2: H
{ 0x47 , 0x67 }, // 3,3: G
{ 0x46 , 0x66 }, // 3,4: F
{ 0x44 , 0x64 }, // 3,5: D
{ 0x53 , 0x73 }, // 3,6: S
{ 0x41 , 0x61 }, // 3,7: A
{ 0x4d , 0x6d }, // 4,0: M
{ 0x4e , 0x6e }, // 4,1: N
{ 0x42 , 0x62 }, // 4,2: B
{ 0x56 , 0x76 }, // 4,3: V
{ 0x43 , 0x63 }, // 4,4: C
{ 0x58 , 0x78 }, // 4,5: X
{ 0x5a , 0x7a }, // 4,6: Z
{ 0x20 , 0x20 }, // 4,7: Space
{ 0x2c , 0x3c }, // 5,0: ,
{ 0x2e , 0x3e }, // 5,1: .
{ 0x2f , 0x3f }, // 5,2: / ?
{ 0x8e , 0x90 }, // 5,3: PAUSE / STEP
{ 0x8d , 0x8d }, // 5,4: RUN
{ 0x2b , 0x7f }, // 5,5: KP +
{ 0x2d , 0x7d }, // 5,6: KP -
{ 0x2a , 0x7e }, // 5,7: KP *
{ 0x4c , 0x6c }, // 6,0: L
{ 0x3b , 0x3a }, // 6,1: ;
{ 0x27 , 0x22 }, // 6,2: ' "
{ 0x9a , 0x9a }, // 6,3: END LINE
{ 0x94 , 0x95 }, // 6,4: LIST / P LST
{ 0xff , 0xff }, // 6,5: N/U
{ 0xff , 0xff }, // 6,6: N/U
{ 0x2f , 0x7b }, // 6,7: KP /
{ 0x4f , 0x6f }, // 7,0: O
{ 0x50 , 0x70 }, // 7,1: P
{ 0x28 , 0x5b }, // 7,2: ( [
{ 0x29 , 0x5d }, // 7,3: ) ]
{ 0x8f , 0xad }, // 7,4: CONT / SCRATCH
{ 0xa0 , 0x92 }, // 7,5: -LINE / CLEAR
{ 0x29 , 0x8c }, // 7,6: ) INIT
{ 0xff , 0xff }, // 7,7: N/U
{ 0x39 , 0x28 }, // 8,0: 9
{ 0x30 , 0x29 }, // 8,1: 0
{ 0x2d , 0x5f }, // 8,2: - _
{ 0x3d , 0x2b }, // 8,3: = +
{ 0x5c , 0x7c }, // 8,4: \ |
{ 0x99 , 0x9b }, // 8,5: BS
{ 0x28 , 0x8b }, // 8,6: ( RESET
{ 0x5e , 0xa6 }, // 8,7: ^ / RESLT
{ 0x9c , 0x93 }, // 9,0: LEFT / GRAPH
{ 0x9d , 0x89 }, // 9,1: RIGHT / COPY
{ 0xa3 , 0xa3 }, // 9,2: RPL / INS
{ 0xa4 , 0xa8 }, // 9,3: -CHAR / DEL
{ 0x9f , 0x9e }, // 9,4: ROLL
{ 0xaa , 0x88 }, // 9,5: LOAD / REW
{ 0xa9 , 0x91 }, // 9,6: STORE / TEST
{ 0x8a , 0x8a } // 9,7: PAPER ADVANCE
{ 0xa2 , 0xac }, // 0,0: Down / Auto
{ 0xa1 , 0xa5 }, // 0,1: Up / Home
{ 0x83 , 0x87 }, // 0,2: k4 / k8
{ 0x82 , 0x86 }, // 0,3: k3 / k7
{ 0x81 , 0x85 }, // 0,4: k2 / k6
{ 0x80 , 0x84 }, // 0,5: k1 / k5
{ 0x96 , 0x60 }, // 0,6: LABEL KEY
{ 0xff , 0xff }, // 0,7: N/U
{ 0x38 , 0x2a }, // 1,0: 8
{ 0x37 , 0x26 }, // 1,1: 7
{ 0x36 , 0x5e }, // 1,2: 6
{ 0x35 , 0x25 }, // 1,3: 5
{ 0x34 , 0x24 }, // 1,4: 4
{ 0x33 , 0x23 }, // 1,5: 3
{ 0x32 , 0x40 }, // 1,6: 2
{ 0x31 , 0x21 }, // 1,7: 1
{ 0x49 , 0x69 }, // 2,0: I
{ 0x55 , 0x75 }, // 2,1: U
{ 0x59 , 0x79 }, // 2,2: Y
{ 0x54 , 0x74 }, // 2,3: T
{ 0x52 , 0x72 }, // 2,4: R
{ 0x45 , 0x65 }, // 2,5: E
{ 0x57 , 0x77 }, // 2,6: W
{ 0x51 , 0x71 }, // 2,7: Q
{ 0x4b , 0x6b }, // 3,0: K
{ 0x4a , 0x6a }, // 3,1: J
{ 0x48 , 0x68 }, // 3,2: H
{ 0x47 , 0x67 }, // 3,3: G
{ 0x46 , 0x66 }, // 3,4: F
{ 0x44 , 0x64 }, // 3,5: D
{ 0x53 , 0x73 }, // 3,6: S
{ 0x41 , 0x61 }, // 3,7: A
{ 0x4d , 0x6d }, // 4,0: M
{ 0x4e , 0x6e }, // 4,1: N
{ 0x42 , 0x62 }, // 4,2: B
{ 0x56 , 0x76 }, // 4,3: V
{ 0x43 , 0x63 }, // 4,4: C
{ 0x58 , 0x78 }, // 4,5: X
{ 0x5a , 0x7a }, // 4,6: Z
{ 0x20 , 0x20 }, // 4,7: Space
{ 0x2c , 0x3c }, // 5,0: ,
{ 0x2e , 0x3e }, // 5,1: .
{ 0x2f , 0x3f }, // 5,2: / ?
{ 0x8e , 0x90 }, // 5,3: PAUSE / STEP
{ 0x8d , 0x8d }, // 5,4: RUN
{ 0x2b , 0x7f }, // 5,5: KP +
{ 0x2d , 0x7d }, // 5,6: KP -
{ 0x2a , 0x7e }, // 5,7: KP *
{ 0x4c , 0x6c }, // 6,0: L
{ 0x3b , 0x3a }, // 6,1: ;
{ 0x27 , 0x22 }, // 6,2: ' "
{ 0x9a , 0x9a }, // 6,3: END LINE
{ 0x94 , 0x95 }, // 6,4: LIST / P LST
{ 0xff , 0xff }, // 6,5: N/U
{ 0xff , 0xff }, // 6,6: N/U
{ 0x2f , 0x7b }, // 6,7: KP /
{ 0x4f , 0x6f }, // 7,0: O
{ 0x50 , 0x70 }, // 7,1: P
{ 0x28 , 0x5b }, // 7,2: ( [
{ 0x29 , 0x5d }, // 7,3: ) ]
{ 0x8f , 0xad }, // 7,4: CONT / SCRATCH
{ 0xa0 , 0x92 }, // 7,5: -LINE / CLEAR
{ 0x29 , 0x8c }, // 7,6: ) INIT
{ 0xff , 0xff }, // 7,7: N/U
{ 0x39 , 0x28 }, // 8,0: 9
{ 0x30 , 0x29 }, // 8,1: 0
{ 0x2d , 0x5f }, // 8,2: - _
{ 0x3d , 0x2b }, // 8,3: = +
{ 0x5c , 0x7c }, // 8,4: \ |
{ 0x99 , 0x9b }, // 8,5: BS
{ 0x28 , 0x8b }, // 8,6: ( RESET
{ 0x5e , 0xa6 }, // 8,7: ^ / RESLT
{ 0x9c , 0x93 }, // 9,0: LEFT / GRAPH
{ 0x9d , 0x89 }, // 9,1: RIGHT / COPY
{ 0xa3 , 0xa3 }, // 9,2: RPL / INS
{ 0xa4 , 0xa8 }, // 9,3: -CHAR / DEL
{ 0x9f , 0x9e }, // 9,4: ROLL
{ 0xaa , 0x88 }, // 9,5: LOAD / REW
{ 0xa9 , 0x91 }, // 9,6: STORE / TEST
{ 0x8a , 0x8a } // 9,7: PAPER ADVANCE
};
bool hp85_state::kb_scan_ioport(ioport_value pressed , unsigned idx_base , uint8_t& keycode)
@ -654,95 +654,95 @@ static INPUT_PORTS_START(hp85)
// n = r / 4
// b = (r % 4) * 8 + c
PORT_START("KEY0")
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_NAME("Down AUTO") // 0,0: Down / Auto
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_NAME("Up Home") // 0,1: Up / Home
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_NAME("k4 k8") // 0,2: k4 / k8
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_NAME("k3 k7") // 0,3: k3 / k7
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_NAME("k2 k6") // 0,4: k2 / k6
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("k1 k5") // 0,5: k1 / k5
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LABEL KEY") // 0,6: LABEL KEY
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_UNUSED) // 0,7: N/U
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') // 1,0: 8
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') // 1,1: 7
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') // 1,2: 6
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') // 1,3: 5
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') // 1,4: 4
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // 1,5: 3
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // 1,6: 2
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // 1,7: 1
PORT_BIT(BIT_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 2,0: I
PORT_BIT(BIT_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 2,1: U
PORT_BIT(BIT_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 2,2: Y
PORT_BIT(BIT_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 2,3: T
PORT_BIT(BIT_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 2,4: R
PORT_BIT(BIT_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 2,5: E
PORT_BIT(BIT_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 2,6: W
PORT_BIT(BIT_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 2,7: Q
PORT_BIT(BIT_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 3,0: K
PORT_BIT(BIT_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') // 3,1: J
PORT_BIT(BIT_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 3,2: H
PORT_BIT(BIT_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 3,3: G
PORT_BIT(BIT_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 3,4: F
PORT_BIT(BIT_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') // 3,5: D
PORT_BIT(BIT_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 3,6: S
PORT_BIT(BIT_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 3,7: A
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_NAME("Down AUTO") // 0,0: Down / Auto
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_NAME("Up Home") // 0,1: Up / Home
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_NAME("k4 k8") // 0,2: k4 / k8
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_NAME("k3 k7") // 0,3: k3 / k7
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_NAME("k2 k6") // 0,4: k2 / k6
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("k1 k5") // 0,5: k1 / k5
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LABEL KEY") // 0,6: LABEL KEY
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_UNUSED) // 0,7: N/U
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') // 1,0: 8
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') // 1,1: 7
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') // 1,2: 6
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') // 1,3: 5
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') // 1,4: 4
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // 1,5: 3
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // 1,6: 2
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // 1,7: 1
PORT_BIT(BIT_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 2,0: I
PORT_BIT(BIT_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 2,1: U
PORT_BIT(BIT_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 2,2: Y
PORT_BIT(BIT_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 2,3: T
PORT_BIT(BIT_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 2,4: R
PORT_BIT(BIT_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 2,5: E
PORT_BIT(BIT_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 2,6: W
PORT_BIT(BIT_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 2,7: Q
PORT_BIT(BIT_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 3,0: K
PORT_BIT(BIT_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') // 3,1: J
PORT_BIT(BIT_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 3,2: H
PORT_BIT(BIT_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 3,3: G
PORT_BIT(BIT_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 3,4: F
PORT_BIT(BIT_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') // 3,5: D
PORT_BIT(BIT_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 3,6: S
PORT_BIT(BIT_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 3,7: A
PORT_START("KEY1")
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 4,0: M
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 4,1: N
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 4,2: B
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 4,3: V
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') // 4,4: C
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') // 4,5: X
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 4,6: Z
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 4,7: Space
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') // 5,0: ,
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // 5,1: .
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 5,2: / ?
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAUSE STEP") // 5,3: PAUSE / STEP
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("RUN") // 5,4: RUN
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("KP +") // 5,5: KP +
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("KP -") // 5,6: KP -
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("KP *") // 5,7: KP * (not sure)
PORT_BIT(BIT_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 6,0: L
PORT_BIT(BIT_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 6,1: ;
PORT_BIT(BIT_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 6,2: ' "
PORT_BIT(BIT_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("END LINE") // 6,3: END LINE
PORT_BIT(BIT_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LIST P LST") // 6,4: LIST / P LST
PORT_BIT(BIT_MASK(21) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,5: N/U
PORT_BIT(BIT_MASK(22) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,6: N/U
PORT_BIT(BIT_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("KP /") // 6,7: KP /
PORT_BIT(BIT_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 7,0: O
PORT_BIT(BIT_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') // 7,1: P
PORT_BIT(BIT_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_CHAR('[') // 7,2: ( [
PORT_BIT(BIT_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_CHAR(']') // 7,3: ) ]
PORT_BIT(BIT_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("CONT SCRATCH") // 7,4: CONT / SCRATCH
PORT_BIT(BIT_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("-LINE CLEAR") // 7,5: -LINE / CLEAR
PORT_BIT(BIT_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME(") INIT") // 7,6: ) INIT
PORT_BIT(BIT_MASK(31) , IP_ACTIVE_HIGH , IPT_UNUSED) // 7,7: N/U
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 4,0: M
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 4,1: N
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 4,2: B
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 4,3: V
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') // 4,4: C
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') // 4,5: X
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 4,6: Z
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 4,7: Space
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') // 5,0: ,
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // 5,1: .
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 5,2: / ?
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAUSE STEP") // 5,3: PAUSE / STEP
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("RUN") // 5,4: RUN
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("KP +") // 5,5: KP +
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("KP -") // 5,6: KP -
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("KP *") // 5,7: KP * (not sure)
PORT_BIT(BIT_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 6,0: L
PORT_BIT(BIT_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 6,1: ;
PORT_BIT(BIT_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 6,2: ' "
PORT_BIT(BIT_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("END LINE") // 6,3: END LINE
PORT_BIT(BIT_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LIST P LST") // 6,4: LIST / P LST
PORT_BIT(BIT_MASK(21) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,5: N/U
PORT_BIT(BIT_MASK(22) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,6: N/U
PORT_BIT(BIT_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("KP /") // 6,7: KP /
PORT_BIT(BIT_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 7,0: O
PORT_BIT(BIT_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') // 7,1: P
PORT_BIT(BIT_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_CHAR('[') // 7,2: ( [
PORT_BIT(BIT_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_CHAR(']') // 7,3: ) ]
PORT_BIT(BIT_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("CONT SCRATCH") // 7,4: CONT / SCRATCH
PORT_BIT(BIT_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("-LINE CLEAR") // 7,5: -LINE / CLEAR
PORT_BIT(BIT_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME(") INIT") // 7,6: ) INIT
PORT_BIT(BIT_MASK(31) , IP_ACTIVE_HIGH , IPT_UNUSED) // 7,7: N/U
PORT_START("KEY2")
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 8,0: 9
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 8,1: 0
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 8,2: - _
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') // 8,3: = +
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') // 8,4: \ |
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) // 8,5: BS
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("( RESET") // 8,6: ( RESET
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("^ RESLT") // 8,7: ^ / RESLT
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("Left GRAPH") // 9,0: LEFT / GRAPH
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("Right COPY") // 9,1: RIGHT / COPY
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("RPL INS") // 9,2: RPL / INS
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_NAME("-CHAR DEL") // 9,3: -CHAR / DEL
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_NAME("ROLL") // 9,4: ROLL
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LOAD REW") // 9,5: LOAD / REW
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("STORE TEST") // 9,6: STORE / TEST
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAPER ADVANCE") // 9,7: PAPER ADVANCE
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 8,0: 9
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 8,1: 0
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 8,2: - _
PORT_BIT(BIT_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') // 8,3: = +
PORT_BIT(BIT_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') // 8,4: \ |
PORT_BIT(BIT_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) // 8,5: BS
PORT_BIT(BIT_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("( RESET") // 8,6: ( RESET
PORT_BIT(BIT_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("^ RESLT") // 8,7: ^ / RESLT
PORT_BIT(BIT_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("Left GRAPH") // 9,0: LEFT / GRAPH
PORT_BIT(BIT_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("Right COPY") // 9,1: RIGHT / COPY
PORT_BIT(BIT_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("RPL INS") // 9,2: RPL / INS
PORT_BIT(BIT_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_NAME("-CHAR DEL") // 9,3: -CHAR / DEL
PORT_BIT(BIT_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_NAME("ROLL") // 9,4: ROLL
PORT_BIT(BIT_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LOAD REW") // 9,5: LOAD / REW
PORT_BIT(BIT_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("STORE TEST") // 9,6: STORE / TEST
PORT_BIT(BIT_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAPER ADVANCE") // 9,7: PAPER ADVANCE
PORT_START("MODKEYS")
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // Shift
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_NAME("Shift lock") // Shift lock
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) // Control
PORT_BIT(BIT_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // Shift
PORT_BIT(BIT_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_NAME("Shift lock") // Shift lock
PORT_BIT(BIT_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) // Control
INPUT_PORTS_END

View File

@ -21,9 +21,9 @@
Guru-Readme for Killer Instinct 1 / Killer Instinct 2
Rare/Nintendo, 1994/1995
This is a fighting game using a hard drive to hold the graphics + code,
This is a fighting game using a hard drive to hold the graphics + code,
running on hardware made by Midway Manufacturing.
The hardware is using similar PCB technology to other Midway games
The hardware is using similar PCB technology to other Midway games
of the era such as San Francisco Rush, Mortal Kombat 3, Cruis'n Exotica,
War Gods etc. The majority of the IC's on the PCB are surface mounted.
@ -114,7 +114,7 @@ Notes:
LED1 - H/Drive Activity LED
LED2 - Sound Activity LED
H/Drive - 2.5" IDE Hard Drive with 44-pin connector. Note the model is checked by the program and the game will not run unless it finds
the correct model. There is a modified Boot ROM available that allows it to work with any model HDD or a cheap Chinese $2 CF>IDE44
the correct model. There is a modified Boot ROM available that allows it to work with any model HDD or a cheap Chinese $2 CF>IDE44
adapter. A cheap Chinese $5 SD>IDE44 adapter can also be used.
- For KI1, Seagate Marathon 2.5" IDE hard drive, model ST9150AG (131MB formatted capacity)
C/H/S = 419/13/47 = 131076608 bytes, labelled 'L1 KILLER INSTINCT DISK (C)1984 NINTENDO/RARE'
@ -127,12 +127,12 @@ Notes:
- For KI labelled 'KI-U96 A-19489 (C)1994 NINTENDO/RARE' (PLCC44)
- For KI2 labelled 'K12-U96 A-20351 (C)1996 NINTENDO/RARE' (PLCC44). Note if the PCB has this chip it is a dedicated KI2 PCB.
If the software is replaced with KI 1 (boot ROM and HDD) the board will boot but immediately jumps to test mode and then freezes.
Also, the top title "Killer Instinct" flashes rapidly. If the sticker on U96 is missing (so can't be identified as a KI 2) and
Also, the top title "Killer Instinct" flashes rapidly. If the sticker on U96 is missing (so can't be identified as a KI 2) and
someone has tried to make it run KI 1 and it has the above symptoms, it is likely a dedicated KI 2 PCB.
EPM7032y - Altera EPM7032LC44-15T CPLD labelled 'K12-U1 A-20383 (C)1996 NINTENDO/RARE' (PLCC44)
This IC is mounted on a small PCB (5772-14668-01) and connected between the IDE44 interface on the main board and the IDE44 Hard Drive.
It is used only with the KI2 conversion kit. This is mainly a protection device to stop game swaps on a KI 1 PCB. However if the
sub board is removed and all the EPROMs and HDD are changed, the main board will run Killer Instinct, providing U96 is the correct
It is used only with the KI2 conversion kit. This is mainly a protection device to stop game swaps on a KI 1 PCB. However if the
sub board is removed and all the EPROMs and HDD are changed, the main board will run Killer Instinct, providing U96 is the correct
chip for KI. If U96 is the type for KI2, then the main board will only run KI2 and can't be converted to KI.
HSync - 15.3846kHz
VSync - 58.9634Hz
@ -166,10 +166,10 @@ Notes:
BOOT ROMs for IDE HDD to Compact Flash conversion
-------------------------------------------------
Killer Instinct:
Killer Instinct:
U98 - ST 27C4001 or 27C040 EPROM. File name = KI_L15DI.U98, CRC32 = 230F55FB
Killer Instinct 2 Dedicated PCB (U96 labelled 'K12-U96 A-20351')
Killer Instinct 2 Dedicated PCB (U96 labelled 'K12-U96 A-20351')
U98 - ST 27C4001 or 27C040 EPROM. File name = KI2_L14P.U98.BIN, CRC32 = D80C937A
Killer Instinct 2 on Killer Instinct 1 PCB (U96 labelled 'KI-U96 A-19489') with KI 2 protection PCB 5772-14668-01

View File

@ -17,7 +17,7 @@ TODO:
Notes:
- Unlike most Arcade games, if you call a ron but you don't have a legit hand you'll automatically
lose the match. This is commonly named chombo in rii'chi mahjong rules;
- After getting a completed hand, press start 1 + ron + discard at the same time to go back
- After getting a completed hand, press start 1 + ron + discard at the same time to go back
into attract mode (!);
==============================================================================================
@ -98,11 +98,11 @@ public:
DECLARE_PALETTE_INIT(m14);
uint32_t screen_update_m14(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(m14_irq);
private:
/* video-related */
tilemap_t *m_m14_tilemap;
/* input-related */
//uint8_t m_hop_mux;
uint8_t m_ballx,m_bally;
@ -259,14 +259,14 @@ static const char *const m14_sample_names[] =
"*ptrmj",
"wall_hit", // 1
"tile_hit", // 2
"tick", // 0x40
"tick", // 0x40
"ball_drop", // 8
"paddle_hit",
nullptr
};
WRITE8_MEMBER(m14_state::sound_w)
{
{
switch(data)
{
case 1: // wall hit
@ -290,7 +290,7 @@ WRITE8_MEMBER(m14_state::sound_w)
}
}
/*************************************
*
* Memory Map
@ -447,7 +447,7 @@ static MACHINE_CONFIG_START( m14 )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("samples", SAMPLES, 0)
MCFG_SAMPLES_CHANNELS(5)

View File

@ -779,13 +779,13 @@ INPUT_PORTS_END
static const gfx_layout tile_charlayout =
{
8,8,
RGN_FRAC(1,3),
3,
8,8,
RGN_FRAC(1,3),
3,
{ RGN_FRAC(2,3), RGN_FRAC(1,3), 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8
8*8
};
@ -1010,7 +1010,7 @@ static MACHINE_CONFIG_DERIVED( battroad, ldrun )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA((64*8-256)/2, 64*8-(64*8-256)/2-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(m62_state, screen_update_battroad)
MCFG_GFXDECODE_ADD("fg_decode", "fg_palette", m62_fg_battroad)
MCFG_PALETTE_ADD("fg_palette", 32)
@ -1075,7 +1075,7 @@ static MACHINE_CONFIG_DERIVED( lotlot, ldrun )
MCFG_PALETTE_ADD("fg_palette", 256)
MCFG_PALETTE_INIT_OWNER(m62_state,m62_lotlot_fg)
MCFG_VIDEO_START_OVERRIDE(m62_state,lotlot)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(m62_state, screen_update_lotlot)

View File

@ -9,16 +9,16 @@
James Jenkins
Walter Fath
abcheck TODOs:
- YGV608 brokenness
- Where is the extra data ROM mapped?
To make abcheck run when the EEPROM is clear:
- F2 to enter service mode
- Player 3 A/B to navigate to GAME OPTIONS
- Player 1 A to enter, Player 1 B to cancel or go back
- Go to LOCAL SELECT and choose the Japanese city of your choice (I don't know what it affects yet)
- Exit test mode (F2) and reset (F3) and the game will boot
abcheck TODOs:
- YGV608 brokenness
- Where is the extra data ROM mapped?
To make abcheck run when the EEPROM is clear:
- F2 to enter service mode
- Player 3 A/B to navigate to GAME OPTIONS
- Player 1 A to enter, Player 1 B to cancel or go back
- Go to LOCAL SELECT and choose the Japanese city of your choice (I don't know what it affects yet)
- Exit test mode (F2) and reset (F3) and the game will boot
-----------------------------------
Guru-Readme for Namco ND-1 hardware
@ -80,10 +80,10 @@ Notes:
LM1203 - National LM1203 RGB VIDEO AMP (DIP28). Note on some PCB revisions there is a capacitor glued on top of this chip.
AT28C16 - Atmel 2k x8-bit EEPROM (DIP24)
YGV608-F - Yamaha YVG608-F video controller (QFP100)
LT1109 - Linear Technology LT1109A DC/DC converter (SOIC8). Note on some PCB revisions this is not present. If the IC is required there
LT1109 - Linear Technology LT1109A DC/DC converter (SOIC8). Note on some PCB revisions this is not present. If the IC is required there
is an additional 'SREG PCB' with the LT1109 and other support components present at this location.
C416 - Namco custom (QFP176), Memory/DMA Controller
MACH210 - AMD MACH211 CPLD, used as Namco "KEYCUS" protection chip (PLCC44)
MACH210 - AMD MACH211 CPLD, used as Namco "KEYCUS" protection chip (PLCC44)
- for Namco Classics 1 stamped 'KC001' at 3C
- for Namco Classics 2 stamped 'KC002' at 3C
- for Abnormal Check stamped 'KC008' at 3D
@ -97,7 +97,7 @@ Notes:
ROMs: (note IC locations are different between GAME+GAME(B) and GAME(C) PCBs.
Namco Classics Volume 1
-------------------------
NC2 MAIN0B.14D - 512k x16-bit EPROM type 27C240/27C4002 (for Japan: NC1) (revisions: MAIN0 or MAIN0B)
@ -151,7 +151,7 @@ The PCB contains the following parts....
Partial Pinout of J12
----------------------
GND 10b 10a GND
ERROR 9b 9a
ERROR 9b 9a
EMPTY 8b 8a BUSY
7b 7a
6b 6a
@ -216,12 +216,12 @@ static ADDRESS_MAP_START( abcheck_map, AS_PROGRAM, 16, namcond1_state )
ADDRESS_MAP_END
READ16_MEMBER(namcond1_state::printer_r)
{
{
// bits tested:
// bit 2 = 0 for paper cut switch on, 1 for off
// bit 4 = 0 for paper OK, 1 for empty
// bit 5 = 1 for normal status, 0 for error
return 0x0020;
return 0x0020;
}
/*************************************************************/
@ -261,7 +261,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( abcheck )
PORT_INCLUDE( namcond1 )
PORT_MODIFY("P1_P2")
PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 A")
@ -273,7 +273,7 @@ static INPUT_PORTS_START( abcheck )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 A")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 B")
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("DSW")
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_COIN1 )
@ -305,15 +305,15 @@ static ADDRESS_MAP_START( nd1h8rwmap, AS_PROGRAM, 16, namcond1_state )
AM_RANGE(0xc00010, 0xc00011) AM_NOP
AM_RANGE(0xc00030, 0xc00031) AM_NOP
AM_RANGE(0xc00040, 0xc00041) AM_NOP
AM_RANGE(0xffff1a, 0xffff1b) AM_NOP // abcheck
AM_RANGE(0xffff1e, 0xffff1f) AM_NOP // ^
AM_RANGE(0xffff1a, 0xffff1b) AM_NOP // abcheck
AM_RANGE(0xffff1e, 0xffff1f) AM_NOP // ^
ADDRESS_MAP_END
static ADDRESS_MAP_START( nd1h8iomap, AS_IO, 16, namcond1_state )
AM_RANGE(h8_device::PORT_7, h8_device::PORT_7) AM_READ(mcu_p7_read )
AM_RANGE(h8_device::PORT_A, h8_device::PORT_A) AM_READWRITE(mcu_pa_read, mcu_pa_write )
AM_RANGE(h8_device::ADC_0, h8_device::ADC_3) AM_NOP // MCU reads these, but the games have no analog controls
AM_RANGE(0x14, 0x17) AM_READNOP // abcheck
AM_RANGE(0x14, 0x17) AM_READNOP // abcheck
ADDRESS_MAP_END
INTERRUPT_GEN_MEMBER(namcond1_state::mcu_interrupt)
@ -346,7 +346,7 @@ static MACHINE_CONFIG_START( namcond1 )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_49_152MHz/4)
MCFG_CPU_PROGRAM_MAP(namcond1_map)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", namcond1_state, irq1_line_hold)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", namcond1_state, irq1_line_hold)
MCFG_CPU_ADD("mcu", H83002, XTAL_49_152MHz/3 )
MCFG_CPU_PROGRAM_MAP( nd1h8rwmap)
@ -360,7 +360,7 @@ static MACHINE_CONFIG_START( namcond1 )
MCFG_YGV608_PALETTE("palette")
MCFG_YGV608_VBLANK_HANDLER(WRITELINE(namcond1_state, vblank_irq_w))
MCFG_YGV608_RASTER_HANDLER(WRITELINE(namcond1_state, raster_irq_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
/*
@ -390,8 +390,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( abcheck, namcond1 )
MCFG_CPU_REPLACE("maincpu", M68000, XTAL_49_152MHz/4)
MCFG_CPU_PROGRAM_MAP(abcheck_map)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", namcond1_state, irq1_line_hold)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", namcond1_state, irq1_line_hold)
MCFG_NVRAM_ADD_0FILL("zpr1")
MCFG_NVRAM_ADD_0FILL("zpr2")
MACHINE_CONFIG_END
@ -475,34 +475,34 @@ ROM_END
ROM_START( abcheck )
ROM_REGION( 0x100000,"maincpu", 0 ) /* 16MB for Main CPU */
ROM_LOAD( "an1main0b.14e", 0x000000, 0x080000, CRC(f1b9777d) SHA1(b28f4106e1e145dc1aaa5af455b6f991d2b04c59) )
ROM_LOAD( "an1main1b.13e", 0x080000, 0x080000, CRC(d40ccdcc) SHA1(05f864d84bf34a1722c598378ed8d27fba00f575) )
ROM_LOAD( "an1main0b.14e", 0x000000, 0x080000, CRC(f1b9777d) SHA1(b28f4106e1e145dc1aaa5af455b6f991d2b04c59) )
ROM_LOAD( "an1main1b.13e", 0x080000, 0x080000, CRC(d40ccdcc) SHA1(05f864d84bf34a1722c598378ed8d27fba00f575) )
ROM_REGION( 0x80000,"mcu", 0 ) /* sub CPU */
ROM_LOAD( "an1sub.1d", 0x000000, 0x080000, CRC(50de9130) SHA1(470b3977f4bf12ca65bc42631ccdf81753ef56fd) )
ROM_LOAD( "an1sub.1d", 0x000000, 0x080000, CRC(50de9130) SHA1(470b3977f4bf12ca65bc42631ccdf81753ef56fd) )
ROM_REGION( 0x400000,"ygv608", 0 ) /* 4MB character generator */
ROM_LOAD( "an1cg0.10e", 0x000000, 0x200000, CRC(6dae0531) SHA1(2f4a4a22d461eb9a5bb88bdfccc3aff44cd3faee) )
ROM_LOAD( "an1cg1.10f", 0x200000, 0x200000, CRC(8485607a) SHA1(1b9a1950c6db61a2b546fe2f5e56333593e93fb4) )
ROM_LOAD( "an1cg0.10e", 0x000000, 0x200000, CRC(6dae0531) SHA1(2f4a4a22d461eb9a5bb88bdfccc3aff44cd3faee) )
ROM_LOAD( "an1cg1.10f", 0x200000, 0x200000, CRC(8485607a) SHA1(1b9a1950c6db61a2b546fe2f5e56333593e93fb4) )
ROM_REGION( 0x1000000, "c352", 0 ) // Samples
ROM_LOAD( "an1voice.7c", 0x000000, 0x200000, CRC(d2bfa453) SHA1(6b7d6bb4d65290d8fd3df5d12b41ae7dce5f3f1c) )
ROM_LOAD( "an1voice.7c", 0x000000, 0x200000, CRC(d2bfa453) SHA1(6b7d6bb4d65290d8fd3df5d12b41ae7dce5f3f1c) )
ROM_REGION( 0x80000, "data", 0 ) // game data?
ROM_LOAD( "an1dat0.ic1", 0x000000, 0x080000, CRC(44dc7da1) SHA1(dd57670a2b07c4988ca30bba134931c1701a926f) )
ROM_REGION( 0x80000, "data", 0 ) // game data?
ROM_LOAD( "an1dat0.ic1", 0x000000, 0x080000, CRC(44dc7da1) SHA1(dd57670a2b07c4988ca30bba134931c1701a926f) )
ROM_REGION( 0x8000, "zpr1", 0 )
ROM_LOAD( "m48z30y.ic2", 0x000000, 0x008000, CRC(a816d989) SHA1(c78fe06b049c31cf8de2a79025823dbc0c95d526) )
ROM_LOAD( "m48z30y.ic2", 0x000000, 0x008000, CRC(a816d989) SHA1(c78fe06b049c31cf8de2a79025823dbc0c95d526) )
ROM_REGION( 0x8000, "zpr2", 0 )
ROM_LOAD( "m48z30y.ic3", 0x000000, 0x008000, CRC(bfa687bb) SHA1(463ae40f21b675f3b4155efda9c965b71519a49e) )
ROM_LOAD( "m48z30y.ic3", 0x000000, 0x008000, CRC(bfa687bb) SHA1(463ae40f21b675f3b4155efda9c965b71519a49e) )
ROM_REGION( 0x800, "at28c16", 0 )
ROM_LOAD( "at28c16.12e", 0x000000, 0x000800, CRC(df92af14) SHA1(1ae8c318f1eb2628e97914d15a06779c7bb87506) )
ROM_REGION( 0x220000, "printer", 0 )
ROM_LOAD( "np-b205_nmc_ver1.00.u9", 0x000000, 0x020000, CRC(445ceb0d) SHA1(49491b936f50577564196992df3a3c93aa3fcc99) )
ROM_LOAD( "npg1624lc.u4", 0x020000, 0x200000, CRC(7e00254f) SHA1(b0fa8f979e8322d71f842de5358ae2a2e36386f7) )
ROM_LOAD( "np-b205_nmc_ver1.00.u9", 0x000000, 0x020000, CRC(445ceb0d) SHA1(49491b936f50577564196992df3a3c93aa3fcc99) )
ROM_LOAD( "npg1624lc.u4", 0x020000, 0x200000, CRC(7e00254f) SHA1(b0fa8f979e8322d71f842de5358ae2a2e36386f7) )
ROM_END
GAME( 1995, ncv1, 0, namcond1, namcond1, namcond1_state, 0, ROT90, "Namco", "Namco Classic Collection Vol.1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -918,9 +918,9 @@ MACHINE_CONFIG_END
DRIVERS
***************************************************************************/
/*
/*
Note about current c-chip eprom dump
Note about current c-chip eprom dump
the current dump is bad because data with address bit 0x200 set is missing (always read out as 0xff)
@ -930,8 +930,8 @@ for example
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B
00001128 07 80 02 09 03 00 4C
00001134 01 00 04 00 10 07 80 02 09 03 00 4C
00001140 01 40 04 00 20
00001134 01 00 04 00 10 07 80 02 09 03 00 4C
00001140 01 40 04 00 20
is the following data from machine/opwolf.cpp

View File

@ -688,7 +688,7 @@ static MACHINE_CONFIG_START( jumping )
MCFG_CPU_ADD("audiocpu", Z80, XTAL_24MHz/4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(jumping_sound_map)
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - enough unless otherwise */

View File

@ -54,7 +54,7 @@ Notes:
| 14| R |
Joystick Right | 15| S |
Joystick Left | 16| T |
| 17| U |
| 17| U |
| 18| V |
| 19| W |
| 20| X |
@ -81,7 +81,7 @@ Notes:
| 14| R |
| 15| S |
| 16| T |
| 17| U |
| 17| U |
+5V | 18| V | +5V

View File

@ -7,7 +7,7 @@
TODO:
- colors;
- dip switches;
- sound, especially f/f part;
- sound, especially f/f part;
============================================================================
Debug cheats:

View File

@ -214,7 +214,7 @@ static ADDRESS_MAP_START( sub_program_map, AS_PROGRAM, 8, sderby2_state )
AM_RANGE(0xd800, 0xdbff) AM_RAM // 2KB Tested at 105B
AM_RANGE(0xdc00, 0xdfff) AM_RAM // 2KB Tested at 10B7
AM_RANGE(0xe000, 0xffff) AM_RAM // Tested at FE8
AM_RANGE(0xe000, 0xffff) AM_RAM // Tested at FE8
ADDRESS_MAP_END
static ADDRESS_MAP_START( sub_io_map, AS_IO, 8, sderby2_state )

View File

@ -101,7 +101,7 @@ ROM_START(shootaw2)
ROM_REGION(0x80000, "subcpu", 0) /* Z84C011 program ROM */
ROM_LOAD( "sas1_spr0.7f", 0x000000, 0x080000, CRC(3bc14ba3) SHA1(7a75281621f23107c5c3c1a09831be2f8bb93540) )
ROM_REGION(0x2000, "at28c64", 0) /* AT28C64 parallel EEPROM (not yet supported by MAME) */
ROM_REGION(0x2000, "at28c64", 0) /* AT28C64 parallel EEPROM (not yet supported by MAME) */
ROM_LOAD( "m28c64a.9l", 0x000000, 0x002000, CRC(d65d4176) SHA1(dd9b529a729685f9535ae7f060f67d75d70d9567) )
ROM_REGION(0x40000, "oki", 0)

View File

@ -237,7 +237,7 @@ private:
Socrates Keyboard MCU simulation
*******************************************************************************
the tmp50c40 MCU seems to have an 8? word, 12 bit wide internal fifo, which is fed by IR decoded from the
the tmp50c40 MCU seems to have an 8? word, 12 bit wide internal fifo, which is fed by IR decoded from the
remote keyboard. The socrates reads this data out via SPI? by asserting a /cs? bit when keyboard_buffer_update
is written to.
the bits are returned in two registers, handled by keyboard_buffer_read

View File

@ -5462,7 +5462,7 @@ GAME( 1985, pitfall2a, pitfall2, sys1piox_315_5093, pitfall2, system1_state, b
GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, bank00, ROT0, "Sega", "Pitfall II (not encrypted)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, seganinj, 0, sys1piox_315_5102, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (315-5102)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (not encrypted)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, seganinja, seganinj, sys1piox_315_5133, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, seganinja, seganinj, sys1piox_315_5133, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, ninja, seganinj, sys1piox_315_5102, seganinj, system1_state, bank00, ROT0, "Sega", "Ninja (315-5102)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, nprinceso, seganinj, sys1piox_315_5098, seganinj, system1_state, bank00, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, nprincesb, seganinj, sys1piox_315_5051, seganinj, system1_state, bank00, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE )

View File

@ -403,6 +403,6 @@ private:
/* dongle type widel: status */
int32_t m_widel_ctrs; /* latched PROM address (E5x0 LSB, E5x1 MSB) */
int32_t m_widel_latch; /* latched enable PROM (1100xxxx written to E5x1) */
uint8_t m_decomult_bank;
uint8_t m_decomult_bank;
};

View File

@ -45,5 +45,5 @@ public:
DECLARE_WRITE_LINE_MEMBER( vblank_irq_w );
DECLARE_WRITE_LINE_MEMBER( raster_irq_w );
INTERRUPT_GEN_MEMBER(mcu_interrupt);
INTERRUPT_GEN_MEMBER(mcu_interrupt);
};

View File

@ -14,7 +14,7 @@ class taitox_state : public seta_state
public:
taitox_state(const machine_config &mconfig, device_type type, const char *tag)
: seta_state(mconfig, type, tag),
m_cchip(*this, "cchip")
m_cchip(*this, "cchip")
{ }
optional_device<taito_cchip_device> m_cchip;

View File

@ -328,7 +328,7 @@
</bezel>
<!-- FIXME - missing element definition
<bezel name="lamp4" element="BET3" inputtag="P1" inputmask="0x10">
<bounds x="1.51" y="3.28" width="0.31" height="0.24" />
<bounds x="1.51" y="3.28" width="0.31" height="0.24" />
</bezel>
-->
<bezel name="lamp3" element="BET4" inputtag="P1" inputmask="0x08">
@ -395,7 +395,7 @@
</bezel>
<!-- FIXME - missing element definition
<bezel name="lamp4" element="BET3" inputtag="P1" inputmask="0x10">
<bounds x="1.51" y="3.28" width="0.31" height="0.24" />
<bounds x="1.51" y="3.28" width="0.31" height="0.24" />
</bezel>
-->
<bezel name="lamp3" element="BET5" inputtag="P1" inputmask="0x08">

View File

@ -1050,11 +1050,11 @@ READ8_MEMBER(decocass_widel_state::decocass_widel_r)
{
if (m_widel_latch)
{
uint8_t *prom = space.machine().root_device().memregion("dongle")->base();
uint8_t *prom = space.machine().root_device().memregion("dongle")->base();
data = prom[m_widel_ctrs | (m_decomult_bank << 16)];
LOG(3,("%10s 6502-PC: %04x decocass_widel_r(%02x): $%02x '%c' <- PROM[%04x]\n", space.machine().time().as_string(6), space.device().safe_pcbase(), offset, data, (data >= 32) ? data : '.', m_widel_ctrs));
m_widel_ctrs = (m_widel_ctrs + 1) & 0xffff;
if (m_widel_ctrs == 0)
{
@ -1184,8 +1184,8 @@ WRITE8_MEMBER(decocass_state::decocass_e5xx_w)
* DE-0091xx daughter board handler
*
* The DE-0091xx daughter board seems to be a read-only ROM board with
* two times five 4K ROMs.
*
* two times five 4K ROMs.
*
* The board's ROMs are mapped into view for reads between addresses
* 0x6000 and 0xafff by setting bits 0 and 1 of address 0xe900.
*
@ -1608,7 +1608,7 @@ MACHINE_RESET_MEMBER(decocass_type3_state,cfghtice)
// Note, this is a hack, I can't see where the bank bits actually get written out
// Note, this is a hack, I can't see where the bank bits actually get written out
// and the MAME disassembly is currently a mess.
READ8_MEMBER(decocass_widel_state::decocass_fbc2_r)
{

View File

@ -126,7 +126,7 @@ public:
{
using namespace std::placeholders;
if (m_server->is_active()) {
m_server->add_endpoint("/esqpanel/socket",
m_server->add_endpoint("/esqpanel/socket",
std::bind(&esqpanel_external_panel_server::on_open, this, _1),
std::bind(&esqpanel_external_panel_server::on_message, this, _1, _2, _3),
std::bind(&esqpanel_external_panel_server::on_close, this, _1, _2, _3),
@ -320,7 +320,7 @@ public:
{
return m_version;
}
bool get_template_value(std::string &s)
{
if (s == "keyboard")
@ -422,7 +422,7 @@ void esqpanel_device::device_start()
{
m_write_tx.resolve_safe();
m_write_analog.resolve_safe();
m_external_panel_server = new esqpanel_external_panel_server(machine().manager().http());
if (machine().manager().http()->is_active()) {
m_external_panel_server->set_keyboard(owner()->shortname());
@ -536,7 +536,7 @@ void esqpanel_device::rcv_complete() // Rx completed receiving byte
// 2 = On
// 3 = Blinking
m_light_states[lightNumber] = (data & 0xc0) >> 6;
// TODO: do something with the button information!
// printf("Setting light %d to %s\n", lightNumber, lightState == 3 ? "Blink" : lightState == 2 ? "On" : "Off");
m_bButtonLightSecondByte = false;

View File

@ -68,13 +68,13 @@ class esqpanel_device : public device_t, public device_serial_interface
{
public:
template <class Object>
static devcb_base &set_tx_wr_callback(device_t &device, Object &&cb) {
static devcb_base &set_tx_wr_callback(device_t &device, Object &&cb) {
return downcast<esqpanel_device &>(device).m_write_tx.set_callback(std::forward<Object>(cb));
}
template <class Object>
static devcb_base &set_analog_wr_callback(device_t &device, Object &&cb) {
return downcast<esqpanel_device &>(device).m_write_analog.set_callback(std::forward<Object>(cb));
static devcb_base &set_analog_wr_callback(device_t &device, Object &&cb) {
return downcast<esqpanel_device &>(device).m_write_analog.set_callback(std::forward<Object>(cb));
}
void xmit_char(uint8_t data);
@ -105,8 +105,8 @@ protected:
std::vector<uint8_t> m_light_states;
bool m_eps_mode;
bool m_eps_mode;
esqpanel_external_panel_server *m_external_panel_server;
private:

View File

@ -29,7 +29,7 @@ public:
virtual void write_char(int data) = 0;
virtual void update_display();
virtual bool write_contents(std::ostream &o) { return false; }
uint32_t conv_segments(uint16_t segin);
protected:

View File

@ -43,9 +43,9 @@
#endif
DEVICE_ADDRESS_MAP_START(map, 32, interpro_ioga_device)
AM_RANGE(0x00, 0x03) AM_READWRITE(eth_remap_r, eth_remap_w)
AM_RANGE(0x04, 0x07) AM_READWRITE(eth_map_page_r, eth_map_page_w)
AM_RANGE(0x08, 0x0b) AM_READWRITE(eth_control_r, eth_control_w)
AM_RANGE(0x00, 0x03) AM_READWRITE(eth_remap_r, eth_remap_w)
AM_RANGE(0x04, 0x07) AM_READWRITE(eth_map_page_r, eth_map_page_w)
AM_RANGE(0x08, 0x0b) AM_READWRITE(eth_control_r, eth_control_w)
AM_RANGE(0x0c, 0x1b) AM_READWRITE(dma_plotter_r, dma_plotter_w)
AM_RANGE(0x1c, 0x1f) AM_READWRITE(dma_plotter_eosl_r, dma_plotter_eosl_w)

View File

@ -205,19 +205,19 @@ public:
enum dma_ctrl_mask
{
DMA_CTRL_TCZERO = 0x00000001, // transfer count zero
DMA_CTRL_TAG = 0x00000e00, // bus tag
DMA_CTRL_BERR = 0x00400000, // bus error
DMA_CTRL_ERR = 0x00800000, // checked for in scsi isr
DMA_CTRL_TCZERO = 0x00000001, // transfer count zero
DMA_CTRL_TAG = 0x00000e00, // bus tag
DMA_CTRL_BERR = 0x00400000, // bus error
DMA_CTRL_ERR = 0x00800000, // checked for in scsi isr
DMA_CTRL_BUSY = 0x01000000, // cleared when command complete (maybe bus grant required?)
DMA_CTRL_WAIT = 0x02000000, // waiting for bus grant
DMA_CTRL_X = 0x04000000, // set during fdc dma?
DMA_CTRL_BUSY = 0x01000000, // cleared when command complete (maybe bus grant required?)
DMA_CTRL_WAIT = 0x02000000, // waiting for bus grant
DMA_CTRL_X = 0x04000000, // set during fdc dma?
DMA_CTRL_VIRTUAL = 0x20000000, // use virtual addressing
DMA_CTRL_WRITE = 0x40000000, // memory to device transfer
DMA_CTRL_VIRTUAL = 0x20000000, // use virtual addressing
DMA_CTRL_WRITE = 0x40000000, // memory to device transfer
DMA_CTRL_WMASK = 0xfd000e00 // writable fields
DMA_CTRL_WMASK = 0xfd000e00 // writable fields
};
DECLARE_READ32_MEMBER(dma_plotter_r) { return dma_r(space, offset, mem_mask, IOGA_DMA_PLOTTER); }
DECLARE_WRITE32_MEMBER(dma_plotter_w) { dma_w(space, offset, data, mem_mask, IOGA_DMA_PLOTTER); }

View File

@ -426,7 +426,7 @@ void saturn_state::scu_dma_direct(address_space &space, uint8_t dma_ch)
m_scu.ist |= (IRQ_DMAILL);
return;
}
DnMV_1(dma_ch);
/* max size */

View File

@ -64,18 +64,18 @@ CLK is supplied with a 12MHZ oscillator on operation wolf
(move below MODE notes to upd7811.cpp?)
The four Mode0/Mode1 combinations are:
LOW/LOW 78c11 mem map is 4k external rom (i.e. the eprom inside the c-chip) from 0x0000-0x0FFF;
the low 4 bits of port F are used, to provide the high 4 address bits.
speculation: likely the eprom can be banked so the low or high half is visible here,
or possibly one fixed window and 3 variable windows, managed by the asic?
LOW/HIGH 78c11 mem map boots to internal rom (mask rom inside the 78c11 inside the c-chip) from
0x0000-0x0fff but the memory map is under full mcu control and can select any of the
four modes (internal only, 4k external, 16k external, 64k external)
LOW/LOW 78c11 mem map is 4k external rom (i.e. the eprom inside the c-chip) from 0x0000-0x0FFF;
the low 4 bits of port F are used, to provide the high 4 address bits.
speculation: likely the eprom can be banked so the low or high half is visible here,
or possibly one fixed window and 3 variable windows, managed by the asic?
LOW/HIGH 78c11 mem map boots to internal rom (mask rom inside the 78c11 inside the c-chip) from
0x0000-0x0fff but the memory map is under full mcu control and can select any of the
four modes (internal only, 4k external, 16k external, 64k external)
The following two modes are unusable on the c-chip:
HIGH/LOW 78c11 mem map is 16k external rom from 0x0000-0x3FFF;
the low 6 bits of port F are used, to provide the high 6 address bits.
HIGH/HIGH 78c11 mem map is 64k external rom from 0x0000-0xFFFF;
all 8 bits of port F are used to provide the high 8 address bits.
HIGH/LOW 78c11 mem map is 16k external rom from 0x0000-0x3FFF;
the low 6 bits of port F are used, to provide the high 6 address bits.
HIGH/HIGH 78c11 mem map is 64k external rom from 0x0000-0xFFFF;
all 8 bits of port F are used to provide the high 8 address bits.
VPP is only used for programming the 27c64, do not tie it to 18v or you will probably overwrite the 27c64 with garbage.
(see http://www.cpcwiki.eu/index.php/UPD7810/uPD7811 )

View File

@ -22,24 +22,24 @@ void cbuster_state::video_start()
m_sprgen->alloc_sprite_bitmap();
}
/*
Crude Buster palette is a little strange compared to other Data East games
of this period. Although the digital palette is 8 bits per channel, the
analog 'white' level is set at 0x8e. In hardware this is done at the
final resistors before the JAMMA connector. It also suggests that if the
game were to use any values above 0x8e (it doesn't) then the final output
voltage would be out of spec.
I suspect this setup is actually software compensating for a hardware
design problem.
/*
Crude Buster palette is a little strange compared to other Data East games
of this period. Although the digital palette is 8 bits per channel, the
analog 'white' level is set at 0x8e. In hardware this is done at the
final resistors before the JAMMA connector. It also suggests that if the
game were to use any values above 0x8e (it doesn't) then the final output
voltage would be out of spec.
I suspect this setup is actually software compensating for a hardware
design problem.
*/
void cbuster_state::update_palette(int offset)
{
int r = m_paletteram[offset]&0xff;
int g = m_paletteram[offset]>>8;
int b = m_paletteram_ext[offset]&0xff;
if (r>0x8e) r=0x8e;
if (g>0x8e) g=0x8e;
if (b>0x8e) b=0x8e;
@ -47,7 +47,7 @@ void cbuster_state::update_palette(int offset)
r = (r * 255) / 0x8e;
g = (g * 255) / 0x8e;
b = (b * 255) / 0x8e;
m_palette->set_pen_color(offset,rgb_t(r,g,b));
}
@ -56,7 +56,7 @@ WRITE16_MEMBER(cbuster_state::cbuster_palette_w)
COMBINE_DATA(&m_paletteram[offset]);
update_palette(offset);
}
WRITE16_MEMBER(cbuster_state::cbuster_palette_ext_w)
{
COMBINE_DATA(&m_paletteram_ext[offset]);

View File

@ -211,8 +211,8 @@ void deco_rmc3_device::device_start()
// This conversion mimics the specific weighting used by the Data East
// custom resistor pack marked DECO RM-C3 to convert the digital
// This conversion mimics the specific weighting used by the Data East
// custom resistor pack marked DECO RM-C3 to convert the digital
// palette for analog output. It is used on games such as The Real
// Ghostbusters, Gondomania, Cobra Command, Psychonics Oscar.
//
@ -244,7 +244,7 @@ rgb_t deco_rmc3_device::deco_rgb_decoder(u32 raw)
u8 r = raw&0xf;
u8 g = (raw>>4)&0xf;
u8 b = (raw>>8)&0xf;
r = 0x0e * BIT(r,0) + 0x1f * BIT(r,1) + 0x43 * BIT(r,2) + 0x8f * BIT(r,3);
g = 0x0e * BIT(g,0) + 0x1f * BIT(g,1) + 0x43 * BIT(g,2) + 0x8f * BIT(g,3);
b = 0x0e * BIT(b,0) + 0x1f * BIT(b,1) + 0x43 * BIT(b,2) + 0x8f * BIT(b,3);

View File

@ -9,8 +9,8 @@
****************************************************************************
Data East RM-C3 is a custom resistor pack used to convert a digital
palette to an analog output. The conversion is non-linear with high bits
weighted a little more than low bits compared to linear.
palette to an analog output. The conversion is non-linear with high bits
weighted a little more than low bits compared to linear.
******************************************************************************/
@ -28,7 +28,7 @@
#define MCFG_DECO_RMC3_ADD(_tag, _entries) \
MCFG_DEVICE_ADD(_tag, DECO_RMC3, 0) \
MCFG_DECO_RMC3_SET_PALETTE_SIZE(_entries)
#define MCFG_DECO_RMC3_MODIFY MCFG_DEVICE_MODIFY
#define MCFG_DECO_RMC3_SET_PALETTE_SIZE(_entries) \
@ -43,8 +43,8 @@
deco_rmc3_device::static_set_prom_region(*device, "^" _region); \
deco_rmc3_device::static_set_init(*device, deco_rmc3_palette_init_delegate(FUNC(deco_rmc3_device::palette_init_proms), downcast<deco_rmc3_device *>(device)));
//#define MCFG_DECO_RMC3_INIT_OWNER(_class, _method)
// deco_rmc3_device::static_set_init(*device, deco_rmc3_palette_init_delegate(&_class::PALETTE_INIT_NAME(_method), #_class "::palette_init_" #_method, downcast<_class *>(owner)));
//#define MCFG_DECO_RMC3_INIT_OWNER(_class, _method)
// deco_rmc3_device::static_set_init(*device, deco_rmc3_palette_init_delegate(&_class::PALETTE_INIT_NAME(_method), #_class "::palette_init_" #_method, downcast<_class *>(owner)));
//**************************************************************************
// TYPE DEFINITIONS
@ -110,16 +110,16 @@ protected:
private:
void update_for_write(offs_t byte_offset, int bytes_modified, bool indirect = false);
rgb_t deco_rgb_decoder(u32 raw);
// configuration state
u32 m_entries; // number of entries in the palette
u32 m_indirect_entries; // number of indirect colors in the palette
// bool m_enable_shadows; // are shadows enabled?
// bool m_enable_hilights; // are hilights enabled?
// int m_membits; // width of palette RAM, if different from native
// bool m_membits_supplied; // true if membits forced in static config
// endianness_t m_endianness; // endianness of palette RAM, if different from native
// bool m_endianness_supplied; // true if endianness forced in static config
// bool m_enable_shadows; // are shadows enabled?
// bool m_enable_hilights; // are hilights enabled?
// int m_membits; // width of palette RAM, if different from native
// bool m_membits_supplied; // true if membits forced in static config
// endianness_t m_endianness; // endianness of palette RAM, if different from native
// bool m_endianness_supplied; // true if endianness forced in static config
optional_memory_region m_prom_region; // region where the color PROMs are
deco_rmc3_palette_init_delegate m_init;

View File

@ -143,10 +143,10 @@ void m62_state::m62_amplify_contrast(bool include_fg)
pals[0] = m_chr_palette;
pals[1] = m_spr_palette;
if (m_fg_palette && include_fg)
pals[2] = m_fg_palette;
else
else
pals[2] = 0;
// m62 palette is very dark, so amplify default contrast

View File

@ -369,22 +369,22 @@ static ADDRESS_MAP_START( regs_map, AS_IO, 8, ygv608_device )
// address pointers
AM_RANGE( 0, 0) AM_READWRITE(pattern_name_table_y_r,pattern_name_table_y_w)
AM_RANGE( 1, 1) AM_READWRITE(pattern_name_table_x_r,pattern_name_table_x_w)
AM_RANGE( 3, 3) AM_READWRITE(sprite_address_r,sprite_address_w)
AM_RANGE( 4, 4) AM_READWRITE(scroll_address_r,scroll_address_w)
AM_RANGE( 5, 5) AM_READWRITE(palette_address_r,palette_address_w)
AM_RANGE( 6, 6) AM_READWRITE(sprite_bank_r,sprite_bank_w)
// screen control
// screen control
AM_RANGE(10, 10) AM_READWRITE(screen_ctrl_mosaic_sprite_r, screen_ctrl_mosaic_sprite_w)
AM_RANGE(13, 13) AM_WRITE(border_color_w)
// interrupt section
AM_RANGE(14, 14) AM_READWRITE(irq_mask_r,irq_mask_w)
AM_RANGE(14, 14) AM_READWRITE(irq_mask_r,irq_mask_w)
AM_RANGE(15, 16) AM_READWRITE(irq_ctrl_r,irq_ctrl_w)
// base address
AM_RANGE(17, 24) AM_WRITE(base_address_w)
// ROZ parameters
AM_RANGE(25, 27) AM_WRITE(roz_ax_w)
AM_RANGE(28, 29) AM_WRITE(roz_dx_w)
@ -420,11 +420,11 @@ ADDRESS_MAP_END
//-------------------------------------------------
ygv608_device::ygv608_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock )
: device_t(mconfig, YGV608, tag, owner, clock),
: device_t(mconfig, YGV608, tag, owner, clock),
device_gfx_interface(mconfig, *this, GFXDECODE_NAME(ygv608)),
device_memory_interface(mconfig, *this),
m_io_space_config("io", ENDIANNESS_BIG, 8, 6, 0, *ADDRESS_MAP_NAME(regs_map)),
m_vblank_handler(*this),
m_vblank_handler(*this),
m_raster_handler(*this)
{
}
@ -481,14 +481,14 @@ void ygv608_device::device_start()
m_tilemap_B = nullptr;
m_iospace = &space(AS_IO);
// TODO: tagging configuration
m_screen = downcast<screen_device *>(machine().device("screen"));
m_vblank_handler.resolve();
m_raster_handler.resolve();
m_vblank_timer = timer_alloc(VBLANK_TIMER);
m_raster_timer = timer_alloc(RASTER_TIMER);
register_state_save();
}
@ -531,7 +531,7 @@ void ygv608_device::device_timer(emu_timer &timer, device_timer_id id, int param
{
m_screen_status |= 0x10; // FP
raster_irq_check();
// adjust for next one shot
m_raster_timer->reset();
m_raster_timer->adjust(raster_sync_offset(), 0);
@ -760,7 +760,7 @@ TILE_GET_INFO_MEMBER( ygv608_device::get_tile_info_A_16 )
uint8_t attr = 0;
int pattern_name_base = 0;
int set = ((m_regs.s.r7 & r7_md) == MD_1PLANE_256COLOUR
? GFX_16X16_8BIT : GFX_16X16_4BIT );
? GFX_16X16_8BIT : GFX_16X16_4BIT );
int base = row >> m_base_y_shift;
if( col >= m_page_x ) {
@ -949,7 +949,7 @@ void ygv608_device::register_state_save()
save_item(NAME(m_sprite_attribute_table.b));
save_item(NAME(m_scroll_data_table));
save_item(NAME(m_colour_palette));
// save_item(NAME(register_state_save));
// save_item(NAME(register_state_save));
save_item(NAME(m_color_state_r));
save_item(NAME(m_color_state_w));
@ -1000,7 +1000,7 @@ void ygv608_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
flipy = (g_attr & SZ_VERTREVERSE) != 0;
}
switch( size )
switch( size )
{
case SZ_8X8 :
code = ( (int)m_sprite_bank << 8 ) | (int)sa->sn;
@ -1383,7 +1383,7 @@ READ8_MEMBER( ygv608_device::pattern_name_table_r )
p0_state_r = 0;
pattern_name_base_r = 0;
}
return m_pattern_name_table[pn];
}
@ -1391,14 +1391,14 @@ READ8_MEMBER( ygv608_device::pattern_name_table_r )
READ8_MEMBER( ygv608_device::sprite_data_r )
{
uint8_t res = m_sprite_attribute_table.b[m_sprite_address];
if (m_regs.s.r2 & r2_saar)
m_sprite_address++;
return res;
}
// P#2R - scroll data port
// P#2R - scroll data port
READ8_MEMBER( ygv608_device::scroll_data_r )
{
uint8_t res = m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_scroll_address];
@ -1438,7 +1438,7 @@ READ8_MEMBER(ygv608_device::register_data_r)
//m_iospace->read_byte(regNum);
if (m_register_autoinc_r == true)
{
m_register_address ++;
@ -1452,7 +1452,7 @@ READ8_MEMBER(ygv608_device::register_data_r)
}
#endif
}
return res;
}
@ -1594,8 +1594,8 @@ WRITE8_MEMBER( ygv608_device::palette_data_w )
if (++m_color_state_w == 3)
{
m_color_state_w = 0;
// if(m_colour_palette[m_palette_address][0] & 0x80) // Transparency designation, none of the Namco games enables it?
// if(m_colour_palette[m_palette_address][0] & 0x80) // Transparency designation, none of the Namco games enables it?
palette().set_pen_color(m_palette_address,
pal6bit( m_colour_palette[m_palette_address][0] ),
pal6bit( m_colour_palette[m_palette_address][1] ),
@ -1611,17 +1611,17 @@ WRITE8_MEMBER( ygv608_device::register_data_w )
{
uint8_t regNum = m_register_address & 0x3f;
//logerror( "R#%d = $%02X\n", regNum, data );
SetPreShortcuts (regNum, data);
m_regs.b[regNum] = data;
SetPostShortcuts (regNum);
m_iospace->write_byte(regNum, data);
if (m_register_autoinc_w == true)
{
m_register_address ++;
m_register_address &= 0x3f;
#if 0
// we'll catch this in the logerror anyway
if (regNum == 50)
@ -1646,7 +1646,7 @@ WRITE8_MEMBER( ygv608_device::status_port_w )
{
/* writing a '1' resets that bit */
m_screen_status &= ~data;
// send an irq ack to the delegates accordingly
if(data & 8)
m_vblank_handler(CLEAR_LINE);
@ -1701,7 +1701,7 @@ void ygv608_device::HandleYGV608Reset()
void ygv608_device::HandleRomTransfers(uint8_t type)
{
popmessage("ROM DMA used %02x",type);
#if 0
static uint8_t *sdt = (uint8_t *)m_scroll_data_table;
static uint8_t *sat = (uint8_t *)m_sprite_attribute_table.b;
@ -1769,11 +1769,11 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_y_w )
{
m_ytile_ptr = data & 0x3f;
//if (yTile >= m_page_y)
// logerror ("%s:setting pny(%d) >= page_y(%d)\n", machine().describe_context(),
// yTile, m_page_y );
// logerror ("%s:setting pny(%d) >= page_y(%d)\n", machine().describe_context(),
// yTile, m_page_y );
m_ytile_ptr &= m_page_y -1;
m_ytile_autoinc = BIT(data,7);
m_plane_select_access = BIT(data,6);
m_plane_select_access = BIT(data,6);
if(m_ytile_autoinc == true && m_xtile_autoinc == true)
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
}
@ -1789,15 +1789,15 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_x_w )
{
m_xtile_ptr = data & 0x3f;
//if (xTile >= m_page_x)
// logerror ("%s:setting pnx(%d) >= page_x(%d)\n", machine().describe_context(),
// xTile, m_page_x );
// logerror ("%s:setting pnx(%d) >= page_x(%d)\n", machine().describe_context(),
// xTile, m_page_x );
m_xtile_ptr &= m_page_x -1;
m_xtile_autoinc = BIT(data,7);
m_xtile_autoinc = BIT(data,7);
if(m_ytile_autoinc == true && m_xtile_autoinc == true)
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
}
// R#3R - sprite attribute table access pointer
READ8_MEMBER( ygv608_device::sprite_address_r )
{
@ -1810,7 +1810,7 @@ WRITE8_MEMBER( ygv608_device::sprite_address_w )
m_sprite_address = data;
}
// R#4R - scroll table access pointer
READ8_MEMBER( ygv608_device::scroll_address_r )
{
@ -1846,13 +1846,13 @@ WRITE8_MEMBER( ygv608_device::sprite_bank_w )
{
m_sprite_bank = data;
}
// R#10R - screen control: mosaic & sprite
READ8_MEMBER( ygv608_device::screen_ctrl_mosaic_sprite_r )
{
return (m_sprite_aux_reg << 6) | ((m_sprite_aux_mode == true) << 5) | ((m_sprite_disable == true) << 4)
| (m_mosaic_bplane << 2) | (m_mosaic_aplane & 3);
}
return (m_sprite_aux_reg << 6) | ((m_sprite_aux_mode == true) << 5) | ((m_sprite_disable == true) << 4)
| (m_mosaic_bplane << 2) | (m_mosaic_aplane & 3);
}
// R#10W - screen control: mosaic & sprite
WRITE8_MEMBER( ygv608_device::screen_ctrl_mosaic_sprite_w )
@ -1885,7 +1885,7 @@ WRITE8_MEMBER( ygv608_device::irq_mask_w )
{
m_vblank_irq_mask = BIT(data, 0);
m_raster_irq_mask = BIT(data, 1);
// check if we have an irq in the queue
vblank_irq_check();
raster_irq_check();
@ -1895,18 +1895,18 @@ WRITE8_MEMBER( ygv608_device::irq_mask_w )
READ8_MEMBER( ygv608_device::irq_ctrl_r )
{
uint8_t res;
if(offset == 0) // R#15
res = m_raster_irq_vpos & 0xff;
else // R#16
{
res = (m_raster_irq_mode << 7);
res|= (BIT(m_raster_irq_vpos, 8) << 6);
res|= (m_raster_irq_hpos / 32) & 0x1f;
}
return res;
}
@ -1921,13 +1921,13 @@ WRITE8_MEMBER( ygv608_device::irq_ctrl_w )
else // R#16
{
m_raster_irq_mode = BIT(data,7);
m_raster_irq_vpos &= ~0x100;
m_raster_irq_vpos |= BIT(data,6) << 8;
m_raster_irq_hpos = (data & 0x1f) * 32;
}
// reset raster timer
m_raster_timer->reset();
m_raster_timer->adjust(raster_sync_offset(), 0);
@ -1938,7 +1938,7 @@ WRITE8_MEMBER( ygv608_device::irq_ctrl_w )
// helper for validating and convert to screen position
attotime ygv608_device::raster_sync_offset()
{
// don't care if h/v pos is higher than CRTC params (NCV2 POST)
if(m_raster_irq_hpos > m_crtc.htotal || m_raster_irq_vpos > m_crtc.vtotal )
return attotime::never;
@ -1949,16 +1949,16 @@ attotime ygv608_device::raster_sync_offset()
popmessage("Raster IRQ used with mode = true");
return attotime::never;
}
// TODO: actual sync not taken into account, needs a better test than NCV2 limited case
return m_screen->time_until_pos(m_raster_irq_vpos,m_raster_irq_hpos);
}
// R#17 / R#24 - base address
/*
/*
* offset & 4 selects plane B
* -xxx ---- write to base address + 1
* ---- -xxx write to base address
* ---- -xxx write to base address
*/
WRITE8_MEMBER( ygv608_device::base_address_w )
{
@ -1966,7 +1966,7 @@ WRITE8_MEMBER( ygv608_device::base_address_w )
int addr = ( offset << 1 ) & 0x07;
m_base_addr[plane][addr] = data & 0x07;
m_base_addr[plane][addr+1] = (data >> 4) & 0x7;
m_tilemap_resize = 1;
}
@ -1988,7 +1988,7 @@ WRITE8_MEMBER( ygv608_device::roz_dy_w ) { m_dy = roz_convert_raw16(&m_raw_dy,o
// R#37W - R#38W - increment of coordinate in Y direction in movement toward X direction
WRITE8_MEMBER( ygv608_device::roz_dyx_w ) { m_dyx = roz_convert_raw16(&m_raw_dyx,offset,data); }
// ROZ assign helpers
// ROZ assign helpers
inline uint32_t ygv608_device::roz_convert_raw24(uint32_t *raw_reg, uint8_t offset, uint8_t data)
{
const uint32_t roz_data_mask24 = 0x1fffff;
@ -2012,11 +2012,11 @@ inline uint32_t ygv608_device::roz_convert_raw16(uint16_t *raw_reg, uint8_t offs
const uint16_t roz_data_mask16 = 0x1fff;
const uint16_t mem_mask = (0xff << offset*8) ^ ~0;
uint32_t res;
// substitute the new byte value into the raw register
*raw_reg &= mem_mask;
*raw_reg |= data << offset*8;
// convert raw to the given register
res = *raw_reg & roz_data_mask16;
res <<= 7;
@ -2038,7 +2038,7 @@ WRITE8_MEMBER( ygv608_device::crtc_w )
m_crtc.border_width = (data & 0x1f) * 16;
break;
}
case 40:
{
m_crtc.htotal &= ~0x600;
@ -2047,30 +2047,30 @@ WRITE8_MEMBER( ygv608_device::crtc_w )
m_crtc.display_width = (data & 0x3f) * 16;
break;
}
case 41:
{
m_crtc.display_hstart &= ~0x1fe;
m_crtc.display_hstart |= (data & 0xff) << 1;
break;
}
case 42:
{
m_crtc.htotal &= ~0x1fe;
m_crtc.htotal |= (data & 0xff) << 1;
//printf("H %d %d %d %d %d\n",m_crtc.htotal,m_crtc.display_hstart,m_crtc.display_width,m_crtc.display_hsync,m_crtc.border_width);
break;
}
case 43:
{
m_crtc.display_vsync = (data >> 5) & 7;
m_crtc.border_height = (data & 0x1f) * 8;
break;
}
case 44:
{
// TODO: VSLS, bit 6
@ -2078,23 +2078,23 @@ WRITE8_MEMBER( ygv608_device::crtc_w )
m_crtc.display_height = (data & 0x3f) * 8;
break;
}
case 45:
{
m_crtc.vtotal &= ~0x100;
m_crtc.vtotal |= BIT(data,7) << 8;
// TODO: TRES, bit 6
m_crtc.display_vstart = data & 0x3f;
m_crtc.display_vstart = data & 0x3f;
break;
}
case 46:
{
m_crtc.vtotal &= ~0xff;
m_crtc.vtotal |= data & 0xff;
// TODO: call it for all mods in the CRTC, add sanity checks
screen_configure();
@ -2108,9 +2108,9 @@ WRITE8_MEMBER( ygv608_device::crtc_w )
// TODO: h/vstart not taken into account (needs video mods)
void ygv608_device::screen_configure()
{
// int display_hend = (m_crtc.display_hstart + (m_crtc.display_width / 2)) - 1;
// int display_hend = (m_crtc.display_hstart + (m_crtc.display_width / 2)) - 1;
int display_hend = (m_crtc.display_width / 2) - 1;
// int display_vend = (m_crtc.display_vstart + m_crtc.display_height) - 1;
// int display_vend = (m_crtc.display_vstart + m_crtc.display_height) - 1;
int display_vend = (m_crtc.display_height) - 1;
//rectangle visarea(m_crtc.display_hstart, display_hend, m_crtc.display_vstart, display_vend);
@ -2119,7 +2119,7 @@ void ygv608_device::screen_configure()
attoseconds_t period = HZ_TO_ATTOSECONDS(m_screen->clock()) * m_crtc.vtotal * (m_crtc.htotal / 2);
m_screen->configure(m_crtc.htotal / 2, m_crtc.vtotal, visarea, period );
// reset vblank timer
m_vblank_timer->reset();
//m_vblank_timer->adjust(m_screen->time_until_pos(m_crtc.display_vstart+m_crtc.display_height,0), 0, m_screen->frame_period());

View File

@ -13,8 +13,8 @@
#include "tilemap.h"
#include "screen.h"
class ygv608_device : public device_t,
public device_gfx_interface,
class ygv608_device : public device_t,
public device_gfx_interface,
public device_memory_interface
{
public:
@ -29,7 +29,7 @@ public:
DECLARE_READ8_MEMBER(scroll_data_r);
DECLARE_READ8_MEMBER(palette_data_r);
DECLARE_READ8_MEMBER(register_data_r);
// DECLARE_READ8_MEMBER(register_select_r);
// DECLARE_READ8_MEMBER(register_select_r);
DECLARE_READ8_MEMBER(status_port_r);
DECLARE_READ8_MEMBER(system_control_r);
DECLARE_WRITE8_MEMBER(pattern_name_table_w);
@ -55,7 +55,7 @@ public:
DECLARE_READ8_MEMBER(sprite_bank_r);
DECLARE_WRITE8_MEMBER(sprite_bank_w);
DECLARE_READ8_MEMBER(screen_ctrl_mosaic_sprite_r);
DECLARE_WRITE8_MEMBER(screen_ctrl_mosaic_sprite_w);
DECLARE_WRITE8_MEMBER(screen_ctrl_mosaic_sprite_w);
DECLARE_READ8_MEMBER(irq_mask_r);
DECLARE_WRITE8_MEMBER(irq_mask_w);
DECLARE_READ8_MEMBER(irq_ctrl_r);
@ -84,13 +84,13 @@ public:
{
return downcast<ygv608_device &>(device).m_raster_handler.set_callback(std::forward<Object>(cb));
}
protected:
// device-level overrides
virtual void device_start() override;
virtual std::vector<std::pair<int, const address_space_config *>> memory_space_config() const override;
void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
address_space *m_iospace;
private:
@ -253,84 +253,84 @@ private:
uint8_t m_screen_resize; // screen requires resize
uint8_t m_tilemap_resize; // tilemap requires resize
/* These were statically allocated in the r/w routines */
int p0_state_r,m_color_state_r;
int p0_state_w,m_color_state_w;
int pattern_name_base_r,pattern_name_base_w; /* pattern name table base address */
int pattern_name_base_r,pattern_name_base_w; /* pattern name table base address */
// === new variable handling starts here ===
uint8_t m_register_address; /**< RN: Register address select */
bool m_register_autoinc_r; /**< RRAI: Register address auto-increment on read */
bool m_register_autoinc_w; /**< RWAI: Register address auto-increment on write */
uint8_t m_screen_status; /**< CD: status port r/w */
bool m_raster_irq_mask; /**< IEP: raster irq mask (INT1 occurs if 1) */
bool m_vblank_irq_mask; /**< IEV: vblank irq mask (INT0 occurs if 1) */
int m_raster_irq_hpos; /**< IH: horizontal position where raster irq occurs x 32 */
int m_raster_irq_vpos; /**< IV: vertical position where raster irq occurs */
bool m_raster_irq_mode; /**< FPM: if 1 vertical position becomes invalid for raster irqs (irqs occur for every line) */
uint8_t m_scroll_address; /**< SCA: scroll table access pointer */
uint8_t m_palette_address; /**< CC: color palette access pointer */
uint8_t m_sprite_address; /**< SAA: sprite attribute table access pointer */
uint8_t m_sprite_bank; /**< SBA: sprite generator base address (MA20 to MA13) */
uint8_t m_xtile_ptr; /**< PNX: X coordinate of pattern space */
uint8_t m_ytile_ptr; /**< PNY: Y coordinate of pattern space */
bool m_xtile_autoinc; /**< PNXA: Permits auto-increment in X coordinate */
bool m_ytile_autoinc; /**< PNXA: Permits auto-increment in Y coordinate */
uint8_t m_screen_status; /**< CD: status port r/w */
bool m_raster_irq_mask; /**< IEP: raster irq mask (INT1 occurs if 1) */
bool m_vblank_irq_mask; /**< IEV: vblank irq mask (INT0 occurs if 1) */
int m_raster_irq_hpos; /**< IH: horizontal position where raster irq occurs x 32 */
int m_raster_irq_vpos; /**< IV: vertical position where raster irq occurs */
bool m_raster_irq_mode; /**< FPM: if 1 vertical position becomes invalid for raster irqs (irqs occur for every line) */
uint8_t m_scroll_address; /**< SCA: scroll table access pointer */
uint8_t m_palette_address; /**< CC: color palette access pointer */
uint8_t m_sprite_address; /**< SAA: sprite attribute table access pointer */
uint8_t m_sprite_bank; /**< SBA: sprite generator base address (MA20 to MA13) */
uint8_t m_xtile_ptr; /**< PNX: X coordinate of pattern space */
uint8_t m_ytile_ptr; /**< PNY: Y coordinate of pattern space */
bool m_xtile_autoinc; /**< PNXA: Permits auto-increment in X coordinate */
bool m_ytile_autoinc; /**< PNXA: Permits auto-increment in Y coordinate */
bool m_plane_select_access; /**< B/(A): A/B plane access select */
uint8_t m_mosaic_aplane; /**< MCA: mosaic factor applied to A plane */
uint8_t m_mosaic_bplane; /**< MCA: mosaic factor applied to B plane */
bool m_sprite_disable; /**< SPRD: disables the sprite plane display */
bool m_sprite_aux_mode; /**< SPAS: if 0 aux bits selects size, if 1 selects flipping */
uint8_t m_sprite_aux_reg; /**< SPA: auxiliary bits of sprite attribute table */
uint8_t m_border_color; /**< BDC: border color */
uint8_t m_mosaic_aplane; /**< MCA: mosaic factor applied to A plane */
uint8_t m_mosaic_bplane; /**< MCA: mosaic factor applied to B plane */
bool m_sprite_disable; /**< SPRD: disables the sprite plane display */
bool m_sprite_aux_mode; /**< SPAS: if 0 aux bits selects size, if 1 selects flipping */
uint8_t m_sprite_aux_reg; /**< SPA: auxiliary bits of sprite attribute table */
uint8_t m_border_color; /**< BDC: border color */
// screen section
devcb_write_line m_vblank_handler;
devcb_write_line m_raster_handler;
screen_device *m_screen;
emu_timer *m_vblank_timer;
emu_timer *m_raster_timer;
void screen_configure(); /**< Adjust screen parameters based off CRTC ones */
attotime raster_sync_offset(); /**< Adjust timing based off raster & CRTC parameters */
void vblank_irq_check(); /**< mask + pend check for vblank irq */
void raster_irq_check(); /**< mask + pend check for raster irq */
void pattern_name_autoinc_check(); /**< check autoinc for tile pointers */
screen_device *m_screen;
emu_timer *m_vblank_timer;
emu_timer *m_raster_timer;
void screen_configure(); /**< Adjust screen parameters based off CRTC ones */
attotime raster_sync_offset(); /**< Adjust timing based off raster & CRTC parameters */
void vblank_irq_check(); /**< mask + pend check for vblank irq */
void raster_irq_check(); /**< mask + pend check for raster irq */
void pattern_name_autoinc_check(); /**< check autoinc for tile pointers */
enum
{
VBLANK_TIMER,
RASTER_TIMER
};
struct {
int htotal; /**< HTL: horizontal total number of dots x 2 */
int vtotal; /**< VTL: vertical total number of lines x 1 */
int display_hstart; /**< HDS: horizontal display starting position x 2*/
int display_vstart; /**< VDS: vertical display starting position x 1 */
int display_width; /**< HDW: horizontal display size x 16 */
int display_height; /**< VDW: vertical display size x 8 */
int display_hsync; /**< HSW: horizontal sync signal x 16 */
int display_vsync; /**< VSW: vertical sync signal x 1 */
int border_width; /**< HBW: horizontal border size x 16 */
int border_height; /**< VBW: vertical border size x 8 */
int htotal; /**< HTL: horizontal total number of dots x 2 */
int vtotal; /**< VTL: vertical total number of lines x 1 */
int display_hstart; /**< HDS: horizontal display starting position x 2*/
int display_vstart; /**< VDS: vertical display starting position x 1 */
int display_width; /**< HDW: horizontal display size x 16 */
int display_height; /**< VDW: vertical display size x 8 */
int display_hsync; /**< HSW: horizontal sync signal x 16 */
int display_vsync; /**< VSW: vertical sync signal x 1 */
int border_width; /**< HBW: horizontal border size x 16 */
int border_height; /**< VBW: vertical border size x 8 */
}m_crtc;
// rotation, zoom shortcuts
uint32_t m_ax; /**< AX */
uint32_t m_dx; /**< DX */
uint32_t m_dxy; /**< DXY */
uint32_t m_ay; /**< AY */
uint32_t m_dy; /**< DY */
uint32_t m_dyx; /**< DYX */
uint32_t m_ax; /**< AX */
uint32_t m_dx; /**< DX */
uint32_t m_dxy; /**< DXY */
uint32_t m_ay; /**< AY */
uint32_t m_dy; /**< DY */
uint32_t m_dyx; /**< DYX */
// raw register versions of above
uint32_t m_raw_ax;
uint16_t m_raw_dx;
uint32_t m_raw_ax;
uint16_t m_raw_dx;
uint16_t m_raw_dxy;
uint32_t m_raw_ay;
uint16_t m_raw_dy;
@ -363,5 +363,5 @@ DECLARE_DEVICE_TYPE(YGV608, ygv608_device)
#define MCFG_YGV608_RASTER_HANDLER( _intcallb ) \
devcb = &ygv608_device::static_set_raster_callback( *device, DEVCB_##_intcallb );
#endif

View File

@ -41,7 +41,7 @@ public:
void start(running_machine &machine)
{
m_machine = &machine;
m_machine = &machine;
m_clients->insert(shared_from_this());
// now send "hello = 1" to the newly connected client
std::strncpy(m_data, "hello = 1\1", max_length);
@ -58,43 +58,43 @@ private:
void handle_message(char *msg)
{
char verb[1024];
int value;
//printf("handle_message: got [%s]\n", msg);
std::uint32_t ch = 0;
while (msg[ch] != ' ')
{
ch++;
}
msg[ch] = '\0';
ch++;
std::strncpy(verb, msg, sizeof(verb)-1);
//printf("verb = [%s], ", verb);
while (msg[ch] != ' ')
{
ch++;
}
ch++;
value = atoi(&msg[ch]);
//printf("value = %d\n", value);
if (!std::strcmp(verb, "send_id"))
{
if (value == 0)
{
std::snprintf(m_data, max_length, "req_id = %s\1", machine().system().name);
char verb[1024];
int value;
//printf("handle_message: got [%s]\n", msg);
std::uint32_t ch = 0;
while (msg[ch] != ' ')
{
ch++;
}
msg[ch] = '\0';
ch++;
std::strncpy(verb, msg, sizeof(verb)-1);
//printf("verb = [%s], ", verb);
while (msg[ch] != ' ')
{
ch++;
}
ch++;
value = atoi(&msg[ch]);
//printf("value = %d\n", value);
if (!std::strcmp(verb, "send_id"))
{
if (value == 0)
{
std::snprintf(m_data, max_length, "req_id = %s\1", machine().system().name);
}
else
{
std::snprintf(m_data, max_length, "req_id = %s\1", machine().output().id_to_name(value));
std::snprintf(m_data, max_length, "req_id = %s\1", machine().output().id_to_name(value));
}
do_write(std::strlen(m_data));
}
}
}
void do_read()
@ -105,11 +105,11 @@ private:
{
if (!ec)
{
if (length > 0)
{
m_input_m_data[length] = '\0';
handle_message(m_input_m_data);
}
if (length > 0)
{
m_input_m_data[length] = '\0';
handle_message(m_input_m_data);
}
do_read();
}
else
@ -148,7 +148,7 @@ public:
output_network_server(asio::io_context& io_context, short port, running_machine &machine) :
m_acceptor(io_context, asio::ip::tcp::endpoint(asio::ip::tcp::v4(), port))
{
m_machine = &machine;
m_machine = &machine;
do_accept();
}

View File

@ -250,7 +250,7 @@ static const dasm_table_entry dasm_table[] =
{ "arm7thumbb", _16be, 0, CPU_DISASSEMBLE_NAME(arm7thumb_be) },
{ "asap", _32le, 0, CPU_DISASSEMBLE_NAME(asap) },
{ "avr8", _16le, 0, CPU_DISASSEMBLE_NAME(avr8) },
{ "capricorn", _8bit, 0, CPU_DISASSEMBLE_NAME(capricorn) },
{ "capricorn", _8bit, 0, CPU_DISASSEMBLE_NAME(capricorn) },
{ "ccpu", _8bit, 0, CPU_DISASSEMBLE_NAME(ccpu) },
{ "cdp1801", _8bit, 0, CPU_DISASSEMBLE_NAME(cdp1801) },
{ "cdp1802", _8bit, 0, CPU_DISASSEMBLE_NAME(cdp1802) },