Cleanups and version bump.

This commit is contained in:
Aaron Giles 2010-08-30 15:20:58 +00:00
parent 5248234004
commit 0e672ba6eb
90 changed files with 626 additions and 626 deletions

View File

@ -190,9 +190,9 @@ void address_map_entry::set_write_bank(const device_config &devconfig, const cha
void address_map_entry::set_readwrite_bank(const device_config &devconfig, const char *tag)
{
m_read.m_type = AMH_BANK;
m_read.m_type = AMH_BANK;
m_read.set_tag(devconfig, tag);
m_write.m_type = AMH_BANK;
m_write.m_type = AMH_BANK;
m_write.set_tag(devconfig, tag);
}

View File

@ -105,7 +105,7 @@ class address_map_entry
public:
// construction/destruction
address_map_entry(address_map &map, offs_t start, offs_t end);
// getters
address_map_entry *next() const { return m_next; }
@ -670,7 +670,7 @@ void ADDRESS_MAP_NAME(_name)(address_map &map, const device_config &devconfig) \
#define AM_RAM_READ(_read) AM_READ(_read) AM_WRITEONLY
#define AM_RAM_WRITE(_write) AM_READONLY AM_WRITE(_write)
#define AM_RAM_DEVREAD(_tag, _read) AM_DEVREAD(_tag, _read) AM_WRITEONLY
#define AM_RAM_DEVWRITE(_tag, _write) AM_READONLY AM_DEVWRITE(_tag, _write)
#define AM_RAM_DEVWRITE(_tag, _write) AM_READONLY AM_DEVWRITE(_tag, _write)
#define AM_BASE_SIZE_MEMBER(_struct, _base, _size) AM_BASE_MEMBER(_struct, _base) AM_SIZE_MEMBER(_struct, _size)
#define AM_BASE_SIZE_GENERIC(_member) AM_BASE_GENERIC(_member) AM_SIZE_GENERIC(_member)

View File

@ -1,8 +1,8 @@
/***************************************************************************
dsp56dsm.c
Disassembler for the portable Motorola/Freescale dsp56k emulator.
Written by Andrew Gardner
dsp56dsm.c
Disassembler for the portable Motorola/Freescale dsp56k emulator.
Written by Andrew Gardner
***************************************************************************/

View File

@ -21,7 +21,7 @@
- 1-9 For fractional arithmetic, the 31-bit product is added to the 40-bit contents of A or B. No pipeline!
- 1-10 Two types of rounding: convergent rounding and two's complement rounding. See status register bit R.
- 1-10 Logic unit is 16-bits wide and works on MSP portion of accum register
- 1-10 The AGU can implement three types of arithmetic: linear, modulo, and reverse carry.
- 1-10 The AGU can implement three types of arithmetic: linear, modulo, and reverse carry.
- 1-12 "Two external interrupt pins!!!"
- 1-12 Take care of all interrupt priority (IPR) stuff!
- 1-19 Memory WAIT states
@ -319,7 +319,7 @@ static size_t execute_one_new(dsp56k_core* cpustate)
UINT16 w0 = ROPCODE(ADDRESS(PC));
UINT16 w1 = ROPCODE(ADDRESS(PC) + ADDRESS(1));
Opcode op(w0, w1);
op.evaluate(cpustate);
PC += op.evalSize(); // Special size function needed to handle jmps, etc.
@ -505,8 +505,8 @@ CPU_GET_INFO( dsp56k )
case CPUINFO_INT_CLOCK_DIVIDER: info->i = 2; break;
case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 2; break;
case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 4; break;
case CPUINFO_INT_MIN_CYCLES: info->i = 1; // ? break;
case CPUINFO_INT_MAX_CYCLES: info->i = 8; // ? break;
case CPUINFO_INT_MIN_CYCLES: info->i = 1; // ? break;
case CPUINFO_INT_MAX_CYCLES: info->i = 8; // ? break;
case DEVINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
case DEVINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;

View File

@ -5,8 +5,8 @@ namespace DSP56K
{
// Factory
Instruction* Instruction::decodeInstruction(const Opcode* opc,
const UINT16 word0,
Instruction* Instruction::decodeInstruction(const Opcode* opc,
const UINT16 word0,
const UINT16 word1,
bool shifted)
{
@ -18,7 +18,7 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc,
w0 = w1;
w1 = 0x0000;
}
/**************************************************************************/
/* The very funky case of the XMemoryDataMoveWithShortDisplacement */
/**************************************************************************/
@ -112,8 +112,8 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc,
/* No Parallel Data Move : 0100 1010 .... .... : A-131 */
/* Register to Register Data Move : 0100 IIII .... .... : A-133 */
/* Address Register Update : 0011 0zRR .... .... : A-135 */
/* X Memory Data Move : 1mRR HHHW .... .... : A-137 */
/* X Memory Data Move : 0101 HHHW .... .... : A-137 */
/* X Memory Data Move : 1mRR HHHW .... .... : A-137 */
/* X Memory Data Move : 0101 HHHW .... .... : A-137 */
/* Quote: (32 General parallel move instructions) */
/****************************************************************/
else if (((w0 & 0xff00) == 0x4a00) ||

View File

@ -26,7 +26,7 @@ public:
Instruction(const Opcode* oco) : m_valid(false),
m_oco(oco),
m_sizeIncrement(0),
m_source(iINVALID),
m_source(iINVALID),
m_destination(iINVALID) { }
virtual ~Instruction() {}
@ -39,9 +39,9 @@ public:
virtual size_t accumulatorBitsModified() const = 0; // Potentially make this always return ALL (like flags)
virtual size_t flags() const { return 0; }
static Instruction* decodeInstruction(const Opcode* opc,
const UINT16 word0,
const UINT16 word1,
static Instruction* decodeInstruction(const Opcode* opc,
const UINT16 word0,
const UINT16 word1,
bool shifted=false);
const bool valid() const { return m_valid; }
@ -70,7 +70,7 @@ protected:
class Abs: public Instruction
{
public:
Abs(const Opcode* oco, const UINT16 word0, const UINT16 word1) : Instruction(oco)
Abs(const Opcode* oco, const UINT16 word0, const UINT16 word1) : Instruction(oco)
{
m_valid = decode(word0, word1);
}
@ -98,7 +98,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JF_table(BITSn(word0,0x0001), BITSn(word0,0x0008),
decode_JF_table(BITSn(word0,0x0001), BITSn(word0,0x0008),
m_source, m_destination);
return true;
}
@ -121,7 +121,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -147,7 +147,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_uuuuF_table(BITSn(word0,0x17), BITSn(word0,0x08),
decode_uuuuF_table(BITSn(word0,0x17), BITSn(word0,0x08),
m_opcode, m_source, m_destination);
// TODO: m_opcode = "add";
return true;
@ -175,7 +175,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -213,7 +213,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT8 m_immediate;
};
@ -354,7 +354,7 @@ public:
case BBB_UPPER: m_iVal <<= 8; break;
case BBB_MIDDLE: m_iVal <<= 4; break;
case BBB_LOWER: m_iVal <<= 0; break;
case BBB_INVALID: return false; break;
}
@ -415,7 +415,7 @@ public:
case BBB_UPPER: m_iVal <<= 8; break;
case BBB_MIDDLE: m_iVal <<= 4; break;
case BBB_LOWER: m_iVal <<= 0; break;
case BBB_INVALID: return false; break;
}
@ -449,7 +449,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
reg_id m_r;
UINT16 m_iVal;
@ -481,7 +481,7 @@ public:
case BBB_UPPER: m_iVal <<= 8; break;
case BBB_MIDDLE: m_iVal <<= 4; break;
case BBB_LOWER: m_iVal <<= 0; break;
case BBB_INVALID: return false; break;
}
@ -538,7 +538,7 @@ public:
{
std::string opcode = "b" + opMnemonicAsString(m_mnem);
// NEW // sprintf(opcode_str, "b.%s", M);
char temp[32];
sprintf(temp, ">*+$%x", 2 + m_immediate);
// NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (INT16)word1, (INT16)word1);
@ -547,7 +547,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
op_mnem m_mnem;
INT16 m_immediate;
@ -573,7 +573,7 @@ public:
{
std::string opcode = "b" + opMnemonicAsString(m_mnem);
// NEW // sprintf(opcode_str, "b.%s", M);
char temp[32];
if (m_immediate >= 0) sprintf(temp, "<*+$%x", m_immediate + 1);
else sprintf(temp, "<*-$%x", 1 - m_immediate - 2);
@ -643,7 +643,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT16 m_immediate;
};
@ -673,7 +673,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_immediate;
};
@ -760,7 +760,7 @@ public:
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
size_t flags() { return DASMFLAG_STEP_OVER; }
private:
op_mnem m_mnem;
INT16 m_immediate;
@ -822,7 +822,7 @@ public:
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
size_t flags() { return DASMFLAG_STEP_OVER; }
private:
INT16 m_immediate;
};
@ -926,8 +926,8 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -951,8 +951,8 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -1068,7 +1068,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_DDF_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
decode_DDF_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
m_source, m_destination);
return true;
}
@ -1093,7 +1093,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
decode_ss_table(BITSn(word0,0x0024), m_mnem);
@ -1103,16 +1103,16 @@ public:
void disassemble(std::string& retString) const
{
std::string opcode = "dmac" + opMnemonicAsString(m_mnem);
retString = opcode + " " +
regIdAsString(m_source) + "," +
retString = opcode + " " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
// NEW // sprintf(opcode_str, "dmac(%s)", A);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
op_mnem m_mnem;
reg_id m_source2;
@ -1139,10 +1139,10 @@ public:
sprintf(temp, "*+$%x", 2 + m_immediate);
std::string destination = temp;
// NEW // sprintf(temp, "X:(R%d),$%02x", Rnum, pc + 2 + word1);
sprintf(temp, "X:(%s)", regIdAsString(m_source).c_str());
std::string source = temp;
retString = "do " + source + "," + destination;
}
void evaluate(dsp56k_core* cpustate) {}
@ -1179,7 +1179,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT8 m_immediate;
UINT16 m_displacement;
@ -1197,7 +1197,7 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
m_displacement = word1;
decode_DDDDD_table(BITSn(word0,0x001f), m_source);
if (m_source == iSSH) return false;
if (m_source == iINVALID) return false;
@ -1213,7 +1213,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT16 m_displacement;
};
@ -1243,7 +1243,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT16 m_displacement;
};
@ -1279,7 +1279,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -1346,20 +1346,20 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "imac " +
regIdAsString(m_source) + "," +
retString = "imac " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
reg_id m_source2;
};
@ -1375,13 +1375,13 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "impy " +
retString = "impy " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
@ -1457,7 +1457,7 @@ public:
{
std::string opcode = "j" + opMnemonicAsString(m_mnem);
// NEW // sprintf(opcode_str, "j.%s", M);
char temp[32];
sprintf(temp, ">$%x", m_displacement);
// NEW // sprintf(temp, "$%04x", word1);
@ -1590,7 +1590,7 @@ public:
{
std::string opcode = "js" + opMnemonicAsString(m_mnem);
// NEW // sprintf(opcode_str, "js.%s", M);
char temp[32];
sprintf(temp, ">$%x", m_displacement);
// NEW // sprintf(temp, "$%04x", word1);
@ -1691,7 +1691,7 @@ public:
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
size_t flags() { return DASMFLAG_STEP_OVER; }
private:
UINT8 m_bAddr;
};
@ -1747,7 +1747,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
std::string m_ea;
};
@ -1840,7 +1840,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_source2, m_destination);
decode_kSign_table(BITSn(word0,0x40), m_sign);
@ -1850,9 +1850,9 @@ public:
{
std::string ts = m_sign;
if (ts != "-") ts = "";
retString = "mac " +
retString = "mac " +
ts +
regIdAsString(m_source) + "," +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
@ -1875,13 +1875,13 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "mac " +
retString = "mac " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
@ -1904,13 +1904,13 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "mac " +
retString = "mac " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
@ -1934,7 +1934,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_source2, m_destination);
decode_kSign_table(BITSn(word0,0x40), m_sign);
@ -1944,9 +1944,9 @@ public:
{
std::string ts = m_sign;
if (ts != "-") ts = "";
retString = "macr " +
retString = "macr " +
ts +
regIdAsString(m_source) + "," +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
@ -1969,14 +1969,14 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "macr " +
regIdAsString(m_source) + "," +
retString = "macr " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
@ -2000,7 +2000,7 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
// Special QQF
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
decode_s_table(BITSn(word0,0x0004), m_mnem);
@ -2009,9 +2009,9 @@ public:
void disassemble(std::string& retString) const
{
std::string opcode = "mac" + opMnemonicAsString(m_mnem);
retString = opcode + " " +
regIdAsString(m_source) + "," +
retString = opcode + " " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
// NEW // sprintf(opcode_str, "mac(%s)", A);
}
@ -2122,7 +2122,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_b;
UINT8 m_W;
@ -2161,7 +2161,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_W;
reg_id m_SD;
@ -2316,7 +2316,7 @@ public:
}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT8 m_t;
UINT8 m_W;
@ -2381,7 +2381,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_b;
UINT8 m_W;
@ -2411,14 +2411,14 @@ public:
else sprintf(temp, "#<-$%x", 1 - m_immediate - 1);
// NEW // sprintf(temp, "#$%02x,%s", BITSn(word0,0x00ff), D1);
retString = "move " +
retString = "move " +
std::string(temp) + "," + regIdAsString(m_destination);
// NEW // sprintf(opcode_str, "move(i)");
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_immediate;
};
@ -2498,7 +2498,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT8 m_W;
std::string m_ea;
@ -2534,7 +2534,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 2; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_b;
UINT8 m_W;
@ -2677,8 +2677,8 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
but since it's a multiply it doesn't matter */
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
but since it's a multiply it doesn't matter */
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_source2, m_destination);
decode_kSign_table(BITSn(word0,0x40), m_sign);
@ -2688,7 +2688,7 @@ public:
{
std::string ts = m_sign;
if (ts != "-") ts = "";
retString = "mpy " +
retString = "mpy " +
ts +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
@ -2696,7 +2696,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
std::string m_sign;
reg_id m_source2;
@ -2713,20 +2713,20 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "mpy " +
retString = "mpy " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
reg_id m_source2;
};
@ -2742,20 +2742,20 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "mpy " +
retString = "mpy " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
reg_id m_source2;
};
@ -2773,8 +2773,8 @@ public:
bool decode(const UINT16 word0, const UINT16 word1)
{
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
but since it's a multiply it doesn't matter */
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
but since it's a multiply it doesn't matter */
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_source2, m_destination);
decode_kSign_table(BITSn(word0,0x40), m_sign);
@ -2784,7 +2784,7 @@ public:
{
std::string ts = m_sign;
if (ts != "-") ts = "";
retString = "mpyr " +
retString = "mpyr " +
ts +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
@ -2792,7 +2792,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
std::string m_sign;
reg_id m_source2;
@ -2809,20 +2809,20 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
decode_QQF_table(BITSn(word0,0x03), BITSn(word0,0x08),
m_source, m_source2, m_destination);
return true;
}
void disassemble(std::string& retString) const
{
retString = "mpyr " +
retString = "mpyr " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
reg_id m_source2;
};
@ -2839,7 +2839,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
decode_QQF_special_table(BITSn(word0,0x0003), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
decode_s_table(BITSn(word0,0x0004), m_mnem);
@ -2848,8 +2848,8 @@ public:
void disassemble(std::string& retString) const
{
std::string opcode = "mpy" + opMnemonicAsString(m_mnem);
retString = opcode + " " +
retString = opcode + " " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
// NEW // sprintf(opcode_str, "mpy(%s)", A);
@ -2857,7 +2857,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
op_mnem m_mnem;
reg_id m_source2;
@ -2984,7 +2984,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
decode_JJF_table(BITSn(word0,0x03),BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -3023,7 +3023,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
UINT8 m_immediate;
};
@ -3273,7 +3273,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JF_table(BITSn(word0,0x01), BITSn(word0,0x08),
decode_JF_table(BITSn(word0,0x01), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -3317,7 +3317,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -3341,7 +3341,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_uuuuF_table(BITSn(word0,0x17), BITSn(word0,0x08),
decode_uuuuF_table(BITSn(word0,0x17), BITSn(word0,0x08),
m_opcode, m_source, m_destination);
// TODO // m_opcode = "sub";
@ -3354,7 +3354,7 @@ public:
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
std::string m_opcode;
};
@ -3446,9 +3446,9 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_h0hF_table(BITSn(word0,0x0007),BITSn(word0,0x0008),
decode_h0hF_table(BITSn(word0,0x0007),BITSn(word0,0x0008),
m_source, m_destination);
decode_RR_table(BITSn(word0,0x0030), m_destination2);
decode_cccc_table(BITSn(word0,0x03c0), m_mnem);
@ -3456,25 +3456,25 @@ public:
return true;
if (m_destination2 != iR0)
return true;
return false;
}
void disassemble(std::string& retString) const
{
std::string opcode = "t" + opMnemonicAsString(m_mnem);
// NEW // sprintf(opcode_str, "t.%s", M);
retString = opcode;
if (m_source != m_destination)
retString += std::string(" ") + regIdAsString(m_source) + "," + regIdAsString(m_destination);
if (m_destination2 != iR0)
retString += std::string(" R0,") + regIdAsString(m_destination2);
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
op_mnem m_mnem;
reg_id m_destination2;
@ -3490,7 +3490,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -3513,7 +3513,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_DDF_table(BITSn(word0,0x03), BITSn(word0,0x08),
decode_DDF_table(BITSn(word0,0x03), BITSn(word0,0x08),
m_source, m_destination);
return true;
}
@ -3536,7 +3536,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_JF_table(BITSn(word0,0x0001),BITSn(word0,0x0008),
decode_JF_table(BITSn(word0,0x0001),BITSn(word0,0x0008),
m_destination, m_source);
return true;
}
@ -3564,9 +3564,9 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_DDF_table(BITSn(word0,0x0030), BITSn(word0,0x0008),
decode_DDF_table(BITSn(word0,0x0030), BITSn(word0,0x0008),
m_destination, m_source);
decode_HHH_table(BITSn(word0,0x0007), m_SD);
// If the destination of the second move is the same as the first, you're invalid
if (m_SD == m_destination && BITSn(word0,0x0100)) return false;
@ -3582,14 +3582,14 @@ public:
std::string source2;
std::string destination2;
assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source2, destination2);
retString = "tfr3 " +
regIdAsString(m_source) + "," + regIdAsString(m_destination) + " " +
retString = "tfr3 " +
regIdAsString(m_source) + "," + regIdAsString(m_destination) + " " +
source2 + "," + destination2;
}
void evaluate(dsp56k_core* cpustate) {}
size_t size() const { return 1; }
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
private:
INT8 m_W;
reg_id m_SD;
@ -3696,13 +3696,13 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
// This hackery amounts to a very strange QQQF table...
if (m_source == iX0 && m_source2 == iX0) return false;
if (m_source == iX1 && m_source2 == iX0) return false;
if (m_source == iY0 && m_source2 == iX1)
{
m_source = iX1;
@ -3717,7 +3717,7 @@ public:
}
void disassemble(std::string& retString) const
{
retString = "shfl " +
retString = "shfl " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}
@ -3740,13 +3740,13 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
decode_QQQF_table(BITSn(word0,0x0007), BITSn(word0,0x0008),
m_source, m_source2, m_destination);
// This hackery amounts to a very strange QQQF table...
if (m_source == iX0 && m_source2 == iX0) return false;
if (m_source == iX1 && m_source2 == iX0) return false;
if (m_source == iY0 && m_source2 == iX1)
{
m_source = iX1;
@ -3761,7 +3761,7 @@ public:
}
void disassemble(std::string& retString) const
{
retString = "shfr " +
retString = "shfr " +
regIdAsString(m_source) + "," +
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
}

View File

@ -33,7 +33,7 @@ public:
const reg_id& instSource() const;
const reg_id& instDestination() const;
const size_t instAccumulatorBitsModified() const;
private:
Instruction* m_instruction;
ParallelMove* m_parallelMove;

View File

@ -12,7 +12,7 @@ ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 w
{
const UINT16 w0 = word0;
const UINT16 w1 = word1;
/* Dual X Memory Data Read : 011m mKKK .rr. .... : A-142*/
if ((w0 & 0xe000) == 0x6000)
{

View File

@ -63,7 +63,7 @@ public:
std::string ea;
assemble_ea_from_m_table(BITSn(word0,0x4000), regIDAsNum(r), ea);
assemble_arguments_from_W_table(BITSn(word0,0x0100), 'X', SD, ea,
assemble_arguments_from_W_table(BITSn(word0,0x0100), 'X', SD, ea,
m_source, m_destination);
// If the destination of the instruction overlaps with our destination, abort.
@ -105,7 +105,7 @@ public:
reg_id SD;
decode_HHH_table(BITSn(word0,0x0e00), SD);
assemble_arguments_from_W_table(BITSn(word0,0x0100), 'X', SD, ea,
assemble_arguments_from_W_table(BITSn(word0,0x0100), 'X', SD, ea,
m_source, m_destination);
// If the destination of the instruction overlaps with our destination, abort.
@ -119,7 +119,7 @@ public:
retString = m_source + "," + m_destination;
}
void evaluate() {}
private:
std::string m_source;
std::string m_destination;
@ -190,7 +190,7 @@ public:
}
bool decode(const UINT16 word0, const UINT16 word1)
{
decode_IIIIx_table(BITSn(word0,0x0f00), BITSn(word0,0x0008),
decode_IIIIx_table(BITSn(word0,0x0f00), BITSn(word0,0x0008),
m_source, m_destination);
if (m_source == iINVALID)
@ -211,7 +211,7 @@ public:
// Don't return a failure, just let everything fall through (nop).
//if (m_source == "?" && m_destination == "?")
// return false;
// return false;
return true;
}
@ -224,7 +224,7 @@ public:
retString = regIdAsString(m_source) + "," + regIdAsString(m_destination);
}
void evaluate() {}
private:
reg_id m_source;
reg_id m_destination;
@ -267,7 +267,7 @@ public:
retString = pms + " " + pms2;
}
void evaluate() {}
private:
std::string pms; // TODO
std::string pms2;
@ -296,7 +296,7 @@ public:
retString = m_ea;
}
void evaluate() {}
private:
std::string m_ea;
};
@ -329,7 +329,7 @@ public:
retString = m_source + "," + m_destination;
}
void evaluate() {}
private:
std::string m_source;
std::string m_destination;

View File

@ -570,9 +570,9 @@ void assemble_D_from_P_table(UINT16 P, UINT16 ppppp, std::string& D)
switch(P)
{
case 0x0:
sprintf(temp, "X:<$%x", ppppp);
// NEW // sprintf(temp, "X:$%02x", ppppp);
case 0x0:
sprintf(temp, "X:<$%x", ppppp);
// NEW // sprintf(temp, "X:$%02x", ppppp);
break;
case 0x1:
assemble_address_from_IO_short_address(ppppp, fullAddy);
@ -583,7 +583,7 @@ void assemble_D_from_P_table(UINT16 P, UINT16 ppppp, std::string& D)
D = temp;
}
void assemble_arguments_from_W_table(UINT16 W, char ma, const reg_id& SD, const std::string& ea,
void assemble_arguments_from_W_table(UINT16 W, char ma, const reg_id& SD, const std::string& ea,
std::string& source, std::string& destination)
{
char temp[32];
@ -595,7 +595,7 @@ void assemble_arguments_from_W_table(UINT16 W, char ma, const reg_id& SD, const
}
}
void assemble_arguments_from_W_table(UINT16 W, char ma, const std::string& SD, const std::string& ea,
void assemble_arguments_from_W_table(UINT16 W, char ma, const std::string& SD, const std::string& ea,
std::string& source, std::string& destination)
{
char temp[32];
@ -679,7 +679,7 @@ bool registerOverlap(const reg_id& r0, const size_t bmd, const reg_id& r1)
{
if (bmd == BM_NONE)
return false;
if (r0 == r1)
return true;
@ -720,7 +720,7 @@ UINT16 regValue16(dsp56k_core* cpustate, const reg_id& reg)
if (reg == iM1) return M1;
if (reg == iM2) return M2;
if (reg == iM3) return M3;
mame_printf_debug("The dsp561xx core is requesting a 16 bit value from non-16 bit register!");
return 0xdead;
}
@ -797,7 +797,7 @@ std::string regIdAsString(const reg_id& regId)
case iINVALID: return "!!"; break;
case iWEIRD: return "?"; break;
}
return "INVALID_REG_ID";
}
@ -821,13 +821,13 @@ std::string opMnemonicAsString(const op_mnem& mnem)
case oES: return "es"; break;
case oLS: return "ls"; break;
case oLE: return "le"; break;
case oSS: return "ss"; break;
case oSU: return "su"; break;
case oUU: return "uu"; break;
case oINVALID: return "!!"; break;
}
return "INVALID_OPCODE_MNEMONIC";
}
@ -872,7 +872,7 @@ reg_id stringAsRegID(const std::string& str)
if (str == "^F") return iFHAT;
if (str == "!!") return iINVALID;
if (str == "?") return iWEIRD;
return iINVALID;
}
@ -892,7 +892,7 @@ UINT8 regIDAsNum(const reg_id& regId)
if (regId == iM1) return 1;
if (regId == iM2) return 2;
if (regId == iM3) return 3;
return 255;
}

