mirror of
https://github.com/holub/mame
synced 2025-05-10 08:12:13 +03:00
Cleanups and version bump.
This commit is contained in:
parent
5248234004
commit
0e672ba6eb
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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) ||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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)); }
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -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; }
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -392,7 +392,7 @@ public:
|
||||
num++;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
T &prepend(T &object)
|
||||
{
|
||||
object.m_next = m_head;
|
||||
|
@ -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();
|
||||
|
@ -507,7 +507,7 @@ TIMER_CALLBACK( mos6526_device::clock_tod_callback )
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
cnt_w
|
||||
cnt_w
|
||||
-------------------------------------------------*/
|
||||
|
||||
void mos6526_device::cnt_w(UINT8 state)
|
||||
|
@ -172,7 +172,7 @@ int ttl74123_device::timer_running()
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
TIMER_CALLBACK( output_callback )
|
||||
TIMER_CALLBACK( output_callback )
|
||||
-------------------------------------------------*/
|
||||
|
||||
TIMER_CALLBACK( ttl74123_device::output_callback )
|
||||
|
@ -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;
|
||||
|
@ -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__ */
|
||||
|
@ -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 )
|
||||
|
@ -69,4 +69,4 @@
|
||||
virtual void device_reset(); \
|
||||
};
|
||||
|
||||
#endif // __DEVHELPR_H__
|
||||
#endif // __DEVHELPR_H__
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -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.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -3,10 +3,10 @@
|
||||
timekpr.h
|
||||
|
||||
Various ST Microelectronics timekeeper SRAM implementations:
|
||||
- M48T02
|
||||
- M48T35
|
||||
- M48T58
|
||||
- MK48T08
|
||||
- M48T02
|
||||
- M48T35
|
||||
- M48T58
|
||||
- MK48T08
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -3,10 +3,10 @@
|
||||
timekpr.h
|
||||
|
||||
Various ST Microelectronics timekeeper SRAM implementations:
|
||||
- M48T02
|
||||
- M48T35
|
||||
- M48T58
|
||||
- MK48T08
|
||||
- M48T02
|
||||
- M48T35
|
||||
- M48T58
|
||||
- MK48T08
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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)
|
||||
|
||||
*/
|
||||
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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__ */
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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++;
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
@ -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)); \
|
||||
|
@ -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); }
|
||||
|
@ -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 */
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 )
|
||||
|
@ -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) )
|
||||
|
@ -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" )
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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) )
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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) )
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -11,7 +11,7 @@ public:
|
||||
UINT8 *spriteram;
|
||||
UINT8 *fgram;
|
||||
UINT8 *bgram;
|
||||
|
||||
|
||||
int sound_cpu_busy;
|
||||
UINT32 bg_tile_offset;
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -10,7 +10,7 @@ public:
|
||||
int sound_status;
|
||||
|
||||
UINT16* pow_fg_videoram;
|
||||
|
||||
|
||||
UINT16 *spriteram;
|
||||
UINT16 *paletteram;
|
||||
int sprite_flip_axis;
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/***************************************************************************
|
||||
|
||||
Acorn Archimedes VIDC (VIDeo Controller) emulation
|
||||
Acorn Archimedes VIDC (VIDeo Controller) emulation
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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 =
|
||||
|
@ -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 */
|
||||
//}
|
||||
|
||||
|
||||
|
@ -10,4 +10,4 @@
|
||||
***************************************************************************/
|
||||
|
||||
extern const char build_version[];
|
||||
const char build_version[] = "0.139u1 ("__DATE__")";
|
||||
const char build_version[] = "0.139u2 ("__DATE__")";
|
||||
|
Loading…
Reference in New Issue
Block a user