mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
never hurts to srcclean (nw)
This commit is contained in:
parent
962fa2ffac
commit
d18aa3e097
@ -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")
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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 };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -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()))
|
||||
{
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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?
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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|
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
TODO:
|
||||
- colors;
|
||||
- dip switches;
|
||||
- sound, especially f/f part;
|
||||
- sound, especially f/f part;
|
||||
|
||||
============================================================================
|
||||
Debug cheats:
|
||||
|
@ -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 )
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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">
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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); }
|
||||
|
@ -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 */
|
||||
|
@ -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 )
|
||||
|
@ -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]);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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) },
|
||||
|
Loading…
Reference in New Issue
Block a user