Cleanups and version bump

This commit is contained in:
Miodrag Milanovic 2015-01-28 09:20:10 +01:00
parent 13b862c4fa
commit 26e7a17b63
224 changed files with 3440 additions and 3481 deletions

View File

@ -38,8 +38,8 @@
<publisher>Texas Instruments</publisher>
<part name="cart" interface="lantutor">
<dataarea name="rom" size="0x10000">
<!-- <rom name="cd2315.vsm" size="0x4000" crc="" sha1="" offset="0x0000" /> -->
<!-- <rom name="cd2316.vsm" size="0x4000" crc="" sha1="" offset="0x4000" /> -->
<!-- <rom name="cd2315.vsm" size="0x4000" crc="" sha1="" offset="0x0000" /> -->
<!-- <rom name="cd2316.vsm" size="0x4000" crc="" sha1="" offset="0x4000" /> -->
<rom name="cd2317.vsm" size="0x4000" crc="53231c0b" sha1="472117c3d0e28437fa8faa054f98088e06efc2a1" offset="0x8000" />
<rom name="cd2318.vsm" size="0x4000" crc="6c0727bc" sha1="132e39755b122f2cbec6f3e767f5d256a9c1e7ae" offset="0xc000" />
</dataarea>

View File

@ -217,4 +217,3 @@ WRITE_LINE_MEMBER( device_a8sio_card_interface::motor_w )
SLOT_INTERFACE_START(a8sio_cards)
SLOT_INTERFACE("cassette", A8SIO_CASSETTE)
SLOT_INTERFACE_END

View File

@ -115,4 +115,3 @@ void a8sio_cassette_device::device_timer(emu_timer &timer, device_timer_id id, i
break;
}
}

View File

@ -105,9 +105,9 @@ UINT8 nes_vaus_device::read_bit34()
UINT8 nes_vausfc_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 0) //$4016
if (offset == 0) //$4016
ret = m_button->read() << 1;
else //$4017
else //$4017
{
ret = (m_latch & 0x80) >> 6;
m_latch <<= 1;

View File

@ -184,7 +184,7 @@ int nes_bcbattle_device::read_current_bit()
UINT8 nes_bcbattle_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) //$4017
if (offset == 1) //$4017
{
ret |= read_current_bit() << 2;
}

View File

@ -168,7 +168,7 @@ SLOT_INTERFACE_START( nes_control_port1_devices )
SLOT_INTERFACE("joypad", NES_JOYPAD)
SLOT_INTERFACE("zapper", NES_ZAPPER)
SLOT_INTERFACE("4score_p1p3", NES_4SCORE_P1P3)
// SLOT_INTERFACE("miracle_piano", NES_MIRACLE)
// SLOT_INTERFACE("miracle_piano", NES_MIRACLE)
SLOT_INTERFACE_END
SLOT_INTERFACE_START( nes_control_port2_devices )

View File