View File

@ -16,15 +16,15 @@ namespace DSP56K
enum bitsModified {BM_NONE = 0x0, BM_LOW = 0x1, BM_MIDDLE = 0x2, BM_HIGH = 0x4};
enum bfShift {BBB_UPPER, BBB_MIDDLE, BBB_LOWER, BBB_INVALID};
enum reg_id {iX, iX0, iX1,
iY, iY0, iY1,
iA, iA0, iA1, iA2,
enum reg_id {iX, iX0, iX1,
iY, iY0, iY1,
iA, iA0, iA1, iA2,
iB, iB0, iB1, iB2,
iR0, iR1, iR2, iR3,
iN0, iN1, iN2, iN3,
iR0, iR1, iR2, iR3,
iN0, iN1, iN2, iN3,
iM0, iM1, iM2, iM3,
iLC, iSR, iOMR, iSP, iSSH, iSSL, iLA, iMR, iCCR,
iF, iFHAT,
iLC, iSR, iOMR, iSP, iSSH, iSSL, iLA, iMR, iCCR,
iF, iFHAT,
iINVALID, iWEIRD};
enum op_mnem {oCC, oGE, oNE, oPL,

View File

@ -6,7 +6,7 @@ The Hitachi hcd62121 is the custom cpu which was used in the Casio
CFX-9850 (and maybe some other things too).
This CPU core is based on the information provided by Martin Poupe.
Martin Poupe's site can be found at http://prg.rkk.cz/~mpoupe/
Martin Poupe's site can be found at http://prg.rkk.cz/~mpoupe/
**********************************************************************/
@ -141,7 +141,7 @@ INLINE void read_regreg( hcd62121_state *cpustate, int size, UINT8 op1, UINT8 op
cpustate->temp1[i] = cpustate->temp2[i];
cpustate->temp2[i] = v;
}
}
}
}
@ -382,8 +382,8 @@ static CPU_SET_INFO( hcd62121 )
case CPUINFO_INT_REGISTER + HCD62121_IP: cpustate->ip = info->i; break;
case CPUINFO_INT_REGISTER + HCD62121_SP: cpustate->sp = info->i; break;
// case CPUINFO_INT_REGISTER + HCD62121_R00: break;
// case CPUINFO_INT_REGISTER + HCD62121_R02: break;
// case CPUINFO_INT_REGISTER + HCD62121_R00: break;
// case CPUINFO_INT_REGISTER + HCD62121_R02: break;
}
}
@ -432,7 +432,7 @@ CPU_GET_INFO( hcd62121 )
case CPUINFO_INT_REGISTER + HCD62121_SS: info->i = cpustate->sseg; break;
case CPUINFO_INT_REGISTER + HCD62121_DSIZE: info->i = cpustate->dsize; break;
case CPUINFO_INT_REGISTER + HCD62121_R00: info->i = ( cpustate->reg[0x00] << 24 ) | ( cpustate->reg[0x01] << 16 ) | ( cpustate->reg[0x02] << 8 ) | cpustate->reg[0x03]; break;
// case CPUINFO_INT_REGISTER + HCD62121_R02: info->i = cpustate->; break;
// case CPUINFO_INT_REGISTER + HCD62121_R02: info->i = cpustate->; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(hcd62121); break;