@ -183,7 +183,7 @@ void nes_fckeybrd_device::device_reset()
UINT8 nes_fckeybrd_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 0) //$4016
if (offset == 0) //$4016
{
// FC Keyboard: tape input
if ((m_cassette->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY)
@ -195,7 +195,7 @@ UINT8 nes_fckeybrd_device::read_exp(offs_t offset)
ret |= 0x02;
}
}
else //$4017
else //$4017
{
// FC Keyboard: rows of the keyboard matrix are read 4-bits at time and returned as bit1->bit4
if (m_fck_scan < 9)

View File

@ -119,7 +119,7 @@ void nes_ftrainer_device::device_reset()
UINT8 nes_ftrainer_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) //$4017
if (offset == 1) //$4017
{
if (!BIT(m_row_scan, 0))
{

View File

@ -117,9 +117,9 @@ nes_hori4p_device::nes_hori4p_device(const machine_config &mconfig, const char *
UINT8 nes_horitwin_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 0) //$4016
if (offset == 0) //$4016
ret |= (m_port1->read_bit0() << 1);
else //$4017
else //$4017
ret |= (m_port2->read_bit0() << 1);
return ret;
}
@ -127,21 +127,21 @@ UINT8 nes_horitwin_device::read_exp(offs_t offset)
UINT8 nes_hori4p_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (m_cfg->read() == 0) // 2P
if (m_cfg->read() == 0) // 2P
{
if (offset == 0) //$4016
if (offset == 0) //$4016
ret |= (m_port1->read_bit0() << 1);
else //$4017
else //$4017
ret |= (m_port2->read_bit0() << 1);
}
else // 4P
else // 4P
{
if (offset == 0) //$4016
if (offset == 0) //$4016
{
ret |= (m_port1->read_bit0() << 0);
ret |= (m_port3->read_bit0() << 1);
}
else //$4017
else //$4017
{
ret |= (m_port2->read_bit0() << 0);
ret |= (m_port4->read_bit0() << 1);

View File

@ -103,14 +103,14 @@ static INPUT_PORTS_START( nes_arcstick )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("B")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x01)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_CONDITION("CONFIG", 0x01, EQUALS, 0x00)
INPUT_PORTS_END
//-------------------------------------------------
@ -245,7 +245,7 @@ UINT8 nes_joypad_device::read_bit0()
UINT8 nes_fcpad2_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (!offset) // microphone input
if (!offset) // microphone input
ret |= m_joypad->read() & 0x04;
return ret;
@ -260,9 +260,9 @@ UINT8 nes_fcpad2_device::read_exp(offs_t offset)
UINT8 nes_arcstick_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 0) //$4016
if (offset == 0) //$4016
{
if ((m_cfg->read() & 2) == 0) // we are P1 input
if ((m_cfg->read() & 2) == 0) // we are P1 input
{
ret |= (m_latch & 1) << 1;
m_latch >>= 1;
@ -270,9 +270,9 @@ UINT8 nes_arcstick_device::read_exp(offs_t offset)
else
ret |= m_daisychain->read_exp(0);
}
else //$4017
else //$4017
{
if ((m_cfg->read() & 2) == 2) // we are P2 input
if ((m_cfg->read() & 2) == 2) // we are P2 input
{
ret |= (m_latch & 1) << 1;
m_latch >>= 1;
@ -314,4 +314,3 @@ void nes_arcstick_device::write(UINT8 data)
m_latch = m_joypad->read();
}

View File

@ -81,7 +81,7 @@ void nes_konamihs_device::device_reset()
UINT8 nes_konamihs_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) //$4017
if (offset == 1) //$4017
{
ret |= m_latch_p1 << 1;
ret |= m_latch_p2 << 3;

View File

@ -13,8 +13,8 @@
#include "miracle.h"
#define MIRACLE_MIDI_WAITING 0
#define MIRACLE_MIDI_RECEIVE 1 // receive byte from piano
#define MIRACLE_MIDI_SEND 2 // send byte to piano
#define MIRACLE_MIDI_RECEIVE 1 // receive byte from piano
#define MIRACLE_MIDI_SEND 2 // send byte to piano
//**************************************************************************
// DEVICE DEFINITIONS
@ -129,7 +129,7 @@ UINT8 nes_miracle_device::read_bit0()
void nes_miracle_device::write(UINT8 data)
{
// printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode);
// printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode);
if (m_midi_mode == MIRACLE_MIDI_SEND)
{
@ -142,7 +142,7 @@ void nes_miracle_device::write(UINT8 data)
// then we go back to waiting
if (m_sent_bits == 8)
{
// printf("xmit MIDI byte %02x\n", m_data_sent);
// printf("xmit MIDI byte %02x\n", m_data_sent);
xmit_char(m_data_sent);
m_midi_mode = MIRACLE_MIDI_WAITING;
m_sent_bits = 0;
@ -163,7 +163,7 @@ void nes_miracle_device::write(UINT8 data)
// was timer running?
if (m_strobe_clock > 0)
{
// printf("got strobe at %d clocks\n", m_strobe_clock);
// printf("got strobe at %d clocks\n", m_strobe_clock);
if (m_strobe_clock < 66 && data == 0)
{
@ -199,7 +199,7 @@ void nes_miracle_device::write(UINT8 data)
void nes_miracle_device::rcv_complete() // Rx completed receiving byte
{
receive_register_extract();
// UINT8 rcv = get_received_char();
// UINT8 rcv = get_received_char();
}
void nes_miracle_device::tra_complete() // Tx completed sending byte
@ -247,4 +247,3 @@ void nes_miracle_device::xmit_char(UINT8 data)
}
}
}

View File

@ -85,7 +85,7 @@ UINT8 nes_pachinko_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
// this controller behaves like a standard P3 joypad, with longer stream of inputs
if (offset == 0) //$4016
if (offset == 0) //$4016
{
ret |= (m_latch & 1) << 1;
m_latch >>= 1;

View File

@ -81,7 +81,7 @@ void nes_partytap_device::device_reset()
UINT8 nes_partytap_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) //$4017
if (offset == 1) //$4017
{
ret |= m_latch & 0x1c;
m_latch >>= 3;

View File

@ -198,7 +198,7 @@ void nes_suborkey_device::device_reset()
UINT8 nes_suborkey_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) //$4017
if (offset == 1) //$4017
{
// Subor Keyboard: rows of the keyboard matrix are read 4-bits at time and returned as bit1->bit4
if (m_fck_scan < 13)

View File

@ -91,7 +91,7 @@ UINT8 nes_zapper_device::read_bit34()
UINT8 nes_zapper_device::read_exp(offs_t offset)
{
UINT8 ret = 0;
if (offset == 1) // $4017
if (offset == 1) // $4017
ret |= nes_zapper_device::read_bit34();
return ret;
}

View File

@ -36,27 +36,27 @@
class media_identifier
{
public:
// construction/destruction
media_identifier(cli_options &options);
// construction/destruction
media_identifier(cli_options &options);
// getters
int total() const { return m_total; }
int matches() const { return m_matches; }
int nonroms() const { return m_nonroms; }
// getters
int total() const { return m_total; }
int matches() const { return m_matches; }
int nonroms() const { return m_nonroms; }
// operations
void reset() { m_total = m_matches = m_nonroms = 0; }
void identify(const char *name);
void identify_file(const char *name);
void identify_data(const char *name, const UINT8 *data, int length);
int find_by_hash(const hash_collection &hashes, int length);
// operations
void reset() { m_total = m_matches = m_nonroms = 0; }
void identify(const char *name);
void identify_file(const char *name);
void identify_data(const char *name, const UINT8 *data, int length);
int find_by_hash(const hash_collection &hashes, int length);
private:
// internal state
driver_enumerator m_drivlist;
int m_total;
int m_matches;
int m_nonroms;
// internal state
driver_enumerator m_drivlist;
int m_total;
int m_matches;
int m_nonroms;
};
@ -1619,8 +1619,8 @@ void cli_frontend::execute_commands(const char *exename)
}
if (!m_osd.execute_command(m_options.command()))
// if we get here, we don't know what has been requested
throw emu_fatalerror(MAMERR_INVALID_CONFIG, "Unknown command '%s' specified", m_options.command());
// if we get here, we don't know what has been requested
throw emu_fatalerror(MAMERR_INVALID_CONFIG, "Unknown command '%s' specified", m_options.command());
}

View File

@ -60,6 +60,5 @@ const options_entry cli_options::s_option_entries[] =
cli_options::cli_options()
: emu_options()
{
add_entries(cli_options::s_option_entries);
add_entries(cli_options::s_option_entries);
}

View File

@ -184,17 +184,17 @@ protected:
ARCOMPACT_RETTYPE arcompact_handle04_1c(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_1d(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_20(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_21(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_21(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_22(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_23(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_28(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_29(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2a(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2a(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2b(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_2f_00(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_2f_01(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2f_02(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2f_03(OPS_32);
// ARCOMPACT_RETTYPE arcompact_handle04_2f_03(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_2f_04(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_2f_05(OPS_32);
ARCOMPACT_RETTYPE arcompact_handle04_2f_06(OPS_32);

View File

@ -2142,7 +2142,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_21_p11_m0(OPS_32) // Jcc.
size = 8;
}
// c = limm;
// c = limm;
}
else
@ -2151,7 +2151,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_21_p11_m0(OPS_32) // Jcc.
// Jcc [c] 0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ
// no conditional links to ILINK1, ILINK2?
// c = m_regs[creg];
// c = m_regs[creg];
}
if (!check_condition(condition))

View File

@ -98,7 +98,7 @@ enum
#define ALWAYS64 0x400
#define SPECIAL64 0x800
#define SPECIAL64_ENT(x) (SPECIAL64 | ((x) << 24))
#define GROUP_MOD 0x1000
#define GROUP_MOD 0x1000
struct I386_OPCODE {
const char *mnemonic;
@ -1953,7 +1953,7 @@ static const GROUP_OP group_op_table[] =
{ "group0F0D", group0F0D_table },
{ "group0F12", group0F12_table },
{ "group0F16", group0F16_table },
{ "group0F18", group0F18_table },
{ "group0F18", group0F18_table },
{ "group0F71", group0F71_table },
{ "group0F72", group0F72_table },
{ "group0F73", group0F73_table },

View File

@ -2177,11 +2177,11 @@ void m68881_ftrap(m68000_base_device *m68k)
// trap here
m68ki_exception_trap(m68k, EXCEPTION_TRAPV);
}
else // fall through, requires eating the operand
else // fall through, requires eating the operand
{
switch (m68k->ir & 0x7)
{
case 2: // word operand
case 2: // word operand
OPER_I_16(m68k);
break;
@ -2189,9 +2189,8 @@ void m68881_ftrap(m68000_base_device *m68k)
OPER_I_32(m68k);
break;
case 4: // no operand
case 4: // no operand
break;
}
}
}

View File

@ -114,12 +114,12 @@ bool finder_base::report_missing(bool found, const char *objname, bool required)
void finder_base::printf_warning(const char *format, ...)
{
va_list argptr;
char buffer[1024];
va_list argptr;
char buffer[1024];
/* do the output */
va_start(argptr, format);
vsnprintf(buffer, 1024, format, argptr);
osd_printf_warning("%s", buffer);
va_end(argptr);
/* do the output */
va_start(argptr, format);
vsnprintf(buffer, 1024, format, argptr);
osd_printf_warning("%s", buffer);
va_end(argptr);
}

View File

@ -57,7 +57,7 @@ protected:
void *find_memshare(UINT8 width, size_t &bytes, bool required);
bool report_missing(bool found, const char *objname, bool required);
void printf_warning(const char *format, ...) ATTR_PRINTF(2,3);
void printf_warning(const char *format, ...) ATTR_PRINTF(2,3);
// internal state
finder_base *m_next;

View File

@ -89,7 +89,7 @@ device_state_entry::device_state_entry(int index, const char *symbol, void *data
device_state_entry::device_state_entry(int index, device_state_interface *dev)
: m_device_state(dev),
m_next(NULL),
m_next(NULL),
m_index(index),
m_dataptr(NULL),
m_datamask(0),

View File

@ -17,61 +17,61 @@
emu_fatalerror::emu_fatalerror(const char *format, ...)
: code(0)
{
if (format == NULL)
{
text[0] = '\0';
}
else
{
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
}
osd_break_into_debugger(text);
if (format == NULL)
{
text[0] = '\0';
}
else
{
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
}
osd_break_into_debugger(text);
}
emu_fatalerror::emu_fatalerror(const char *format, va_list ap)
: code(0)
{
if (format == NULL)
{
text[0] = '\0';
}
else
{
vsprintf(text, format, ap);
}
osd_break_into_debugger(text);
if (format == NULL)
{
text[0] = '\0';
}
else
{
vsprintf(text, format, ap);
}
osd_break_into_debugger(text);
}
emu_fatalerror::emu_fatalerror(int _exitcode, const char *format, ...)
: code(_exitcode)
{
if (format == NULL)
{
text[0] = '\0';
}
else
{
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
}
if (format == NULL)
{
text[0] = '\0';
}
else
{
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
}
}
emu_fatalerror::emu_fatalerror(int _exitcode, const char *format, va_list ap)
: code(_exitcode)
{
if (format == NULL)
{
text[0] = '\0';
}
else
{
vsprintf(text, format, ap);
}
if (format == NULL)
{
text[0] = '\0';
}
else
{
vsprintf(text, format, ap);
}
}
@ -89,18 +89,18 @@ void report_bad_device_cast(const device_t *dev, const std::type_info &src_type,
void fatalerror(const char *format, ...)
{
va_list ap;
va_start(ap, format);
emu_fatalerror error(format, ap);
va_end(ap);
throw error;
va_list ap;
va_start(ap, format);
emu_fatalerror error(format, ap);
va_end(ap);
throw error;
}
void fatalerror_exitcode(running_machine &machine, int exitcode, const char *format, ...)
{
va_list ap;
va_start(ap, format);
emu_fatalerror error(exitcode, format, ap);
va_end(ap);
throw error;
va_list ap;
va_start(ap, format);
emu_fatalerror error(exitcode, format, ap);
va_end(ap);
throw error;
}

View File

@ -150,10 +150,10 @@ const options_entry emu_options::s_option_entries[] =
// debugging options
{ NULL, NULL, OPTION_HEADER, "CORE DEBUGGING OPTIONS" },
{ OPTION_VERBOSE ";v", "0", OPTION_BOOLEAN, "display additional diagnostic information" },
{ OPTION_LOG, "0", OPTION_BOOLEAN, "generate an error.log file" },
{ OPTION_OSLOG, "0", OPTION_BOOLEAN, "output error.log data to the system debugger" },
{ OPTION_DEBUG ";d", "0", OPTION_BOOLEAN, "enable/disable debugger" },
{ OPTION_VERBOSE ";v", "0", OPTION_BOOLEAN, "display additional diagnostic information" },
{ OPTION_LOG, "0", OPTION_BOOLEAN, "generate an error.log file" },
{ OPTION_OSLOG, "0", OPTION_BOOLEAN, "output error.log data to the system debugger" },
{ OPTION_DEBUG ";d", "0", OPTION_BOOLEAN, "enable/disable debugger" },
{ OPTION_UPDATEINPAUSE, "0", OPTION_BOOLEAN, "keep calling video updates while in pause" },
{ OPTION_DEBUGSCRIPT, NULL, OPTION_STRING, "script for debugger" },

View File

@ -318,11 +318,11 @@ public:
bool joystick_contradictory() const { return bool_value(OPTION_JOYSTICK_CONTRADICTORY); }
int coin_impulse() const { return int_value(OPTION_COIN_IMPULSE); }
// core debugging options
bool log() const { return bool_value(OPTION_LOG); }
bool debug() const { return bool_value(OPTION_DEBUG); }
bool verbose() const { return bool_value(OPTION_VERBOSE); }
bool oslog() const { return bool_value(OPTION_OSLOG); }
// core debugging options
bool log() const { return bool_value(OPTION_LOG); }
bool debug() const { return bool_value(OPTION_DEBUG); }
bool verbose() const { return bool_value(OPTION_VERBOSE); }
bool oslog() const { return bool_value(OPTION_OSLOG); }
const char *debug_script() const { return value(OPTION_DEBUGSCRIPT); }
bool update_in_pause() const { return bool_value(OPTION_UPDATEINPAUSE); }

View File

@ -714,8 +714,8 @@ int lua_engine::lua_screen::l_draw_text(lua_State *L)
render_container &rc = sc->container();
ui_manager &ui = sc->machine().ui();
ui.draw_text_full(&rc, msg, x, y , (1.0f - x),
JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR,
UI_TEXT_BG_COLOR, NULL, NULL);
JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR,
UI_TEXT_BG_COLOR, NULL, NULL);
return 0;
}

View File

@ -108,7 +108,7 @@ static char giant_string_buffer[65536] = { 0 };
osd_interface &running_machine::osd() const
{
return m_manager.osd();
return m_manager.osd();
}
//-------------------------------------------------

View File

@ -253,7 +253,7 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_size = 0x400000;
m_maker_id = MFG_INTEL;
m_device_id = 0x14;
// m_sector_is_4k = true; 128kb?
// m_sector_is_4k = true; 128kb?
map = ADDRESS_MAP_NAME( memory_map16_32Mb );
break;
case FLASH_SST_39VF020:

View File

@ -50,15 +50,15 @@ void jvs_host::commit_raw()
if(send_size < 3 || send_buffer[0] == 0x00 || send_buffer[1] != send_size-1) {
logerror("JVS checksum error\n");
} /*
Naomi suchie3 have bad working controls with this
Naomi suchie3 have bad working controls with this
// "This message is crap" doesn't exist so call it checksum error
recv_buffer[0] = 0x00;
recv_buffer[1] = 0x02;
recv_buffer[2] = 0x03;
recv_size = 3;
// "This message is crap" doesn't exist so call it checksum error
recv_buffer[0] = 0x00;
recv_buffer[1] = 0x02;
recv_buffer[2] = 0x03;
recv_size = 3;
} else */ {
} else */ {
if(first_device) {
first_device->message(send_buffer[0], send_buffer+2, send_size-2, recv_buffer+2, recv_size);
recv_is_encoded = false;

View File

@ -440,12 +440,12 @@ ATTR_COLD void netlist_mame_device_t::save_state()
if (td != NULL) save_pointer(td, s->m_name, s->m_count);
}
break;
case DT_FLOAT:
{
float *td = s->resolved<float>();
if (td != NULL) save_pointer(td, s->m_name, s->m_count);
}
break;
case DT_FLOAT:
{
float *td = s->resolved<float>();
if (td != NULL) save_pointer(td, s->m_name, s->m_count);
}
break;
case DT_INT64:
save_pointer((INT64 *) s->m_ptr, s->m_name, s->m_count);
break;

View File

@ -94,7 +94,7 @@ machine_manager* machine_manager::m_manager = NULL;
osd_interface &machine_manager::osd() const
{
return m_osd;
return m_osd;
}

View File

@ -14,7 +14,7 @@ class netlist_matrix_solver_direct_t: public netlist_matrix_solver_t
public:
netlist_matrix_solver_direct_t(const netlist_solver_parameters_t &params, int size);
netlist_matrix_solver_direct_t(const eSolverType type, const netlist_solver_parameters_t &params, int size);
netlist_matrix_solver_direct_t(const eSolverType type, const netlist_solver_parameters_t &params, int size);
virtual ~netlist_matrix_solver_direct_t();
@ -69,13 +69,13 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::~netlist_matrix_solver_direct_t
{
//delete[] m_A[k];
}
for (int k = 0; k < N(); k++)
{
nl_free(m_terms[k]);
nl_free(m_row_ops[k]);
}
nl_free(m_row_ops[N()]);
//delete[] m_last_RHS;
for (int k = 0; k < N(); k++)
{
nl_free(m_terms[k]);
nl_free(m_row_ops[k]);
}
nl_free(m_row_ops[N()]);
//delete[] m_last_RHS;
//delete[] m_RHS;
nl_free_array(m_terms);
nl_free_array(m_rails_temp);
@ -193,17 +193,17 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_a
* Sorting as a general matrix pre-conditioning is mentioned in
* literature but I have found no articles about Gauss Seidel.
*
* For Gaussian Elimination however increasing order is better suited.
* FIXME: Even better would be to sort on elements right of the matrix diagonal.
*
* For Gaussian Elimination however increasing order is better suited.
* FIXME: Even better would be to sort on elements right of the matrix diagonal.
*
*/
int sort_order = (type() == GAUSS_SEIDEL ? 1 : -1);
int sort_order = (type() == GAUSS_SEIDEL ? 1 : -1);
for (int k = 0; k < N() / 2; k++)
for (int i = 0; i < N() - 1; i++)
{
if ((m_terms[i]->m_railstart - m_terms[i+1]->m_railstart) * sort_order < 0)
if ((m_terms[i]->m_railstart - m_terms[i+1]->m_railstart) * sort_order < 0)
{
std::swap(m_terms[i],m_terms[i+1]);
m_nets.swap(i, i+1);
@ -475,15 +475,15 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t(
, m_dim(size)
, m_lp_fact(0)
{
m_terms = nl_alloc_array(terms_t *, N());
m_rails_temp = nl_alloc_array(terms_t, N());
m_terms = nl_alloc_array(terms_t *, N());
m_rails_temp = nl_alloc_array(terms_t, N());
for (int k = 0; k < N(); k++)
{
m_terms[k] = nl_alloc(terms_t);
m_row_ops[k] = vector_ops_t::create_ops(k);
}
m_row_ops[N()] = vector_ops_t::create_ops(N());
for (int k = 0; k < N(); k++)
{
m_terms[k] = nl_alloc(terms_t);
m_row_ops[k] = vector_ops_t::create_ops(k);
}
m_row_ops[N()] = vector_ops_t::create_ops(N());
}

View File

@ -17,16 +17,16 @@ class ATTR_ALIGNED(64) netlist_matrix_solver_gauss_seidel_t: public netlist_matr
public:
netlist_matrix_solver_gauss_seidel_t(const netlist_solver_parameters_t &params, int size)
: netlist_matrix_solver_direct_t<m_N, _storage_N>(netlist_matrix_solver_t::GAUSS_SEIDEL, params, size)
: netlist_matrix_solver_direct_t<m_N, _storage_N>(netlist_matrix_solver_t::GAUSS_SEIDEL, params, size)
, m_lp_fact(0)
, m_gs_fail(0)
, m_gs_total(0)
{
const char *p = osd_getenv("NETLIST_STATS");
if (p != NULL)
m_log_stats = (bool) atoi(p);
else
m_log_stats = false;
const char *p = osd_getenv("NETLIST_STATS");
if (p != NULL)
m_log_stats = (bool) atoi(p);
else
m_log_stats = false;
}
virtual ~netlist_matrix_solver_gauss_seidel_t() {}
@ -52,21 +52,21 @@ private:
template <int m_N, int _storage_N>
void netlist_matrix_solver_gauss_seidel_t<m_N, _storage_N>::log_stats()
{
if (this->m_stat_calculations != 0 && m_log_stats)
{
printf("==============================================\n");
printf("Solver %s\n", this->name().cstr());
printf(" ==> %d nets\n", this->N()); //, (*(*groups[i].first())->m_core_terms.first())->name().cstr());
printf(" has %s elements\n", this->is_dynamic() ? "dynamic" : "no dynamic");
printf(" has %s elements\n", this->is_timestep() ? "timestep" : "no timestep");
printf(" %6.3f average newton raphson loops\n", (double) this->m_stat_newton_raphson / (double) this->m_stat_vsolver_calls);
printf(" %10d invocations (%6d Hz) %10d gs fails (%6.2f%%) %6.3f average\n",
this->m_stat_calculations,
this->m_stat_calculations * 10 / (int) (this->netlist().time().as_double() * 10.0),
this->m_gs_fail,
100.0 * (double) this->m_gs_fail / (double) this->m_stat_calculations,
(double) this->m_gs_total / (double) this->m_stat_calculations);
}
if (this->m_stat_calculations != 0 && m_log_stats)
{
printf("==============================================\n");
printf("Solver %s\n", this->name().cstr());
printf(" ==> %d nets\n", this->N()); //, (*(*groups[i].first())->m_core_terms.first())->name().cstr());
printf(" has %s elements\n", this->is_dynamic() ? "dynamic" : "no dynamic");
printf(" has %s elements\n", this->is_timestep() ? "timestep" : "no timestep");
printf(" %6.3f average newton raphson loops\n", (double) this->m_stat_newton_raphson / (double) this->m_stat_vsolver_calls);
printf(" %10d invocations (%6d Hz) %10d gs fails (%6.2f%%) %6.3f average\n",
this->m_stat_calculations,
this->m_stat_calculations * 10 / (int) (this->netlist().time().as_double() * 10.0),
this->m_gs_fail,
100.0 * (double) this->m_gs_fail / (double) this->m_stat_calculations,
(double) this->m_gs_total / (double) this->m_stat_calculations);
}
}
template <int m_N, int _storage_N>
@ -299,7 +299,7 @@ ATTR_HOT inline int netlist_matrix_solver_gauss_seidel_t<m_N, _storage_N>::vsolv
//if (fabs(gabs_t - fabs(gtot_t)) > 1e-20)
// printf("%d %e abs: %f tot: %f\n",k, gabs_t / gtot_t -1.0, gabs_t, gtot_t);
gabs_t *= 0.95; // avoid rounding issues
gabs_t *= 0.95; // avoid rounding issues
if (!USE_GABS || gabs_t <= gtot_t)
{
w[k] = ws / gtot_t;
@ -343,7 +343,7 @@ ATTR_HOT inline int netlist_matrix_solver_gauss_seidel_t<m_N, _storage_N>::vsolv
this->m_nets[k]->m_cur_Analog = new_V[k];
this->m_gs_total += resched_cnt;
this->m_stat_calculations++;
this->m_stat_calculations++;
if (resched)
{

View File

@ -31,7 +31,7 @@ NETLIST_START(opamp_lm3900)
NET_C(R1.2, R2.2, G1.ON)
VCVS(G1)
PARAM(G1.G, 10000000)
//PARAM(G1.RI, 1)
//PARAM(G1.RI, 1)
PARAM(G1.RO, RES_K(8))
NETLIST_END()

View File

@ -99,11 +99,11 @@ ATTR_COLD void terms_t::set_pointers()
ATTR_COLD netlist_matrix_solver_t::netlist_matrix_solver_t(const eSolverType type, const netlist_solver_parameters_t &params)
: m_stat_calculations(0),
m_stat_newton_raphson(0),
m_stat_vsolver_calls(0),
m_params(params),
m_cur_ts(0),
m_type(type)
m_stat_newton_raphson(0),
m_stat_vsolver_calls(0),
m_params(params),
m_cur_ts(0),
m_type(type)
{
}
@ -257,7 +257,7 @@ ATTR_HOT void netlist_matrix_solver_t::step(const netlist_time delta)
template<class C >
void netlist_matrix_solver_t::solve_base(C *p)
{
m_stat_vsolver_calls++;
m_stat_vsolver_calls++;
if (is_dynamic())
{
int this_resched;
@ -270,7 +270,7 @@ void netlist_matrix_solver_t::solve_base(C *p)
newton_loops++;
} while (this_resched > 1 && newton_loops < m_params.m_nr_loops);
m_stat_newton_raphson += newton_loops;
m_stat_newton_raphson += newton_loops;
// reschedule ....
if (this_resched > 1 && !m_Q_sync.net().is_queued())
{
@ -438,7 +438,7 @@ netlist_matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const int
return nl_alloc(netlist_matrix_solver_direct2_t, m_params);
else
{
typedef netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N> solver_N;
typedef netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N> solver_N;
if (size >= gs_threshold)
return nl_alloc(solver_N, m_params, size);
else

View File

@ -197,8 +197,8 @@ public:
enum eSolverType
{
GAUSSIAN_ELIMINATION,
GAUSS_SEIDEL
GAUSSIAN_ELIMINATION,
GAUSS_SEIDEL
};
ATTR_COLD netlist_matrix_solver_t(const eSolverType type, const netlist_solver_parameters_t &params);
@ -243,9 +243,9 @@ protected:
plinearlist_t<netlist_analog_net_t *> m_nets;
plinearlist_t<netlist_analog_output_t *> m_inps;
int m_stat_calculations;
int m_stat_newton_raphson;
int m_stat_vsolver_calls;
int m_stat_calculations;
int m_stat_newton_raphson;
int m_stat_vsolver_calls;
const netlist_solver_parameters_t &m_params;
@ -264,7 +264,7 @@ private:
ATTR_HOT void update_inputs();
const eSolverType m_type;
const eSolverType m_type;
};

View File

@ -78,7 +78,7 @@ void nl_initialize_factory(netlist_factory_t &factory)
ENTRY(VCCS, VCCS, "-")
ENTRY(CCCS, CCCS, "-")
ENTRY(dummy_input, DUMMY_INPUT, "-")
ENTRY(frontier, FRONTIER, "+I,Q")
ENTRY(frontier, FRONTIER, "+I,Q")
ENTRY(QBJT_EB, QBJT_EB, "model")
ENTRY(QBJT_switch, QBJT_SW, "model")
ENTRY(ttl_input, TTL_INPUT, "IN")
@ -148,4 +148,3 @@ void nl_initialize_factory(netlist_factory_t &factory)
ENTRY(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2")
ENTRY(NE555_dip, NE555_DIP, "-")
}

View File

@ -43,7 +43,7 @@ NETLIB_START(4020_sub)
register_output("Q5", m_Q[4]);
register_output("Q6", m_Q[5]);
register_output("Q7", m_Q[6]);
register_output("Q8", m_Q[7]);
register_output("Q8", m_Q[7]);
register_output("Q9", m_Q[8]);
register_output("Q10", m_Q[9]);
register_output("Q11", m_Q[10]);

View File

@ -21,11 +21,11 @@ class nld_vdd_vss : public netlist_device_t
protected:
ATTR_HOT void update() {};
ATTR_HOT void start()
{
register_input("VDD,", m_vdd);
register_input("VSS,", m_vss);
};
ATTR_HOT void start()
{
register_input("VDD,", m_vdd);
register_input("VSS,", m_vss);
};
ATTR_HOT void reset() {};
public:

View File

@ -40,10 +40,9 @@
NET_REGISTER_DEV(dummy_input, _name)
#define FRONTIER(_name, _IN, _OUT) \
NET_REGISTER_DEV(frontier, _name) \
NET_C(_IN, _name.I) \
NET_C(_OUT, _name.Q) \
NET_REGISTER_DEV(frontier, _name) \
NET_C(_IN, _name.I) \
NET_C(_OUT, _name.Q)
// -----------------------------------------------------------------------------
// mainclock
// -----------------------------------------------------------------------------
@ -159,31 +158,31 @@ private:
class NETLIB_NAME(frontier) : public netlist_device_t
{
public:
ATTR_COLD NETLIB_NAME(frontier)()
: netlist_device_t(DUMMY) { }
ATTR_COLD NETLIB_NAME(frontier)()
: netlist_device_t(DUMMY) { }
ATTR_COLD virtual ~NETLIB_NAME(frontier)() {}
ATTR_COLD virtual ~NETLIB_NAME(frontier)() {}
protected:
ATTR_COLD void start()
{
register_input("I", m_I);
register_output("Q", m_Q);
}
ATTR_COLD void start()
{
register_input("I", m_I);
register_output("Q", m_Q);
}
ATTR_COLD void reset()
{
}
ATTR_COLD void reset()
{
}
ATTR_HOT ATTR_ALIGN void update()
{
OUTANALOG(m_Q, INPANALOG(m_I));
}
ATTR_HOT ATTR_ALIGN void update()
{
OUTANALOG(m_Q, INPANALOG(m_I));
}
private:
netlist_analog_input_t m_I;
netlist_analog_output_t m_Q;
netlist_analog_input_t m_I;
netlist_analog_output_t m_Q;
};

View File

@ -1001,4 +1001,3 @@ NETLIB_UPDATE(mainclock)
net.toggle_new_Q();
net.set_time(netlist().time() + m_inc);
}

View File

@ -337,7 +337,7 @@ public:
CAPACITOR, // Capacitor
DIODE, // Diode
DUMMY, // DUMMY device without function
FRONTIER, // Net frontier
FRONTIER, // Net frontier
BJT_EB, // BJT(Ebers-Moll)
BJT_SWITCH, // BJT(Switch)
VCVS, // Voltage controlled voltage source
@ -1268,13 +1268,13 @@ ATTR_HOT inline netlist_logic_net_t & RESTRICT netlist_net_t::as_logic()
ATTR_HOT inline const netlist_logic_net_t & RESTRICT netlist_net_t::as_logic() const
{
nl_assert(family() == LOGIC);
nl_assert(family() == LOGIC);
return static_cast<const netlist_logic_net_t &>(*this);
}
ATTR_HOT inline netlist_analog_net_t & RESTRICT netlist_net_t::as_analog()
{
nl_assert(family() == ANALOG);
nl_assert(family() == ANALOG);
return static_cast<netlist_analog_net_t &>(*this);
}

View File

@ -121,21 +121,21 @@
class nl_fatalerror : public std::exception
{
public:
nl_fatalerror(const char *format, ...) ATTR_PRINTF(2,3)
{
char text[1024];
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
osd_printf_error("%s\n", text);
}
nl_fatalerror(const char *format, va_list ap)
{
char text[1024];
vsprintf(text, format, ap);
osd_printf_error("%s\n", text);
}
nl_fatalerror(const char *format, ...) ATTR_PRINTF(2,3)
{
char text[1024];
va_list ap;
va_start(ap, format);
vsprintf(text, format, ap);
va_end(ap);
osd_printf_error("%s\n", text);
}
nl_fatalerror(const char *format, va_list ap)
{
char text[1024];
vsprintf(text, format, ap);
osd_printf_error("%s\n", text);
}
};
//============================================================

View File

@ -56,18 +56,18 @@
ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::term_param_list()
{
if (m_def_param.startsWith("+"))
return nl_util::split(m_def_param.substr(1), ",");
else
return nl_util::pstring_list();
if (m_def_param.startsWith("+"))
return nl_util::split(m_def_param.substr(1), ",");
else
return nl_util::pstring_list();
}
ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::def_params()
{
if (m_def_param.startsWith("+") || m_def_param.equals("-"))
return nl_util::pstring_list();
else
return nl_util::split(m_def_param, ",");
if (m_def_param.startsWith("+") || m_def_param.equals("-"))
return nl_util::pstring_list();
else
return nl_util::split(m_def_param, ",");
}

View File

@ -97,10 +97,10 @@ netlist_device_t *netlist_setup_t::register_dev(netlist_device_t *dev, const pst
netlist_device_t *netlist_setup_t::register_dev(const pstring &classname, const pstring &name)
{
netlist_device_t *dev = factory().new_device_by_classname(classname);
if (dev == NULL)
netlist().error("Class %s not found!\n", classname.cstr());
return register_dev(dev, name);
netlist_device_t *dev = factory().new_device_by_classname(classname);
if (dev == NULL)
netlist().error("Class %s not found!\n", classname.cstr());
return register_dev(dev, name);
}
template <class T>
@ -697,7 +697,7 @@ void netlist_setup_t::resolve_inputs()
void netlist_setup_t::start_devices()
{
//FIXME: we need a nl_getenv
//FIXME: we need a nl_getenv
if (getenv("NL_LOGS"))
{
NL_VERBOSE_OUT(("Creating dynamic logs ...\n"));

View File

@ -146,13 +146,13 @@ public:
void namespace_push(const pstring &aname);
void namespace_pop();
netlist_factory_t &factory() { return *m_factory; }
const netlist_factory_t &factory() const { return *m_factory; }
netlist_factory_t &factory() { return *m_factory; }
const netlist_factory_t &factory() const { return *m_factory; }
/* not ideal, but needed for save_state */
tagmap_terminal_t m_terminals;
/* not ideal, but needed for save_state */
tagmap_terminal_t m_terminals;
void print_stats() const;
void print_stats() const;
protected:

View File

@ -60,7 +60,7 @@ public:
ATTR_COLD ~plinearlist_t()
{
if (m_list != NULL)
nl_free_array(m_list);
nl_free_array(m_list);
m_list = NULL;
}
@ -183,7 +183,7 @@ private:
else
{
if (m_list != NULL)
nl_free_array(m_list);
nl_free_array(m_list);
m_list = NULL;
m_count = 0;
}

View File

@ -24,7 +24,7 @@ ATTR_COLD void pstate_manager_t::save_state_ptr(const pstring &stname, const pst
"DT_INT8",
"DT_INT",
"DT_BOOLEAN",
"DT_FLOAT"
"DT_FLOAT"
};
NL_VERBOSE_OUT(("SAVE: <%s> %s(%d) %p\n", fullname.cstr(), ts[dt].cstr(), size, ptr));
@ -64,8 +64,8 @@ ATTR_COLD void pstate_manager_t::post_load()
template<> ATTR_COLD void pstate_manager_t::save_item(pstate_callback_t &state, const void *owner, const pstring &stname)
{
//save_state_ptr(stname, DT_CUSTOM, 0, 1, &state);
pstate_entry_t *p = nl_alloc(pstate_entry_t, stname, owner, &state);
m_save.add(p);
state.register_state(*this, stname);
//save_state_ptr(stname, DT_CUSTOM, 0, 1, &state);
pstate_entry_t *p = nl_alloc(pstate_entry_t, stname, owner, &state);
m_save.add(p);
state.register_state(*this, stname);
}

View File

@ -24,4 +24,3 @@ void parameters_manager::add(astring tag, astring value)
{
m_parameters.add(tag, value);
}

View File

@ -207,62 +207,62 @@ inline item_layer get_layer_and_blendmode(const layout_view &view, int index, in
render_texinfo &render_texinfo::operator=(const render_texinfo &src)
{
free_palette();
base = src.base;
rowpixels = src.rowpixels;
width = src.width;
height = src.height;
seqid = src.seqid;
osddata = src.osddata;
m_palette = src.m_palette;
if (m_palette != NULL)
{
m_palette->ref_count++;
}
return *this;
free_palette();
base = src.base;
rowpixels = src.rowpixels;
width = src.width;
height = src.height;
seqid = src.seqid;
osddata = src.osddata;
m_palette = src.m_palette;
if (m_palette != NULL)
{
m_palette->ref_count++;
}
return *this;
}
render_texinfo::render_texinfo(const render_texinfo &src)
{
base = src.base;
rowpixels = src.rowpixels;
width = src.width;
height = src.height;
seqid = src.seqid;
osddata = src.osddata;
m_palette = src.m_palette;
if (m_palette != NULL)
{
m_palette->ref_count++;
}
base = src.base;
rowpixels = src.rowpixels;
width = src.width;
height = src.height;
seqid = src.seqid;
osddata = src.osddata;
m_palette = src.m_palette;
if (m_palette != NULL)
{
m_palette->ref_count++;
}
}
void render_texinfo::set_palette(const dynamic_array<rgb_t> *source)
{
free_palette();
if (source != NULL)
{
m_palette = global_alloc(render_palette_copy);
m_palette->palette.copyfrom(*source);
m_palette->ref_count = 1;
}
else
{
m_palette = NULL;
}
free_palette();
if (source != NULL)
{
m_palette = global_alloc(render_palette_copy);
m_palette->palette.copyfrom(*source);
m_palette->ref_count = 1;
}
else
{
m_palette = NULL;
}
}
void render_texinfo::free_palette()
{
if (m_palette != NULL)
{
m_palette->ref_count--;
if (m_palette->ref_count == 0)
{
global_free(m_palette);
}
}
m_palette = NULL;
if (m_palette != NULL)
{
m_palette->ref_count--;
if (m_palette->ref_count == 0)
{
global_free(m_palette);
}
}
m_palette = NULL;
}
@ -277,31 +277,31 @@ void render_texinfo::free_palette()
void render_primitive::reset()
{
// public state
type = INVALID;
bounds.x0 = 0;
bounds.y0 = 0;
bounds.x1 = 0;
bounds.y1 = 0;
color.a = 0;
color.r = 0;
color.g = 0;
color.b = 0;
flags = 0;
width = 0.0f;
texture.set_palette(NULL);
texture = render_texinfo();
texcoords.bl.u = 0.0f;
texcoords.bl.v = 0.0f;
texcoords.br.u = 0.0f;
texcoords.br.v = 0.0f;
texcoords.tl.u = 0.0f;
texcoords.tl.v = 0.0f;
texcoords.tr.u = 0.0f;
texcoords.tr.v = 0.0f;
// public state
type = INVALID;
bounds.x0 = 0;
bounds.y0 = 0;
bounds.x1 = 0;
bounds.y1 = 0;
color.a = 0;
color.r = 0;
color.g = 0;
color.b = 0;
flags = 0;
width = 0.0f;
texture.set_palette(NULL);
texture = render_texinfo();
texcoords.bl.u = 0.0f;
texcoords.bl.v = 0.0f;
texcoords.br.u = 0.0f;
texcoords.br.v = 0.0f;
texcoords.tl.u = 0.0f;
texcoords.tl.v = 0.0f;
texcoords.tr.u = 0.0f;
texcoords.tr.v = 0.0f;
// do not clear m_next!
// memset(&type, 0, FPTR(&texcoords + 1) - FPTR(&type));
// do not clear m_next!
// memset(&type, 0, FPTR(&texcoords + 1) - FPTR(&type));
}
@ -556,63 +556,63 @@ void render_texture::get_scaled(UINT32 dwidth, UINT32 dheight, render_texinfo &t
texinfo.width = swidth;
texinfo.height = sheight;
// will be set later
texinfo.set_palette(NULL);
texinfo.set_palette(NULL);
texinfo.seqid = ++m_curseq;
}
else
{
// make sure we can recover the original argb32 bitmap
bitmap_argb32 dummy;
bitmap_argb32 &srcbitmap = (m_bitmap != NULL) ? downcast<bitmap_argb32 &>(*m_bitmap) : dummy;
// make sure we can recover the original argb32 bitmap
bitmap_argb32 dummy;
bitmap_argb32 &srcbitmap = (m_bitmap != NULL) ? downcast<bitmap_argb32 &>(*m_bitmap) : dummy;
// is it a size we already have?
scaled_texture *scaled = NULL;
int scalenum;
for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++)
{
scaled = &m_scaled[scalenum];
// is it a size we already have?
scaled_texture *scaled = NULL;
int scalenum;
for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++)
{
scaled = &m_scaled[scalenum];
// we need a non-NULL bitmap with matching dest size
if (scaled->bitmap != NULL && dwidth == scaled->bitmap->width() && dheight == scaled->bitmap->height())
break;
}
// we need a non-NULL bitmap with matching dest size
if (scaled->bitmap != NULL && dwidth == scaled->bitmap->width() && dheight == scaled->bitmap->height())
break;
}
// did we get one?
if (scalenum == ARRAY_LENGTH(m_scaled))
{
int lowest = -1;
// did we get one?
if (scalenum == ARRAY_LENGTH(m_scaled))
{
int lowest = -1;
// didn't find one -- take the entry with the lowest seqnum
for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++)
if ((lowest == -1 || m_scaled[scalenum].seqid < m_scaled[lowest].seqid) && !primlist.has_reference(m_scaled[scalenum].bitmap))
lowest = scalenum;
assert_always(lowest != -1, "Too many live texture instances!");
// didn't find one -- take the entry with the lowest seqnum
for (scalenum = 0; scalenum < ARRAY_LENGTH(m_scaled); scalenum++)
if ((lowest == -1 || m_scaled[scalenum].seqid < m_scaled[lowest].seqid) && !primlist.has_reference(m_scaled[scalenum].bitmap))
lowest = scalenum;
assert_always(lowest != -1, "Too many live texture instances!");
// throw out any existing entries
scaled = &m_scaled[lowest];
if (scaled->bitmap != NULL)
{
m_manager->invalidate_all(scaled->bitmap);
global_free(scaled->bitmap);
}
// throw out any existing entries
scaled = &m_scaled[lowest];
if (scaled->bitmap != NULL)
{
m_manager->invalidate_all(scaled->bitmap);
global_free(scaled->bitmap);
}
// allocate a new bitmap
scaled->bitmap = global_alloc(bitmap_argb32(dwidth, dheight));
scaled->seqid = ++m_curseq;
// allocate a new bitmap
scaled->bitmap = global_alloc(bitmap_argb32(dwidth, dheight));
scaled->seqid = ++m_curseq;
// let the scaler do the work
(*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param);
}
// let the scaler do the work
(*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param);
}
// finally fill out the new info
primlist.add_reference(scaled->bitmap);
texinfo.base = &scaled->bitmap->pix32(0);
texinfo.rowpixels = scaled->bitmap->rowpixels();
texinfo.width = dwidth;
texinfo.height = dheight;
// will be set later
texinfo.set_palette(NULL);
texinfo.seqid = scaled->seqid;
// finally fill out the new info
primlist.add_reference(scaled->bitmap);
texinfo.base = &scaled->bitmap->pix32(0);
texinfo.rowpixels = scaled->bitmap->rowpixels();
texinfo.width = dwidth;
texinfo.height = dheight;
// will be set later
texinfo.set_palette(NULL);
texinfo.seqid = scaled->seqid;
}
}
@ -1817,26 +1817,26 @@ void render_target::add_container_primitives(render_primitive_list &list, const
height = MIN(height, m_maxtexheight);
curitem->texture()->get_scaled(width, height, prim->texture, list);
// set the palette
// set the palette
#if 1
const dynamic_array<rgb_t> *adjusted_pal = curitem->texture()->get_adjusted_palette(container);
prim->texture.set_palette(adjusted_pal);
prim->texture.set_palette(adjusted_pal);
#else
prim->texture.palette = curitem->texture()->get_adjusted_palette(container);
prim->texture.palette = curitem->texture()->get_adjusted_palette(container);
#endif
// determine UV coordinates and apply clipping
prim->texcoords = oriented_texcoords[finalorient];
clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords);
// determine UV coordinates and apply clipping
prim->texcoords = oriented_texcoords[finalorient];
clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords);
// apply the final orientation from the quad flags and then build up the final flags
prim->flags = (curitem->flags() & ~(PRIMFLAG_TEXORIENT_MASK | PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) |
PRIMFLAG_TEXORIENT(finalorient) |
PRIMFLAG_TEXFORMAT(curitem->texture()->format());
if (blendmode != -1)
prim->flags |= PRIMFLAG_BLENDMODE(blendmode);
else
prim->flags |= PRIMFLAG_BLENDMODE(PRIMFLAG_GET_BLENDMODE(curitem->flags()));
// apply the final orientation from the quad flags and then build up the final flags
prim->flags = (curitem->flags() & ~(PRIMFLAG_TEXORIENT_MASK | PRIMFLAG_BLENDMODE_MASK | PRIMFLAG_TEXFORMAT_MASK)) |
PRIMFLAG_TEXORIENT(finalorient) |
PRIMFLAG_TEXFORMAT(curitem->texture()->format());
if (blendmode != -1)
prim->flags |= PRIMFLAG_BLENDMODE(blendmode);
else
prim->flags |= PRIMFLAG_BLENDMODE(PRIMFLAG_GET_BLENDMODE(curitem->flags()));
}
else
{
@ -1876,15 +1876,15 @@ void render_target::add_container_primitives(render_primitive_list &list, const
(container_xform.orientation & ORIENTATION_SWAP_XY) ? width : height, prim->texture, list);
// determine UV coordinates
prim->texcoords = oriented_texcoords[container_xform.orientation];
prim->texcoords = oriented_texcoords[container_xform.orientation];
// set the flags and add it to the list
prim->flags = PRIMFLAG_TEXORIENT(container_xform.orientation) |
PRIMFLAG_BLENDMODE(BLENDMODE_RGB_MULTIPLY) |
PRIMFLAG_TEXFORMAT(container.overlay()->format()) |
PRIMFLAG_TEXSHADE(1);
// set the flags and add it to the list
prim->flags = PRIMFLAG_TEXORIENT(container_xform.orientation) |
PRIMFLAG_BLENDMODE(BLENDMODE_RGB_MULTIPLY) |
PRIMFLAG_TEXFORMAT(container.overlay()->format()) |
PRIMFLAG_TEXSHADE(1);
list.append_or_return(*prim, false);
list.append_or_return(*prim, false);
}
}
@ -1925,17 +1925,17 @@ void render_target::add_element_primitives(render_primitive_list &list, const ob
texture->get_scaled(width, height, prim->texture, list);
// compute the clip rect
render_bounds cliprect;
cliprect.x0 = render_round_nearest(xform.xoffs);
cliprect.y0 = render_round_nearest(xform.yoffs);
cliprect.x1 = render_round_nearest(xform.xoffs + xform.xscale);
cliprect.y1 = render_round_nearest(xform.yoffs + xform.yscale);
sect_render_bounds(&cliprect, &m_bounds);
// compute the clip rect
render_bounds cliprect;
cliprect.x0 = render_round_nearest(xform.xoffs);
cliprect.y0 = render_round_nearest(xform.yoffs);
cliprect.x1 = render_round_nearest(xform.xoffs + xform.xscale);
cliprect.y1 = render_round_nearest(xform.yoffs + xform.yscale);
sect_render_bounds(&cliprect, &m_bounds);
// determine UV coordinates and apply clipping
prim->texcoords = oriented_texcoords[xform.orientation];
bool clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords);
// determine UV coordinates and apply clipping
prim->texcoords = oriented_texcoords[xform.orientation];
bool clipped = render_clip_quad(&prim->bounds, &cliprect, &prim->texcoords);
// add to the list or free if we're clipped out
list.append_or_return(*prim, clipped);

View File

@ -213,26 +213,26 @@ struct render_quad_texuv
struct render_palette_copy
{
int ref_count;
dynamic_array<rgb_t> palette;
int ref_count;
dynamic_array<rgb_t> palette;
};
class render_texinfo
{
public:
render_texinfo()
: base(NULL), rowpixels(0), width(0), height(0),
seqid(0), osddata(0), m_palette(NULL)
{}
render_texinfo()
: base(NULL), rowpixels(0), width(0), height(0),
seqid(0), osddata(0), m_palette(NULL)
{}
render_texinfo(const render_texinfo &src);
render_texinfo(const render_texinfo &src);
~render_texinfo()
{
free_palette();
}
~render_texinfo()
{
free_palette();
}
render_texinfo &operator=(const render_texinfo &src);
render_texinfo &operator=(const render_texinfo &src);
void * base; // base of the data
UINT32 rowpixels; // pixels per row
@ -241,14 +241,14 @@ public:
UINT32 seqid; // sequence ID
UINT64 osddata; // aux data to pass to osd
const rgb_t * palette() const { return ((m_palette == NULL) ? NULL : &m_palette->palette[0]); }
const rgb_t * palette() const { return ((m_palette == NULL) ? NULL : &m_palette->palette[0]); }
void set_palette(const dynamic_array<rgb_t> *source);
void set_palette(const dynamic_array<rgb_t> *source);
private:
void free_palette();
void free_palette();
render_palette_copy *m_palette; // palette for PALETTE16 textures, LUTs for RGB15/RGB32
render_palette_copy *m_palette; // palette for PALETTE16 textures, LUTs for RGB15/RGB32
};

View File

@ -92,14 +92,14 @@ render_font::render_font(render_manager &manager, const char *filename)
m_osdfont = manager.machine().osd().font_alloc();
if (m_osdfont != NULL)
{
if (m_osdfont->open(manager.machine().options().font_path(), filename, m_height))
{
m_scale = 1.0f / (float)m_height;
m_format = FF_OSD;
return;
}
global_free(m_osdfont);
m_osdfont = NULL;
if (m_osdfont->open(manager.machine().options().font_path(), filename, m_height))
{
m_scale = 1.0f / (float)m_height;
m_format = FF_OSD;
return;
}
global_free(m_osdfont);
m_osdfont = NULL;
}
}
@ -136,8 +136,8 @@ render_font::~render_font()
// release the OSD font
if (m_osdfont != NULL)
{
m_osdfont->close();
global_free(m_osdfont);
m_osdfont->close();
global_free(m_osdfont);
}
}

View File

@ -109,9 +109,9 @@ void ui_menu_device_config::populate()
const rectangle &visarea = screen->visible_area();
string.catprintf("%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz\n",
visarea.width(), visarea.height(),
(machine().system().flags & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(screen->frame_period().attoseconds));
visarea.width(), visarea.height(),
(machine().system().flags & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(screen->frame_period().attoseconds));
}
}
}
@ -275,7 +275,7 @@ void ui_menu_device_config::populate()
}
if ((execiter.count() + scriter.count() + snditer.count() + imgiter.count() + slotiter.count() + bios + dips + confs
+ input + input_mj + input_hana + input_gamble + input_analog + input_adjust + input_keypad + input_keyboard) == 0)
+ input + input_mj + input_hana + input_gamble + input_analog + input_adjust + input_keypad + input_keyboard) == 0)
string.cat("[None]\n");
const_cast<machine_config &>(machine().config()).device_remove(&machine().config().root_device(), m_option->name());

View File

@ -83,9 +83,9 @@ void ui_menu_tape_control::populate()
(state & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED
? "stopped"
: ((state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY
? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "playing" : "(playing)")
: ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "recording" : "(recording)")
),
? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "playing" : "(playing)")
: ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "recording" : "(recording)")
),
timepos,
tapeflags,
TAPECMD_SLIDER);

View File

@ -100,12 +100,12 @@ public:
void resize_keep_and_clear_new(int count, UINT8 data = 0) { int oldcount = m_count; resize_keep(count); if (oldcount < m_count) clear_internal(oldcount, m_count - oldcount, data); }
// batch operations
void copyfrom(const dynamic_array<_ElementType> &source)
{
resize(source.count());
for (int i=0; i < source.count(); i++)
m_array[i] = source[i];
}
void copyfrom(const dynamic_array<_ElementType> &source)
{
resize(source.count());
for (int i=0; i < source.count(); i++)
m_array[i] = source[i];
}
private:
// internal helpers

View File

@ -171,7 +171,7 @@ public:
// entry list getters
const rgb_t *entry_list_raw() const { return m_entry_color; }
const dynamic_array<rgb_t> *entry_list_adjusted_darray() const { return &m_adjusted_color; }
const rgb_t *entry_list_adjusted() const { return m_adjusted_color; }
const rgb_t *entry_list_adjusted() const { return m_adjusted_color; }
const rgb_t *entry_list_adjusted_rgb15() const { return m_adjusted_rgb15; }
// group adjustments

View File

@ -46,47 +46,47 @@
/* ---------------------------------------------------------------------- */
static NETLIST_START(nl_mario_snd0)
RES(R17, RES_K(27)) /* 20 according to parts list */
/* 27 verified, 30K in schematics */
CAP(C14, CAP_U(4.7)) /* verified */
RES(R17, RES_K(27)) /* 20 according to parts list */
/* 27 verified, 30K in schematics */
CAP(C14, CAP_U(4.7)) /* verified */
TTL_74123(2H_A)
NET_C(2H_A.VCC, V5)
NET_C(2H_A.GND, GND)
NET_C(SOUND0.Q, 2H_A.B)
NET_C(GND, 2H_A.A)
NET_C(2H_A.CLRQ, ttlhigh) /* NOT IN SCHEMATICS */
DIODE(D1, "1N4148") /* FIXME: try to identify */
TTL_7404_INVERT(1H_A, 2H_A.QQ)
NET_C(R17.1, V5)
NET_C(R17.2, D1.A, C14.1)
NET_C(D1.K, 2H_A.RC)
NET_C(C14.2, 2H_A.C)
TTL_74123(2H_A)
NET_C(2H_A.VCC, V5)
NET_C(2H_A.GND, GND)
NET_C(SOUND0.Q, 2H_A.B)
NET_C(GND, 2H_A.A)
NET_C(2H_A.CLRQ, ttlhigh) /* NOT IN SCHEMATICS */
DIODE(D1, "1N4148") /* FIXME: try to identify */
TTL_7404_INVERT(1H_A, 2H_A.QQ)
NET_C(R17.1, V5)
NET_C(R17.2, D1.A, C14.1)
NET_C(D1.K, 2H_A.RC)
NET_C(C14.2, 2H_A.C)
RES(R6, RES_K(4.7)) /* verified */
CAP(C3, CAP_U(10)) /* verified */
RES(R6, RES_K(4.7)) /* verified */
CAP(C3, CAP_U(10)) /* verified */
NET_C(1H_A.Q, R6.1)
NET_C(R6.2, C3.1, 1J_A.FC)
NET_C(R6.2, 2J_A.FC)
NET_C(C3.2, GND)
NET_C(1H_A.Q, R6.1)
NET_C(R6.2, C3.1, 1J_A.FC)
NET_C(R6.2, 2J_A.FC)
NET_C(C3.2, GND)
//#define MR_C6 CAP_N(3.9) /* verified */
//#define MR_C6 CAP_N(3.9) /* verified */
SN74LS629(1J_A, CAP_N(3.9))
NET_C(1J_A.RNG, V5)
NET_C(1J_A.ENQ, ttllow)
NET_C(GND, 1J_A.GND)
SN74LS629(1J_A, CAP_N(3.9))
NET_C(1J_A.RNG, V5)
NET_C(1J_A.ENQ, ttllow)
NET_C(GND, 1J_A.GND)
//#define MR_C17 CAP_N(22) /* verified */
//#define MR_C17 CAP_N(22) /* verified */
SN74LS629(2J_A, CAP_N(22))
NET_C(2J_A.RNG, V5)
NET_C(2J_A.ENQ, ttllow)
NET_C(GND, 2J_A.GND)
SN74LS629(2J_A, CAP_N(22))
NET_C(2J_A.RNG, V5)
NET_C(2J_A.ENQ, ttllow)
NET_C(GND, 2J_A.GND)
TTL_7486_XOR(1K_A, 1J_A.Y, 2J_A.Y)
TTL_7408_AND(2K_A, 2H_A.Q, 1K_A)
TTL_7486_XOR(1K_A, 1J_A.Y, 2J_A.Y)
TTL_7408_AND(2K_A, 2H_A.Q, 1K_A)
NETLIST_END()
/* ---------------------------------------------------------------------- */
@ -96,49 +96,49 @@ NETLIST_END()
// FIXME: Diodes are 1S953
static NETLIST_START(nl_mario_snd7)
RES(R61, RES_K(47))
CAP(C41, CAP_U(4.7)) /* verified */
RES(R61, RES_K(47))
CAP(C41, CAP_U(4.7)) /* verified */
TTL_74123(4L_A)
NET_C(4L_A.VCC, V5)
NET_C(4L_A.GND, GND)
NET_C(SOUND7.Q, 4L_A.B)
NET_C(GND, 4L_A.A)
NET_C(4L_A.CLRQ, ttlhigh) /* NOT IN SCHEMATICS */
DIODE(D10, "1N4148") /* FIXME: try to identify */
TTL_7404_INVERT(4J_A, 4L_A.Q)
NET_C(R61.1, V5)
NET_C(R61.2, D10.A, C41.1)
NET_C(D10.K, 4L_A.RC)
NET_C(C41.2, 4L_A.C)
TTL_74123(4L_A)
NET_C(4L_A.VCC, V5)
NET_C(4L_A.GND, GND)
NET_C(SOUND7.Q, 4L_A.B)
NET_C(GND, 4L_A.A)
NET_C(4L_A.CLRQ, ttlhigh) /* NOT IN SCHEMATICS */
DIODE(D10, "1N4148") /* FIXME: try to identify */
TTL_7404_INVERT(4J_A, 4L_A.Q)
NET_C(R61.1, V5)
NET_C(R61.2, D10.A, C41.1)
NET_C(D10.K, 4L_A.RC)
NET_C(C41.2, 4L_A.C)
RES(R65, RES_K(10))
CAP(C44, CAP_U(3.3)) /* verified */
RES(R65, RES_K(10))
CAP(C44, CAP_U(3.3)) /* verified */
SN74LS629(4K_A, CAP_U(0.022))
NET_C(4K_A.RNG, V5)
NET_C(4K_A.ENQ, ttllow)
NET_C(GND, 4K_A.GND)
NET_C(R65.1, 4J_A.Q)
NET_C(R65.2, 4K_A.FC, C44.1)
NET_C(C44.2, GND)
SN74LS629(4K_A, CAP_U(0.022))
NET_C(4K_A.RNG, V5)
NET_C(4K_A.ENQ, ttllow)
NET_C(GND, 4K_A.GND)
NET_C(R65.1, 4J_A.Q)
NET_C(R65.2, 4K_A.FC, C44.1)
NET_C(C44.2, GND)
CD_4020(3H, 4K_B.Y, ttllow, V5, GND)
TTL_7404_INVERT(4J_B, 3H.Q12)
CD_4020(3H, 4K_B.Y, ttllow, V5, GND)
TTL_7404_INVERT(4J_B, 3H.Q12)
RES(R64, RES_K(20))
CAP(C43, CAP_U(3.3)) /* verified */
RES(R64, RES_K(20))
CAP(C43, CAP_U(3.3)) /* verified */
SN74LS629(4K_B, CAP_U(0.0047))
NET_C(4K_B.RNG, V5)
NET_C(4K_B.ENQ, ttllow)
NET_C(GND, 4K_B.GND)
NET_C(R64.1, 4J_B.Q)
NET_C(R64.2, 4K_B.FC, C43.1)
NET_C(C43.2, GND)
SN74LS629(4K_B, CAP_U(0.0047))
NET_C(4K_B.RNG, V5)
NET_C(4K_B.ENQ, ttllow)
NET_C(GND, 4K_B.GND)
NET_C(R64.1, 4J_B.Q)
NET_C(R64.2, 4K_B.FC, C43.1)
NET_C(C43.2, GND)
TTL_7486_XOR(1K_C, 3H.Q4, 4K_A.Y)
TTL_7408_AND(2K_C, 4L_A.Q, 1K_C)
TTL_7486_XOR(1K_C, 3H.Q4, 4K_A.Y)
TTL_7408_AND(2K_C, 4L_A.Q, 1K_C)
NETLIST_END()
@ -146,140 +146,140 @@ NETLIST_END()
/* DAC sound */
/* ---------------------------------------------------------------------- */
static NETLIST_START(nl_mario_dac)
RES(R34, RES_M(2))
RES(R35, RES_M(1))
RES(R36, RES_M(1.8))
LM3900(3M_1)
NET_C(3M_1.VM, GND)
NET_C(3M_1.VP, V5)
RES(R34, RES_M(2))
RES(R35, RES_M(1))
RES(R36, RES_M(1.8))
LM3900(3M_1)
NET_C(3M_1.VM, GND)
NET_C(3M_1.VP, V5)
NET_C(DAC.VOUT, R34.1)
NET_C(3M_1.MINUS, R34.2, R35.2)
NET_C(3M_1.OUT, R35.1)
NET_C(3M_1.PLUS, R36.1)
NET_C(R36.2, GND)
NET_C(DAC.VOUT, R34.1)
NET_C(3M_1.MINUS, R34.2, R35.2)
NET_C(3M_1.OUT, R35.1)
NET_C(3M_1.PLUS, R36.1)
NET_C(R36.2, GND)
RES(R21, RES_M(1.8))
RES(R23, RES_K(10))
RES(R25, RES_K(10))
RES(R37, RES_K(750))
RES(R38, RES_K(360))
RES(R39, RES_K(750))
RES(R21, RES_M(1.8))
RES(R23, RES_K(10))
RES(R25, RES_K(10))
RES(R37, RES_K(750))
RES(R38, RES_K(360))
RES(R39, RES_K(750))
CAP(C18, CAP_P(100))
CAP(C19, CAP_U(10))
CAP(C20, CAP_U(1))
CAP(C30, CAP_P(100))
CAP(C18, CAP_P(100))
CAP(C19, CAP_U(10))
CAP(C20, CAP_U(1))
CAP(C30, CAP_P(100))
LM3900(3M_2)
NET_C(3M_2.VM, GND)
NET_C(3M_2.VP, V5)
LM3900(3M_2)
NET_C(3M_2.VM, GND)
NET_C(3M_2.VP, V5)
NET_C(R35.1, C20.1)
NET_C(C20.2, R37.1)
NET_C(R37.2, R38.2, C18.1, R39.2)
NET_C(R35.1, C20.1)
NET_C(C20.2, R37.1)
NET_C(R37.2, R38.2, C18.1, R39.2)
NET_C(C18.2, GND)
NET_C(R38.1, C30.2, 3M_2.MINUS)
NET_C(3M_2.OUT, R39.1, C30.1)
NET_C(C18.2, GND)
NET_C(R38.1, C30.2, 3M_2.MINUS)
NET_C(3M_2.OUT, R39.1, C30.1)
NET_C(R21.1, 3M_2.PLUS)
NET_C(R21.2, C19.1, R25.2, R23.1)
NET_C(C19.2, R23.2, GND)
NET_C(R25.1, V5)
NET_C(R21.1, 3M_2.PLUS)
NET_C(R21.2, C19.1, R25.2, R23.1)
NET_C(C19.2, R23.2, GND)
NET_C(R25.1, V5)
NETLIST_END()
static NETLIST_START(nl_mario)
/* Standard stuff */
/* Standard stuff */
SOLVER(Solver, 48000)
PARAM(Solver.ACCURACY, 1e-8)
PARAM(Solver.SOR_FACTOR, 1.0)
PARAM(Solver.GS_THRESHOLD, 5)
PARAM(Solver.GS_LOOPS, 4)
//PARAM(Solver.LTE, 5e-2) // Default is not enough for paddle control
PARAM(Solver.DYNAMIC_TS, 0)
ANALOG_INPUT(V5, 5)
SOLVER(Solver, 48000)
PARAM(Solver.ACCURACY, 1e-8)
PARAM(Solver.SOR_FACTOR, 1.0)
PARAM(Solver.GS_THRESHOLD, 5)
PARAM(Solver.GS_LOOPS, 4)
//PARAM(Solver.LTE, 5e-2) // Default is not enough for paddle control
PARAM(Solver.DYNAMIC_TS, 0)
ANALOG_INPUT(V5, 5)
TTL_INPUT(SOUND0, 1)
INCLUDE(nl_mario_snd0)
TTL_INPUT(SOUND0, 1)
INCLUDE(nl_mario_snd0)
TTL_INPUT(SOUND7, 1)
INCLUDE(nl_mario_snd7)
TTL_INPUT(SOUND7, 1)
INCLUDE(nl_mario_snd7)
R2R_DAC(DAC, 3.4, 10000.0, 8)
NET_C(DAC.VGND, GND)
R2R_DAC(DAC, 3.4, 10000.0, 8)
NET_C(DAC.VGND, GND)
INCLUDE(nl_mario_dac)
INCLUDE(nl_mario_dac)
/* ---------------------------------------------------------------------- */
/* mixing */
/* ---------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
/* mixing */
/* ---------------------------------------------------------------------- */
RES(R20, RES_K(22)) /* verified */
RES(R19, RES_K(22)) /* verified */
RES(R40, RES_K(22)) /* verified */
RES(R41, RES_K(100)) /* verified */
CAP(C31, CAP_U(0.022)) /* */
RES(R20, RES_K(22)) /* verified */
RES(R19, RES_K(22)) /* verified */
RES(R40, RES_K(22)) /* verified */
RES(R41, RES_K(100)) /* verified */
CAP(C31, CAP_U(0.022)) /* */
NET_C(2K_A.Q, R20.1)
NET_C(GND, R19.1) //FIXME
NET_C(2K_C.Q, R41.1)
NET_C(2K_A.Q, R20.1)
NET_C(GND, R19.1) //FIXME
NET_C(2K_C.Q, R41.1)
#if 1
RES(DUM, RES_K(22))
NET_C(R39.1, DUM.1)
NET_C(DUM.2, GND)
FRONTIER(front1, R39.1, R40.1)
RES(DUM, RES_K(22))
NET_C(R39.1, DUM.1)
NET_C(DUM.2, GND)
FRONTIER(front1, R39.1, R40.1)
#else
NET_C(R39.1, R40.1)
NET_C(R39.1, R40.1)
#endif
NET_C(R20.2, R19.2, R40.2, R41.2, C31.1)
NET_C(C31.2, GND)
NET_C(R20.2, R19.2, R40.2, R41.2, C31.1)
NET_C(C31.2, GND)
CAP(C32, CAP_U(1)) /* verified */
RES(R42, RES_K(43)) /* verified */
RES(R43, RES_K(100)) /* verified */
CAP(C32, CAP_U(1)) /* verified */
RES(R42, RES_K(43)) /* verified */
RES(R43, RES_K(100)) /* verified */
NET_C(C31.1, C32.1)
NET_C(C32.2, R42.1, R43.2, Q10.B)
//NET_C(C32.2, R42.1, R43.2)
NET_C(R43.1, V5)
NET_C(R42.2, GND)
NET_C(C31.1, C32.1)
NET_C(C32.2, R42.1, R43.2, Q10.B)
//NET_C(C32.2, R42.1, R43.2)
NET_C(R43.1, V5)
NET_C(R42.2, GND)
#if 1
RES(R63, RES_K(1)) /* */
RES(R62, 150) /* */
RES(R63, RES_K(1)) /* */
RES(R62, 150) /* */
QBJT_EB(Q10, "2SC1815")
QBJT_EB(Q10, "2SC1815")
NET_C(R62.2, GND)
NET_C(R62.1, Q10.E)
NET_C(R62.2, GND)
NET_C(R62.1, Q10.E)
NET_C(R63.1, V5)
NET_C(R63.2, Q10.C)
NET_C(R63.1, V5)
NET_C(R63.2, Q10.C)
CAP(C42, CAP_U(0.1))
CAP(C47, CAP_U(4.7))
RES(VR1, RES_K(10))
CAP(C42, CAP_U(0.1))
CAP(C47, CAP_U(4.7))
RES(VR1, RES_K(10))
NET_C(C42.1, C47.1, R62.1)
NET_C(C42.2, GND)
NET_C(C47.2, VR1.1)
NET_C(VR1.2, GND)
NET_C(C42.1, C47.1, R62.1)
NET_C(C42.2, GND)
NET_C(C47.2, VR1.1)
NET_C(VR1.2, GND)
#endif
/* ---------------------------------------------------------------------- */
/* Output */
/* ---------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- */
/* Output */
/* ---------------------------------------------------------------------- */
RES(ROUT, 1000000)
RES(ROUT, 1000000)
//NET_C(Q10.C, ROUT.1)
//NET_C(R43.2, ROUT.1)
NET_C(VR1.1, ROUT.1)
//NET_C(Q10.C, ROUT.1)
//NET_C(R43.2, ROUT.1)
NET_C(VR1.1, ROUT.1)
NET_C(GND, ROUT.2)
NET_C(GND, ROUT.2)
NETLIST_END()
@ -790,7 +790,7 @@ WRITE8_MEMBER(mario_state::mario_sh1_w)
#if OLD_SOUND
m_discrete->write(space, DS_SOUND0_INP, 0);
#else
m_audio_snd0->write(data);
m_audio_snd0->write(data);
#endif
}
@ -835,7 +835,7 @@ WRITE8_MEMBER(mario_state::mario_sh3_w)
#if OLD_SOUND
machine().device<discrete_device>("discrete")->write(space, DS_SOUND7_INP, data & 1);
#else
m_audio_snd7->write((data & 1) ^ 1);
m_audio_snd7->write((data & 1) ^ 1);
#endif
break;
}
@ -891,16 +891,16 @@ MACHINE_CONFIG_FRAGMENT( mario_audio )
MCFG_DISCRETE_INTF(mario)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1)
#else
MCFG_SOUND_ADD("snd_nl", NETLIST_SOUND, 48000)
MCFG_NETLIST_SETUP(nl_mario)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("snd_nl", NETLIST_SOUND, 48000)
MCFG_NETLIST_SETUP(nl_mario)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "snd0", "SOUND0.IN", 0, 1)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "snd7", "SOUND7.IN", 0, 1)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "dac", "DAC.VAL", 0, 255)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "snd0", "SOUND0.IN", 0, 1)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "snd7", "SOUND7.IN", 0, 1)
MCFG_NETLIST_LOGIC_INPUT("snd_nl", "dac", "DAC.VAL", 0, 255)
MCFG_NETLIST_STREAM_OUTPUT("snd_nl", 0, "ROUT.1")
MCFG_NETLIST_ANALOG_MULT_OFFSET(150000.0, 0.0)
MCFG_NETLIST_STREAM_OUTPUT("snd_nl", 0, "ROUT.1")
MCFG_NETLIST_ANALOG_MULT_OFFSET(150000.0, 0.0)
#endif
MACHINE_CONFIG_END

View File

@ -178,8 +178,8 @@ class aleck64_state : public n64_state
public:
aleck64_state(const machine_config &mconfig, device_type type, const char *tag)
: n64_state(mconfig, type, tag),
m_e90_vram(*this,"e90vram"),
m_e90_pal(*this,"e90pal"),
m_e90_vram(*this,"e90vram"),
m_e90_pal(*this,"e90pal"),
m_dip_read_offset(0) { }
optional_shared_ptr<UINT32> m_e90_vram;
@ -342,7 +342,7 @@ WRITE16_MEMBER(aleck64_state::e90_prot_w)
if(data & 1) // 0 -> 1 transition
{
//for(int i=0;i<0x1000;i+=4)
// space.write_dword(0x007502f4+i,space.read_dword(0xd0000000+i));
// space.write_dword(0x007502f4+i,space.read_dword(0xd0000000+i));
}
break;
//0x1e bit 0 probably enables the chip

View File

@ -1940,7 +1940,7 @@ ROM_START( discof )
ROM_LOAD( "w3-f.4a", 0xc000, 0x1000, CRC(9aadd252) SHA1(c6da7ef46333d525e676c59f03ccc908108b41ba) )
ROM_LOAD( "w2-f.6a", 0xd000, 0x1000, CRC(f131a5bb) SHA1(84b7dea112dce12e5cb235a13f6dc4edcfb18c06) )
ROM_LOAD( "w1-f.9a", 0xe000, 0x1000, CRC(a6ce9a19) SHA1(e8f380e17a21fb33504d6efe9d01d0f903fa25e1) )
// ROM_LOAD( "w1-f", 0xe000, 0x1000, CRC(c8ec57c5) SHA1(904a9ed0a7f1230c611bf473b9bc52e63eb56dbe) ) // 0x7d3 is 0x10 instead of 0x00, 1 bit different, looks out of place, bad?
// ROM_LOAD( "w1-f", 0xe000, 0x1000, CRC(c8ec57c5) SHA1(904a9ed0a7f1230c611bf473b9bc52e63eb56dbe) ) // 0x7d3 is 0x10 instead of 0x00, 1 bit different, looks out of place, bad?
ROM_LOAD( "w0-f.9a", 0xf000, 0x1000, CRC(b3787a92) SHA1(7f40621dc739c1108a5df43142ab04709a380219) )
ROM_REGION( 0x10000, "audiocpu", 0 )

View File

@ -154,7 +154,7 @@ public:
: dynax_state(mconfig, type, tag),
m_dsw_sel16(*this, "dsw_sel16"),
m_protection1(*this, "protection1"),
m_protection2(*this, "protection2") { }
m_protection2(*this, "protection2") { }
optional_shared_ptr<UINT16> m_dsw_sel16;

View File

@ -356,7 +356,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( flashbank_map, AS_PROGRAM, 32, funkball_state )
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE16("u29", intel_28f320j5_device, read, write, 0xffffffff ) // needed to boot
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE16("u30", intel_28f320j5_device, read, write, 0xffffffff ) // i assume it maps directly after
// AM_RANGE(0x02000000, 0x023fffff) AM_DEVREADWRITE16("u3", intel_28f320j5_device, read, write, 0xffffffff ) // sound program, don't think it matters where we map it, might not even be visible in this space
// AM_RANGE(0x02000000, 0x023fffff) AM_DEVREADWRITE16("u3", intel_28f320j5_device, read, write, 0xffffffff ) // sound program, don't think it matters where we map it, might not even be visible in this space
/* it checks for 64MBit chips at 0x80000000 the way things are set up, they must return an intel Flash ID of 0x15 */
ADDRESS_MAP_END

View File

@ -1499,8 +1499,8 @@ static ADDRESS_MAP_START( spactrai_map, AS_PROGRAM, 8, galaxian_state )
AM_RANGE(0x1200, 0x12ff) AM_MIRROR(0x0100) AM_RAM_WRITE(galaxian_objram_w) AM_SHARE("spriteram")
AM_RANGE(0x1400, 0x1400) AM_MIRROR(0x03ff) AM_READ(watchdog_reset_r)
AM_RANGE(0x4000, 0xbfff) AM_ROM
// AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x3efc) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
// AM_RANGE(0xc100, 0xc103) AM_MIRROR(0x3efc) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
// AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x3efc) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
// AM_RANGE(0xc100, 0xc103) AM_MIRROR(0x3efc) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( anteaterg_map, AS_PROGRAM, 8, galaxian_state )

View File

@ -427,13 +427,13 @@ static ADDRESS_MAP_START( video_map, AS_PROGRAM, 8, caveman_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( video_io_map, AS_IO, 8, caveman_state )
// AM_RANGE(0x000, 0x002) AM_READWRITE() // 8259 irq controller
// AM_RANGE(0x100, 0x102) AM_READWRITE() // HD46505
// AM_RANGE(0x200, 0x200) AM_READWRITE() // 8212 in, ?? out
// AM_RANGE(0x300, 0x300) AM_READWRITE() // soundlatch (command?) in, ?? out
// AM_RANGE(0x000, 0x002) AM_READWRITE() // 8259 irq controller
// AM_RANGE(0x100, 0x102) AM_READWRITE() // HD46505
// AM_RANGE(0x200, 0x200) AM_READWRITE() // 8212 in, ?? out
// AM_RANGE(0x300, 0x300) AM_READWRITE() // soundlatch (command?) in, ?? out
// AM_RANGE(0x400, 0x400) AM_READ() // joystick inputs
// AM_RANGE(0x500, 0x506) AM_WRITE() // palette
// AM_RANGE(0x400, 0x400) AM_READ() // joystick inputs
// AM_RANGE(0x500, 0x506) AM_WRITE() // palette
ADDRESS_MAP_END

View File

@ -2491,7 +2491,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( model2a_0229, model2a )
MCFG_DEVICE_ADD("317_0229", SEGA315_5838_COMP, 0)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
MACHINE_CONFIG_END
READ8_MEMBER(model2_state::driveio_port_r)
@ -2599,7 +2599,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( model2b_0229, model2b )
MCFG_DEVICE_ADD("317_0229", SEGA315_5838_COMP, 0)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
// MCFG_SET_5838_READ_CALLBACK(model2_state, crypt_read_callback)
MACHINE_CONFIG_END
@ -5947,7 +5947,7 @@ WRITE32_MEMBER(model2_state::jaleco_network_w)
DRIVER_INIT_MEMBER(model2_state,sgt24h)
{
// DRIVER_INIT_CALL(genprot);
// DRIVER_INIT_CALL(genprot);
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x01a10000, 0x01a1ffff, read32_delegate(FUNC(model2_state::jaleco_network_r),this), write32_delegate(FUNC(model2_state::jaleco_network_w),this));

View File

@ -1696,11 +1696,11 @@ READ64_MEMBER(model3_state::model3_5881prot_r)
{
UINT8* base;
retvalue = m_cryptdevice->do_decrypt(base);
// retvalue = ((retvalue & 0xff00) >> 8) | ((retvalue & 0x00ff) << 8); // don't endian swap the return value on this hardware
// retvalue = ((retvalue & 0xff00) >> 8) | ((retvalue & 0x00ff) << 8); // don't endian swap the return value on this hardware
retvalue <<= 16;
}
// printf("model3_5881prot_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff));
// printf("model3_5881prot_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff));
}
else
{
@ -5584,8 +5584,8 @@ UINT16 model3_state::crypt_read_callback(UINT32 addr)
dat = m_maincpu->space().read_word((0xf0180000 + 4 * addr)); // every other word is unused in this RAM, probably 32-bit ram on 64-bit bus?
}
// dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8);
// printf("reading %04x\n", dat);
// dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8);
// printf("reading %04x\n", dat);
return dat;
}
@ -5629,7 +5629,7 @@ static void interleave_vroms(running_machine &machine)
DRIVER_INIT_MEMBER(model3_state, genprot)
{
// astring key = parameter(":315_5881:key");
// astring key = parameter(":315_5881:key");
m_maincpu->space(AS_PROGRAM).install_ram(0xf0180000, 0xf019ffff, 0, 0x0e000000);
@ -5846,7 +5846,6 @@ DRIVER_INIT_MEMBER(model3_state,srally2)
DRIVER_INIT_MEMBER(model3_state,swtrilgy)
{
UINT32 *rom = (UINT32*)memregion("user1")->base();
DRIVER_INIT_CALL(model3_20);
@ -5890,7 +5889,7 @@ DRIVER_INIT_MEMBER(model3_state,dirtdvls)
DRIVER_INIT_MEMBER(model3_state,daytona2)
{
// UINT32 *rom = (UINT32*)memregion("user1")->base();
// UINT32 *rom = (UINT32*)memregion("user1")->base();
DRIVER_INIT_CALL(model3_20);
m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64_delegate(FUNC(model3_state::daytona2_rombank_w),this));
@ -5906,17 +5905,17 @@ DRIVER_INIT_MEMBER(model3_state,daytona2)
DRIVER_INIT_MEMBER(model3_state,dayto2pe)
{
// UINT32 *rom = (UINT32*)memregion("user1")->base();
// UINT32 *rom = (UINT32*)memregion("user1")->base();
DRIVER_INIT_CALL(model3_20);
m_maincpu->space(AS_PROGRAM).install_write_handler(0xc3800000, 0xc3800007, write64_delegate(FUNC(model3_state::daytona2_rombank_w),this));
m_maincpu->space(AS_PROGRAM).install_read_bank(0xc3000000, 0xc37fffff, "bank2" );
// rom[(0x606784^4)/4] = 0x60000000;
// rom[(0x69a3fc^4)/4] = 0x60000000; // jump to encrypted code
// rom[(0x618b28^4)/4] = 0x60000000; // jump to encrypted code
// rom[(0x606784^4)/4] = 0x60000000;
// rom[(0x69a3fc^4)/4] = 0x60000000; // jump to encrypted code
// rom[(0x618b28^4)/4] = 0x60000000; // jump to encrypted code
// rom[(0x64ca34^4)/4] = 0x60000000; // dec
// rom[(0x64ca34^4)/4] = 0x60000000; // dec
DRIVER_INIT_CALL(genprot);
}

View File

@ -947,4 +947,3 @@ ROM_END
GAME( 1987, psychic5, 0, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (World)", 0 ) // "Oversea's version V2.00 CHANGED BY TAMIO NAKASATO" text present in ROM, various modifications (English names, more complete attract demo etc.)
GAME( 1987, psychic5j, psychic5, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (Japan)", 0 )
GAME( 1988, bombsa, 0, bombsa, bombsa, driver_device, 0, ROT270, "Jaleco", "Bombs Away", GAME_NOT_WORKING )

View File

@ -1584,7 +1584,7 @@ static INPUT_PORTS_START( reelquak )
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, "1 Coin/10 Credits" )
PORT_START("DSW2") // $400302.w PORT_START("DSW2") // $400302.w
PORT_START("DSW2") // $400302.w PORT_START("DSW2") // $400302.w
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1") // used
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )

View File

@ -226,7 +226,7 @@ ROM_END
MS06 M8 74s287 missile animated graphics
MS05 11F IM5610 200pt tank R->L graphic
MS05 11E IM5610 200pt tank L->R graphic
MS04 N7 IM5610 player missile trajectory pattern
MS04 N7 IM5610 player missile trajectory pattern
MS03 F3 IM5610 anti-missile ack-ack graphics
MS02 L12 IM5610 missile left/right position
MS01 D8 IM5610 100pt tanks graphics

View File

@ -669,13 +669,13 @@ WRITE16_MEMBER(twinkle_state::serial_w)
WRITE8_MEMBER(twinkle_state::shared_psx_w)
{
// printf("shared_psx_w: %04x, %04x, %04x\n", offset, data, mem_mask);
// printf("shared_psx_w: %04x, %04x, %04x\n", offset, data, mem_mask);
m_spu_shared[offset] = data;
if (offset == 0x03fe && data == 0xff)
{
// printf("spu command %02x %02x\n", m_spu_shared[1], m_spu_shared[3]);
// printf("spu command %02x %02x\n", m_spu_shared[1], m_spu_shared[3]);
m_audiocpu->set_input_line(M68K_IRQ_4, HOLD_LINE);
}
@ -808,21 +808,21 @@ READ16_MEMBER(twinkle_state::shared_68k_r)
{
UINT16 result = m_spu_shared[offset];
// printf("shared_68k_r: %04x, %04x, %04x\n", offset, result, mem_mask);
// printf("shared_68k_r: %04x, %04x, %04x\n", offset, result, mem_mask);
return result;
}
WRITE16_MEMBER(twinkle_state::shared_68k_w)
{
// printf("shared_68k_w: %04x, %04x, %04x\n", offset, data, mem_mask);
// printf("shared_68k_w: %04x, %04x, %04x\n", offset, data, mem_mask);
m_spu_shared[offset] = data & 0xff;
}
READ16_MEMBER(twinkle_state::unk_68k_r)
{
return 0xffff; // must return 0xff for 68000 POST to complete properly
return 0xffff; // must return 0xff for 68000 POST to complete properly
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 16, twinkle_state )
@ -840,7 +840,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 16, twinkle_state )
AM_RANGE(0x34000e, 0x34000f) AM_WRITENOP
AM_RANGE(0x400000, 0x400fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w)
AM_RANGE(0x800000, 0xbfffff) AM_READWRITE(twinkle_waveram_r, twinkle_waveram_w )
AM_RANGE(0xfe0000, 0xffffff) AM_RAM // ...and the RAM test checks this last 128k (mirror of the work RAM at 0x100000?)
AM_RANGE(0xfe0000, 0xffffff) AM_RAM // ...and the RAM test checks this last 128k (mirror of the work RAM at 0x100000?)
ADDRESS_MAP_END
/* SCSI */

View File

@ -3535,4 +3535,3 @@ GAME( 1980, digger, 0, digger, digger, driver_device, 0, ROT270
GAME( 1981, pulsar, 0, pulsar, pulsar, driver_device, 0, ROT270, "Sega", "Pulsar", GAME_IMPERFECT_SOUND )
GAME( 1979, heiankyo, 0, heiankyo, heiankyo, driver_device, 0, ROT270, "Denki Onkyo", "Heiankyo Alien", GAME_NO_SOUND )
GAME( 19??, alphaho, 0, alphaho, alphaho, driver_device, 0, ROT270, "Data East Corporation", "Alpha Fighter / Head On", GAME_WRONG_COLORS | GAME_NO_SOUND )

View File

@ -54,8 +54,8 @@ public:
m_discrete(*this, "discrete"),
#else
m_audio_snd0(*this, "snd_nl:snd0"),
m_audio_snd7(*this, "snd_nl:snd7"),
m_audio_dac(*this, "snd_nl:dac"),
m_audio_snd7(*this, "snd_nl:snd7"),
m_audio_dac(*this, "snd_nl:dac"),
#endif
m_spriteram(*this, "spriteram"),
m_videoram(*this, "videoram"),
@ -71,8 +71,8 @@ public:
optional_device<discrete_device> m_discrete;
#else
optional_device<netlist_mame_logic_input_t> m_audio_snd0;
optional_device<netlist_mame_logic_input_t> m_audio_snd7;
optional_device<netlist_mame_logic_input_t> m_audio_dac;
optional_device<netlist_mame_logic_input_t> m_audio_snd7;
optional_device<netlist_mame_logic_input_t> m_audio_dac;
#endif
/* memory pointers */

View File

@ -61,4 +61,3 @@ public:
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
};

View File

@ -155,5 +155,5 @@
<screen index="0">
<bounds x="320" y="0" width="320" height="240" />
</screen>
</view>
</view>
</mamelayout>

View File

@ -1,33 +1,33 @@
/* Sega Compression (and possibly encryption) device
315-5838 - Decathlete (ST-V)
317-0229 - Dead or Alive (Model 2A)
315-5838 - Decathlete (ST-V)
317-0229 - Dead or Alive (Model 2A)
Package Type: TQFP100
Package Type: TQFP100
This appears to be a dual channel compression chip, used in 1996, predating the 5881.
Decathlete uses it to compress ALL the game graphics, Dead or Alive uses it for a
dumb security check, decompressing a single string.
This appears to be a dual channel compression chip, used in 1996, predating the 5881.
Decathlete uses it to compress ALL the game graphics, Dead or Alive uses it for a
dumb security check, decompressing a single string.
Each channel appears to be connected to a different set of ROMs, however there is
defintiely only a single 315-5838 chip. (could the different channels actually just
be mirror addresses, with part of the address determining the ROMs to use?)
Each channel appears to be connected to a different set of ROMs, however there is
defintiely only a single 315-5838 chip. (could the different channels actually just
be mirror addresses, with part of the address determining the ROMs to use?)
Dead of Alive only uses a single channel, and has the source data in RAM, not ROM.
This is similar to how some 5881 games were set up, with the ST-V versions decrypting
data directly from ROM and the Model 2 ones using a RAM source buffer.
Dead of Alive only uses a single channel, and has the source data in RAM, not ROM.
This is similar to how some 5881 games were set up, with the ST-V versions decrypting
data directly from ROM and the Model 2 ones using a RAM source buffer.
Looking at the values read I don't think there is any address based encryption, for
example many blocks where you'd expect a zero fill start with repeating patterns
of 8f708f70 (different lengths) channel would appear to relate to compressed 0x00 data
Looking at the values read I don't think there is any address based encryption, for
example many blocks where you'd expect a zero fill start with repeating patterns
of 8f708f70 (different lengths) channel would appear to relate to compressed 0x00 data
read addr 0071253c, blah_r 8f708f70 - read count count 00000004
read addr 00712540, blah_r 8f708f70 - read count count 00000008
read addr 00712544, blah_r 8f708f70 - read count count 0000000c
read addr 00712548, blah_r 8f708f70 - read count count 00000010
read addr 0071254c, blah_r 8f708f70 - read count count 00000014
read addr 00712550, blah_r 8f708f70 - read count count 00000018
read addr 00712554, blah_r 8f708f70 - read count count 0000001c
read addr 0071253c, blah_r 8f708f70 - read count count 00000004
read addr 00712540, blah_r 8f708f70 - read count count 00000008
read addr 00712544, blah_r 8f708f70 - read count count 0000000c
read addr 00712548, blah_r 8f708f70 - read count count 00000010
read addr 0071254c, blah_r 8f708f70 - read count count 00000014
read addr 00712550, blah_r 8f708f70 - read count count 00000018
read addr 00712554, blah_r 8f708f70 - read count count 0000001c
*/
@ -95,8 +95,8 @@ READ32_MEMBER(sega_315_5838_comp_device::decathlt_prot2_r)
UINT32 sega_315_5838_comp_device::genericdecathlt_prot_r(UINT32 mem_mask, int channel)
{
// UINT32 *fake0 = (UINT32*)memregion( ":fake0" )->base();
// UINT32 retvalue = 0xffff;
// UINT32 *fake0 = (UINT32*)memregion( ":fake0" )->base();
// UINT32 retvalue = 0xffff;
switch (m_channel[channel].m_srcoffset)
{
@ -177,7 +177,7 @@ UINT32 sega_315_5838_comp_device::genericdecathlt_prot_r(UINT32 mem_mask, int ch
void sega_315_5838_comp_device::set_prot_addr(UINT32 data, UINT32 mem_mask, int channel)
{
// printf("set_prot_addr\n");
// printf("set_prot_addr\n");
COMBINE_DATA(&m_channel[channel].m_srcoffset);
//if (m_decathlt_part==0) logerror("%d, last read count was %06x\n",channel, m_channel[channel].m_decathlt_lastcount*4);
@ -361,6 +361,6 @@ void sega_315_5838_comp_device::install_doa_protection()
cpu->space(AS_PROGRAM).install_readwrite_handler(0x01d80000, 0x01dfffff, read32_delegate(FUNC(sega_315_5838_comp_device::doa_prot_r), this), write32_delegate(FUNC(sega_315_5838_comp_device::doa_prot_w), this));
cpu->space(AS_PROGRAM).install_write_handler(0x01d87ff0, 0x01d87ff3, write32_delegate(FUNC(sega_315_5838_comp_device::decathlt_prot1_srcaddr_w), this)); // set compressed data source address (always set 0, data is in RAM)
cpu->space(AS_PROGRAM).install_write_handler(0x01d87ff4, 0x01d87ff7, write32_delegate(FUNC(sega_315_5838_comp_device::decathlt_prot1_w_doa), this)); // upload tab
// cpu->space(AS_PROGRAM).install_read_handler(0x01d87ff8, 0x01d87ffb, read32_delegate(FUNC(sega_315_5838_comp_device::decathlt_prot1_r), this)); // read decompressed data
// cpu->space(AS_PROGRAM).install_read_handler(0x01d87ff8, 0x01d87ffb, read32_delegate(FUNC(sega_315_5838_comp_device::decathlt_prot1_r), this)); // read decompressed data
}

View File

@ -176,15 +176,15 @@ is given by the following function:
void key2label(uint32_t key)
{
int bcd0 = ((BIT(key,17)<<3)|(BIT(key,7)<<2)|(BIT(key,14)<<1)|BIT(key,19))^9;
int bcd1 = ((BIT(key,20)<<3)|(BIT(key,1)<<2)|(BIT(key,4)<<1)|BIT(key,13))^5;
int bcd2 = (BIT(key,9)<<1)|BIT(key,22);
int bcd3 = ((BIT(key,9)<<2)|BIT(key,9))^5;
int bcd0 = ((BIT(key,17)<<3)|(BIT(key,7)<<2)|(BIT(key,14)<<1)|BIT(key,19))^9;
int bcd1 = ((BIT(key,20)<<3)|(BIT(key,1)<<2)|(BIT(key,4)<<1)|BIT(key,13))^5;
int bcd2 = (BIT(key,9)<<1)|BIT(key,22);
int bcd3 = ((BIT(key,9)<<2)|BIT(key,9))^5;
char chiplabel[13];
sprintf(chiplabel, "317-%d%d%d%d-%s", bcd3, bcd2, bcd1, bcd0, (BIT(key,5)?"JPN":"COM"));
char chiplabel[13];
sprintf(chiplabel, "317-%d%d%d%d-%s", bcd3, bcd2, bcd1, bcd0, (BIT(key,5)?"JPN":"COM"));
printf("%s", chiplabel);
printf("%s", chiplabel);
}
Given the use of the BCD-encoded security module labels, it's expected that at least other 6 additional bits be present in the
@ -680,7 +680,7 @@ UINT16 sega_315_5881_crypt_device::get_decrypted_16()
prot_cur_address ++;
// printf("get_decrypted_16 %04x\n", res);
// printf("get_decrypted_16 %04x\n", res);
return res;
}
@ -694,7 +694,7 @@ void sega_315_5881_crypt_device::enc_start()
if (buffer_bit2 != 15) // if we have remaining bits in the decompression buffer we shouldn't read the next word yet but should instead use the bits we have?? (twcup98) (might just be because we should be pulling bytes not words?)
{
// printf("buffer_bit2 is %d\n", buffer_bit2);
// printf("buffer_bit2 is %d\n", buffer_bit2);
dec_header = (buffer2a & 0x0003) << 16;
}
else
@ -824,8 +824,8 @@ const UINT8 sega_315_5881_crypt_device::trees[9][2][32] = {
int sega_315_5881_crypt_device::get_compressed_bit()
{
// if(buffer_pos == BUFFER_SIZE)
// enc_fill();
// if(buffer_pos == BUFFER_SIZE)
// enc_fill();
if (buffer_bit2 == 15)
{
@ -833,7 +833,7 @@ int sega_315_5881_crypt_device::get_compressed_bit()
buffer2a = get_decrypted_16();
buffer2[0] = buffer2a;
buffer2[1] = buffer2a >> 8;
// block_pos+=2;
// block_pos+=2;
buffer_pos = 0;
}
@ -842,7 +842,7 @@ int sega_315_5881_crypt_device::get_compressed_bit()
buffer_bit2++;
}
// if (buffer_bit ==7) printf("using byte %02x\n", buffer2[(buffer_pos&1) ^ 1]);
// if (buffer_bit ==7) printf("using byte %02x\n", buffer2[(buffer_pos&1) ^ 1]);
int res = (buffer2[(buffer_pos&1)^1] >> buffer_bit) & 1;
buffer_bit--;

View File

@ -209,7 +209,7 @@ batman2 // bootleg
warofbug // (c) 1981 Armenia
warofbugu // (c) 1981 Armenia
warofbugg // German Version
spactrai //
spactrai //
redufo // (c) Artic
redufob // bootleg
exodus // Subelectro - bootleg?
@ -2679,7 +2679,7 @@ snowbrosj // MIN16-02 (c) 1990 Toaplan
snowbrosd // MIN16-02 (c) 1990 Toaplan + Dooyong license
wintbob // bootleg
snowbroswb //
toto //
toto //
// modified snowbros 'clone' hardware
honeydol // (c) 1995 Barko Corp
twinadv // (c) 1995 Barko Corp
@ -3414,7 +3414,7 @@ ddsomur1 // 09/02/1996 (c) 1996 (USA)
ddsomjr1 // 06/02/1996 (c) 1996 (Japan)
ddsomj // 19/06/1996 (c) 1996 (Japan)
ddsoma // 19/06/1996 (c) 1996 (Asia)
ddsomar1 // 08/02/1996 (c) 1996 (Asia)
ddsomar1 // 08/02/1996 (c) 1996 (Asia)
ddsomh // 23/02/1996 (c) 1996 (Hispanic)
ddsomb // 23/02/1996 (c) 1996 (Brazil)
sfa2 // 06/03/1996 (c) 1996 (Euro)
@ -5381,7 +5381,7 @@ wwfroyal // 2000.11 WWF Royal Rumble
sprtjam // 2000.11.13 Sports Jam
pjustic // 2000.12 Moero Justice Gakuen / Project Justice
samba2k // 2000.12 Samba de Amigo Ver.2000
shaktam // 2000.12.28 Shakatto Tambourine (Rev B)
shaktam // 2000.12.28 Shakatto Tambourine (Rev B)
// 2000.?? Boat Race Ocean Heats
csmash // 2000.?? Cosmic Smash
csmasho // 2000.?? Cosmic Smash (original)
@ -6710,7 +6710,7 @@ bmfinal // GXC01 (c) 2002 (Japan)
popn1 // GX803 (c) 1998 (Asia)
//popn1j // GX803 (c) 1998 (Japan)
popn2 // GX831 (c) 1998 (Japan)
popn3 // GX980 (c) 1999 (Japan)
popn3 // GX980 (c) 1999 (Japan)
//popnstex // GX970 (c) 1999 (Japan)
// Firebeat games
@ -6964,7 +6964,7 @@ quantum // 136016 (c) 1982 // made by Gencomp
quantum1 // 136016 (c) 1982 // made by Gencomp
quantump // 136016 (c) 1982 // made by Gencomp
bwidow // 136017 (c) 1982
bwidowp // (proto) (c) 1982
bwidowp // (proto) (c) 1982
starwars // 136021 (c) 1983
starwars1 // 136021 (c) 1983
starwarso // 136021 (c) 1983

View File

@ -175,7 +175,7 @@ DEVICE_ADDRESS_MAP_START( map, 16, gp9001vdp_device )
AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(gp9001_fg_tmap_w) AM_SHARE("vram_fg")
AM_RANGE(0x2000, 0x2fff) AM_RAM_WRITE(gp9001_top_tmap_w) AM_SHARE("vram_top")
AM_RANGE(0x3000, 0x37ff) AM_RAM AM_SHARE("spriteram") AM_MIRROR(0x0800)
// AM_RANGE(0x3800, 0x3fff) AM_RAM // sprite mirror?
// AM_RANGE(0x3800, 0x3fff) AM_RAM // sprite mirror?
ADDRESS_MAP_END

View File

@ -59,7 +59,7 @@ UINT32 banctec_state::screen_update_banctec(screen_device &screen, bitmap_ind16
MC6845_ON_UPDATE_ADDR_CHANGED(banctec_state::crtc_addr)
{
/* What is this function meant to do ? */
/* What is this function meant to do ? */
}
/******************************
@ -103,7 +103,7 @@ static MACHINE_CONFIG_START( banctec, banctec_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", banctec)
MCFG_PALETTE_ADD("palette", 2)
// MCFG_PALETTE_INIT_OWNER(banctec_state, banctec)
// MCFG_PALETTE_INIT_OWNER(banctec_state, banctec)
MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_20MHz) /* (?) */
MCFG_MC6845_SHOW_BORDER_AREA(false)

View File

@ -240,7 +240,7 @@ J9: unpopulated DIL 40-pin straight connector for a ROM debug/expansion/RAM-shad
/HICE is !a15
/ROM_OE comes from pin 14 of DECODE_E pal, and is shorted to /ROM_OE' by the cuttable jumper B1 which is not cut
/ROM_OE' goes to the two EPROMS
DECODE_18 is DECODE_E pal pin 18
DECODE_18 is DECODE_E pal pin 18
pin 1 (GND) is in the lower left and the pins count low-high then to the right
(gnd N/C E_CLK R/W /ROM_OE a17 vcc a14 a13 a8 a9 a11 /ROM_OE' a10 a15 d7 d6 d5 d4 d3 )
(GND /IPL1 DECODE_18 /RESET gnd a16 vcc a12 a7 a6 a5 a4 a3 a2 a1 a0 d0 d1 d2 gnd)

View File

@ -53,19 +53,19 @@ private:
struct
{
UINT8 reg[8];
struct {
bool write;
bool page2; // else page1
UINT8 reg[8];
struct {
bool write;
bool page2; // else page1
UINT8 ypos, xpos/*tennis*/;
UINT8 data[2][0x100][0x20];
} bitmap;
UINT8 x, y;
UINT8 data[2][0x100][0x20];
} bitmap;
UINT8 x, y;
bool y_increment;
} video;
struct {
bool set;
bool set;
int bit_shifter;
UINT8 cartridge_byte;
UINT16 address; // in reality something more like short local cartridge address offset
@ -90,7 +90,7 @@ private:
WRITE8_MEMBER( gamate_state::gamate_cart_protection_w )
{
logerror("%.6f protection write %x %x address:%x data:%x shift:%d\n",machine().time().as_double(), offset, data, card_protection.address, card_protection.cartridge_byte, card_protection.bit_shifter);
logerror("%.6f protection write %x %x address:%x data:%x shift:%d\n",machine().time().as_double(), offset, data, card_protection.address, card_protection.cartridge_byte, card_protection.bit_shifter);
switch (offset) {
case 0:
@ -105,11 +105,10 @@ WRITE8_MEMBER( gamate_state::gamate_cart_protection_w )
}
READ8_MEMBER( gamate_state::gamate_cart_protection_r )
{
UINT8 ret=1;
if (card_protection.bit_shifter==7 && card_protection.unprotected) {
ret=m_cart_ptr[bank_multi*0x4000];
} else {
UINT8 ret=1;
if (card_protection.bit_shifter==7 && card_protection.unprotected) {
ret=m_cart_ptr[bank_multi*0x4000];
} else {
card_protection.bit_shifter++;
if (card_protection.bit_shifter==8) {
card_protection.bit_shifter=0;
@ -118,62 +117,62 @@ READ8_MEMBER( gamate_state::gamate_cart_protection_r )
}
ret=(card_protection.cartridge_byte&0x80)?2:0;
if (card_protection.bit_shifter==7 && !card_protection.failed) { // now protection chip on cartridge activates cartridge chip select on cpu accesses
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r)); // next time I will try to get this working
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r)); // next time I will try to get this working
}
card_protection.cartridge_byte<<=1;
}
logerror("%.6f protection read %x %x address:%x data:%x shift:%d\n",machine().time().as_double(), offset, ret, card_protection.address, card_protection.cartridge_byte, card_protection.bit_shifter);
return ret;
}
logerror("%.6f protection read %x %x address:%x data:%x shift:%d\n",machine().time().as_double(), offset, ret, card_protection.address, card_protection.cartridge_byte, card_protection.bit_shifter);
return ret;
}
READ8_MEMBER( gamate_state::protection_r ) { return card_protection.set? 3: 1; } // bits 0 and 1 checked
WRITE8_MEMBER( gamate_state::protection_reset )
{
// writes 0x20
card_protection.address=0x6005-0x6001;
card_protection.bit_shifter=0;
card_protection.cartridge_byte=m_cart_ptr[card_protection.address++];//m_cart_rom[card_protection.address++];
card_protection.failed=false;
card_protection.unprotected=false;
// writes 0x20
card_protection.address=0x6005-0x6001;
card_protection.bit_shifter=0;
card_protection.cartridge_byte=m_cart_ptr[card_protection.address++];//m_cart_rom[card_protection.address++];
card_protection.failed=false;
card_protection.unprotected=false;
}
READ8_MEMBER( gamate_state::newer_protection_set )
{
card_protection.set=true;
return 0;
card_protection.set=true;
return 0;
}
WRITE8_MEMBER( gamate_state::gamate_video_w )
{
video.reg[offset]=data;
switch (offset) {
case 1: video.bitmap.write=data&0xc0; // more addressing mode
video.reg[offset]=data;
switch (offset) {
case 1: video.bitmap.write=data&0xc0; // more addressing mode
video.y_increment=data&0x40;
break;
case 2: video.bitmap.xpos=data;break; // at least 7 bits
case 3: video.bitmap.ypos=data;break; // at least 7 bits
case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
case 5: video.y=data;break;
case 7:
if (video.bitmap.write) {
if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
else
logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
} else {
video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data;
}
if (video.y_increment) video.y++;
case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
case 5: video.y=data;break;
case 7:
if (video.bitmap.write) {
if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
else
logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
} else {
video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data;
}
if (video.y_increment) video.y++;
else video.x++;
}
}
}
WRITE8_MEMBER( gamate_state::cart_bankswitchmulti_w )
{
bank_multi=data;
membank("bankmulti")->set_base(m_cart_ptr+0x4000*data+1);
bank_multi=data;
membank("bankmulti")->set_base(m_cart_ptr+0x4000*data+1);
}
WRITE8_MEMBER( gamate_state::cart_bankswitch_w )
@ -184,55 +183,55 @@ WRITE8_MEMBER( gamate_state::cart_bankswitch_w )
READ8_MEMBER( gamate_state::gamate_video_r )
{
if (offset!=6) return 0;
UINT8 data=0;
if (video.bitmap.write) {
if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
else
logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
} else {
data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)];
}
if (m_maincpu->pc()<0xf000)
logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
return data;
UINT8 data=0;
if (video.bitmap.write) {
if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
else
logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
} else {
data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)];
}
if (m_maincpu->pc()<0xf000)
logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
return data;
}
WRITE8_MEMBER( gamate_state::gamate_audio_w )
{
logerror("%.6f %04x audio write %04x %02x\n",machine().time().as_double(),m_maincpu->pc(),offset,data);
logerror("%.6f %04x audio write %04x %02x\n",machine().time().as_double(),m_maincpu->pc(),offset,data);
}
READ8_MEMBER( gamate_state::gamate_audio_r )
{
logerror("%.6f %04x audio read %04x \n",machine().time().as_double(),m_maincpu->pc(),offset);
logerror("%.6f %04x audio read %04x \n",machine().time().as_double(),m_maincpu->pc(),offset);
return 0;
}
READ8_MEMBER( gamate_state::gamate_pad_r )
{
UINT8 data=m_io_joy->read();
return data;
UINT8 data=m_io_joy->read();
return data;
}
static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w)
AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r)
AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w)
AM_RANGE(0x5800, 0x5800) AM_READ(newer_protection_set)
AM_RANGE(0x5900, 0x5900) AM_WRITE(protection_reset)
AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r)
AM_RANGE(0x0000, 0x03ff) AM_RAM
AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w)
AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r)
AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w)
AM_RANGE(0x5800, 0x5800) AM_READ(newer_protection_set)
AM_RANGE(0x5900, 0x5900) AM_WRITE(protection_reset)
AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r)
AM_RANGE(0x6001, 0x9fff) AM_READ_BANK("bankmulti")
AM_RANGE(0xa000, 0xdfff) AM_READ_BANK("bank")
AM_RANGE(0x6001, 0x9fff) AM_READ_BANK("bankmulti")
AM_RANGE(0xa000, 0xdfff) AM_READ_BANK("bank")
AM_RANGE(0x6000, 0x6000) AM_READWRITE(gamate_cart_protection_r, gamate_cart_protection_w)
AM_RANGE(0x8000, 0x8000) AM_WRITE(cart_bankswitchmulti_w)
AM_RANGE(0xc000, 0xc000) AM_WRITE(cart_bankswitch_w)
AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios")
AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios")
ADDRESS_MAP_END
@ -251,30 +250,30 @@ INPUT_PORTS_END
#ifdef USE_GFX
static const struct gfx_layout gamate_charlayout =
{
4, /* width of object */
1, /* height of object */
256,/* 256 characters */
2, /* bits per pixel */
{ 0,4 }, /* no bitplanes */
/* x offsets */
{ 0,1,2,3 },
/* y offsets */
{ 0 },
8*1 /* size of 1 object in bits */
4, /* width of object */
1, /* height of object */
256,/* 256 characters */
2, /* bits per pixel */
{ 0,4 }, /* no bitplanes */
/* x offsets */
{ 0,1,2,3 },
/* y offsets */
{ 0 },
8*1 /* size of 1 object in bits */
};
static GFXDECODE_START( gamate )
GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
GFXDECODE_END
#endif
/* palette in red, green, blue tribles */
static const unsigned char gamate_colors[4][3] =
{
{ 255,255,255 },
{ 0xa0, 0xa0, 0xa0 },
{ 0x60, 0x60, 0x60 },
{ 0, 0, 0 }
{ 255,255,255 },
{ 0xa0, 0xa0, 0xa0 },
{ 0x60, 0x60, 0x60 },
{ 0, 0, 0 }
};
PALETTE_INIT_MEMBER(gamate_state, gamate)
@ -299,21 +298,21 @@ static void BlitPlane(UINT16* line, UINT8 plane1, UINT8 plane2)
UINT32 gamate_state::screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int x, y, j;
for (y=0;y<152;y++) {
for (x=-(video.bitmap.xpos&7), j=0;x<160;x+=8, j++) {
UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f];
UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f];
int x, y, j;
for (y=0;y<152;y++) {
for (x=-(video.bitmap.xpos&7), j=0;x<160;x+=8, j++) {
UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f];
UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][(j+video.bitmap.xpos/8)&0x1f];
#ifdef USE_GFX
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, (d1&0xf)|((d2&0xf)<<4), 0,0,0,x+4,y);
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, (d1&0xf)|((d2&0xf)<<4), 0,0,0,x+4,y);
m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, (d1>>4)|(d2&0xf0),0,0,0,x,y);
#else
BlitPlane(&bitmap.pix16(y, x+4), d1, d2);
BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4);
BlitPlane(&bitmap.pix16(y, x+4), d1, d2);
BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4);
#endif
}
}
return 0;
}
}
return 0;
}
DRIVER_INIT_MEMBER(gamate_state,gamate)
@ -332,12 +331,12 @@ void gamate_state::machine_start()
{
m_cart_ptr = memregion("maincpu")->base() + 0x6000;
if (m_cart->exists()) {
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r));
// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r));
m_cart_ptr = m_cart->get_rom_base();
membank("bankmulti")->set_base(m_cart->get_rom_base()+1);
membank("bank")->set_base(m_cart->get_rom_base()+0x4000); // bankswitched games in reality no offset
}
// m_bios[0xdf1]=0xea; m_bios[0xdf2]=0xea; // default bios: $47 protection readback
// m_bios[0xdf1]=0xea; m_bios[0xdf2]=0xea; // default bios: $47 protection readback
card_protection.set=false;
bank_multi=0;
card_protection.unprotected=false;
@ -416,5 +415,3 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
CONS( 19??, gamate, 0, 0, gamate, gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NO_SOUND)

View File

@ -19,7 +19,7 @@
MC68000 @ 10 MHz
MC68A45 CRTC
Z0765A08PSC floppy controller (NEC765 type)
TMS9914A GPIB bus interface
TMS9914A GPIB bus interface
SCN2661 DUART/timer
16500b:
@ -50,10 +50,10 @@
#include "video/mc6845.h"
#include "machine/mc68681.h"
#define MAINCPU_TAG "maincpu"
#define CRTC_TAG "crtc"
#define SCREEN_TAG "screen"
#define DUART_TAG "duart"
#define MAINCPU_TAG "maincpu"
#define CRTC_TAG "crtc"
#define SCREEN_TAG "screen"
#define DUART_TAG "duart"
class hp16500_state : public driver_device
{

View File

@ -16,20 +16,20 @@
MC68881 FPU
330:
MC68020 CPU @ 16.67 MHz
MC68851 MMU
MC68881 FPU
MC68020 CPU @ 16.67 MHz
MC68851 MMU
MC68881 FPU
340:
MC68030 CPU @ 16.67 MHz w/built-in MMU
MC68881 FPU
MC68881 FPU
380:
MC68040 CPU @ 25 MHz w/built-in MMU and FPU
382:
MC68040 CPU @ 25? MHz w/built-in MMU and FPU
Built-in VGA compatible video
Built-in VGA compatible video
All models have an MC6840 PIT on IRQ6 clocked at 250 kHz.
@ -132,28 +132,28 @@ UINT32 hp9k3xx_state::hp98544_update(screen_device &screen, bitmap_rgb32 &bitmap
// shared mappings for all 9000/3xx systems
static ADDRESS_MAP_START(hp9k3xx_common, AS_PROGRAM, 32, hp9k3xx_state)
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED
AM_RANGE(0x00500000, 0x0050000f) AM_RAM // this is sufficient to pass the DMA test for now
AM_RANGE(0x00500000, 0x0050000f) AM_RAM // this is sufficient to pass the DMA test for now
AM_RANGE(0x00510000, 0x00510003) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display"
AM_RANGE(0x00538000, 0x00538003) AM_READWRITE(buserror_r, buserror_w) // no "Graphics"
AM_RANGE(0x005c0000, 0x005c0003) AM_READWRITE(buserror_r, buserror_w) // no add-on FP coprocessor
AM_RANGE(0x00510000, 0x00510003) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display"
AM_RANGE(0x00538000, 0x00538003) AM_READWRITE(buserror_r, buserror_w) // no "Graphics"
AM_RANGE(0x005c0000, 0x005c0003) AM_READWRITE(buserror_r, buserror_w) // no add-on FP coprocessor
AM_RANGE(0x005f8000, 0x005f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff00ff)
ADDRESS_MAP_END
// 9000/310 - has onboard video that the graphics card used in other 3xxes conflicts with
static ADDRESS_MAP_START(hp9k310_map, AS_PROGRAM, 16, hp9k3xx_state)
AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED
AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED
AM_RANGE(0x510000, 0x510003) AM_READWRITE(buserror16_r, buserror16_w) // no "Alpha display"
AM_RANGE(0x538000, 0x538003) AM_READWRITE(buserror16_r, buserror16_w) // no "Graphics"
AM_RANGE(0x5c0000, 0x5c0003) AM_READWRITE(buserror16_r, buserror16_w) // no add-on FP coprocessor
AM_RANGE(0x510000, 0x510003) AM_READWRITE(buserror16_r, buserror16_w) // no "Alpha display"
AM_RANGE(0x538000, 0x538003) AM_READWRITE(buserror16_r, buserror16_w) // no "Graphics"
AM_RANGE(0x5c0000, 0x5c0003) AM_READWRITE(buserror16_r, buserror16_w) // no add-on FP coprocessor
AM_RANGE(0x5f8000, 0x5f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff)
AM_RANGE(0x200000, 0x2fffff) AM_RAM AM_SHARE("vram16") // 98544 mono framebuffer
AM_RANGE(0x560000, 0x563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0x200000, 0x2fffff) AM_RAM AM_SHARE("vram16") // 98544 mono framebuffer
AM_RANGE(0x560000, 0x563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0x700000, 0x7fffff) AM_READWRITE(buserror16_r, buserror16_w)
AM_RANGE(0x800000, 0xffffff) AM_RAM
@ -161,8 +161,8 @@ ADDRESS_MAP_END
// 9000/320
static ADDRESS_MAP_START(hp9k320_map, AS_PROGRAM, 32, hp9k3xx_state)
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0xffe00000, 0xffefffff) AM_READWRITE(buserror_r, buserror_w)
AM_RANGE(0xfff00000, 0xffffffff) AM_RAM
@ -172,8 +172,8 @@ ADDRESS_MAP_END
// 9000/330 and 9000/340
static ADDRESS_MAP_START(hp9k330_map, AS_PROGRAM, 32, hp9k3xx_state)
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0xffb00000, 0xffbfffff) AM_READWRITE(buserror_r, buserror_w)
AM_RANGE(0xffc00000, 0xffffffff) AM_RAM
@ -183,8 +183,8 @@ ADDRESS_MAP_END
// 9000/370 - 8 MB RAM standard
static ADDRESS_MAP_START(hp9k370_map, AS_PROGRAM, 32, hp9k3xx_state)
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
AM_RANGE(0xff700000, 0xff7fffff) AM_READWRITE(buserror_r, buserror_w)
AM_RANGE(0xff800000, 0xffffffff) AM_RAM
@ -292,7 +292,7 @@ static MACHINE_CONFIG_START( hp9k310, hp9k3xx_state )
MCFG_CPU_PROGRAM_MAP(hp9k310_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -308,7 +308,7 @@ static MACHINE_CONFIG_START( hp9k320, hp9k3xx_state )
MCFG_CPU_PROGRAM_MAP(hp9k320_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -324,7 +324,7 @@ static MACHINE_CONFIG_START( hp9k330, hp9k3xx_state )
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -340,7 +340,7 @@ static MACHINE_CONFIG_START( hp9k340, hp9k3xx_state )
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -356,7 +356,7 @@ static MACHINE_CONFIG_START( hp9k370, hp9k3xx_state )
MCFG_CPU_PROGRAM_MAP(hp9k370_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -368,11 +368,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( hp9k380, hp9k3xx_state )
/* basic machine hardware */
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)
@ -384,11 +384,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( hp9k382, hp9k3xx_state )
/* basic machine hardware */
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
MCFG_CPU_PROGRAM_MAP(hp9k382_map)
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 0)
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_INTERNAL_CLOCK(250000.0f) // from oscillator module next to the 6840
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
MCFG_SCREEN_ADD( "screen", RASTER)

View File

@ -739,13 +739,13 @@ static ADDRESS_MAP_START( ngen_io, AS_IO, 16, ngen_state )
AM_RANGE(0x0000, 0x0001) AM_READWRITE(xbus_r,xbus_w)
// Floppy/Hard disk module
// AM_RANGE(0x0100, 0x0107) AM_DEVREADWRITE8("fdc",wd2797_t,read,write,0x00ff) // a guess for now
// AM_RANGE(0x0108, 0x0109) AM_WRITE8(fdc_control_w,0x00ff)
// AM_RANGE(0x010a, 0x010b) AM_WRITE8(hdc_control_w,0x00ff)
// AM_RANGE(0x010e, 0x010f) AM_WRITE8(disk_addr_ext,0x00ff) // X-Bus extended address register
// AM_RANGE(0x0110, 0x0117) AM_DEVREADWRITE8("fdc_timer",pit8253_device,read,write,0x00ff)
// AM_RANGE(0x0100, 0x0107) AM_DEVREADWRITE8("fdc",wd2797_t,read,write,0x00ff) // a guess for now
// AM_RANGE(0x0108, 0x0109) AM_WRITE8(fdc_control_w,0x00ff)
// AM_RANGE(0x010a, 0x010b) AM_WRITE8(hdc_control_w,0x00ff)
// AM_RANGE(0x010e, 0x010f) AM_WRITE8(disk_addr_ext,0x00ff) // X-Bus extended address register
// AM_RANGE(0x0110, 0x0117) AM_DEVREADWRITE8("fdc_timer",pit8253_device,read,write,0x00ff)
// 0x0120-0x012f - WD1010 Winchester disk controller (unemulated)
// AM_RANGE(0x0130, 0x0137) AM_DEVREADWRITE8("hdc_timer",pit8253_device,read,write,0x00ff)
// AM_RANGE(0x0130, 0x0137) AM_DEVREADWRITE8("hdc_timer",pit8253_device,read,write,0x00ff)
ADDRESS_MAP_END
@ -851,7 +851,7 @@ static MACHINE_CONFIG_START( ngen, ngen_state )
// keyboard UART (patent says i8251 is used for keyboard communications, it is located on the video board)
MCFG_DEVICE_ADD("videouart", I8251, 0) // main clock unknown, Rx/Tx clocks are 19.53kHz
// MCFG_I8251_TXEMPTY_HANDLER(DEVWRITELINE("pic",pic8259_device,ir4_w))
// MCFG_I8251_TXEMPTY_HANDLER(DEVWRITELINE("pic",pic8259_device,ir4_w))
MCFG_I8251_TXD_HANDLER(DEVWRITELINE("keyboard", rs232_port_device, write_txd))
MCFG_RS232_PORT_ADD("keyboard", keyboard, "ngen")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("videouart", i8251_device, write_rxd))