View File

@ -747,7 +747,7 @@ case 0xC3: /* movw reg,i80 */
int i;
int size = datasize( cpustate, op );
UINT8 reg = read_op( cpustate );
for( i = 0; i < size; i++ )
{
cpustate->reg[(reg + i) & 0x7f] = read_op( cpustate );

View File

@ -956,7 +956,7 @@ static CPU_RESET( m6800 )
cpustate->txstate = M6800_TX_STATE_INIT;
cpustate->txbits = cpustate->rxbits = 0;
cpustate->trcsr_read = 0;
cpustate->cc = 0xc0;
}

View File

@ -985,7 +985,7 @@ void m68k_memory_interface::init16(address_space &space)
m_direct = &space.direct();
m_cpustate = get_safe_token(&space.device());
opcode_xor = 0;
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, simple_read_immediate_16), *this);
read8 = m68k_read8_delegate(m68k_read8_proto_delegate::create_member(address_space, read_byte), space);
read16 = m68k_read16_delegate(m68k_read16_proto_delegate::create_member(address_space, read_word), space);
@ -1006,7 +1006,7 @@ void m68k_memory_interface::init32(address_space &space)
m_direct = &space.direct();
m_cpustate = get_safe_token(&space.device());
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, read_immediate_16), *this);
read8 = m68k_read8_delegate(m68k_read8_proto_delegate::create_member(address_space, read_byte), space);
read16 = m68k_read16_delegate(m68k_read16_proto_delegate::create_member(address_space, read_word_unaligned), space);
@ -1132,7 +1132,7 @@ void m68k_memory_interface::init32mmu(address_space &space)
m_direct = &space.direct();
m_cpustate = get_safe_token(&space.device());
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, read_immediate_16_mmu), *this);
read8 = m68k_read8_delegate(m68k_read8_proto_delegate::create_member(m68k_memory_interface, read_byte_32_mmu), *this);
read16 = m68k_read16_delegate(m68k_read16_proto_delegate::create_member(m68k_memory_interface, readword_d32_mmu), *this);

View File

@ -503,7 +503,7 @@ static CPU_EXECUTE( m6809 ) /* NS 970908 */
m68_state->ireg = ROP(PCD);
PC++;
(*m6809_main[m68_state->ireg])(m68_state);
(*m6809_main[m68_state->ireg])(m68_state);
m68_state->icount -= cycles1[m68_state->ireg];
} while( m68_state->icount > 0 );

View File

@ -165,8 +165,8 @@ static CPU_EXIT( sm8500 )
INLINE void sm8500_do_interrupt(sm8500_state *cpustate, UINT16 vector) {
/* Get regs from ram */
sm8500_get_sp(cpustate);
cpustate->SYS = cpustate->program->read_byte(0x19);
cpustate->PS1 = cpustate->program->read_byte(0x1f);
cpustate->SYS = cpustate->program->read_byte(0x19);
cpustate->PS1 = cpustate->program->read_byte(0x1f);
/* Push PC */
PUSH_BYTE( cpustate->PC & 0xFF );
PUSH_BYTE( cpustate->PC >> 8 );

View File

@ -14,9 +14,9 @@
#define OpRead32(s, a) ((s)->direct->read_decrypted_dword(a))
#else
#define OpRead8(s, a) ((s)->direct->read_decrypted_byte((a) ^ (s)->fetch_xor))
#define OpRead16(s, a) (((s)->direct->read_decrypted_byte(((a)+0) ^ (s)->fetch_xor) << 0) | \
#define OpRead16(s, a) (((s)->direct->read_decrypted_byte(((a)+0) ^ (s)->fetch_xor) << 0) | \
((s)->direct->read_decrypted_byte(((a)+1) ^ (s)->fetch_xor) << 8))
#define OpRead32(s, a) (((s)->direct->read_decrypted_byte(((a)+0) ^ (s)->fetch_xor) << 0) | \
#define OpRead32(s, a) (((s)->direct->read_decrypted_byte(((a)+0) ^ (s)->fetch_xor) << 0) | \
((s)->direct->read_decrypted_byte(((a)+1) ^ (s)->fetch_xor) << 8) | \
((s)->direct->read_decrypted_byte(((a)+2) ^ (s)->fetch_xor) << 16) | \
((s)->direct->read_decrypted_byte(((a)+3) ^ (s)->fetch_xor) << 24))

View File

@ -92,6 +92,6 @@ delegate_generic_function delegate_convert_raw(delegate_generic_class *&object,
// otherwise, it is the byte index into the vtable where the actual function lives
UINT8 *vtable_base = *reinterpret_cast<UINT8 **>(object);
return *reinterpret_cast<delegate_generic_function *>(vtable_base + mfp.u.vtable_index - 1);
}
}
#endif

View File

@ -37,68 +37,68 @@
****************************************************************************
There are many implementations of delegate-like functionality for
C++ code, but none of them is a perfect drop-in fit for use in MAME.
In order to be useful in MAME, we need the following properties:
* No significant overhead; we want to use these for memory
accessors, and memory accessor overhead is already the dominant
performance aspect for most drivers.
* Existing static functions need to be bound with an additional
pointer parameter as the first argument. All existing
implementations that allow static function binding assume the
same signature as the member functions.
* We must be able to bind the function separately from the
object. This is to allow configurations to bind functions
before the objects are created.
Thus, the implementations below are based on existing works but are
really a new implementation that is specific to MAME.
--------------------------------------------------------------------
The "compatible" version of delegates is based on an implementation
from Sergey Ryazanov, found here:
There are many implementations of delegate-like functionality for
C++ code, but none of them is a perfect drop-in fit for use in MAME.
In order to be useful in MAME, we need the following properties:
http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx
* No significant overhead; we want to use these for memory
accessors, and memory accessor overhead is already the dominant
performance aspect for most drivers.
These delegates essentially generate a templated static stub function
for each target function. The static function takes the first
parameter, uses it as the object pointer, and calls through the
member function. For static functions, the stub is compatible with
the signature of a static function, so we just set the stub directly.
Pros:
* should work with any modern compiler
* static bindings are just as fast as direct calls
Cons:
* lots of little stub functions generated
* double-hops on member function calls means more overhead
* calling through stub functions repackages parameters
--------------------------------------------------------------------
The "internal" version of delegates makes use of the internal
structure of member function pointers in order to convert them at
binding time into simple static function pointers. This only works
on platforms where object->func(p1, p2) is equivalent in calling
convention to func(object, p1, p2).
Most of the information on how this works comes from Don Clugston
in this article:
http://www.codeproject.com/KB/cpp/FastDelegate.aspx
Pros:
* as fast as a standard function call in static and member cases
* no stub functions or double-hops needed
Cons:
* requires internal knowledge of the member function pointer
* only works for GCC (for now; MSVC info is also readily available)
* Existing static functions need to be bound with an additional
pointer parameter as the first argument. All existing
implementations that allow static function binding assume the
same signature as the member functions.
* We must be able to bind the function separately from the
object. This is to allow configurations to bind functions
before the objects are created.
Thus, the implementations below are based on existing works but are
really a new implementation that is specific to MAME.
--------------------------------------------------------------------
The "compatible" version of delegates is based on an implementation
from Sergey Ryazanov, found here:
http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx
These delegates essentially generate a templated static stub function
for each target function. The static function takes the first
parameter, uses it as the object pointer, and calls through the
member function. For static functions, the stub is compatible with
the signature of a static function, so we just set the stub directly.
Pros:
* should work with any modern compiler
* static bindings are just as fast as direct calls
Cons:
* lots of little stub functions generated
* double-hops on member function calls means more overhead
* calling through stub functions repackages parameters
--------------------------------------------------------------------
The "internal" version of delegates makes use of the internal
structure of member function pointers in order to convert them at
binding time into simple static function pointers. This only works
on platforms where object->func(p1, p2) is equivalent in calling
convention to func(object, p1, p2).
Most of the information on how this works comes from Don Clugston
in this article:
http://www.codeproject.com/KB/cpp/FastDelegate.aspx
Pros:
* as fast as a standard function call in static and member cases
* no stub functions or double-hops needed
Cons:
* requires internal knowledge of the member function pointer
* only works for GCC (for now; MSVC info is also readily available)
***************************************************************************/
@ -125,8 +125,8 @@
// nicer macros to hide the template gobblety-gook and to pass the names
#define create_member_name(_class, _member, _name) _create_member<_class, &_class::_member>(_name)
#define create_member(_class, _member) _create_member<_class, &_class::_member>(#_class "::" #_member)
#define create_static(_class, _func) _crate_static<_class, &_func>(#_func)
#define create_member(_class, _member) _create_member<_class, &_class::_member>(#_class "::" #_member)
#define create_static(_class, _func) _crate_static<_class, &_func>(#_func)
@ -147,7 +147,7 @@ class delegate_generic_class;
// ======================> bindable_object
// define a bindable_object base class that must be at the root of any object
// define a bindable_object base class that must be at the root of any object
// hierarchy which intends to do late binding
class bindable_object
{
@ -157,8 +157,8 @@ public:
virtual ~bindable_object();
};
// define a deferred cast helper function that does a proper dynamic_cast
// from a bindable_object to the target class, and returns a delegate_generic_class
// define a deferred cast helper function that does a proper dynamic_cast
// from a bindable_object to the target class, and returns a delegate_generic_class
template<class _TargetClass>
static delegate_generic_class *deferred_cast(bindable_object &object)
{
@ -190,7 +190,7 @@ public:
const char *name() const { return m_name; }
protected:
deferred_cast_func m_caster; // pointer to helper function that does the cast
deferred_cast_func m_caster; // pointer to helper function that does the cast
const char * m_name; // name string
};
@ -216,18 +216,18 @@ public:
proto_delegate_0param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
: delegate_base(caster, name),
m_function(function) { }
proto_delegate_0param(const proto_delegate_0param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
static proto_delegate_0param _create_member(const char *name = NULL)
{
return proto_delegate_0param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
static proto_delegate_0param _create_static(const char *name = NULL)
@ -264,26 +264,26 @@ class delegate_0param : public proto_delegate_0param<_ReturnType>
using delegate_base::m_caster;
using proto_base::m_function;
public:
// constructors
delegate_0param()
: m_object(NULL) { }
delegate_0param(proto_base proto)
: proto_delegate_0param<_ReturnType>(proto),
m_object(NULL) { }
delegate_0param(proto_base proto, bindable_object &object)
: proto_delegate_0param<_ReturnType>(proto),
m_object((*m_caster)(object)) { }
// bind the actual object
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
// call the function
_ReturnType operator()() const { return (*m_function)(m_object); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_0param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -308,18 +308,18 @@ public:
proto_delegate_1param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
: delegate_base(caster, name),
m_function(function) { }
proto_delegate_1param(const proto_delegate_1param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
static proto_delegate_1param _create_member(const char *name = NULL)
{
return proto_delegate_1param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
static proto_delegate_1param _create_static(const char *name = NULL)
@ -353,7 +353,7 @@ template<typename _ReturnType, typename _P1Type>
class delegate_1param : public proto_delegate_1param<_ReturnType, _P1Type>
{
typedef proto_delegate_1param<_ReturnType, _P1Type> proto_base;
using delegate_base::m_caster;
using proto_base::m_function;
@ -361,21 +361,21 @@ public:
// constructors
delegate_1param()
: m_object(NULL) { }
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto)
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
m_object(NULL) { }
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto, bindable_object &object)
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
m_object((*m_caster)(object)) { }
// bind the actual object
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
// call the function
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_1param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -400,18 +400,18 @@ public:
proto_delegate_2param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
: delegate_base(caster, name),
m_function(function) { }
proto_delegate_2param(const proto_delegate_2param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
static proto_delegate_2param _create_member(const char *name = NULL)
{
return proto_delegate_2param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
static proto_delegate_2param _create_static(const char *name = NULL)
@ -445,7 +445,7 @@ template<typename _ReturnType, typename _P1Type, typename _P2Type>
class delegate_2param : public proto_delegate_2param<_ReturnType, _P1Type, _P2Type>
{
typedef proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto_base;
using delegate_base::m_caster;
using proto_base::m_function;
@ -453,21 +453,21 @@ public:
// constructors
delegate_2param()
: m_object(NULL) { }
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto)
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
m_object(NULL) { }
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto, bindable_object &object)
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
m_object((*m_caster)(object)) { }
// bind the actual object
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_2param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -492,18 +492,18 @@ public:
proto_delegate_3param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
: delegate_base(caster, name),
m_function(function) { }
proto_delegate_3param(const proto_delegate_3param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
static proto_delegate_3param _create_member(const char *name = NULL)
{
return proto_delegate_3param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
static proto_delegate_3param _create_static(const char *name = NULL)
@ -537,7 +537,7 @@ template<typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3T
class delegate_3param : public proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>
{
typedef proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto_base;
using delegate_base::m_caster;
using proto_base::m_function;
@ -545,21 +545,21 @@ public:
// constructors
delegate_3param()
: m_object(NULL) { }
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto)
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
m_object(NULL) { }
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto, bindable_object &object)
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
m_object((*m_caster)(object)) { }
// bind the actual object
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_3param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -584,18 +584,18 @@ public:
proto_delegate_4param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
: delegate_base(caster, name),
m_function(function) { }
proto_delegate_4param(const proto_delegate_4param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
static proto_delegate_4param _create_member(const char *name = NULL)
{
return proto_delegate_4param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
static proto_delegate_4param _create_static(const char *name = NULL)
@ -629,7 +629,7 @@ template<typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3T
class delegate_4param : public proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>
{
typedef proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto_base;
using delegate_base::m_caster;
using proto_base::m_function;
@ -637,21 +637,21 @@ public:
// constructors
delegate_4param()
: m_object(NULL) { }
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto)
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
m_object(NULL) { }
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto, bindable_object &object)
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
m_object((*m_caster)(object)) { }
// bind the actual object
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_4param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -680,7 +680,7 @@ struct delegate_gcc_mfp_internal
union // first item can be one of two things:
{
delegate_generic_function funcptr; // if even, it's a pointer to the function
FPTR vtable_index; // if odd, it's the byte offset into the vtable
FPTR vtable_index; // if odd, it's the byte offset into the vtable
} u;
int this_delta; // delta to apply to the 'this' pointer
};
@ -707,12 +707,12 @@ public:
: delegate_base(caster, name),
m_function(function),
m_rawfunction(mfp) { }
proto_delegate_0param(const proto_delegate_0param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function),
m_rawfunction(proto.m_rawfunction) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
static proto_delegate_0param _create_member(const char *name = NULL)
@ -725,19 +725,19 @@ public:
tempunion.mfp = _FunctionPtr;
return proto_delegate_0param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
static proto_delegate_0param _create_static(const char *name = NULL)
{
return proto_delegate_0param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
}
// equality testing
bool operator==(const proto_delegate_0param &rhs) const
{
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
}
@ -764,11 +764,11 @@ public:
// constructors
delegate_0param()
: m_object(NULL) { }
delegate_0param(proto_base proto)
: proto_delegate_0param<_ReturnType>(proto),
m_object(NULL) { }
delegate_0param(proto_base proto, bindable_object &object)
: proto_delegate_0param<_ReturnType>(proto),
m_object(NULL) { bind(object); }
@ -780,10 +780,10 @@ public:
if (m_rawfunction.u.funcptr != NULL)
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
}
// call the function
_ReturnType operator()() const { return (*m_function)(m_object); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_0param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -809,12 +809,12 @@ public:
: delegate_base(caster, name),
m_function(function),
m_rawfunction(mfp) { }
proto_delegate_1param(const proto_delegate_1param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function),
m_rawfunction(proto.m_rawfunction) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
static proto_delegate_1param _create_member(const char *name = NULL)
@ -827,19 +827,19 @@ public:
tempunion.mfp = _FunctionPtr;
return proto_delegate_1param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
static proto_delegate_1param _create_static(const char *name = NULL)
{
return proto_delegate_1param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
}
// equality testing
bool operator==(const proto_delegate_1param &rhs) const
{
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
}
@ -866,11 +866,11 @@ public:
// constructors
delegate_1param()
: m_object(NULL) { }
delegate_1param(proto_base proto)
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
m_object(NULL) { }
delegate_1param(proto_base proto, bindable_object &object)
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
m_object(NULL) { bind(object); }
@ -882,10 +882,10 @@ public:
if (m_rawfunction.u.funcptr != NULL)
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
}
// call the function
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_1param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -911,12 +911,12 @@ public:
: delegate_base(caster, name),
m_function(function),
m_rawfunction(mfp) { }
proto_delegate_2param(const proto_delegate_2param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function),
m_rawfunction(proto.m_rawfunction) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
static proto_delegate_2param _create_member(const char *name = NULL)
@ -929,19 +929,19 @@ public:
tempunion.mfp = _FunctionPtr;
return proto_delegate_2param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
static proto_delegate_2param _create_static(const char *name = NULL)
{
return proto_delegate_2param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
}
// equality testing
bool operator==(const proto_delegate_2param &rhs) const
{
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
}
@ -968,11 +968,11 @@ public:
// constructors
delegate_2param()
: m_object(NULL) { }
delegate_2param(proto_base proto)
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
m_object(NULL) { }
delegate_2param(proto_base proto, bindable_object &object)
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
m_object(NULL) { bind(object); }
@ -984,10 +984,10 @@ public:
if (m_rawfunction.u.funcptr != NULL)
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
}
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_2param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -1013,12 +1013,12 @@ public:
: delegate_base(caster, name),
m_function(function),
m_rawfunction(mfp) { }
proto_delegate_3param(const proto_delegate_3param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function),
m_rawfunction(proto.m_rawfunction) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
static proto_delegate_3param _create_member(const char *name = NULL)
@ -1031,19 +1031,19 @@ public:
tempunion.mfp = _FunctionPtr;
return proto_delegate_3param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
static proto_delegate_3param _create_static(const char *name = NULL)
{
return proto_delegate_3param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
}
// equality testing
bool operator==(const proto_delegate_3param &rhs) const
{
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
}
@ -1070,11 +1070,11 @@ public:
// constructors
delegate_3param()
: m_object(NULL) { }
delegate_3param(proto_base proto)
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
m_object(NULL) { }
delegate_3param(proto_base proto, bindable_object &object)
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
m_object(NULL) { bind(object); }
@ -1086,10 +1086,10 @@ public:
if (m_rawfunction.u.funcptr != NULL)
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
}
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_3param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }
@ -1115,12 +1115,12 @@ public:
: delegate_base(caster, name),
m_function(function),
m_rawfunction(mfp) { }
proto_delegate_4param(const proto_delegate_4param &proto)
: delegate_base(proto.m_caster, proto.m_name),
m_function(proto.m_function),
m_rawfunction(proto.m_rawfunction) { }
// create a member function proto-delegate
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
static proto_delegate_4param _create_member(const char *name = NULL)
@ -1133,19 +1133,19 @@ public:
tempunion.mfp = _FunctionPtr;
return proto_delegate_4param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
}
// create a static function proto-delegate
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
static proto_delegate_4param _create_static(const char *name = NULL)
{
return proto_delegate_4param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
}
// equality testing
bool operator==(const proto_delegate_4param &rhs) const
{
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
}
@ -1172,11 +1172,11 @@ public:
// constructors
delegate_4param()
: m_object(NULL) { }
delegate_4param(proto_base proto)
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
m_object(NULL) { }
delegate_4param(proto_base proto, bindable_object &object)
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
m_object(NULL) { bind(object); }
@ -1188,10 +1188,10 @@ public:
if (m_rawfunction.u.funcptr != NULL)
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
}
// call the function
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
// testing
bool has_object() const { return (m_object != NULL); }
bool operator==(const delegate_4param &rhs) const { return (m_object == rhs.m_object && proto_base::operator==(rhs)); }