View File

@ -681,7 +681,7 @@ void pasogo_state::machine_reset()
astring region_tag;
m_maincpu_rom = memregion("maincpu");
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
if (!m_cart_rom) // this should never happen, since we make carts mandatory!
if (!m_cart_rom) // this should never happen, since we make carts mandatory!
m_cart_rom = memregion("maincpu");
membank("bank27")->set_base(m_cart_rom->base());

View File

@ -291,9 +291,9 @@ public:
INT32 m_adb_linestate;
bool m_adb_srqflag;
#define kADBKeyBufSize 32
UINT8 m_adb_keybuf[kADBKeyBufSize];
UINT8 m_adb_keybuf_start;
UINT8 m_adb_keybuf_end;
UINT8 m_adb_keybuf[kADBKeyBufSize];
UINT8 m_adb_keybuf_start;
UINT8 m_adb_keybuf_end;
// Portable/PB100 Power Manager IC comms (chapter 4, "Guide to the Macintosh Family Hardware", second edition)
UINT8 m_pm_data_send, m_pm_data_recv, m_pm_ack, m_pm_req, m_pm_cmd[32], m_pm_out[32], m_pm_dptr, m_pm_sptr, m_pm_slen, m_pm_state;

View File

@ -3034,7 +3034,7 @@ MACHINE_START_MEMBER(amstrad_state,plus)
astring region_tag;
m_region_cart = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
if (!m_region_cart) // this should never happen, since we make carts mandatory!
if (!m_region_cart) // this should never happen, since we make carts mandatory!
m_region_cart = memregion("maincpu");
}
@ -3078,7 +3078,7 @@ MACHINE_START_MEMBER(amstrad_state,gx4000)
astring region_tag;
m_region_cart = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
if (!m_region_cart) // this should never happen, since we make carts mandatory!
if (!m_region_cart) // this should never happen, since we make carts mandatory!
m_region_cart = memregion("maincpu");
}

View File

@ -427,7 +427,7 @@ void mac_state::adb_talk()
{
if(m_adb_keybuf_start == m_adb_keybuf_end)
{
// printf("%s: buffer empty\n", __func__);
// printf("%s: buffer empty\n", __func__);
m_adb_buffer[0] = 0xff;
m_adb_buffer[1] = 0xff;
}

View File

@ -20,11 +20,11 @@ class debug_module
{
public:
virtual ~debug_module() { }
virtual ~debug_module() { }
virtual void init_debugger(running_machine &machine) = 0;
virtual void wait_for_debugger(device_t &device, bool firststop) = 0;
virtual void debugger_update() = 0;
virtual void init_debugger(running_machine &machine) = 0;
virtual void wait_for_debugger(device_t &device, bool firststop) = 0;
virtual void debugger_update() = 0;
};

View File

@ -27,23 +27,23 @@
class debug_internal : public osd_module, public debug_module
{
public:
debug_internal()
: osd_module(OSD_DEBUG_PROVIDER, "internal"), debug_module(),
m_machine(NULL)
{
}
debug_internal()
: osd_module(OSD_DEBUG_PROVIDER, "internal"), debug_module(),
m_machine(NULL)
{
}
virtual ~debug_internal() { }
virtual ~debug_internal() { }
virtual int init() { return 0;}
virtual void exit();
virtual int init() { return 0;}
virtual void exit();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
private:
running_machine *m_machine;
running_machine *m_machine;
};

View File

@ -37,23 +37,23 @@
class debug_qt : public osd_module, public debug_module
{
public:
debug_qt()
: osd_module(OSD_DEBUG_PROVIDER, "qt"), debug_module(),
m_machine(NULL)
{
}
debug_qt()
: osd_module(OSD_DEBUG_PROVIDER, "qt"), debug_module(),
m_machine(NULL)
{
}
virtual ~debug_qt() { }
virtual ~debug_qt() { }
virtual int init() { return 0;}
virtual void exit() { }
virtual int init() { return 0;}
virtual void exit() { }
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
private:
running_machine *m_machine;
running_machine *m_machine;
};
//============================================================
@ -357,7 +357,7 @@ void debug_qt::debugger_update()
}
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(debug_qt, OSD_DEBUG_PROVIDER, "qt")
MODULE_NOT_SUPPORTED(debug_qt, OSD_DEBUG_PROVIDER, "qt")
#endif
MODULE_DEFINITION(DEBUG_QT, debug_qt)