View File

@ -399,7 +399,7 @@ const rom_entry *device_config::rom_region() const
//-------------------------------------------------
// machine_config - return a pointer to a machine
// config constructor describing sub-devices for
// config constructor describing sub-devices for
// this device
//-------------------------------------------------

View File

@ -247,7 +247,7 @@ public:
// methods that wrap both interface-level and device-level behavior
void config_complete();
bool validity_check(const game_driver &driver) const;
// configuration helpers
static void static_set_clock(device_config *device, UINT32 clock) { device->m_clock = clock; }
static void static_set_static_config(device_config *device, const void *config) { device->m_static_config = config; }

View File

@ -170,7 +170,7 @@ void legacy_device_config_base::static_set_inline64(device_config *device, UINT3
//-------------------------------------------------
// static_set_inline_float - configuration helper
// static_set_inline_float - configuration helper
// to set a floating-point value in the inline
// configuration
//-------------------------------------------------

View File

@ -93,7 +93,7 @@ device_config_execute_interface::~device_config_execute_interface()
//-------------------------------------------------
// static_set_disable - configuration helper to
// static_set_disable - configuration helper to
// set the disabled state of a device
//-------------------------------------------------
@ -107,7 +107,7 @@ void device_config_execute_interface::static_set_disable(device_config *device)
//-------------------------------------------------
// static_set_vblank_int - configuration helper
// static_set_vblank_int - configuration helper
// to set up VBLANK interrupts on the device
//-------------------------------------------------
@ -123,7 +123,7 @@ void device_config_execute_interface::static_set_vblank_int(device_config *devic
//-------------------------------------------------
// static_set_periodic_int - configuration helper
// static_set_periodic_int - configuration helper
// to set up periodic interrupts on the device
//-------------------------------------------------

View File

@ -144,7 +144,7 @@ const address_space_config *device_config_memory_interface::memory_space_config(
//-------------------------------------------------
// static_set_vblank_int - configuration helper
// static_set_vblank_int - configuration helper
// to set up VBLANK interrupts on the device
//-------------------------------------------------

View File

@ -68,7 +68,7 @@ device_config_sound_interface::~device_config_sound_interface()
//-------------------------------------------------
// static_add_route - configuration helper to add
// static_add_route - configuration helper to add
// a new route to the device
//-------------------------------------------------
@ -85,7 +85,7 @@ void device_config_sound_interface::static_add_route(device_config *device, UINT
//-------------------------------------------------
// static_reset_routes - configuration helper to
// static_reset_routes - configuration helper to
// reset all existing routes to the device
//-------------------------------------------------

View File

@ -392,7 +392,7 @@ public:
num++;
return -1;
}
T &prepend(T &object)
{
object.m_next = m_head;

View File

@ -161,17 +161,17 @@ typedef tagged_list<region_info> region_list;
class driver_data_t : public bindable_object
{
friend class running_machine;
public:
driver_data_t(running_machine &machine);
virtual ~driver_data_t();
virtual void machine_start();
virtual void machine_reset();
virtual void sound_start();
virtual void sound_reset();
virtual void palette_init(const UINT8 *color_prom);
virtual void video_start();
virtual void video_reset();

View File

@ -507,7 +507,7 @@ TIMER_CALLBACK( mos6526_device::clock_tod_callback )
/*-------------------------------------------------
cnt_w
cnt_w
-------------------------------------------------*/
void mos6526_device::cnt_w(UINT8 state)

View File

@ -172,7 +172,7 @@ int ttl74123_device::timer_running()
/*-------------------------------------------------
TIMER_CALLBACK( output_callback )
TIMER_CALLBACK( output_callback )
-------------------------------------------------*/
TIMER_CALLBACK( ttl74123_device::output_callback )

View File

@ -176,7 +176,7 @@ void ttl7474_device::device_reset()
void ttl7474_device::update()
{
if (!m_preset && m_clear) /* line 1 in truth table */
if (!m_preset && m_clear) /* line 1 in truth table */
{
m_output = 1;
m_output_comp = 0;
@ -191,7 +191,7 @@ void ttl7474_device::update()
m_output = 1;
m_output_comp = 1;
}
else if (!m_last_clock && m_clk) /* line 4 in truth table */
else if (!m_last_clock && m_clk) /* line 4 in truth table */
{
m_output = m_d;
m_output_comp = !m_d;

View File

@ -139,7 +139,7 @@ private:
/* inputs */
UINT8 m_clear; /* pin 1/13 */
UINT8 m_preset; /* pin 4/10 */
UINT8 m_clk; /* pin 3/11 */
UINT8 m_clk; /* pin 3/11 */
UINT8 m_d; /* pin 2/12 */
/* outputs */
@ -173,4 +173,4 @@ READ_LINE_DEVICE_HANDLER( ttl7474_output_r );
READ_LINE_DEVICE_HANDLER( ttl7474_output_comp_r ); /* NOT strictly the same as !ttl7474_output_r() */
#endif /* __TTL7474_H__ */
#endif /* __TTL7474_H__ */

View File

@ -284,7 +284,7 @@ void i8237_device::i8237_timerproc()
/* Check if a new DMA request has been received. */
/* Bit 6 of the command register determines whether the DREQ signals are active
high or active low. */
high or active low. */
UINT16 pending_request = ( ( m_command & 0x40 ) ? ~m_drq : m_drq ) & ~m_mask;
if ( pending_request & 0x0f )

View File

@ -69,4 +69,4 @@
virtual void device_reset(); \
};
#endif // __DEVHELPR_H__
#endif // __DEVHELPR_H__

View File

@ -107,7 +107,7 @@ device_t *eeprom_device_config::alloc_device(running_machine &machine) const
//-------------------------------------------------
// static_set_interface - configuration helper
// static_set_interface - configuration helper
// to set the interface
//-------------------------------------------------
@ -133,7 +133,7 @@ void eeprom_device_config::static_set_default_data(device_config *device, const
{
eeprom_device_config *eeprom = downcast<eeprom_device_config *>(device);
if (eeprom->m_data_bits != 8) mame_printf_warning("16-bit EEPROM set with 8-bit data\n");
// assert(eeprom->m_data_bits == 8);
// assert(eeprom->m_data_bits == 8);
eeprom->m_default_data = data;
eeprom->m_default_data_size = size;
}
@ -142,7 +142,7 @@ void eeprom_device_config::static_set_default_data(device_config *device, const
{
eeprom_device_config *eeprom = downcast<eeprom_device_config *>(device);
if (eeprom->m_data_bits != 16) mame_printf_warning("8-bit EEPROM set with 16-bit data\n");
// assert(eeprom->m_data_bits == 16);
// assert(eeprom->m_data_bits == 16);
eeprom->m_default_data = reinterpret_cast<const UINT8 *>(data);
eeprom->m_default_data_size = size;
}

View File

@ -1,22 +1,22 @@
/**********************************************************************
Fairchild F3853 SRAM interface with integrated interrupt
controller and timer (SMI)
Fairchild F3853 SRAM interface with integrated interrupt
controller and timer (SMI)
This chip is a timer shift register, basically the same as in the
F3851.
This chip is a timer shift register, basically the same as in the
F3851.
Based on a datasheet obtained from www.freetradezone.com
Based on a datasheet obtained from www.freetradezone.com
The SMI does not have DC0 and DC1, only DC0; as a result, it does
not respond to the main CPU's DC0/DC1 swap instruction. This may
lead to two devices responding to the same DC0 address and
attempting to place their bytes on the data bus simultaneously!
The SMI does not have DC0 and DC1, only DC0; as a result, it does
not respond to the main CPU's DC0/DC1 swap instruction. This may
lead to two devices responding to the same DC0 address and
attempting to place their bytes on the data bus simultaneously!
8-bit shift register:
Feedback in0 = !((out3 ^ out4) ^ (out5 ^ out7))
Interrupts are at 0xfe
0xff stops the register (0xfe is never reached)
8-bit shift register:
Feedback in0 = !((out3 ^ out4) ^ (out5 ^ out7))
Interrupts are at 0xfe
0xff stops the register (0xfe is never reached)
**********************************************************************/

View File

@ -1,10 +1,10 @@
/**********************************************************************
Fairchild F3853 SRAM interface with integrated interrupt
controller and timer
Fairchild F3853 SRAM interface with integrated interrupt
controller and timer
This chip is a timer shift register, basically the same as in the
F3851.
This chip is a timer shift register, basically the same as in the
F3851.
**********************************************************************/

View File

@ -110,7 +110,7 @@ device_t *i2cmem_device_config::alloc_device( running_machine &machine ) const
//-------------------------------------------------
// static_set_interface - set the device
// static_set_interface - set the device
// configuration
//-------------------------------------------------

View File

@ -3,10 +3,10 @@
timekpr.h
Various ST Microelectronics timekeeper SRAM implementations:
- M48T02
- M48T35
- M48T58
- MK48T08
- M48T02
- M48T35
- M48T58
- MK48T08
***************************************************************************/

View File

@ -3,10 +3,10 @@
timekpr.h
Various ST Microelectronics timekeeper SRAM implementations:
- M48T02
- M48T35
- M48T58
- MK48T08
- M48T02
- M48T35
- M48T58
- MK48T08
***************************************************************************/

View File

@ -5,11 +5,11 @@
Copyright (c) 2008, The MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
The z80dart/z80sio itself is based on an older intel serial chip, the i8274 MPSC
(see http://doc.chipfind.ru/pdf/intel/8274.pdf), which also has almost identical
behavior, except lacks the interrupt daisy chaining and has its own interrupt/dma
scheme which uses write register 2 on channel A, that register which is unused on
the z80dart and z80sio.
The z80dart/z80sio itself is based on an older intel serial chip, the i8274 MPSC
(see http://doc.chipfind.ru/pdf/intel/8274.pdf), which also has almost identical
behavior, except lacks the interrupt daisy chaining and has its own interrupt/dma
scheme which uses write register 2 on channel A, that register which is unused on
the z80dart and z80sio.
***************************************************************************/
@ -21,8 +21,8 @@
- wr0 reset tx interrupt pending
- wait/ready
- 1.5 stop bits
- synchronous mode (Z80-SIO/1,2)
- SDLC mode (Z80-SIO/1,2)
- synchronous mode (Z80-SIO/1,2)
- SDLC mode (Z80-SIO/1,2)
*/

View File

@ -117,7 +117,7 @@ device_config *machine_config::device_add(device_config *owner, const char *tag,
//-------------------------------------------------
// device_replace - configuration helper to
// device_replace - configuration helper to
// replace one device with a new device
//-------------------------------------------------
@ -130,7 +130,7 @@ device_config *machine_config::device_replace(device_config *owner, const char *
//-------------------------------------------------
// device_remove - configuration helper to
// device_remove - configuration helper to
// remove a device
//-------------------------------------------------
@ -144,7 +144,7 @@ device_config *machine_config::device_remove(device_config *owner, const char *t
//-------------------------------------------------
// device_find - configuration helper to
// device_find - configuration helper to
// locate a device
//-------------------------------------------------

View File

@ -3289,7 +3289,7 @@ void address_table::populate_range_mirrored(offs_t bytestart, offs_t byteend, of
//-------------------------------------------------
// depopulate_unused - scan the table and
// eliminate entries that are no longer used
// eliminate entries that are no longer used
//-------------------------------------------------
void address_table::depopulate_unused()

View File

@ -212,7 +212,7 @@ typedef delegate_4param<void, address_space &, offs_t, UINT64, UINT64> write64_d
class direct_read_data
{
friend class address_table;
public:
// direct_range is an internal class that is part of a list of start/end ranges
class direct_range
@ -226,7 +226,7 @@ public:
// getters
direct_range *next() const { return m_next; }
// internal state
direct_range * m_next; // pointer to the next range in the list
offs_t m_bytestart; // starting byte offset of the range
@ -281,8 +281,8 @@ private:
offs_t m_bytestart; // minimum valid byte address
offs_t m_byteend; // maximum valid byte address
UINT8 m_entry; // live entry
simple_list<direct_range> m_rangelist[256]; // list of ranges for each entry
simple_list<direct_range> m_freerangelist; // list of recycled range entries
simple_list<direct_range> m_rangelist[256]; // list of ranges for each entry
simple_list<direct_range> m_freerangelist; // list of recycled range entries
direct_update_delegate m_directupdate; // fast direct-access update callback
};
@ -420,7 +420,7 @@ public:
// decryption
void set_decrypted_region(offs_t addrstart, offs_t addrend, void *base);
// direct access
direct_update_delegate set_direct_update_handler(direct_update_delegate function) { return m_direct.set_direct_update(function); }
bool set_direct_region(offs_t &byteaddress);
@ -551,7 +551,7 @@ protected:
// space read/write handler function macros
#define READ8_MEMBER(name) UINT8 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 mem_mask)
#define READ8_MEMBER(name) UINT8 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 mem_mask)
#define WRITE8_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 data, ATTR_UNUSED UINT8 mem_mask)
#define READ16_MEMBER(name) UINT16 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 mem_mask)
#define WRITE16_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask)
@ -560,7 +560,7 @@ protected:
#define READ64_MEMBER(name) UINT64 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT64 mem_mask)
#define WRITE64_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT64 data, ATTR_UNUSED UINT64 mem_mask)
#define DECLARE_READ8_MEMBER(name) UINT8 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 mem_mask = 0xff)
#define DECLARE_READ8_MEMBER(name) UINT8 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 mem_mask = 0xff)
#define DECLARE_WRITE8_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 data, ATTR_UNUSED UINT8 mem_mask = 0xff)
#define DECLARE_READ16_MEMBER(name) UINT16 name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 mem_mask = 0xffff)
#define DECLARE_WRITE16_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask = 0xffff)
@ -781,14 +781,14 @@ inline UINT8 direct_read_data::read_raw_byte(offs_t byteaddress)
return m_raw[byteaddress & m_bytemask];
return m_space.read_byte(byteaddress);
}
inline UINT8 direct_read_data::read_decrypted_byte(offs_t byteaddress)
{
if (address_is_valid(byteaddress))
return m_decrypted[byteaddress & m_bytemask];
return m_space.read_byte(byteaddress);
}
//-------------------------------------------------
// read_raw_word - read a word via the
@ -801,14 +801,14 @@ inline UINT16 direct_read_data::read_raw_word(offs_t byteaddress)
return *reinterpret_cast<UINT16 *>(&m_raw[byteaddress & m_bytemask]);
return m_space.read_word(byteaddress);
}
inline UINT16 direct_read_data::read_decrypted_word(offs_t byteaddress)
{
if (address_is_valid(byteaddress))
return *reinterpret_cast<UINT16 *>(&m_decrypted[byteaddress & m_bytemask]);
return m_space.read_word(byteaddress);
}
//-------------------------------------------------
// read_raw_dword - read a dword via the
@ -821,14 +821,14 @@ inline UINT32 direct_read_data::read_raw_dword(offs_t byteaddress)
return *reinterpret_cast<UINT32 *>(&m_raw[byteaddress & m_bytemask]);
return m_space.read_dword(byteaddress);
}
inline UINT32 direct_read_data::read_decrypted_dword(offs_t byteaddress)
{
if (address_is_valid(byteaddress))
return *reinterpret_cast<UINT32 *>(&m_decrypted[byteaddress & m_bytemask]);
return m_space.read_dword(byteaddress);
}
//-------------------------------------------------
// read_raw_qword - read a qword via the
@ -841,13 +841,13 @@ inline UINT64 direct_read_data::read_raw_qword(offs_t byteaddress)
return *reinterpret_cast<UINT64 *>(&m_raw[byteaddress & m_bytemask]);
return m_space.read_qword(byteaddress);
}
inline UINT64 direct_read_data::read_decrypted_qword(offs_t byteaddress)
{
if (address_is_valid(byteaddress))
return *reinterpret_cast<UINT64 *>(&m_decrypted[byteaddress & m_bytemask]);
return m_space.read_qword(byteaddress);
}
#endif /* __MEMORY_H__ */

View File

@ -37,14 +37,14 @@
****************************************************************************
Profiling is scope-based. To start profiling, put a profiler_scope
object on the stack. To end profiling, just end the scope:
Profiling is scope-based. To start profiling, put a profiler_scope
object on the stack. To end profiling, just end the scope:
{
profiler_scope scope(PROFILER_VIDEO);
your_work_here();
}
{
profiler_scope scope(PROFILER_VIDEO);
your_work_here();
}
the profiler handles a FILO list so calls may be nested.
@ -282,7 +282,7 @@ const char *real_profiler_state::text(running_machine &machine, astring &string)
// we are ready once we have wrapped around
if (m_dataindex == 0)
m_dataready = true;
g_profiler.stop();
return string;
}

View File

@ -37,14 +37,14 @@
****************************************************************************
Profiling is scope-based. To start profiling, put a profiler_scope
object on the stack. To end profiling, just end the scope:
Profiling is scope-based. To start profiling, put a profiler_scope
object on the stack. To end profiling, just end the scope:
{
profiler_scope scope(PROFILER_VIDEO);
your_work_here();
}
{
profiler_scope scope(PROFILER_VIDEO);
your_work_here();
}
the profiler handles a FILO list so calls may be nested.
@ -116,7 +116,7 @@ class real_profiler_state
public:
// construction/destruction
real_profiler_state();
// getters
bool enabled() const { return m_enabled; }
const char *text(running_machine &machine, astring &string);

View File

@ -496,7 +496,7 @@ device_t *speaker_device_config::alloc_device(running_machine &machine) const
//-------------------------------------------------
// static_set_position - configuration helper to
// static_set_position - configuration helper to
// set the speaker position
//-------------------------------------------------

View File

@ -67,7 +67,7 @@ struct _bsmt2000_chip
bsmt2000_voice voice[MAX_VOICES]; /* the voices */
UINT16 * regmap[128]; /* mapping of registers to voice params */
UINT8 mode; /* current mode */
UINT32 clock; /* original clock on the chip */
UINT8 stereo; /* stereo output? */
UINT8 voices; /* number of voices */

View File

@ -241,7 +241,7 @@ static DEVICE_START( k053260 )
/* register with the save state system */
state_save_register_device_item(device, 0, ic->mode);
state_save_register_device_item_array(device, 0, ic->regs);
for ( i = 0; i < 4; i++ )
{
state_save_register_device_item(device, i, ic->channels[i].rate);

View File

@ -562,7 +562,7 @@ static bool validate_roms(int drivnum, const machine_config *config, region_arra
error = true;
}
}
// count copies/fills as valid items
else if (ROMENTRY_ISCOPY(romp) || ROMENTRY_ISFILL(romp))
items_since_region++;

View File

@ -1802,7 +1802,7 @@ void screen_device_config::static_set_size(device_config *device, UINT16 width,
//-------------------------------------------------
// static_set_visarea - configuration helper to
// static_set_visarea - configuration helper to
// set the visible area of the screen
//-------------------------------------------------
@ -1817,7 +1817,7 @@ void screen_device_config::static_set_visarea(device_config *device, INT16 minx,
//-------------------------------------------------
// static_set_default_position - configuration
// static_set_default_position - configuration
// helper to set the default position and scale
// factors for the screen
//-------------------------------------------------

View File

@ -280,7 +280,7 @@ extern const device_type SCREEN;
screen_device_config::static_set_type(device, SCREEN_TYPE_##_type); \
#define MDRV_SCREEN_RAW_PARAMS(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart) \
screen_device_config::static_set_raw(device, _pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart);
screen_device_config::static_set_raw(device, _pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart);
#define MDRV_SCREEN_REFRESH_RATE(_rate) \
screen_device_config::static_set_refresh(device, HZ_TO_ATTOSECONDS(_rate)); \

View File

@ -316,7 +316,7 @@ public:
astring &operator=(const char *string) { return cpy(string); }
astring &operator=(const astring &string) { return cpy(string); }
bool operator==(const char *string) const { return (cmp(string) == 0); }
bool operator==(const astring &string) const { return (cmp(string) == 0); }
bool operator!=(const char *string) const { return (cmp(string) != 0); }

View File

@ -26,7 +26,7 @@ General notes:
the microcontroller is able to write to anywhere within main memory.
Gold Medalist (bootleg) has a 68705 in place of the Alpha controller.
(Kyros bootleg also? we have decapped MCU dumps of different types for it)
(Kyros bootleg also? we have decapped MCU dumps of different types for it)
V boards have more memory and double the amount of colours as II boards.
@ -3230,11 +3230,11 @@ static DRIVER_INIT( sbasebal )
UINT16 *rom = (UINT16 *)memory_region(machine, "maincpu");
/* Patch protection check, it does a divide by zero because the MCU is trying to
calculate the ball speed when a strike is scored, notice that current emulation
just returns 49 mi/h every time that this event happens.
68k reads at [0x4023e], then subtracts this value with [0x41838], presumably it's raw speed minus angle.
main CPU then writes the result to RAM location [0x41866], probably just to signal the result to the MCU.
*/
calculate the ball speed when a strike is scored, notice that current emulation
just returns 49 mi/h every time that this event happens.
68k reads at [0x4023e], then subtracts this value with [0x41838], presumably it's raw speed minus angle.
main CPU then writes the result to RAM location [0x41866], probably just to signal the result to the MCU.
*/
rom[0xb672/2] = 0x4e71;
/* And patch the ROM checksums */

View File

@ -54,10 +54,10 @@
Now using mc146818 rtc driver instead of rtc_get_reg.
19/8/10 - Roberto Fresca.
Added 3 Bags Full - 5VXFC790 (Victorian).
Set is now parent. Replaced the bad dumped GFX from NZ set with the new ones,
since they match 4 of 6 bitplanes. The PROM at U71 is also marked for Fantasy Fortune,
so maybe is the correct one for this game.
Added 3 Bags Full - 5VXFC790 (Victorian).
Set is now parent. Replaced the bad dumped GFX from NZ set with the new ones,
since they match 4 of 6 bitplanes. The PROM at U71 is also marked for Fantasy Fortune,
so maybe is the correct one for this game.
The mc146818 driver is buggy - reported problem to Firewave and issues will be addressed.
In this driver, the wrong day of the month is shown, wrong hours are shown.

View File

@ -1,59 +1,59 @@
/*
Aristocrat MK5 / MKV hardware
possibly 'Acorn Archimedes on a chip' hardware
Aristocrat MK5 / MKV hardware
possibly 'Acorn Archimedes on a chip' hardware
Note: ARM250 mapping is not identical to plain AA
Note: ARM250 mapping is not identical to plain AA
BIOS ROMs are actually nowhere to be found on a regular MK5 system. They can be used to change the system configurations on a PCB board
by swapping them with the game ROMs u7/u11 locations.
BIOS ROMs are actually nowhere to be found on a regular MK5 system. They can be used to change the system configurations on a PCB board
by swapping them with the game ROMs u7/u11 locations.
TODO (MK-5 specific):
- Fix remaining errors
- If all tests passes, this msg is printed on the keyboard serial port:
"System Startup Code Entered \n Gos_create could not allocate stack for the new process \n Unrecoverable error occured. System will now restart"
Apparently it looks like some sort of protection device ...
TODO (MK-5 specific):
- Fix remaining errors
- If all tests passes, this msg is printed on the keyboard serial port:
"System Startup Code Entered \n Gos_create could not allocate stack for the new process \n Unrecoverable error occured. System will now restart"
Apparently it looks like some sort of protection device ...
code DASMing of POST (adonis):
- bp 0x3400224:
checks work RAM [0x87000], if bit 0 active high then all tests are skipped (presumably for debugging), otherwise check stuff;
- bp 0x3400230: EPROM checksum branch test
- bp 0x3400258: DRAM Check branch test
- bp 0x3400280: CPU Check branch test
bp 0x340027c: checks IRQ status A and FIQ status bit 7 (force IRQ flag)
- R0 == 0: CPU Check OK
- R0 == 1: IRQ status A force IRQ flag check failed
- R0 == 2: FIQ status force IRQ flag check failed
- R0 == 3: Internal Latch check 0x3250050 == 0xf5
- bp 0x34002a8: SRAM Check branch test (I2C)
- basically writes to the I2C clock/data then read-backs it
- bp 0x34002d0: 2KHz Timer branch test
bp 0x34002cc: it does various test with GO command reads (that are undefined on plain AA) and
IRQA status bit 0, that's "printer busy" on original AA but here it have a completely
different meaning.
- bp 0x34002f8: DRAM emulator branch tests
bp 0x34002f4:
- R0 == 0 "DRAM emulator found"
- R0 == 1 "DRAM emulator found"
- R0 == 3 "DRAM emulator not found - Error"
- R0 == 4 "DRAM emulator found instead of DRAM - Error"
- R0 == x "Undefined error in DRAM emulator area"
It r/w RAM location 0 and it expects to NOT read-back value written.
code DASMing of POST (adonis):
- bp 0x3400224:
checks work RAM [0x87000], if bit 0 active high then all tests are skipped (presumably for debugging), otherwise check stuff;
- bp 0x3400230: EPROM checksum branch test
- bp 0x3400258: DRAM Check branch test
- bp 0x3400280: CPU Check branch test
bp 0x340027c: checks IRQ status A and FIQ status bit 7 (force IRQ flag)
- R0 == 0: CPU Check OK
- R0 == 1: IRQ status A force IRQ flag check failed
- R0 == 2: FIQ status force IRQ flag check failed
- R0 == 3: Internal Latch check 0x3250050 == 0xf5
- bp 0x34002a8: SRAM Check branch test (I2C)
- basically writes to the I2C clock/data then read-backs it
- bp 0x34002d0: 2KHz Timer branch test
bp 0x34002cc: it does various test with GO command reads (that are undefined on plain AA) and
IRQA status bit 0, that's "printer busy" on original AA but here it have a completely
different meaning.
- bp 0x34002f8: DRAM emulator branch tests
bp 0x34002f4:
- R0 == 0 "DRAM emulator found"
- R0 == 1 "DRAM emulator found"
- R0 == 3 "DRAM emulator not found - Error"
- R0 == 4 "DRAM emulator found instead of DRAM - Error"
- R0 == x "Undefined error in DRAM emulator area"
It r/w RAM location 0 and it expects to NOT read-back value written.
goldprmd: checks if a "keyboard IRQ" fires (IRQ status B bit 6), it seems a serial port with data on it,
returns an External Video Crystal Error (bp 3400278)
goldprmd: checks if a "keyboard IRQ" fires (IRQ status B bit 6), it seems a serial port with data on it,
returns an External Video Crystal Error (bp 3400278)
dmdtouch:
bp 3400640: checks 2MByte DRAM
- writes from 0x1000 to 0x100000, with 0x400 bytes index increment and 0xfb data increment
- writes from 0x100000 to 0x200000, with 0x400 bytes index increment and 0xfb data increment
- bp 3400720 checks if the aforementioned checks are ok (currently fails at the very first work RAM check at 0x1000, it returns the
value that actually should be at 0x141000)
bp 340064c: if R0 == 0 2MB DRAM is ok, otherwise there's an error
dmdtouch:
bp 3400640: checks 2MByte DRAM
- writes from 0x1000 to 0x100000, with 0x400 bytes index increment and 0xfb data increment
- writes from 0x100000 to 0x200000, with 0x400 bytes index increment and 0xfb data increment
- bp 3400720 checks if the aforementioned checks are ok (currently fails at the very first work RAM check at 0x1000, it returns the
value that actually should be at 0x141000)
bp 340064c: if R0 == 0 2MB DRAM is ok, otherwise there's an error
set chip (BIOS):
same as goldprmd (serial + ext video crystal check)
bp 3400110: External Video Crystal test
set chip (BIOS):
same as goldprmd (serial + ext video crystal check)
bp 3400110: External Video Crystal test
*/
@ -131,7 +131,7 @@ static ADDRESS_MAP_START( aristmk5_map, ADDRESS_SPACE_PROGRAM, 32 )
/* MK-5 overrides */
AM_RANGE(0x03010420, 0x03010423) AM_RAM_WRITE(mk5_i2c_w)
AM_RANGE(0x03010810, 0x03010813) AM_READNOP //MK-5 specific, watchdog
// System Startup Code Enabled protection appears to be located at 0x3010400 - 0x30104ff
// System Startup Code Enabled protection appears to be located at 0x3010400 - 0x30104ff
AM_RANGE(0x03220000, 0x03220003) AM_READWRITE(mk5_econet_r,mk5_econet_w)
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(mk5_ext_latch_w)
AM_RANGE(0x03250050, 0x03250053) AM_READ(mk5_unk_r)
@ -150,7 +150,7 @@ static INPUT_PORTS_START( aristmk5 )
PORT_CONFNAME( 0x03, 0x00, "System Mode" )
PORT_CONFSETTING( 0x00, "Set Chip v4.04 Mode" )
PORT_CONFSETTING( 0x01, "Set Chip v4.4 Mode" )
// Clear Chip (missing?)
// Clear Chip (missing?)
PORT_CONFSETTING( 0x03, "Game Mode" )
INPUT_PORTS_END

View File

@ -450,8 +450,8 @@
- Promoted comg080 (Arcade Black Jack) to working state.
- Added support for system 906III:
- Accurate memory map, CRTC, and PIAs mapped.
- Preliminary PIAs support (no multiplexion yet).
- Accurate memory map, CRTC, and PIAs mapped.
- Preliminary PIAs support (no multiplexion yet).
- Added proper machine driver, with correct R65C02 CPU.
- Documented the hardware specs.
- Added Game 51.08 (CEI Video Poker, Jacks or Better),
@ -460,7 +460,7 @@
- Mapped the AY8912.
- Added AY8912 proper interfase. Tied SW2 to AY8912 port.
- PIA0, portA is polled constantly. Tied some debug handlers
to understand how the input system works.
to understand how the input system works.
- Added notes about the PIAs R/W.
@ -3973,9 +3973,9 @@ static DRIVER_INIT( comg080 )
}
/* Injecting missing Start and NMI vectors...
Start = $2042; NMI = $26f8;
Also a fake vector at $3ff8-$3ff9. The code checks these values to continue.
*/
Start = $2042; NMI = $26f8;
Also a fake vector at $3ff8-$3ff9. The code checks these values to continue.
*/
UINT8 *PRGROM = memory_region( machine, "maincpu" );
PRGROM[0x3ff8] = 0x8e; /* checked by code */

View File

@ -1,5 +1,5 @@
/*
Chihiro is an Xbox based arcade motherboard from SEGA
A Chihiro system consists of network board, media board, base board & Xbox board
@ -42,18 +42,18 @@ Thanks to Alex, Mr Mudkips, and Philip Burke for this info.
#include "debug/debugcmd.h"
/* jamtable instructions for Chihiro
St. Instr. Comment
0x01 POKEPCI PCICONF[OP2] := OP1
0x02 OUTB PORT[OP2] := OP1
0x03 POKE MEM[OP2] := OP1
0x04 BNE IF ACC <> OP2 THEN PC := PC + OP1
0x05 PEEKPCI ACC := PCICONF[OP2]
0x06 AND/OR ACC := (ACC & OP2) | OP1
0x07 BRA PC := PC + OP1
0x08 INB ACC := PORT[OP2]
0x09 PEEK ACC := MEM[OP2]
0xE1 (prefix) execute the instruction code in OP2 with OP2 := OP1, OP1 := ACC
0xEE END
St. Instr. Comment
0x01 POKEPCI PCICONF[OP2] := OP1
0x02 OUTB PORT[OP2] := OP1
0x03 POKE MEM[OP2] := OP1
0x04 BNE IF ACC <> OP2 THEN PC := PC + OP1
0x05 PEEKPCI ACC := PCICONF[OP2]
0x06 AND/OR ACC := (ACC & OP2) | OP1
0x07 BRA PC := PC + OP1
0x08 INB ACC := PORT[OP2]
0x09 PEEK ACC := MEM[OP2]
0xE1 (prefix) execute the instruction code in OP2 with OP2 := OP1, OP1 := ACC
0xEE END
*/
/* jamtable disassembler */
@ -258,7 +258,7 @@ static WRITE32_HANDLER( smbus_w )
else {
smbusst.data=smbusst.devices[smbusst.address & 127](smbusst.command,smbusst.rw,smbusst.data);
}
}
}
smbusst.status |= 0x10;
}
}

View File

@ -4403,7 +4403,7 @@ ROM_START( ffightu )
ROM_LOAD16_BYTE( "ff_36.11f", 0x00000, 0x20000, CRC(f9a5ce83) SHA1(0756ae576a1f6d5b8b22f8630dca40ef38567ea6) ) // in "30" socket
ROM_LOAD16_BYTE( "ff_42.11h", 0x00001, 0x20000, CRC(65f11215) SHA1(5045a467f3e228c02b4a355b52f58263ffa90113) ) // in "35" socket
ROM_LOAD16_BYTE( "ff_37.12f", 0x40000, 0x20000, CRC(e1033784) SHA1(38f44434c8befd623953ae23d6e5ff4e201d6627) ) // in "31" socket
ROM_LOAD16_BYTE( "ff_43.12h", 0x40001, 0x20000, CRC(4ca65947) SHA1(74ffe00df96273770a24d9a46f13e53ea8812670) ) // in "36" socket /* seen the same pcb with FFU_43.12H */
ROM_LOAD16_BYTE( "ff_43.12h", 0x40001, 0x20000, CRC(4ca65947) SHA1(74ffe00df96273770a24d9a46f13e53ea8812670) ) // in "36" socket /* seen the same pcb with FFU_43.12H */
ROM_LOAD16_WORD_SWAP( "ff-32m.8h", 0x80000, 0x80000, CRC(c747696e) SHA1(d3362dadded31ccb7eaf71ef282d698d18edd722) )
ROM_REGION( 0x200000, "gfx", 0 )
@ -4483,7 +4483,7 @@ ROM_START( ffightub )
ROMX_LOAD( "ff-3m.5a", 0x000006, 0x80000, CRC(52291cd2) SHA1(df5f3d3aa96a7a33ff22f2a31382942c4c4f1111) , ROM_GROUPWORD | ROM_SKIP(6) )
ROM_REGION( 0x18000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
ROM_LOAD( "ff_23.12b", 0x00000, 0x08000, CRC(b8367eb5) SHA1(ec3db29fdd6200e9a8f4f8073a7e34aef731354f) ) // == ff_09.12b /* label is FF_23, pcb verified */
ROM_LOAD( "ff_23.12b", 0x00000, 0x08000, CRC(b8367eb5) SHA1(ec3db29fdd6200e9a8f4f8073a7e34aef731354f) ) // == ff_09.12b /* label is FF_23, pcb verified */
ROM_CONTINUE( 0x10000, 0x08000 )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
@ -9965,7 +9965,7 @@ GAME( 1992, sf2yyc, sf2ce, cps1_12MHz, sf2hack, sf2hack, ROT0, "bo
GAME( 1992, sf2koryu, sf2ce, cps1_12MHz, sf2hack, sf2hack, ROT0, "bootleg", "Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg)", GAME_SUPPORTS_SAVE ) // 811102 !!! - based on World version
GAME( 1992, sf2mdt, sf2ce, sf2mdt, sf2hack, sf2mdt, ROT0, "bootleg", "Street Fighter II': Magic Delta Turbo (bootleg)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) // 920313 - based on (heavily modified) World version
GAME( 1992, cworld2j, 0, cps1_12MHz, cworld2j, cps1, ROT0, "Capcom", "Adventure Quiz Capcom World 2 (Japan 920611)", GAME_SUPPORTS_SAVE )
GAME( 1992, varth, 0, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920714)", GAME_SUPPORTS_SAVE ) // "ETC" // 12MHz verified
GAME( 1992, varth, 0, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920714)", GAME_SUPPORTS_SAVE ) // "ETC" // 12MHz verified
GAME( 1992, varthr1, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920612)", GAME_SUPPORTS_SAVE ) // "ETC"
GAME( 1992, varthu, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom, distributed by Romstar", "Varth: Operation Thunderstorm (USA 920612)", GAME_SUPPORTS_SAVE )
GAME( 1992, varthj, varth, cps1_12MHz, varth, cps1, ROT270, "Capcom", "Varth: Operation Thunderstorm (Japan 920714)", GAME_SUPPORTS_SAVE )

View File

@ -8417,7 +8417,7 @@ ROM_START( ecofghtrd )
ROM_LOAD16_WORD_SWAP( "ueced.04", 0x080000, 0x80000, CRC(f800138d) SHA1(a8c05da5d33c338a82fed4f7b59c6ba8c10e8597) )
ROM_LOAD16_WORD_SWAP( "ueced.05", 0x100000, 0x80000, CRC(eb6a12f2) SHA1(5253a193a38b566eefbb8644511f283ac4a69850) )
ROM_LOAD16_WORD_SWAP( "ueced.06", 0x180000, 0x80000, CRC(8380ec9a) SHA1(4f3a95a2580f89ae214b588df9258bd9dc06f993) )
ROM_REGION( 0xc00000, "gfx", 0 )
ROMX_LOAD( "uec.13m", 0x000000, 0x200000, CRC(dcaf1436) SHA1(ba124cc0bb10c1d1c07592a3623add4ed054182e) , ROM_GROUPWORD | ROM_SKIP(6) )
ROMX_LOAD( "uec.15m", 0x000002, 0x200000, CRC(2807df41) SHA1(66a9800af435055737ce50a0b0ced7c5718c2004) , ROM_GROUPWORD | ROM_SKIP(6) )
@ -9319,7 +9319,7 @@ ROM_START( csclub1d )
ROM_LOAD16_WORD_SWAP( "csc.58", 0x380000, 0x080000, CRC(2300b7b3) SHA1(f5ecbb45c24f7de1c1aa435870695551d4e343ca) )
ROM_END
ROM_START( cybotsud )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "cybu_d.03", 0x000000, 0x80000, CRC(ee7560fb) SHA1(632e057a7b3a61127beee4ed833a39dcec4ccbd5) )

View File

@ -266,8 +266,8 @@ static INPUT_PORTS_START( bestri )
PORT_DIPNAME( 0x00c0, 0x00c0, "Girls" ) PORT_DIPLOCATION("SW1:7,8") /* stored at 0x3a6faa.w */
PORT_DIPSETTING( 0x00c0, DEF_STR( No ) )
PORT_DIPSETTING( 0x0080, DEF_STR( Yes ) )
// PORT_DIPSETTING( 0x0040, DEF_STR( No ) )
// PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
// PORT_DIPSETTING( 0x0040, DEF_STR( No ) )
// PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1,2,3") /* stored at 0x3a6fa6.w but not read back ? */
PORT_DIPSETTING( 0x0700, "0" )
PORT_DIPSETTING( 0x0300, "1" )

View File

@ -297,15 +297,15 @@ Donkey Kong Junior Notes
------------------------------------------------
D2K Jumpman returns Notes
=========================
D2K Jumpman returns Notes
=========================
This is a DKong/Hack combo using a Braze Technologies High Score Save pcb.
This pcb will be placed in the cpu socket and the Z80 together with an
additional 64K rom, a 74LS245, an eeprom and a pal/gal. It looks like the
"encryption" was a conincidence resulting from an easy pcb layout.
The pal is also used to switch A15 on and off. This is done in locations
6800 and E800.
This is a DKong/Hack combo using a Braze Technologies High Score Save pcb.
This pcb will be placed in the cpu socket and the Z80 together with an
additional 64K rom, a 74LS245, an eeprom and a pal/gal. It looks like the
"encryption" was a conincidence resulting from an easy pcb layout.
The pal is also used to switch A15 on and off. This is done in locations
6800 and E800.
***************************************************************************/
@ -1602,7 +1602,7 @@ GFXDECODE_END
* Braze Tech Addon boards
*
*************************************/
static const eeprom_interface braze_eeprom_intf =
{
7, /* address bits */

View File

@ -359,7 +359,7 @@ static READ8_HANDLER( dip_switch_r )
{
case 0x01:
/* For the DIP switches to be read, protection_data must be
0xff on reset. The AY8910 reset ensures this. */
0xff on reset. The AY8910 reset ensures this. */
if (state->protection_data != 0xff)
ret = state->protection_data ^ 0x88;
else

View File

@ -1,22 +1,22 @@
/*******************************************************************************************
Erotictac/Tactic (c) 1990 Sisteme
Poizone (c) 1991 Eterna
Erotictac/Tactic (c) 1990 Sisteme
Poizone (c) 1991 Eterna
Actually an Acorn Archimedes-based Arcade system
Actually an Acorn Archimedes-based Arcade system
original driver by Tomasz Slanina, Steve Ellenoff, Nicola Salmoria
rewrite to use AA functions by R.Belmont & Angelo Salese
special thanks to Tom Walker (author of the Acorn Archimedes Arculator emulator)
original driver by Tomasz Slanina, Steve Ellenoff, Nicola Salmoria
rewrite to use AA functions by R.Belmont & Angelo Salese
special thanks to Tom Walker (author of the Acorn Archimedes Arculator emulator)
TODO (specific issues only):
- Sound is currently ugly in both games, recognizable but still nowhere near perfection
- ertictac: 'music' dip-sw makes the game to just hang, BGM doesn't play either for
whatever reason (should be triggered as soon as it executes the POST)
- poizone: ARM core bugs causes it to crash at some point.
- Does this Arcade conversion have I2C device? It seems unused afaik.
- Need PCB for identify the exact model of AA, available RAM, what kind of i/o "podule"
it has etc.
TODO (specific issues only):
- Sound is currently ugly in both games, recognizable but still nowhere near perfection
- ertictac: 'music' dip-sw makes the game to just hang, BGM doesn't play either for
whatever reason (should be triggered as soon as it executes the POST)
- poizone: ARM core bugs causes it to crash at some point.
- Does this Arcade conversion have I2C device? It seems unused afaik.
- Need PCB for identify the exact model of AA, available RAM, what kind of i/o "podule"
it has etc.
*******************************************************************************************/
#include "emu.h"

View File

@ -3305,7 +3305,7 @@ ROM_END
1x 2716 for char gen. (4.8a)
3x 2716 for gfx bitplanes. (1.4a, 2.6a, 3.7a)
1x Reset switch. (R.SW)
1x Reset switch. (R.SW)
1x 8 DIP switches bank.
1x 2x10 Edge connector. (GM1)
1x 2x22 Edge connector. (GM2)

View File

@ -730,7 +730,7 @@ static INTERRUPT_GEN( karnov_interrupt )
{
karnov_state *state = device->machine->driver_data<karnov_state>();
UINT8 port = input_port_read(device->machine, "FAKE");
/* Coin input to the i8751 generates an interrupt to the main cpu */
if (port == state->coin_mask)
state->latch = 1;

View File

@ -1298,7 +1298,7 @@ ROM_START( legendb )
ROM_LOAD( "03.s08", 0x2000, 0x2000, CRC(7e7b9ba9) SHA1(897779129108b0f3936234ea797d47cf46cb7a16) )
ROM_LOAD( "04.s09", 0x4000, 0x2000, CRC(0dd50aa7) SHA1(001ba0d5e0b50fb030a95fdbeba40005ffc5c182) )
ROM_LOAD( "01.n07", 0x6000, 0x2000, CRC(13915a53) SHA1(25ba3babc8eb0df413bdfe7dbcd8642e4c658120) )
ROM_REGION( 0x1000, "gfx1", 0 ) /* fg tiles */
ROM_LOAD( "15.b05", 0x0000, 0x1000, CRC(6c879f76) SHA1(9da84446e463264ed86e912589d826d86c27bf59) )
@ -1328,7 +1328,7 @@ ROM_START( legendb )
ROM_LOAD( "epl12p6.9j", 0x0200, 0x0034, CRC(dcae870d) SHA1(2224724a3faf0608083f5d6ff76712adc7616a54) )
ROM_END

View File

@ -143,7 +143,7 @@ Top Shooter PCB info
Not Dumped
Super Bubble Bobble (a bubble bobble rip-off from Sun Mixing, looks like it may be on this hardware)
TOP SHOOTER - Sun Mixing Co. Ltd. 1995
To me it seems like an original cartridge-based arcade board

View File

@ -431,12 +431,12 @@ Notes:
4P,5P - SRAM (SOJ28) 32kx8, ISSI IS61C256AH-15J
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
Sticker FL0-FL3 # of SOP48 IC @ 1F IC @ 1M
Sticker FL0-FL3 # of SOP48 IC @ 1F IC @ 1M
Game on cart FLASHROM FLASHROMs X76F100 315-5581 Notes
---------------------------------------------------------------------------------------------------------------------------------------
/Shin Nihon Prowrestling FL0 & FL1 have pin55 raised from PCB.
/Shin Nihon Prowrestling FL0 & FL1 have pin55 raised from PCB.
\Toukon Retsuden 4 Arcade Edition 25349801 2 (64Mb) 15 (128Mb) not populated 317-5040-com They are connected togheter and go to pin89 on 2K.
@ -4783,13 +4783,13 @@ ROM_START( starseek )
ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
/*
Note:
There was no sticker or silk screen markings on this PIC.
I have used the product number as a label instead.
Note:
There was no sticker or silk screen markings on this PIC.
I have used the product number as a label instead.
PIC16C621A-20 (317-0005-JPN)
Sticker: 253-5509-0005J
*/
PIC16C621A-20 (317-0005-JPN)
Sticker: 253-5509-0005J
*/
ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
ROM_LOAD("317-0005-jpn.pic", 0x00, 0x4000, CRC(19f8d4d0) SHA1(d256f26f757d7019cab7950d81992902cdb65e07) )
ROM_END

View File

@ -5502,8 +5502,8 @@ ROM_END
ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */
/* There also exist carts where p1 label is pg1; the PG1 revision has a Japanese cart label, SN 02Jxxxxx
The P1 revision has a US/EUR cart label, SN 02Txxxxx ; Rom data on both is identical.
These carts were manufactured by Mega Enterprise, not SNK. */
The P1 revision has a US/EUR cart label, SN 02Txxxxx ; Rom data on both is identical.
These carts were manufactured by Mega Enterprise, not SNK. */
ROM_REGION( 0x500000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "263-p1.bin", 0x000000, 0x100000, CRC(27e4def3) SHA1(a08785e8145981bb6b5332a3b2df7eb321253cca) )
ROM_LOAD16_WORD_SWAP( "263-p2.bin", 0x100000, 0x400000, CRC(fdb7aed8) SHA1(dbeaec38f44e58ffedba99e70fa1439c2bf0dfa3) )

View File

@ -309,7 +309,7 @@ static INTERRUPT_GEN( pachifev_vblank_irq )
/* I wish I had found a better way to handle cocktail inputs, but I can't find a way to access internal RAM */
/* (bit 5 of 0xf0aa : 0 = player 1 and 1 = player 2 - bit 6 of 0xf0aa : 0 = upright and 1 = cocktail). */
/* All I found is that in main RAM, 0xe00f.b determines the player : 0x00 = player 1 and 0x01 = player 2. */
/* All I found is that in main RAM, 0xe00f.b determines the player : 0x00 = player 1 and 0x01 = player 2. */
address_space *ramspace = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
UINT8 player = 0;

View File

@ -6,11 +6,11 @@
Skeleton by R. Belmont
H/W is a white-box PC consisting of:
Pentium II 450 CPU
DFI P2XBL motherboard (i440BX chipset)
128 MB RAM
Guillemot Maxi Gamer 3D2 Voodoo II
Sound Blaster AWE64
Pentium II 450 CPU
DFI P2XBL motherboard (i440BX chipset)
128 MB RAM
Guillemot Maxi Gamer 3D2 Voodoo II
Sound Blaster AWE64
Protected by a HASP brand parallel port dongle.
I/O board has a PIC17C43 which is not readable.
@ -74,7 +74,7 @@ MACHINE_DRIVER_END
ROM_START( savquest )
ROM_REGION32_LE(0x40000, "user1", 0)
ROM_LOAD( "sq-aflash.bin", 0x000000, 0x040000, CRC(0b4f406f) SHA1(4003b0e6d46dcb47012acc118837f0f7cf529faf) )
ROM_LOAD( "sq-aflash.bin", 0x000000, 0x040000, CRC(0b4f406f) SHA1(4003b0e6d46dcb47012acc118837f0f7cf529faf) )
DISK_REGION( "disk" )
DISK_IMAGE( "savquest", 0, SHA1(b20cacf45e093b533c538bf4fc08f05f9475d640) )

View File

@ -2879,7 +2879,7 @@ ROM_START( rdftadi ) // Dream Island license
ROM_REGION(0x400000, "user2", ROMREGION_ERASE00) /* sound roms */
ROM_LOAD("raiden-f__pcm2.u0217", 0x000000, 0x400000, NO_DUMP )//the real rom used here is actually a 0x400000 long rom located at u0217 which contains the combined data of the two smaller roms on the older cart pcb at 217 and 216; pads are silkscreened SOUND0
//u0222 (unpopulated) is silkscreend SOUND1 and would expect a 27040 similar to the old gd_8 rom.
//u0222 (unpopulated) is silkscreend SOUND1 and would expect a 27040 similar to the old gd_8 rom.
ROM_LOAD("gun_dogs__pcm.217", 0x000000, 0x200000, BAD_DUMP CRC(31253ad7) SHA1(c81c8d50f8f287f5cbfaec77b30d969b01ce11a9) )
ROM_LOAD("gd_8.216", 0x200000, 0x080000, BAD_DUMP CRC(f88cb6e4) SHA1(fb35b41307b490d5d08e4b8a70f8ff4ce2ca8105) )
ROM_END
@ -2909,7 +2909,7 @@ ROM_START( rdftam ) // Metrotainment license
ROM_REGION(0x400000, "user2", ROMREGION_ERASE00) /* sound roms */
ROM_LOAD("raiden-f__pcm2.u0217", 0x000000, 0x400000, NO_DUMP )//the real rom used here is actually a 0x400000 long rom located at u0217 which contains the combined data of the two smaller roms on the older cart pcb at 217 and 216; pads are silkscreened SOUND0
//u0222 (unpopulated) is silkscreend SOUND1 and would expect a 27040 similar to the old gd_8 rom.
//u0222 (unpopulated) is silkscreend SOUND1 and would expect a 27040 similar to the old gd_8 rom.
ROM_LOAD("gun_dogs__pcm.217", 0x000000, 0x200000, BAD_DUMP CRC(31253ad7) SHA1(c81c8d50f8f287f5cbfaec77b30d969b01ce11a9) )
ROM_LOAD("gd_8.216", 0x200000, 0x080000, BAD_DUMP CRC(f88cb6e4) SHA1(fb35b41307b490d5d08e4b8a70f8ff4ce2ca8105) )
ROM_END

View File

@ -300,7 +300,7 @@ static ADDRESS_MAP_START( yieartf_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(interrupt_enable_w) /* INT */
// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_w) /* 32 */
// AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_WRITE(soundlatch_w) /* 32 */
AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1281, 0x1281) AM_MIRROR(0x007c) AM_READ_PORT("IN0")
@ -1050,8 +1050,8 @@ static MACHINE_DRIVER_START( yieartf )
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
// z80 isn't used
// MDRV_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
// MDRV_CPU_PROGRAM_MAP(sound_map)
// MDRV_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
// MDRV_CPU_PROGRAM_MAP(sound_map)
MDRV_MACHINE_START(trackfld)
MDRV_MACHINE_RESET(trackfld)
@ -1517,7 +1517,7 @@ ROM_START( yieartf )
ROM_REGION( 0x04000, "gfx2", 0 )
ROM_LOAD( "6.16h", 0x00000, 0x2000, CRC(05a23af3) SHA1(d588a5d31e106a3c5b1e37b1826863108b87f02d) )
ROM_LOAD( "7.15h", 0x02000, 0x2000, CRC(988154fa) SHA1(981273ef70ae6a947c24559750a8e7dc3d032444) )
ROM_REGION( 0x0220, "proms", 0 )
ROM_LOAD( "yiear.clr", 0x00000, 0x0020, CRC(c283d71f) SHA1(10cd39f4e951ba6ca5610081c8c1fcd9d68b34d2) )
ROM_LOAD( "prom1.b16", 0x0020, 0x0100, CRC(93dc32a0) SHA1(04e69d234e0ae93d90bbf2ef507f1cfd5cf3f87a) ) /* sprite lookup table */

View File

@ -71,9 +71,9 @@ extern UINT8 vidc_interlace;
#define CONTROL 0x00/4
#define KART 0x04/4 // Keyboard Asynchronous Receiver Transmitter
#define IRQ_STATUS_A 0x10/4
#define IRQ_STATUS_A 0x10/4
#define IRQ_REQUEST_A 0x14/4
#define IRQ_MASK_A 0x18/4
#define IRQ_MASK_A 0x18/4
#define IRQ_STATUS_B 0x20/4
#define IRQ_REQUEST_B 0x24/4
#define IRQ_MASK_B 0x28/4

View File

@ -17,7 +17,7 @@ public:
tilemap_t *pf2_tilemap;
const UINT8 *scale_table_ptr;
UINT8 scale_line_count;
UINT16 *pf1_data;
UINT16 *pf2_data;
UINT16 *pf1_scroll_data;

View File

@ -16,13 +16,13 @@ public:
beathead_state(running_machine &machine)
: atarigen_state(machine),
m_maincpu(*machine.device<asap_device>("maincpu")) { }
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
virtual bool video_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
asap_device & m_maincpu;
UINT32 * m_videoram;

View File

@ -11,7 +11,7 @@ public:
UINT8 *spriteram;
UINT8 *fgram;
UINT8 *bgram;
int sound_cpu_busy;
UINT32 bg_tile_offset;
};

View File

@ -11,7 +11,7 @@ public:
UINT16 *videoram;
UINT16 *bg_videoram16;
UINT16 invert_controls;
tilemap_t *bg2_tilemap;
tilemap_t *bg_tilemap;
tilemap_t *fg_tilemap;

View File

@ -10,7 +10,7 @@ public:
int sound_status;
UINT16* pow_fg_videoram;
UINT16 *spriteram;
UINT16 *paletteram;
int sprite_flip_axis;

View File

@ -26,7 +26,7 @@ public:
/* Demon world */
int dsp_on;
int dsp_BIO;
int dsp_execute;
int dsp_execute;
UINT32 dsp_addr_w;
UINT32 main_ram_seg;
@ -80,7 +80,7 @@ public:
int reset; /* Hack! See toaplan1_bcu_control below */
tilemap_t *pf1_tilemap, *pf2_tilemap, *pf3_tilemap, *pf4_tilemap;
// an empty tile, so that we can safely disable tiles
UINT8 empty_tile[8*8];
};

View File

@ -27,7 +27,7 @@ public:
size_t spriteram_size;
UINT8 * palettebank; // sbasketb
UINT8 * spriteram_select; // sbasketb
/* video-related */
tilemap_t *bg_tilemap;
int bg_bank, sprite_bank1, sprite_bank2; // trackfld

View File

@ -267,7 +267,7 @@ READ32_HANDLER(archimedes_memc_logical_r)
page = (offset<<2) / page_sizes[memc_pagesize];
poffs = (offset<<2) % page_sizes[memc_pagesize];
// printf("Reading offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, memc_pagesize, page_sizes[memc_pagesize], poffs, memc_pages[page], memc_pages[page]*page_sizes[memc_pagesize]);
// printf("Reading offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, memc_pagesize, page_sizes[memc_pagesize], poffs, memc_pages[page], memc_pages[page]*page_sizes[memc_pagesize]);
if (memc_pages[page] != -1)
{
@ -339,8 +339,8 @@ DIRECT_UPDATE_HANDLER( a310_setopbase )
void archimedes_driver_init(running_machine *machine)
{
// address_space *space = machine->device<arm_device>("maincpu")->space(AS_PROGRAM);
// space->set_direct_update_handler(direct_update_delegate_create_static(a310_setopbase, *machine));
// address_space *space = machine->device<arm_device>("maincpu")->space(AS_PROGRAM);
// space->set_direct_update_handler(direct_update_delegate_create_static(a310_setopbase, *machine));
}
static const char *const ioc_regnames[] =
@ -711,15 +711,15 @@ static void vidc_dynamic_res_change(running_machine *machine)
{
/* sanity checks - first pass */
/*
total cycles + border end
*/
total cycles + border end
*/
if(vidc_regs[VIDC_HCR] && vidc_regs[VIDC_HBER] &&
vidc_regs[VIDC_VCR] && vidc_regs[VIDC_VBER])
{
/* sanity checks - second pass */
/*
total cycles >= border end >= border start
*/
total cycles >= border end >= border start
*/
if((vidc_regs[VIDC_HCR] >= vidc_regs[VIDC_HBER]) &&
(vidc_regs[VIDC_HBER] >= vidc_regs[VIDC_HBSR]) &&
(vidc_regs[VIDC_VCR] >= vidc_regs[VIDC_VBER]) &&
@ -810,30 +810,30 @@ WRITE32_HANDLER(archimedes_vidc_w)
{
vidc_stereo_reg[(reg >> 2) & 7] = val & 0x07;
// popmessage("%02x %02x %02x %02x %02x %02x %02x %02x",vidc_stereo_reg[0],vidc_stereo_reg[1],vidc_stereo_reg[2],vidc_stereo_reg[3]
// ,vidc_stereo_reg[4],vidc_stereo_reg[5],vidc_stereo_reg[6],vidc_stereo_reg[7]);
// popmessage("%02x %02x %02x %02x %02x %02x %02x %02x",vidc_stereo_reg[0],vidc_stereo_reg[1],vidc_stereo_reg[2],vidc_stereo_reg[3]
// ,vidc_stereo_reg[4],vidc_stereo_reg[5],vidc_stereo_reg[6],vidc_stereo_reg[7]);
}
else if (reg >= 0x80 && reg <= 0xbc)
{
switch(reg)
{
case VIDC_HCR: vidc_regs[VIDC_HCR] = ((val >> 14)<<1)+1; break;
// case VIDC_HSWR: vidc_regs[VIDC_HSWR] = (val >> 14)+1; break;
case VIDC_HBSR: vidc_regs[VIDC_HBSR] = ((val >> 14)<<1)+1; break;
case VIDC_HCR: vidc_regs[VIDC_HCR] = ((val >> 14)<<1)+1; break;
// case VIDC_HSWR: vidc_regs[VIDC_HSWR] = (val >> 14)+1; break;
case VIDC_HBSR: vidc_regs[VIDC_HBSR] = ((val >> 14)<<1)+1; break;
case VIDC_HDSR: vidc_regs[VIDC_HDSR] = (val >> 14); break;
case VIDC_HDER: vidc_regs[VIDC_HDER] = (val >> 14); break;
case VIDC_HBER: vidc_regs[VIDC_HBER] = ((val >> 14)<<1)+1; break;
// #define VIDC_HCSR 0x98
// #define VIDC_HIR 0x9c
case VIDC_HBER: vidc_regs[VIDC_HBER] = ((val >> 14)<<1)+1; break;
// #define VIDC_HCSR 0x98
// #define VIDC_HIR 0x9c
case VIDC_VCR: vidc_regs[VIDC_VCR] = ((val >> 14)<<1)+1; break;
// #define VIDC_VSWR 0xa4
case VIDC_VBSR: vidc_regs[VIDC_VBSR] = (val >> 14)+1; break;
// #define VIDC_VSWR 0xa4
case VIDC_VBSR: vidc_regs[VIDC_VBSR] = (val >> 14)+1; break;
case VIDC_VDSR: vidc_regs[VIDC_VDSR] = (val >> 14)+1; break;
case VIDC_VDER: vidc_regs[VIDC_VDER] = (val >> 14)+1; break;
case VIDC_VBER: vidc_regs[VIDC_VBER] = (val >> 14)+1; break;
// #define VIDC_VCSR 0xb8
// #define VIDC_VCER 0xbc
// #define VIDC_VCSR 0xb8
// #define VIDC_VCER 0xbc
}
@ -1000,7 +1000,7 @@ WRITE32_HANDLER(archimedes_memc_page_w)
break;
}
// log >>= (12 + memc_pagesize);
// log >>= (12 + memc_pagesize);
// always make sure ROM mode is disconnected when this occurs
memc_latchrom = 0;

View File

@ -1,6 +1,6 @@
/***************************************************************************
Acorn Archimedes VIDC (VIDeo Controller) emulation
Acorn Archimedes VIDC (VIDeo Controller) emulation
***************************************************************************/

View File

@ -195,7 +195,7 @@ WRITE8_HANDLER( flytiger_ctrl_w )
/* bits 1, 2 used but unknown */
/* bit 3 fg palette banking: trash protection? */
/* bit 3 fg palette banking: trash protection? */
flytiger_palette_bank = data & 0x08;
/* bit 4 changes tilemaps priority */

View File

@ -76,7 +76,7 @@ static const pen_t default_colortable[] =
typedef struct _ppu2c0x_state ppu2c0x_state;
struct _ppu2c0x_state
{
address_space *space; /* memory space */
address_space *space; /* memory space */
bitmap_t *bitmap; /* target bitmap */
UINT8 *spriteram; /* sprite ram */
pen_t *colortable; /* color table modified at run time */

View File

@ -223,7 +223,7 @@ static void toaplan1_create_tilemaps(running_machine *machine)
tilemap_set_transparent_pen(state->pf2_tilemap, 0);
tilemap_set_transparent_pen(state->pf3_tilemap, 0);
tilemap_set_transparent_pen(state->pf4_tilemap, 0);
memset(state->empty_tile, 0x00, sizeof(state->empty_tile));
}

View File

@ -99,7 +99,7 @@ VIDEO_START( toaplan2 )
if (state->vdp1 != NULL)
{
state->secondary_render_bitmap = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
state->secondary_render_bitmap = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
state->vdp1->custom_priority_bitmap = state->custom_priority_bitmap;
state->vdp1->displog = &state->displog;
}
@ -345,7 +345,7 @@ VIDEO_UPDATE( toaplan2_dual )
{
gp9001_log_vram(state->vdp0, screen->machine);
// bitmap_fill(bitmap,cliprect,0);
// bitmap_fill(bitmap,cliprect,0);
bitmap_fill(state->custom_priority_bitmap, cliprect, 0);
state->vdp0->gp9001_render_vdp(screen->machine, bitmap, cliprect);
}
@ -360,8 +360,8 @@ VIDEO_UPDATE( toaplan2_mixed )
{
toaplan2_state *state = screen->machine->driver_data<toaplan2_state>();
// bitmap_fill(bitmap,cliprect,0);
// bitmap_fill(gp9001_custom_priority_bitmap, cliprect, 0);
// bitmap_fill(bitmap,cliprect,0);
// bitmap_fill(gp9001_custom_priority_bitmap, cliprect, 0);
if (state->vdp0)
{
@ -379,7 +379,7 @@ VIDEO_UPDATE( toaplan2_mixed )
bitmap_fill(state->custom_priority_bitmap, cliprect, 0);
state->vdp1->gp9001_render_vdp(screen->machine, state->secondary_render_bitmap, cliprect);
}
// key test places in batsugun
// level 2 - the two layers of clouds (will appear under background, or over ships if wrong)
@ -390,7 +390,7 @@ VIDEO_UPDATE( toaplan2_mixed )
//
// when implemented based directly on the PAL equation it doesn't work, however, my own equations roughly based
// on that do.
//
//
if (state->vdp0 && state->vdp1)
{
@ -409,11 +409,11 @@ VIDEO_UPDATE( toaplan2_mixed )
{
UINT16 GPU0_LUTaddr = src_vdp0[x];
UINT16 GPU1_LUTaddr = src_vdp1[x];
// these equations is derived from the PAL, but doesn't seem to work?
int COMPARISON = ((GPU0_LUTaddr & 0x0780) > (GPU1_LUTaddr & 0x0780));
// note: GPU1_LUTaddr & 0x000f - transparency check for vdp1? (gfx are 4bpp, the low 4 bits of the lookup would be the pixel data value)
#if 0
int result =

View File

@ -225,7 +225,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
//
//if (offs < 0x26)
//{
// sy++; /* fix title screen & garbage at the bottom of the screen */
// sy++; /* fix title screen & garbage at the bottom of the screen */
//}

View File

@ -10,4 +10,4 @@
***************************************************************************/
extern const char build_version[];
const char build_version[] = "0.139u1 ("__DATE__")";
const char build_version[] = "0.139u2 ("__DATE__")";