View File

@ -44,23 +44,23 @@
class debugger_windows : public osd_module, public debug_module
{
public:
debugger_windows()
: osd_module(OSD_DEBUG_PROVIDER, "windows"), debug_module(),
m_machine(NULL)
{
}
debugger_windows()
: osd_module(OSD_DEBUG_PROVIDER, "windows"), debug_module(),
m_machine(NULL)
{
}
virtual ~debugger_windows() { }
virtual ~debugger_windows() { }
virtual int init() { return 0;}
virtual void exit();
virtual int init() { return 0;}
virtual void exit();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
private:
running_machine *m_machine;
running_machine *m_machine;
};
//============================================================
// PARAMETERS
@ -3094,7 +3094,7 @@ static void smart_show_all(BOOL show)
smart_show_window(info->wnd, show);
}
#else /* not windows */
MODULE_NOT_SUPPORTED(debugger_windows, OSD_DEBUG_PROVIDER, "windows")
MODULE_NOT_SUPPORTED(debugger_windows, OSD_DEBUG_PROVIDER, "windows")
#endif
MODULE_DEFINITION(DEBUG_WINDOWS, debugger_windows)

View File

@ -12,28 +12,28 @@
class debug_none : public osd_module, public debug_module
{
public:
debug_none()
: osd_module(OSD_DEBUG_PROVIDER, "none"), debug_module(),
m_machine(NULL)
{
}
debug_none()
: osd_module(OSD_DEBUG_PROVIDER, "none"), debug_module(),
m_machine(NULL)
{
}
virtual ~debug_none() { }
virtual ~debug_none() { }
virtual int init() { return 0;}
virtual void exit() { }
virtual int init() { return 0;}
virtual void exit() { }
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
virtual void init_debugger(running_machine &machine);
virtual void wait_for_debugger(device_t &device, bool firststop);
virtual void debugger_update();
private:
running_machine *m_machine;
running_machine *m_machine;
};
void debug_none::init_debugger(running_machine &machine)
{
m_machine = &machine;
m_machine = &machine;
}
void debug_none::wait_for_debugger(device_t &device, bool firststop)

View File

@ -18,8 +18,8 @@
class font_module
{
public:
virtual ~font_module() { }
virtual osd_font *font_alloc() = 0;
virtual ~font_module() { }
virtual osd_font *font_alloc() = 0;
};

View File

@ -14,17 +14,17 @@
class osd_font_none : public osd_font
{
public:
virtual ~osd_font_none() {};
virtual ~osd_font_none() {};
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
private:
};
bool osd_font_none::open(const char *font_path, const char *_name, int &height)
{
return false;
return false;
}
//-------------------------------------------------
@ -46,22 +46,21 @@ void osd_font_none::close()
bool osd_font_none::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
{
return false;
return false;
}
class font_none : public osd_module, public font_module
{
public:
font_none()
: osd_module(OSD_FONT_PROVIDER, "none"), font_module()
{
}
font_none()
: osd_module(OSD_FONT_PROVIDER, "none"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_none);
}
osd_font *font_alloc()
{
return global_alloc(osd_font_none);
}
};
MODULE_DEFINITION(FONT_NONE, font_none)

View File

@ -26,71 +26,71 @@
class osd_font_osx : public osd_font
{
public:
virtual ~osd_font_osx() {};
virtual ~osd_font_osx() {};
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
private:
CTFontRef m_font;
CTFontRef m_font;
};
bool osd_font_osx::open(const char *font_path, const char *_name, int &height)
{
CFStringRef font_name = NULL;
CTFontRef ct_font = NULL;
CTFontDescriptorRef font_descriptor;
CGAffineTransform affine_transform = CGAffineTransformIdentity;
CFStringRef font_name = NULL;
CTFontRef ct_font = NULL;
CTFontDescriptorRef font_descriptor;
CGAffineTransform affine_transform = CGAffineTransformIdentity;
m_font = NULL;
astring name(_name);
printf("FONT NAME %s\n", _name);
m_font = NULL;
astring name(_name);
printf("FONT NAME %s\n", _name);
#if 0
if (name == "default")
{
name = "LucidaGrande";
}
if (name == "default")
{
name = "LucidaGrande";
}
#endif
/* handle bdf fonts in the core */
if (name.len() > 4)
if (name.makeupper().substr(name.len()-4,4) == ".BDF" )
return false;
/* handle bdf fonts in the core */
if (name.len() > 4)
if (name.makeupper().substr(name.len()-4,4) == ".BDF" )
return false;
font_name = CFStringCreateWithCString( NULL, name.cstr(), kCFStringEncodingUTF8 );
if( font_name != NULL )
{
font_descriptor = CTFontDescriptorCreateWithNameAndSize( font_name, 0.0); //POINT_SIZE );
font_name = CFStringCreateWithCString( NULL, name.cstr(), kCFStringEncodingUTF8 );
if( font_name != NULL )
{
font_descriptor = CTFontDescriptorCreateWithNameAndSize( font_name, 0.0); //POINT_SIZE );
if( font_descriptor != NULL )
{
ct_font = CTFontCreateWithFontDescriptor( font_descriptor, POINT_SIZE, &affine_transform );
if( font_descriptor != NULL )
{
ct_font = CTFontCreateWithFontDescriptor( font_descriptor, POINT_SIZE, &affine_transform );
CFRelease( font_descriptor );
}
}
CFRelease( font_descriptor );
}
}
CFRelease( font_name );
CFRelease( font_name );
if (!ct_font)
{
osd_printf_verbose("Couldn't find/open font %s, using MAME default\n", name.cstr());
return false;
}
if (!ct_font)
{
osd_printf_verbose("Couldn't find/open font %s, using MAME default\n", name.cstr());
return false;
}
CFStringRef real_name = CTFontCopyPostScriptName( ct_font );
char real_name_c_string[255];
CFStringGetCString ( real_name, real_name_c_string, 255, kCFStringEncodingUTF8 );
osd_printf_verbose("Matching font: %s\n", real_name_c_string);
CFRelease( real_name );
CFStringRef real_name = CTFontCopyPostScriptName( ct_font );
char real_name_c_string[255];
CFStringGetCString ( real_name, real_name_c_string, 255, kCFStringEncodingUTF8 );
osd_printf_verbose("Matching font: %s\n", real_name_c_string);
CFRelease( real_name );
CGFloat line_height = 0.0;
line_height += CTFontGetAscent(ct_font);
line_height += CTFontGetDescent(ct_font);
line_height += CTFontGetLeading(ct_font);
height = ceilf(line_height * EXTRA_HEIGHT);
CGFloat line_height = 0.0;
line_height += CTFontGetAscent(ct_font);
line_height += CTFontGetDescent(ct_font);
line_height += CTFontGetLeading(ct_font);
height = ceilf(line_height * EXTRA_HEIGHT);
m_font = ct_font;
return true;
m_font = ct_font;
return true;
}
//-------------------------------------------------
@ -100,10 +100,10 @@ bool osd_font_osx::open(const char *font_path, const char *_name, int &height)
void osd_font_osx::close()
{
if( m_font != NULL )
{
CFRelease( m_font );
}
if( m_font != NULL )
{
CFRelease( m_font );
}
}
//-------------------------------------------------
@ -116,88 +116,88 @@ void osd_font_osx::close()
bool osd_font_osx::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
{
UniChar uni_char;
CGGlyph glyph;
CTFontRef ct_font = m_font;
const CFIndex count = 1;
CGRect bounding_rect, success_rect;
CGContextRef context_ref;
UniChar uni_char;
CGGlyph glyph;
CTFontRef ct_font = m_font;
const CFIndex count = 1;
CGRect bounding_rect, success_rect;
CGContextRef context_ref;
if( chnum == ' ' )
{
uni_char = 'n';
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
success_rect = CTFontGetBoundingRectsForGlyphs( ct_font, kCTFontDefaultOrientation, &glyph, &bounding_rect, count );
uni_char = chnum;
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
}
else
{
uni_char = chnum;
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
success_rect = CTFontGetBoundingRectsForGlyphs( ct_font, kCTFontDefaultOrientation, &glyph, &bounding_rect, count );
}
if( chnum == ' ' )
{
uni_char = 'n';
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
success_rect = CTFontGetBoundingRectsForGlyphs( ct_font, kCTFontDefaultOrientation, &glyph, &bounding_rect, count );
uni_char = chnum;
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
}
else
{
uni_char = chnum;
CTFontGetGlyphsForCharacters( ct_font, &uni_char, &glyph, count );
success_rect = CTFontGetBoundingRectsForGlyphs( ct_font, kCTFontDefaultOrientation, &glyph, &bounding_rect, count );
}
if( CGRectEqualToRect( success_rect, CGRectNull ) == false )
{
size_t bitmap_width;
size_t bitmap_height;
if( CGRectEqualToRect( success_rect, CGRectNull ) == false )
{
size_t bitmap_width;
size_t bitmap_height;
bitmap_width = ceilf(bounding_rect.size.width * EXTRA_WIDTH);
bitmap_width = bitmap_width == 0 ? 1 : bitmap_width;
bitmap_width = ceilf(bounding_rect.size.width * EXTRA_WIDTH);
bitmap_width = bitmap_width == 0 ? 1 : bitmap_width;
bitmap_height = ceilf( (CTFontGetAscent(ct_font) + CTFontGetDescent(ct_font) + CTFontGetLeading(ct_font)) * EXTRA_HEIGHT);
bitmap_height = ceilf( (CTFontGetAscent(ct_font) + CTFontGetDescent(ct_font) + CTFontGetLeading(ct_font)) * EXTRA_HEIGHT);
xoffs = yoffs = 0;
width = bitmap_width;
xoffs = yoffs = 0;
width = bitmap_width;
size_t bits_per_component;
CGColorSpaceRef color_space;
CGBitmapInfo bitmap_info = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst;
size_t bits_per_component;
CGColorSpaceRef color_space;
CGBitmapInfo bitmap_info = kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst;
color_space = CGColorSpaceCreateDeviceRGB();
bits_per_component = 8;
color_space = CGColorSpaceCreateDeviceRGB();
bits_per_component = 8;
bitmap.allocate(bitmap_width, bitmap_height);
bitmap.allocate(bitmap_width, bitmap_height);
context_ref = CGBitmapContextCreate( bitmap.raw_pixptr(0), bitmap_width, bitmap_height, bits_per_component, bitmap.rowpixels()*4, color_space, bitmap_info );
context_ref = CGBitmapContextCreate( bitmap.raw_pixptr(0), bitmap_width, bitmap_height, bits_per_component, bitmap.rowpixels()*4, color_space, bitmap_info );
if( context_ref != NULL )
{
CGFontRef font_ref;
font_ref = CTFontCopyGraphicsFont( ct_font, NULL );
CGContextSetTextPosition(context_ref, -bounding_rect.origin.x*EXTRA_WIDTH, CTFontGetDescent(ct_font)+CTFontGetLeading(ct_font) );
CGContextSetRGBFillColor(context_ref, 1.0, 1.0, 1.0, 1.0);
CGContextSetFont( context_ref, font_ref );
CGContextSetFontSize( context_ref, POINT_SIZE );
CGContextShowGlyphs( context_ref, &glyph, count );
CGFontRelease( font_ref );
CGContextRelease( context_ref );
}
if( context_ref != NULL )
{
CGFontRef font_ref;
font_ref = CTFontCopyGraphicsFont( ct_font, NULL );
CGContextSetTextPosition(context_ref, -bounding_rect.origin.x*EXTRA_WIDTH, CTFontGetDescent(ct_font)+CTFontGetLeading(ct_font) );
CGContextSetRGBFillColor(context_ref, 1.0, 1.0, 1.0, 1.0);
CGContextSetFont( context_ref, font_ref );
CGContextSetFontSize( context_ref, POINT_SIZE );
CGContextShowGlyphs( context_ref, &glyph, count );
CGFontRelease( font_ref );
CGContextRelease( context_ref );
}
CGColorSpaceRelease( color_space );
}
CGColorSpaceRelease( color_space );
}
return bitmap.valid();
return bitmap.valid();
}
class font_osx : public osd_module, public font_module
{
public:
font_osx()
: osd_module(OSD_FONT_PROVIDER, "osx"), font_module()
{
}
font_osx()
: osd_module(OSD_FONT_PROVIDER, "osx"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_osx);
}
osd_font *font_alloc()
{
return global_alloc(osd_font_osx);
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_osx, OSD_FONT_PROVIDER, "osx")
MODULE_NOT_SUPPORTED(font_osx, OSD_FONT_PROVIDER, "osx")
#endif
MODULE_DEFINITION(FONT_OSX, font_osx)

View File

@ -32,95 +32,95 @@
class osd_font_sdl : public osd_font
{
public:
virtual ~osd_font_sdl() {};
virtual ~osd_font_sdl() {};
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
private:
#ifndef SDLMAME_HAIKU
TTF_Font *search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles);
TTF_Font *search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles);
#endif
bool BDF_Check_Magic(astring name);
TTF_Font * TTF_OpenFont_Magic(astring name, int fsize);
TTF_Font *m_font;
bool BDF_Check_Magic(astring name);
TTF_Font * TTF_OpenFont_Magic(astring name, int fsize);
TTF_Font *m_font;
};
bool osd_font_sdl::open(const char *font_path, const char *_name, int &height)
{
TTF_Font *font = (TTF_Font *)NULL;
bool bakedstyles = false;
int style = 0;
TTF_Font *font = (TTF_Font *)NULL;
bool bakedstyles = false;
int style = 0;
// accept qualifiers from the name
astring name(_name);
// accept qualifiers from the name
astring name(_name);
if (name == "default")
{
name = "Liberation Sans";
}
if (name == "default")
{
name = "Liberation Sans";
}
bool bold = (name.replace(0, "[B]", "") + name.replace(0, "[b]", "") > 0);
bool italic = (name.replace(0, "[I]", "") + name.replace(0, "[i]", "") > 0);
bool underline = (name.replace(0, "[U]", "") + name.replace(0, "[u]", "") > 0);
bool strike = (name.replace(0, "[S]", "") + name.replace(0, "[s]", "") > 0);
bool bold = (name.replace(0, "[B]", "") + name.replace(0, "[b]", "") > 0);
bool italic = (name.replace(0, "[I]", "") + name.replace(0, "[i]", "") > 0);
bool underline = (name.replace(0, "[U]", "") + name.replace(0, "[u]", "") > 0);
bool strike = (name.replace(0, "[S]", "") + name.replace(0, "[s]", "") > 0);
// first up, try it as a filename
font = TTF_OpenFont_Magic(name, POINT_SIZE);
// first up, try it as a filename
font = TTF_OpenFont_Magic(name, POINT_SIZE);
// if no success, try the font path
// if no success, try the font path
if (!font)
{
osd_printf_verbose("Searching font %s in -%s\n", name.cstr(), OPTION_FONTPATH);
//emu_file file(options().font_path(), OPEN_FLAG_READ);
emu_file file(font_path, OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
astring full_name = file.fullpath();
font = TTF_OpenFont_Magic(full_name, POINT_SIZE);
if (font)
osd_printf_verbose("Found font %s\n", full_name.cstr());
}
}
if (!font)
{
osd_printf_verbose("Searching font %s in -%s\n", name.cstr(), OPTION_FONTPATH);
//emu_file file(options().font_path(), OPEN_FLAG_READ);
emu_file file(font_path, OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
astring full_name = file.fullpath();
font = TTF_OpenFont_Magic(full_name, POINT_SIZE);
if (font)
osd_printf_verbose("Found font %s\n", full_name.cstr());
}
}
// if that didn't work, crank up the FontConfig database
// if that didn't work, crank up the FontConfig database
#ifndef SDLMAME_HAIKU
if (!font)
{
font = search_font_config(name, bold, italic, underline, bakedstyles);
}
if (!font)
{
font = search_font_config(name, bold, italic, underline, bakedstyles);
}
#endif
if (!font)
{
if (!BDF_Check_Magic(name))
{
osd_printf_verbose("font %s is not TrueType or BDF, using MAME default\n", name.cstr());
}
return NULL;
}
if (!font)
{
if (!BDF_Check_Magic(name))
{
osd_printf_verbose("font %s is not TrueType or BDF, using MAME default\n", name.cstr());
}
return NULL;
}
// apply styles
if (!bakedstyles)
{
style |= bold ? TTF_STYLE_BOLD : 0;
style |= italic ? TTF_STYLE_ITALIC : 0;
}
style |= underline ? TTF_STYLE_UNDERLINE : 0;
// SDL_ttf 2.0.9 and earlier does not define TTF_STYLE_STRIKETHROUGH
// apply styles
if (!bakedstyles)
{
style |= bold ? TTF_STYLE_BOLD : 0;
style |= italic ? TTF_STYLE_ITALIC : 0;
}
style |= underline ? TTF_STYLE_UNDERLINE : 0;
// SDL_ttf 2.0.9 and earlier does not define TTF_STYLE_STRIKETHROUGH
#if SDL_VERSIONNUM(TTF_MAJOR_VERSION, TTF_MINOR_VERSION, TTF_PATCHLEVEL) > SDL_VERSIONNUM(2,0,9)
style |= strike ? TTF_STYLE_STRIKETHROUGH : 0;
style |= strike ? TTF_STYLE_STRIKETHROUGH : 0;
#else
if (strike)
osd_printf_warning("Ignoring strikethrough for SDL_TTF older than 2.0.10\n");
if (strike)
osd_printf_warning("Ignoring strikethrough for SDL_TTF older than 2.0.10\n");
#endif // PATCHLEVEL
TTF_SetFontStyle(font, style);
TTF_SetFontStyle(font, style);
height = TTF_FontLineSkip(font);
height = TTF_FontLineSkip(font);
m_font = font;
return true;
m_font = font;
return true;
}
//-------------------------------------------------
@ -130,7 +130,7 @@ bool osd_font_sdl::open(const char *font_path, const char *_name, int &height)
void osd_font_sdl::close()
{
TTF_CloseFont(this->m_font);
TTF_CloseFont(this->m_font);
}
//-------------------------------------------------
@ -143,184 +143,184 @@ void osd_font_sdl::close()
bool osd_font_sdl::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
{
TTF_Font *ttffont;
SDL_Surface *drawsurf;
SDL_Color fcol = { 0xff, 0xff, 0xff };
UINT16 ustr[16];
TTF_Font *ttffont;
SDL_Surface *drawsurf;
SDL_Color fcol = { 0xff, 0xff, 0xff };
UINT16 ustr[16];
ttffont = m_font;
ttffont = m_font;
memset(ustr,0,sizeof(ustr));
ustr[0] = (UINT16)chnum;
drawsurf = TTF_RenderUNICODE_Solid(ttffont, ustr, fcol);
memset(ustr,0,sizeof(ustr));
ustr[0] = (UINT16)chnum;
drawsurf = TTF_RenderUNICODE_Solid(ttffont, ustr, fcol);
// was nothing returned?
if (drawsurf)
{
// allocate a MAME destination bitmap
bitmap.allocate(drawsurf->w, drawsurf->h);
// was nothing returned?
if (drawsurf)
{
// allocate a MAME destination bitmap
bitmap.allocate(drawsurf->w, drawsurf->h);
// copy the rendered character image into it
for (int y = 0; y < bitmap.height(); y++)
{
UINT32 *dstrow = &bitmap.pix32(y);
UINT8 *srcrow = (UINT8 *)drawsurf->pixels;
// copy the rendered character image into it
for (int y = 0; y < bitmap.height(); y++)
{
UINT32 *dstrow = &bitmap.pix32(y);
UINT8 *srcrow = (UINT8 *)drawsurf->pixels;
srcrow += (y * drawsurf->pitch);
srcrow += (y * drawsurf->pitch);
for (int x = 0; x < drawsurf->w; x++)
{
dstrow[x] = srcrow[x] ? rgb_t(0xff,0xff,0xff,0xff) : rgb_t(0x00,0xff,0xff,0xff);
}
}
for (int x = 0; x < drawsurf->w; x++)
{
dstrow[x] = srcrow[x] ? rgb_t(0xff,0xff,0xff,0xff) : rgb_t(0x00,0xff,0xff,0xff);
}
}
// what are these?
xoffs = yoffs = 0;
width = drawsurf->w;
// what are these?
xoffs = yoffs = 0;
width = drawsurf->w;
SDL_FreeSurface(drawsurf);
}
SDL_FreeSurface(drawsurf);
}
return bitmap.valid();
return bitmap.valid();
}
TTF_Font * osd_font_sdl::TTF_OpenFont_Magic(astring name, int fsize)
{
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
unsigned char buffer[5] = { 0xff, 0xff, 0xff, 0xff, 0xff };
unsigned char magic[5] = { 0x00, 0x01, 0x00, 0x00, 0x00 };
file.read(buffer,5);
if (memcmp(buffer, magic, 5))
return NULL;
}
return TTF_OpenFont(name.cstr(), POINT_SIZE);
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
unsigned char buffer[5] = { 0xff, 0xff, 0xff, 0xff, 0xff };
unsigned char magic[5] = { 0x00, 0x01, 0x00, 0x00, 0x00 };
file.read(buffer,5);
if (memcmp(buffer, magic, 5))
return NULL;
}
return TTF_OpenFont(name.cstr(), POINT_SIZE);
}
bool osd_font_sdl::BDF_Check_Magic(astring name)
{
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
unsigned char buffer[9];
unsigned char magic[9] = { 'S', 'T', 'A', 'R', 'T', 'F', 'O', 'N', 'T' };
file.read(buffer, 9);
file.close();
if (!memcmp(buffer, magic, 9))
return true;
}
emu_file file(OPEN_FLAG_READ);
if (file.open(name) == FILERR_NONE)
{
unsigned char buffer[9];
unsigned char magic[9] = { 'S', 'T', 'A', 'R', 'T', 'F', 'O', 'N', 'T' };
file.read(buffer, 9);
file.close();
if (!memcmp(buffer, magic, 9))
return true;
}
return false;
return false;
}
#ifndef SDLMAME_HAIKU
TTF_Font *osd_font_sdl::search_font_config(astring name, bool bold, bool italic, bool underline, bool &bakedstyles)
{
TTF_Font *font = (TTF_Font *)NULL;
FcConfig *config;
FcPattern *pat;
FcObjectSet *os;
FcFontSet *fontset;
FcValue val;
TTF_Font *font = (TTF_Font *)NULL;
FcConfig *config;
FcPattern *pat;
FcObjectSet *os;
FcFontSet *fontset;
FcValue val;
config = FcConfigGetCurrent();
pat = FcPatternCreate();
os = FcObjectSetCreate();
FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr());
config = FcConfigGetCurrent();
pat = FcPatternCreate();
os = FcObjectSetCreate();
FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr());
// try and get a font with the requested styles baked-in
if (bold)
{
if (italic)
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold Italic");
}
else
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold");
}
}
else if (italic)
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Italic");
}
else
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular");
}
// try and get a font with the requested styles baked-in
if (bold)
{
if (italic)
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold Italic");
}
else
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Bold");
}
}
else if (italic)
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Italic");
}
else
{
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular");
}
FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType");
FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType");
FcObjectSetAdd(os, FC_FILE);
fontset = FcFontList(config, pat, os);
FcObjectSetAdd(os, FC_FILE);
fontset = FcFontList(config, pat, os);
for (int i = 0; i < fontset->nfont; i++)
{
if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch)
{
continue;
}
for (int i = 0; i < fontset->nfont; i++)
{
if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch)
{
continue;
}
if (val.type != FcTypeString)
{
continue;
}
if (val.type != FcTypeString)
{
continue;
}
osd_printf_verbose("Matching font: %s\n", val.u.s);
{
astring match_name((const char*)val.u.s);
font = TTF_OpenFont_Magic(match_name, POINT_SIZE);
}
osd_printf_verbose("Matching font: %s\n", val.u.s);
{
astring match_name((const char*)val.u.s);
font = TTF_OpenFont_Magic(match_name, POINT_SIZE);
}
if (font)
{
bakedstyles = true;
break;
}
}
if (font)
{
bakedstyles = true;
break;
}
}
// didn't get a font above? try again with no baked-in styles
if (!font)
{
FcPatternDestroy(pat);
FcFontSetDestroy(fontset);
// didn't get a font above? try again with no baked-in styles
if (!font)
{
FcPatternDestroy(pat);
FcFontSetDestroy(fontset);
pat = FcPatternCreate();
FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr());
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular");
FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType");
fontset = FcFontList(config, pat, os);
pat = FcPatternCreate();
FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *)name.cstr());
FcPatternAddString(pat, FC_STYLE, (const FcChar8 *)"Regular");
FcPatternAddString(pat, FC_FONTFORMAT, (const FcChar8 *)"TrueType");
fontset = FcFontList(config, pat, os);
for (int i = 0; i < fontset->nfont; i++)
{
if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch)
{
continue;
}
for (int i = 0; i < fontset->nfont; i++)
{
if (FcPatternGet(fontset->fonts[i], FC_FILE, 0, &val) != FcResultMatch)
{
continue;
}
if (val.type != FcTypeString)
{
continue;
}
if (val.type != FcTypeString)
{
continue;
}
osd_printf_verbose("Matching unstyled font: %s\n", val.u.s);
{
astring match_name((const char*)val.u.s);
font = TTF_OpenFont_Magic(match_name, POINT_SIZE);
}
osd_printf_verbose("Matching unstyled font: %s\n", val.u.s);
{
astring match_name((const char*)val.u.s);
font = TTF_OpenFont_Magic(match_name, POINT_SIZE);
}
if (font)
{
break;
}
}
}
if (font)
{
break;
}
}
}
FcPatternDestroy(pat);
FcObjectSetDestroy(os);
FcFontSetDestroy(fontset);
return font;
FcPatternDestroy(pat);
FcObjectSetDestroy(os);
FcFontSetDestroy(fontset);
return font;
}
#endif
@ -328,35 +328,33 @@ TTF_Font *osd_font_sdl::search_font_config(astring name, bool bold, bool italic,
class font_sdl : public osd_module, public font_module
{
public:
font_sdl()
: osd_module(OSD_FONT_PROVIDER, "sdl"), font_module()
{
}
font_sdl()
: osd_module(OSD_FONT_PROVIDER, "sdl"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_sdl);
}
osd_font *font_alloc()
{
return global_alloc(osd_font_sdl);
}
int init()
{
if (TTF_Init() == -1)
{
osd_printf_error("SDL_ttf failed: %s\n", TTF_GetError());
return -1;
}
return 0;
}
int init()
{
if (TTF_Init() == -1)
{
osd_printf_error("SDL_ttf failed: %s\n", TTF_GetError());
return -1;
}
return 0;
}
virtual void exit()
{
TTF_Quit();
}
virtual void exit()
{
TTF_Quit();
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_sdl, OSD_FONT_PROVIDER, "sdl")
MODULE_NOT_SUPPORTED(font_sdl, OSD_FONT_PROVIDER, "sdl")
#endif
MODULE_DEFINITION(FONT_SDL, font_sdl)

View File

@ -34,72 +34,72 @@
class osd_font_windows : public osd_font
{
public:
virtual ~osd_font_windows() {};
virtual ~osd_font_windows() {};
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
virtual bool open(const char *font_path, const char *name, int &height);
virtual void close();
virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs);
private:
HGDIOBJ m_font;
HGDIOBJ m_font;
};
bool osd_font_windows::open(const char *font_path, const char *_name, int &height)
{
// accept qualifiers from the name
astring name(_name);
if (name == "default") name = "Tahoma";
bool bold = (name.replace(0, "[B]", "") + name.replace(0, "[b]", "") > 0);
bool italic = (name.replace(0, "[I]", "") + name.replace(0, "[i]", "") > 0);
// accept qualifiers from the name
astring name(_name);
if (name == "default") name = "Tahoma";
bool bold = (name.replace(0, "[B]", "") + name.replace(0, "[b]", "") > 0);
bool italic = (name.replace(0, "[I]", "") + name.replace(0, "[i]", "") > 0);
// build a basic LOGFONT description of what we want
LOGFONT logfont;
logfont.lfHeight = DEFAULT_FONT_HEIGHT;
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = 0;
logfont.lfWeight = bold ? FW_BOLD : FW_MEDIUM;
logfont.lfItalic = italic;
logfont.lfUnderline = FALSE;
logfont.lfStrikeOut = FALSE;
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = NONANTIALIASED_QUALITY;
logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
// build a basic LOGFONT description of what we want
LOGFONT logfont;
logfont.lfHeight = DEFAULT_FONT_HEIGHT;
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = 0;
logfont.lfWeight = bold ? FW_BOLD : FW_MEDIUM;
logfont.lfItalic = italic;
logfont.lfUnderline = FALSE;
logfont.lfStrikeOut = FALSE;
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = NONANTIALIASED_QUALITY;
logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
// copy in the face name
TCHAR *face = tstring_from_utf8(name);
_tcsncpy(logfont.lfFaceName, face, sizeof(logfont.lfFaceName) / sizeof(TCHAR));
logfont.lfFaceName[sizeof(logfont.lfFaceName) / sizeof(TCHAR)-1] = 0;
osd_free(face);
// copy in the face name
TCHAR *face = tstring_from_utf8(name);
_tcsncpy(logfont.lfFaceName, face, sizeof(logfont.lfFaceName) / sizeof(TCHAR));
logfont.lfFaceName[sizeof(logfont.lfFaceName) / sizeof(TCHAR)-1] = 0;
osd_free(face);
// create the font
height = logfont.lfHeight;
m_font = CreateFontIndirect(&logfont);
if (m_font == NULL)
return false;
// create the font
height = logfont.lfHeight;
m_font = CreateFontIndirect(&logfont);
if (m_font == NULL)
return false;
// select it into a temp DC and get the real font name
HDC dummyDC = CreateCompatibleDC(NULL);
HGDIOBJ oldfont = SelectObject(dummyDC, m_font);
TCHAR realname[100];
GetTextFace(dummyDC, ARRAY_LENGTH(realname), realname);
SelectObject(dummyDC, oldfont);
DeleteDC(dummyDC);
// select it into a temp DC and get the real font name
HDC dummyDC = CreateCompatibleDC(NULL);
HGDIOBJ oldfont = SelectObject(dummyDC, m_font);
TCHAR realname[100];
GetTextFace(dummyDC, ARRAY_LENGTH(realname), realname);
SelectObject(dummyDC, oldfont);
DeleteDC(dummyDC);
// if it doesn't match our request, fail
char *utf = utf8_from_tstring(realname);
int result = core_stricmp(utf, name);
osd_free(utf);
// if it doesn't match our request, fail
char *utf = utf8_from_tstring(realname);
int result = core_stricmp(utf, name);
osd_free(utf);
// if we didn't match, nuke our font and fall back
if (result != 0)
{
DeleteObject(m_font);
m_font = NULL;
return false;
}
return true;
// if we didn't match, nuke our font and fall back
if (result != 0)
{
DeleteObject(m_font);
m_font = NULL;
return false;
}
return true;
}
//-------------------------------------------------
@ -109,9 +109,9 @@ bool osd_font_windows::open(const char *font_path, const char *_name, int &heigh
void osd_font_windows::close()
{
// delete the font ojbect
if (m_font != NULL)
DeleteObject(m_font);
// delete the font ojbect
if (m_font != NULL)
DeleteObject(m_font);
}
@ -125,155 +125,155 @@ void osd_font_windows::close()
bool osd_font_windows::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs)
{
// create a dummy DC to work with
HDC dummyDC = CreateCompatibleDC(NULL);
HGDIOBJ oldfont = SelectObject(dummyDC, m_font);
// create a dummy DC to work with
HDC dummyDC = CreateCompatibleDC(NULL);
HGDIOBJ oldfont = SelectObject(dummyDC, m_font);
// get the text metrics
TEXTMETRIC metrics = { 0 };
GetTextMetrics(dummyDC, &metrics);
// get the text metrics
TEXTMETRIC metrics = { 0 };
GetTextMetrics(dummyDC, &metrics);
// get the width of this character
ABC abc;
if (!GetCharABCWidths(dummyDC, chnum, chnum, &abc))
{
abc.abcA = 0;
abc.abcC = 0;
GetCharWidth32(dummyDC, chnum, chnum, reinterpret_cast<LPINT>(&abc.abcB));
}
width = abc.abcA + abc.abcB + abc.abcC;
// get the width of this character
ABC abc;
if (!GetCharABCWidths(dummyDC, chnum, chnum, &abc))
{
abc.abcA = 0;
abc.abcC = 0;
GetCharWidth32(dummyDC, chnum, chnum, reinterpret_cast<LPINT>(&abc.abcB));
}
width = abc.abcA + abc.abcB + abc.abcC;
// determine desired bitmap size
int bmwidth = (50 + abc.abcA + abc.abcB + abc.abcC + 50 + 31) & ~31;
int bmheight = 50 + metrics.tmHeight + 50;
// determine desired bitmap size
int bmwidth = (50 + abc.abcA + abc.abcB + abc.abcC + 50 + 31) & ~31;
int bmheight = 50 + metrics.tmHeight + 50;
// describe the bitmap we want
BYTE bitmapinfodata[sizeof(BITMAPINFOHEADER)+2 * sizeof(RGBQUAD)] = { 0 };
BITMAPINFO &info = *reinterpret_cast<BITMAPINFO *>(bitmapinfodata);
info.bmiHeader.biSize = sizeof(info.bmiHeader);
info.bmiHeader.biWidth = bmwidth;
info.bmiHeader.biHeight = -bmheight;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 1;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biSizeImage = 0;
info.bmiHeader.biXPelsPerMeter = GetDeviceCaps(dummyDC, HORZRES) / GetDeviceCaps(dummyDC, HORZSIZE);
info.bmiHeader.biYPelsPerMeter = GetDeviceCaps(dummyDC, VERTRES) / GetDeviceCaps(dummyDC, VERTSIZE);
info.bmiHeader.biClrUsed = 0;
info.bmiHeader.biClrImportant = 0;
RGBQUAD col1 = info.bmiColors[0];
RGBQUAD col2 = info.bmiColors[1];
col1.rgbBlue = col1.rgbGreen = col1.rgbRed = 0x00;
col2.rgbBlue = col2.rgbGreen = col2.rgbRed = 0xff;
// describe the bitmap we want
BYTE bitmapinfodata[sizeof(BITMAPINFOHEADER)+2 * sizeof(RGBQUAD)] = { 0 };
BITMAPINFO &info = *reinterpret_cast<BITMAPINFO *>(bitmapinfodata);
info.bmiHeader.biSize = sizeof(info.bmiHeader);
info.bmiHeader.biWidth = bmwidth;
info.bmiHeader.biHeight = -bmheight;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount = 1;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biSizeImage = 0;
info.bmiHeader.biXPelsPerMeter = GetDeviceCaps(dummyDC, HORZRES) / GetDeviceCaps(dummyDC, HORZSIZE);
info.bmiHeader.biYPelsPerMeter = GetDeviceCaps(dummyDC, VERTRES) / GetDeviceCaps(dummyDC, VERTSIZE);
info.bmiHeader.biClrUsed = 0;
info.bmiHeader.biClrImportant = 0;
RGBQUAD col1 = info.bmiColors[0];
RGBQUAD col2 = info.bmiColors[1];
col1.rgbBlue = col1.rgbGreen = col1.rgbRed = 0x00;
col2.rgbBlue = col2.rgbGreen = col2.rgbRed = 0xff;
// create a DIB to render to
BYTE *bits;
HBITMAP dib = CreateDIBSection(dummyDC, &info, DIB_RGB_COLORS, reinterpret_cast<VOID **>(&bits), NULL, 0);
HGDIOBJ oldbitmap = SelectObject(dummyDC, dib);
// create a DIB to render to
BYTE *bits;
HBITMAP dib = CreateDIBSection(dummyDC, &info, DIB_RGB_COLORS, reinterpret_cast<VOID **>(&bits), NULL, 0);
HGDIOBJ oldbitmap = SelectObject(dummyDC, dib);
// clear the bitmap
int rowbytes = bmwidth / 8;
memset(bits, 0, rowbytes * bmheight);
// clear the bitmap
int rowbytes = bmwidth / 8;
memset(bits, 0, rowbytes * bmheight);
// now draw the character
WCHAR tempchar = chnum;
SetTextColor(dummyDC, RGB(0xff, 0xff, 0xff));
SetBkColor(dummyDC, RGB(0x00, 0x00, 0x00));
ExtTextOutW(dummyDC, 50 + abc.abcA, 50, ETO_OPAQUE, NULL, &tempchar, 1, NULL);
// now draw the character
WCHAR tempchar = chnum;
SetTextColor(dummyDC, RGB(0xff, 0xff, 0xff));
SetBkColor(dummyDC, RGB(0x00, 0x00, 0x00));
ExtTextOutW(dummyDC, 50 + abc.abcA, 50, ETO_OPAQUE, NULL, &tempchar, 1, NULL);
// characters are expected to be full-height
rectangle actbounds;
actbounds.min_y = 50;
actbounds.max_y = 50 + metrics.tmHeight - 1;
// characters are expected to be full-height
rectangle actbounds;
actbounds.min_y = 50;
actbounds.max_y = 50 + metrics.tmHeight - 1;
// determine the actual left of the character
for (actbounds.min_x = 0; actbounds.min_x < rowbytes; actbounds.min_x++)
{
BYTE *offs = bits + actbounds.min_x;
UINT8 summary = 0;
for (int y = 0; y < bmheight; y++)
summary |= offs[y * rowbytes];
if (summary != 0)
{
actbounds.min_x *= 8;
if (!(summary & 0x80)) actbounds.min_x++;
if (!(summary & 0xc0)) actbounds.min_x++;
if (!(summary & 0xe0)) actbounds.min_x++;
if (!(summary & 0xf0)) actbounds.min_x++;
if (!(summary & 0xf8)) actbounds.min_x++;
if (!(summary & 0xfc)) actbounds.min_x++;
if (!(summary & 0xfe)) actbounds.min_x++;
break;
}
}
// determine the actual left of the character
for (actbounds.min_x = 0; actbounds.min_x < rowbytes; actbounds.min_x++)
{
BYTE *offs = bits + actbounds.min_x;
UINT8 summary = 0;
for (int y = 0; y < bmheight; y++)
summary |= offs[y * rowbytes];
if (summary != 0)
{
actbounds.min_x *= 8;
if (!(summary & 0x80)) actbounds.min_x++;
if (!(summary & 0xc0)) actbounds.min_x++;
if (!(summary & 0xe0)) actbounds.min_x++;
if (!(summary & 0xf0)) actbounds.min_x++;
if (!(summary & 0xf8)) actbounds.min_x++;
if (!(summary & 0xfc)) actbounds.min_x++;
if (!(summary & 0xfe)) actbounds.min_x++;
break;
}
}
// determine the actual right of the character
for (actbounds.max_x = rowbytes - 1; actbounds.max_x >= 0; actbounds.max_x--)
{
BYTE *offs = bits + actbounds.max_x;
UINT8 summary = 0;
for (int y = 0; y < bmheight; y++)
summary |= offs[y * rowbytes];
if (summary != 0)
{
actbounds.max_x *= 8;
if (summary & 0x7f) actbounds.max_x++;
if (summary & 0x3f) actbounds.max_x++;
if (summary & 0x1f) actbounds.max_x++;
if (summary & 0x0f) actbounds.max_x++;
if (summary & 0x07) actbounds.max_x++;
if (summary & 0x03) actbounds.max_x++;
if (summary & 0x01) actbounds.max_x++;
break;
}
}
// determine the actual right of the character
for (actbounds.max_x = rowbytes - 1; actbounds.max_x >= 0; actbounds.max_x--)
{
BYTE *offs = bits + actbounds.max_x;
UINT8 summary = 0;
for (int y = 0; y < bmheight; y++)
summary |= offs[y * rowbytes];
if (summary != 0)
{
actbounds.max_x *= 8;
if (summary & 0x7f) actbounds.max_x++;
if (summary & 0x3f) actbounds.max_x++;
if (summary & 0x1f) actbounds.max_x++;
if (summary & 0x0f) actbounds.max_x++;
if (summary & 0x07) actbounds.max_x++;
if (summary & 0x03) actbounds.max_x++;
if (summary & 0x01) actbounds.max_x++;
break;
}
}
// allocate a new bitmap
if (actbounds.max_x >= actbounds.min_x && actbounds.max_y >= actbounds.min_y)
{
bitmap.allocate(actbounds.max_x + 1 - actbounds.min_x, actbounds.max_y + 1 - actbounds.min_y);
// allocate a new bitmap
if (actbounds.max_x >= actbounds.min_x && actbounds.max_y >= actbounds.min_y)
{
bitmap.allocate(actbounds.max_x + 1 - actbounds.min_x, actbounds.max_y + 1 - actbounds.min_y);
// copy the bits into it
for (int y = 0; y < bitmap.height(); y++)
{
UINT32 *dstrow = &bitmap.pix32(y);
UINT8 *srcrow = &bits[(y + actbounds.min_y) * rowbytes];
for (int x = 0; x < bitmap.width(); x++)
{
int effx = x + actbounds.min_x;
dstrow[x] = ((srcrow[effx / 8] << (effx % 8)) & 0x80) ? rgb_t(0xff, 0xff, 0xff, 0xff) : rgb_t(0x00, 0xff, 0xff, 0xff);
}
}
// copy the bits into it
for (int y = 0; y < bitmap.height(); y++)
{
UINT32 *dstrow = &bitmap.pix32(y);
UINT8 *srcrow = &bits[(y + actbounds.min_y) * rowbytes];
for (int x = 0; x < bitmap.width(); x++)
{
int effx = x + actbounds.min_x;
dstrow[x] = ((srcrow[effx / 8] << (effx % 8)) & 0x80) ? rgb_t(0xff, 0xff, 0xff, 0xff) : rgb_t(0x00, 0xff, 0xff, 0xff);
}
}
// set the final offset values
xoffs = actbounds.min_x - (50 + abc.abcA);
yoffs = actbounds.max_y - (50 + metrics.tmAscent);
}
// set the final offset values
xoffs = actbounds.min_x - (50 + abc.abcA);
yoffs = actbounds.max_y - (50 + metrics.tmAscent);
}
// de-select the font and release the DC
SelectObject(dummyDC, oldbitmap);
DeleteObject(dib);
SelectObject(dummyDC, oldfont);
DeleteDC(dummyDC);
return bitmap.valid();
// de-select the font and release the DC
SelectObject(dummyDC, oldbitmap);
DeleteObject(dib);
SelectObject(dummyDC, oldfont);
DeleteDC(dummyDC);
return bitmap.valid();
}
class font_win : public osd_module, public font_module
{
public:
font_win()
: osd_module(OSD_FONT_PROVIDER, "win"), font_module()
{
}
font_win()
: osd_module(OSD_FONT_PROVIDER, "win"), font_module()
{
}
osd_font *font_alloc()
{
return global_alloc(osd_font_windows);
}
osd_font *font_alloc()
{
return global_alloc(osd_font_windows);
}
};
#else /* SDLMAME_UNIX */
MODULE_NOT_SUPPORTED(font_win, OSD_FONT_PROVIDER, "win")
MODULE_NOT_SUPPORTED(font_win, OSD_FONT_PROVIDER, "win")
#endif
MODULE_DEFINITION(FONT_WINDOWS, font_win)

Some files were not shown because too many files have changed in this diff Show More