mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +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)
|
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_read.set_tag(devconfig, tag);
|
||||||
m_write.m_type = AMH_BANK;
|
m_write.m_type = AMH_BANK;
|
||||||
m_write.set_tag(devconfig, tag);
|
m_write.set_tag(devconfig, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ class address_map_entry
|
|||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
address_map_entry(address_map &map, offs_t start, offs_t end);
|
address_map_entry(address_map &map, offs_t start, offs_t end);
|
||||||
|
|
||||||
// getters
|
// getters
|
||||||
address_map_entry *next() const { return m_next; }
|
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_READ(_read) AM_READ(_read) AM_WRITEONLY
|
||||||
#define AM_RAM_WRITE(_write) AM_READONLY AM_WRITE(_write)
|
#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_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_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)
|
#define AM_BASE_SIZE_GENERIC(_member) AM_BASE_GENERIC(_member) AM_SIZE_GENERIC(_member)
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
dsp56dsm.c
|
dsp56dsm.c
|
||||||
Disassembler for the portable Motorola/Freescale dsp56k emulator.
|
Disassembler for the portable Motorola/Freescale dsp56k emulator.
|
||||||
Written by Andrew Gardner
|
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-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 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 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 "Two external interrupt pins!!!"
|
||||||
- 1-12 Take care of all interrupt priority (IPR) stuff!
|
- 1-12 Take care of all interrupt priority (IPR) stuff!
|
||||||
- 1-19 Memory WAIT states
|
- 1-19 Memory WAIT states
|
||||||
@ -319,7 +319,7 @@ static size_t execute_one_new(dsp56k_core* cpustate)
|
|||||||
|
|
||||||
UINT16 w0 = ROPCODE(ADDRESS(PC));
|
UINT16 w0 = ROPCODE(ADDRESS(PC));
|
||||||
UINT16 w1 = ROPCODE(ADDRESS(PC) + ADDRESS(1));
|
UINT16 w1 = ROPCODE(ADDRESS(PC) + ADDRESS(1));
|
||||||
|
|
||||||
Opcode op(w0, w1);
|
Opcode op(w0, w1);
|
||||||
op.evaluate(cpustate);
|
op.evaluate(cpustate);
|
||||||
PC += op.evalSize(); // Special size function needed to handle jmps, etc.
|
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_CLOCK_DIVIDER: info->i = 2; break;
|
||||||
case CPUINFO_INT_MIN_INSTRUCTION_BYTES: 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_MAX_INSTRUCTION_BYTES: info->i = 4; break;
|
||||||
case CPUINFO_INT_MIN_CYCLES: info->i = 1; // ? break;
|
case CPUINFO_INT_MIN_CYCLES: info->i = 1; // ? break;
|
||||||
case CPUINFO_INT_MAX_CYCLES: info->i = 8; // ? 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_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||||
case DEVINFO_INT_ADDRBUS_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
|
// Factory
|
||||||
Instruction* Instruction::decodeInstruction(const Opcode* opc,
|
Instruction* Instruction::decodeInstruction(const Opcode* opc,
|
||||||
const UINT16 word0,
|
const UINT16 word0,
|
||||||
const UINT16 word1,
|
const UINT16 word1,
|
||||||
bool shifted)
|
bool shifted)
|
||||||
{
|
{
|
||||||
@ -18,7 +18,7 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc,
|
|||||||
w0 = w1;
|
w0 = w1;
|
||||||
w1 = 0x0000;
|
w1 = 0x0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* The very funky case of the XMemoryDataMoveWithShortDisplacement */
|
/* 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 */
|
/* No Parallel Data Move : 0100 1010 .... .... : A-131 */
|
||||||
/* Register to Register Data Move : 0100 IIII .... .... : A-133 */
|
/* Register to Register Data Move : 0100 IIII .... .... : A-133 */
|
||||||
/* Address Register Update : 0011 0zRR .... .... : A-135 */
|
/* Address Register Update : 0011 0zRR .... .... : A-135 */
|
||||||
/* X Memory Data Move : 1mRR HHHW .... .... : A-137 */
|
/* X Memory Data Move : 1mRR HHHW .... .... : A-137 */
|
||||||
/* X Memory Data Move : 0101 HHHW .... .... : A-137 */
|
/* X Memory Data Move : 0101 HHHW .... .... : A-137 */
|
||||||
/* Quote: (32 General parallel move instructions) */
|
/* Quote: (32 General parallel move instructions) */
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
else if (((w0 & 0xff00) == 0x4a00) ||
|
else if (((w0 & 0xff00) == 0x4a00) ||
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
Instruction(const Opcode* oco) : m_valid(false),
|
Instruction(const Opcode* oco) : m_valid(false),
|
||||||
m_oco(oco),
|
m_oco(oco),
|
||||||
m_sizeIncrement(0),
|
m_sizeIncrement(0),
|
||||||
m_source(iINVALID),
|
m_source(iINVALID),
|
||||||
m_destination(iINVALID) { }
|
m_destination(iINVALID) { }
|
||||||
virtual ~Instruction() {}
|
virtual ~Instruction() {}
|
||||||
|
|
||||||
@ -39,9 +39,9 @@ public:
|
|||||||
virtual size_t accumulatorBitsModified() const = 0; // Potentially make this always return ALL (like flags)
|
virtual size_t accumulatorBitsModified() const = 0; // Potentially make this always return ALL (like flags)
|
||||||
virtual size_t flags() const { return 0; }
|
virtual size_t flags() const { return 0; }
|
||||||
|
|
||||||
static Instruction* decodeInstruction(const Opcode* opc,
|
static Instruction* decodeInstruction(const Opcode* opc,
|
||||||
const UINT16 word0,
|
const UINT16 word0,
|
||||||
const UINT16 word1,
|
const UINT16 word1,
|
||||||
bool shifted=false);
|
bool shifted=false);
|
||||||
|
|
||||||
const bool valid() const { return m_valid; }
|
const bool valid() const { return m_valid; }
|
||||||
@ -70,7 +70,7 @@ protected:
|
|||||||
class Abs: public Instruction
|
class Abs: public Instruction
|
||||||
{
|
{
|
||||||
public:
|
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);
|
m_valid = decode(word0, word1);
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -121,7 +121,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_opcode, m_source, m_destination);
|
||||||
// TODO: m_opcode = "add";
|
// TODO: m_opcode = "add";
|
||||||
return true;
|
return true;
|
||||||
@ -175,7 +175,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -213,7 +213,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_immediate;
|
UINT8 m_immediate;
|
||||||
};
|
};
|
||||||
@ -354,7 +354,7 @@ public:
|
|||||||
case BBB_UPPER: m_iVal <<= 8; break;
|
case BBB_UPPER: m_iVal <<= 8; break;
|
||||||
case BBB_MIDDLE: m_iVal <<= 4; break;
|
case BBB_MIDDLE: m_iVal <<= 4; break;
|
||||||
case BBB_LOWER: m_iVal <<= 0; break;
|
case BBB_LOWER: m_iVal <<= 0; break;
|
||||||
|
|
||||||
case BBB_INVALID: return false; break;
|
case BBB_INVALID: return false; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +415,7 @@ public:
|
|||||||
case BBB_UPPER: m_iVal <<= 8; break;
|
case BBB_UPPER: m_iVal <<= 8; break;
|
||||||
case BBB_MIDDLE: m_iVal <<= 4; break;
|
case BBB_MIDDLE: m_iVal <<= 4; break;
|
||||||
case BBB_LOWER: m_iVal <<= 0; break;
|
case BBB_LOWER: m_iVal <<= 0; break;
|
||||||
|
|
||||||
case BBB_INVALID: return false; break;
|
case BBB_INVALID: return false; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,7 +449,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_r;
|
reg_id m_r;
|
||||||
UINT16 m_iVal;
|
UINT16 m_iVal;
|
||||||
@ -481,7 +481,7 @@ public:
|
|||||||
case BBB_UPPER: m_iVal <<= 8; break;
|
case BBB_UPPER: m_iVal <<= 8; break;
|
||||||
case BBB_MIDDLE: m_iVal <<= 4; break;
|
case BBB_MIDDLE: m_iVal <<= 4; break;
|
||||||
case BBB_LOWER: m_iVal <<= 0; break;
|
case BBB_LOWER: m_iVal <<= 0; break;
|
||||||
|
|
||||||
case BBB_INVALID: return false; break;
|
case BBB_INVALID: return false; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,7 +538,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string opcode = "b" + opMnemonicAsString(m_mnem);
|
std::string opcode = "b" + opMnemonicAsString(m_mnem);
|
||||||
// NEW // sprintf(opcode_str, "b.%s", M);
|
// NEW // sprintf(opcode_str, "b.%s", M);
|
||||||
|
|
||||||
char temp[32];
|
char temp[32];
|
||||||
sprintf(temp, ">*+$%x", 2 + m_immediate);
|
sprintf(temp, ">*+$%x", 2 + m_immediate);
|
||||||
// NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (INT16)word1, (INT16)word1);
|
// NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (INT16)word1, (INT16)word1);
|
||||||
@ -547,7 +547,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
op_mnem m_mnem;
|
op_mnem m_mnem;
|
||||||
INT16 m_immediate;
|
INT16 m_immediate;
|
||||||
@ -573,7 +573,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string opcode = "b" + opMnemonicAsString(m_mnem);
|
std::string opcode = "b" + opMnemonicAsString(m_mnem);
|
||||||
// NEW // sprintf(opcode_str, "b.%s", M);
|
// NEW // sprintf(opcode_str, "b.%s", M);
|
||||||
|
|
||||||
char temp[32];
|
char temp[32];
|
||||||
if (m_immediate >= 0) sprintf(temp, "<*+$%x", m_immediate + 1);
|
if (m_immediate >= 0) sprintf(temp, "<*+$%x", m_immediate + 1);
|
||||||
else sprintf(temp, "<*-$%x", 1 - m_immediate - 2);
|
else sprintf(temp, "<*-$%x", 1 - m_immediate - 2);
|
||||||
@ -643,7 +643,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT16 m_immediate;
|
INT16 m_immediate;
|
||||||
};
|
};
|
||||||
@ -673,7 +673,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_immediate;
|
INT8 m_immediate;
|
||||||
};
|
};
|
||||||
@ -760,7 +760,7 @@ public:
|
|||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
size_t flags() { return DASMFLAG_STEP_OVER; }
|
size_t flags() { return DASMFLAG_STEP_OVER; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
op_mnem m_mnem;
|
op_mnem m_mnem;
|
||||||
INT16 m_immediate;
|
INT16 m_immediate;
|
||||||
@ -822,7 +822,7 @@ public:
|
|||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
size_t flags() { return DASMFLAG_STEP_OVER; }
|
size_t flags() { return DASMFLAG_STEP_OVER; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT16 m_immediate;
|
INT16 m_immediate;
|
||||||
};
|
};
|
||||||
@ -926,8 +926,8 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
|
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
|
||||||
in before cmp, so the same decode function can be used. */
|
in before cmp, so the same decode function can be used. */
|
||||||
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
||||||
m_source, m_destination);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -951,8 +951,8 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
|
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
|
||||||
in before cmp, so the same decode function can be used. */
|
in before cmp, so the same decode function can be used. */
|
||||||
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
decode_JJJF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
||||||
m_source, m_destination);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1068,7 +1068,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1093,7 +1093,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_ss_table(BITSn(word0,0x0024), m_mnem);
|
decode_ss_table(BITSn(word0,0x0024), m_mnem);
|
||||||
@ -1103,16 +1103,16 @@ public:
|
|||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
std::string opcode = "dmac" + opMnemonicAsString(m_mnem);
|
std::string opcode = "dmac" + opMnemonicAsString(m_mnem);
|
||||||
|
|
||||||
retString = opcode + " " +
|
retString = opcode + " " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
// NEW // sprintf(opcode_str, "dmac(%s)", A);
|
// NEW // sprintf(opcode_str, "dmac(%s)", A);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
op_mnem m_mnem;
|
op_mnem m_mnem;
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
@ -1139,10 +1139,10 @@ public:
|
|||||||
sprintf(temp, "*+$%x", 2 + m_immediate);
|
sprintf(temp, "*+$%x", 2 + m_immediate);
|
||||||
std::string destination = temp;
|
std::string destination = temp;
|
||||||
// NEW // sprintf(temp, "X:(R%d),$%02x", Rnum, pc + 2 + word1);
|
// NEW // sprintf(temp, "X:(R%d),$%02x", Rnum, pc + 2 + word1);
|
||||||
|
|
||||||
sprintf(temp, "X:(%s)", regIdAsString(m_source).c_str());
|
sprintf(temp, "X:(%s)", regIdAsString(m_source).c_str());
|
||||||
std::string source = temp;
|
std::string source = temp;
|
||||||
|
|
||||||
retString = "do " + source + "," + destination;
|
retString = "do " + source + "," + destination;
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
@ -1179,7 +1179,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_immediate;
|
UINT8 m_immediate;
|
||||||
UINT16 m_displacement;
|
UINT16 m_displacement;
|
||||||
@ -1197,7 +1197,7 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
m_displacement = word1;
|
m_displacement = word1;
|
||||||
|
|
||||||
decode_DDDDD_table(BITSn(word0,0x001f), m_source);
|
decode_DDDDD_table(BITSn(word0,0x001f), m_source);
|
||||||
if (m_source == iSSH) return false;
|
if (m_source == iSSH) return false;
|
||||||
if (m_source == iINVALID) return false;
|
if (m_source == iINVALID) return false;
|
||||||
@ -1213,7 +1213,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT16 m_displacement;
|
UINT16 m_displacement;
|
||||||
};
|
};
|
||||||
@ -1243,7 +1243,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT16 m_displacement;
|
UINT16 m_displacement;
|
||||||
};
|
};
|
||||||
@ -1279,7 +1279,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1346,20 +1346,20 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "imac " +
|
retString = "imac " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
};
|
};
|
||||||
@ -1375,13 +1375,13 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "impy " +
|
retString = "impy " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
@ -1457,7 +1457,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string opcode = "j" + opMnemonicAsString(m_mnem);
|
std::string opcode = "j" + opMnemonicAsString(m_mnem);
|
||||||
// NEW // sprintf(opcode_str, "j.%s", M);
|
// NEW // sprintf(opcode_str, "j.%s", M);
|
||||||
|
|
||||||
char temp[32];
|
char temp[32];
|
||||||
sprintf(temp, ">$%x", m_displacement);
|
sprintf(temp, ">$%x", m_displacement);
|
||||||
// NEW // sprintf(temp, "$%04x", word1);
|
// NEW // sprintf(temp, "$%04x", word1);
|
||||||
@ -1590,7 +1590,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string opcode = "js" + opMnemonicAsString(m_mnem);
|
std::string opcode = "js" + opMnemonicAsString(m_mnem);
|
||||||
// NEW // sprintf(opcode_str, "js.%s", M);
|
// NEW // sprintf(opcode_str, "js.%s", M);
|
||||||
|
|
||||||
char temp[32];
|
char temp[32];
|
||||||
sprintf(temp, ">$%x", m_displacement);
|
sprintf(temp, ">$%x", m_displacement);
|
||||||
// NEW // sprintf(temp, "$%04x", word1);
|
// NEW // sprintf(temp, "$%04x", word1);
|
||||||
@ -1691,7 +1691,7 @@ public:
|
|||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
size_t flags() { return DASMFLAG_STEP_OVER; }
|
size_t flags() { return DASMFLAG_STEP_OVER; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_bAddr;
|
UINT8 m_bAddr;
|
||||||
};
|
};
|
||||||
@ -1747,7 +1747,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_ea;
|
std::string m_ea;
|
||||||
};
|
};
|
||||||
@ -1840,7 +1840,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
||||||
@ -1850,9 +1850,9 @@ public:
|
|||||||
{
|
{
|
||||||
std::string ts = m_sign;
|
std::string ts = m_sign;
|
||||||
if (ts != "-") ts = "";
|
if (ts != "-") ts = "";
|
||||||
retString = "mac " +
|
retString = "mac " +
|
||||||
ts +
|
ts +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
@ -1875,13 +1875,13 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "mac " +
|
retString = "mac " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
@ -1904,13 +1904,13 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "mac " +
|
retString = "mac " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
@ -1934,7 +1934,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
||||||
@ -1944,9 +1944,9 @@ public:
|
|||||||
{
|
{
|
||||||
std::string ts = m_sign;
|
std::string ts = m_sign;
|
||||||
if (ts != "-") ts = "";
|
if (ts != "-") ts = "";
|
||||||
retString = "macr " +
|
retString = "macr " +
|
||||||
ts +
|
ts +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
@ -1969,14 +1969,14 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "macr " +
|
retString = "macr " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
@ -2000,7 +2000,7 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
// Special QQF
|
// 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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_s_table(BITSn(word0,0x0004), m_mnem);
|
decode_s_table(BITSn(word0,0x0004), m_mnem);
|
||||||
@ -2009,9 +2009,9 @@ public:
|
|||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
std::string opcode = "mac" + opMnemonicAsString(m_mnem);
|
std::string opcode = "mac" + opMnemonicAsString(m_mnem);
|
||||||
|
|
||||||
retString = opcode + " " +
|
retString = opcode + " " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
// NEW // sprintf(opcode_str, "mac(%s)", A);
|
// NEW // sprintf(opcode_str, "mac(%s)", A);
|
||||||
}
|
}
|
||||||
@ -2122,7 +2122,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_b;
|
INT8 m_b;
|
||||||
UINT8 m_W;
|
UINT8 m_W;
|
||||||
@ -2161,7 +2161,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_W;
|
INT8 m_W;
|
||||||
reg_id m_SD;
|
reg_id m_SD;
|
||||||
@ -2316,7 +2316,7 @@ public:
|
|||||||
}
|
}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_t;
|
UINT8 m_t;
|
||||||
UINT8 m_W;
|
UINT8 m_W;
|
||||||
@ -2381,7 +2381,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_b;
|
INT8 m_b;
|
||||||
UINT8 m_W;
|
UINT8 m_W;
|
||||||
@ -2411,14 +2411,14 @@ public:
|
|||||||
else sprintf(temp, "#<-$%x", 1 - m_immediate - 1);
|
else sprintf(temp, "#<-$%x", 1 - m_immediate - 1);
|
||||||
// NEW // sprintf(temp, "#$%02x,%s", BITSn(word0,0x00ff), D1);
|
// NEW // sprintf(temp, "#$%02x,%s", BITSn(word0,0x00ff), D1);
|
||||||
|
|
||||||
retString = "move " +
|
retString = "move " +
|
||||||
std::string(temp) + "," + regIdAsString(m_destination);
|
std::string(temp) + "," + regIdAsString(m_destination);
|
||||||
// NEW // sprintf(opcode_str, "move(i)");
|
// NEW // sprintf(opcode_str, "move(i)");
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_immediate;
|
INT8 m_immediate;
|
||||||
};
|
};
|
||||||
@ -2498,7 +2498,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_W;
|
UINT8 m_W;
|
||||||
std::string m_ea;
|
std::string m_ea;
|
||||||
@ -2534,7 +2534,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 2; }
|
size_t size() const { return 2; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_b;
|
INT8 m_b;
|
||||||
UINT8 m_W;
|
UINT8 m_W;
|
||||||
@ -2677,8 +2677,8 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
|
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
|
||||||
but since it's a multiply it doesn't matter */
|
but since it's a multiply it doesn't matter */
|
||||||
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
||||||
m_source, m_source2, m_destination);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
||||||
@ -2688,7 +2688,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string ts = m_sign;
|
std::string ts = m_sign;
|
||||||
if (ts != "-") ts = "";
|
if (ts != "-") ts = "";
|
||||||
retString = "mpy " +
|
retString = "mpy " +
|
||||||
ts +
|
ts +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
@ -2696,7 +2696,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_sign;
|
std::string m_sign;
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
@ -2713,20 +2713,20 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "mpy " +
|
retString = "mpy " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
};
|
};
|
||||||
@ -2742,20 +2742,20 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "mpy " +
|
retString = "mpy " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
};
|
};
|
||||||
@ -2773,8 +2773,8 @@ public:
|
|||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
bool decode(const UINT16 word0, const UINT16 word1)
|
||||||
{
|
{
|
||||||
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
|
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
|
||||||
but since it's a multiply it doesn't matter */
|
but since it's a multiply it doesn't matter */
|
||||||
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
decode_QQQF_table(BITSn(word0,0x07), BITSn(word0,0x08),
|
||||||
m_source, m_source2, m_destination);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
decode_kSign_table(BITSn(word0,0x40), m_sign);
|
||||||
@ -2784,7 +2784,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::string ts = m_sign;
|
std::string ts = m_sign;
|
||||||
if (ts != "-") ts = "";
|
if (ts != "-") ts = "";
|
||||||
retString = "mpyr " +
|
retString = "mpyr " +
|
||||||
ts +
|
ts +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
@ -2792,7 +2792,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_sign;
|
std::string m_sign;
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
@ -2809,20 +2809,20 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "mpyr " +
|
retString = "mpyr " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
};
|
};
|
||||||
@ -2839,7 +2839,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
decode_s_table(BITSn(word0,0x0004), m_mnem);
|
decode_s_table(BITSn(word0,0x0004), m_mnem);
|
||||||
@ -2848,8 +2848,8 @@ public:
|
|||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
std::string opcode = "mpy" + opMnemonicAsString(m_mnem);
|
std::string opcode = "mpy" + opMnemonicAsString(m_mnem);
|
||||||
|
|
||||||
retString = opcode + " " +
|
retString = opcode + " " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
// NEW // sprintf(opcode_str, "mpy(%s)", A);
|
// NEW // sprintf(opcode_str, "mpy(%s)", A);
|
||||||
@ -2857,7 +2857,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
op_mnem m_mnem;
|
op_mnem m_mnem;
|
||||||
reg_id m_source2;
|
reg_id m_source2;
|
||||||
@ -2984,7 +2984,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3023,7 +3023,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT8 m_immediate;
|
UINT8 m_immediate;
|
||||||
};
|
};
|
||||||
@ -3273,7 +3273,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3317,7 +3317,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3341,7 +3341,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_opcode, m_source, m_destination);
|
||||||
|
|
||||||
// TODO // m_opcode = "sub";
|
// TODO // m_opcode = "sub";
|
||||||
@ -3354,7 +3354,7 @@ public:
|
|||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_opcode;
|
std::string m_opcode;
|
||||||
};
|
};
|
||||||
@ -3446,9 +3446,9 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
|
|
||||||
decode_RR_table(BITSn(word0,0x0030), m_destination2);
|
decode_RR_table(BITSn(word0,0x0030), m_destination2);
|
||||||
|
|
||||||
decode_cccc_table(BITSn(word0,0x03c0), m_mnem);
|
decode_cccc_table(BITSn(word0,0x03c0), m_mnem);
|
||||||
@ -3456,25 +3456,25 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
if (m_destination2 != iR0)
|
if (m_destination2 != iR0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
std::string opcode = "t" + opMnemonicAsString(m_mnem);
|
std::string opcode = "t" + opMnemonicAsString(m_mnem);
|
||||||
// NEW // sprintf(opcode_str, "t.%s", M);
|
// NEW // sprintf(opcode_str, "t.%s", M);
|
||||||
|
|
||||||
retString = opcode;
|
retString = opcode;
|
||||||
if (m_source != m_destination)
|
if (m_source != m_destination)
|
||||||
retString += std::string(" ") + regIdAsString(m_source) + "," + regIdAsString(m_destination);
|
retString += std::string(" ") + regIdAsString(m_source) + "," + regIdAsString(m_destination);
|
||||||
|
|
||||||
if (m_destination2 != iR0)
|
if (m_destination2 != iR0)
|
||||||
retString += std::string(" R0,") + regIdAsString(m_destination2);
|
retString += std::string(" R0,") + regIdAsString(m_destination2);
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
op_mnem m_mnem;
|
op_mnem m_mnem;
|
||||||
reg_id m_destination2;
|
reg_id m_destination2;
|
||||||
@ -3490,7 +3490,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3513,7 +3513,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3536,7 +3536,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_destination, m_source);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3564,9 +3564,9 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_destination, m_source);
|
||||||
|
|
||||||
decode_HHH_table(BITSn(word0,0x0007), m_SD);
|
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 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;
|
if (m_SD == m_destination && BITSn(word0,0x0100)) return false;
|
||||||
@ -3582,14 +3582,14 @@ public:
|
|||||||
std::string source2;
|
std::string source2;
|
||||||
std::string destination2;
|
std::string destination2;
|
||||||
assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source2, destination2);
|
assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source2, destination2);
|
||||||
retString = "tfr3 " +
|
retString = "tfr3 " +
|
||||||
regIdAsString(m_source) + "," + regIdAsString(m_destination) + " " +
|
regIdAsString(m_source) + "," + regIdAsString(m_destination) + " " +
|
||||||
source2 + "," + destination2;
|
source2 + "," + destination2;
|
||||||
}
|
}
|
||||||
void evaluate(dsp56k_core* cpustate) {}
|
void evaluate(dsp56k_core* cpustate) {}
|
||||||
size_t size() const { return 1; }
|
size_t size() const { return 1; }
|
||||||
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
size_t accumulatorBitsModified() const { return BM_HIGH | BM_MIDDLE | BM_LOW; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT8 m_W;
|
INT8 m_W;
|
||||||
reg_id m_SD;
|
reg_id m_SD;
|
||||||
@ -3696,13 +3696,13 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
// This hackery amounts to a very strange QQQF table...
|
// This hackery amounts to a very strange QQQF table...
|
||||||
if (m_source == iX0 && m_source2 == iX0) return false;
|
if (m_source == iX0 && m_source2 == iX0) return false;
|
||||||
if (m_source == iX1 && m_source2 == iX0) return false;
|
if (m_source == iX1 && m_source2 == iX0) return false;
|
||||||
|
|
||||||
if (m_source == iY0 && m_source2 == iX1)
|
if (m_source == iY0 && m_source2 == iX1)
|
||||||
{
|
{
|
||||||
m_source = iX1;
|
m_source = iX1;
|
||||||
@ -3717,7 +3717,7 @@ public:
|
|||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "shfl " +
|
retString = "shfl " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
@ -3740,13 +3740,13 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_source2, m_destination);
|
||||||
|
|
||||||
// This hackery amounts to a very strange QQQF table...
|
// This hackery amounts to a very strange QQQF table...
|
||||||
if (m_source == iX0 && m_source2 == iX0) return false;
|
if (m_source == iX0 && m_source2 == iX0) return false;
|
||||||
if (m_source == iX1 && m_source2 == iX0) return false;
|
if (m_source == iX1 && m_source2 == iX0) return false;
|
||||||
|
|
||||||
if (m_source == iY0 && m_source2 == iX1)
|
if (m_source == iY0 && m_source2 == iX1)
|
||||||
{
|
{
|
||||||
m_source = iX1;
|
m_source = iX1;
|
||||||
@ -3761,7 +3761,7 @@ public:
|
|||||||
}
|
}
|
||||||
void disassemble(std::string& retString) const
|
void disassemble(std::string& retString) const
|
||||||
{
|
{
|
||||||
retString = "shfr " +
|
retString = "shfr " +
|
||||||
regIdAsString(m_source) + "," +
|
regIdAsString(m_source) + "," +
|
||||||
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
regIdAsString(m_source2) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
const reg_id& instSource() const;
|
const reg_id& instSource() const;
|
||||||
const reg_id& instDestination() const;
|
const reg_id& instDestination() const;
|
||||||
const size_t instAccumulatorBitsModified() const;
|
const size_t instAccumulatorBitsModified() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Instruction* m_instruction;
|
Instruction* m_instruction;
|
||||||
ParallelMove* m_parallelMove;
|
ParallelMove* m_parallelMove;
|
||||||
|
@ -12,7 +12,7 @@ ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 w
|
|||||||
{
|
{
|
||||||
const UINT16 w0 = word0;
|
const UINT16 w0 = word0;
|
||||||
const UINT16 w1 = word1;
|
const UINT16 w1 = word1;
|
||||||
|
|
||||||
/* Dual X Memory Data Read : 011m mKKK .rr. .... : A-142*/
|
/* Dual X Memory Data Read : 011m mKKK .rr. .... : A-142*/
|
||||||
if ((w0 & 0xe000) == 0x6000)
|
if ((w0 & 0xe000) == 0x6000)
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,7 @@ public:
|
|||||||
std::string ea;
|
std::string ea;
|
||||||
assemble_ea_from_m_table(BITSn(word0,0x4000), regIDAsNum(r), 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);
|
m_source, m_destination);
|
||||||
|
|
||||||
// If the destination of the instruction overlaps with our destination, abort.
|
// If the destination of the instruction overlaps with our destination, abort.
|
||||||
@ -105,7 +105,7 @@ public:
|
|||||||
reg_id SD;
|
reg_id SD;
|
||||||
decode_HHH_table(BITSn(word0,0x0e00), 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);
|
m_source, m_destination);
|
||||||
|
|
||||||
// If the destination of the instruction overlaps with our destination, abort.
|
// If the destination of the instruction overlaps with our destination, abort.
|
||||||
@ -119,7 +119,7 @@ public:
|
|||||||
retString = m_source + "," + m_destination;
|
retString = m_source + "," + m_destination;
|
||||||
}
|
}
|
||||||
void evaluate() {}
|
void evaluate() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_source;
|
std::string m_source;
|
||||||
std::string m_destination;
|
std::string m_destination;
|
||||||
@ -190,7 +190,7 @@ public:
|
|||||||
}
|
}
|
||||||
bool decode(const UINT16 word0, const UINT16 word1)
|
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);
|
m_source, m_destination);
|
||||||
|
|
||||||
if (m_source == iINVALID)
|
if (m_source == iINVALID)
|
||||||
@ -211,7 +211,7 @@ public:
|
|||||||
|
|
||||||
// Don't return a failure, just let everything fall through (nop).
|
// Don't return a failure, just let everything fall through (nop).
|
||||||
//if (m_source == "?" && m_destination == "?")
|
//if (m_source == "?" && m_destination == "?")
|
||||||
// return false;
|
// return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -224,7 +224,7 @@ public:
|
|||||||
retString = regIdAsString(m_source) + "," + regIdAsString(m_destination);
|
retString = regIdAsString(m_source) + "," + regIdAsString(m_destination);
|
||||||
}
|
}
|
||||||
void evaluate() {}
|
void evaluate() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
reg_id m_source;
|
reg_id m_source;
|
||||||
reg_id m_destination;
|
reg_id m_destination;
|
||||||
@ -267,7 +267,7 @@ public:
|
|||||||
retString = pms + " " + pms2;
|
retString = pms + " " + pms2;
|
||||||
}
|
}
|
||||||
void evaluate() {}
|
void evaluate() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string pms; // TODO
|
std::string pms; // TODO
|
||||||
std::string pms2;
|
std::string pms2;
|
||||||
@ -296,7 +296,7 @@ public:
|
|||||||
retString = m_ea;
|
retString = m_ea;
|
||||||
}
|
}
|
||||||
void evaluate() {}
|
void evaluate() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_ea;
|
std::string m_ea;
|
||||||
};
|
};
|
||||||
@ -329,7 +329,7 @@ public:
|
|||||||
retString = m_source + "," + m_destination;
|
retString = m_source + "," + m_destination;
|
||||||
}
|
}
|
||||||
void evaluate() {}
|
void evaluate() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_source;
|
std::string m_source;
|
||||||
std::string m_destination;
|
std::string m_destination;
|
||||||
|
@ -570,9 +570,9 @@ void assemble_D_from_P_table(UINT16 P, UINT16 ppppp, std::string& D)
|
|||||||
|
|
||||||
switch(P)
|
switch(P)
|
||||||
{
|
{
|
||||||
case 0x0:
|
case 0x0:
|
||||||
sprintf(temp, "X:<$%x", ppppp);
|
sprintf(temp, "X:<$%x", ppppp);
|
||||||
// NEW // sprintf(temp, "X:$%02x", ppppp);
|
// NEW // sprintf(temp, "X:$%02x", ppppp);
|
||||||
break;
|
break;
|
||||||
case 0x1:
|
case 0x1:
|
||||||
assemble_address_from_IO_short_address(ppppp, fullAddy);
|
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;
|
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)
|
std::string& source, std::string& destination)
|
||||||
{
|
{
|
||||||
char temp[32];
|
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)
|
std::string& source, std::string& destination)
|
||||||
{
|
{
|
||||||
char temp[32];
|
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)
|
if (bmd == BM_NONE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (r0 == r1)
|
if (r0 == r1)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -720,7 +720,7 @@ UINT16 regValue16(dsp56k_core* cpustate, const reg_id& reg)
|
|||||||
if (reg == iM1) return M1;
|
if (reg == iM1) return M1;
|
||||||
if (reg == iM2) return M2;
|
if (reg == iM2) return M2;
|
||||||
if (reg == iM3) return M3;
|
if (reg == iM3) return M3;
|
||||||
|
|
||||||
mame_printf_debug("The dsp561xx core is requesting a 16 bit value from non-16 bit register!");
|
mame_printf_debug("The dsp561xx core is requesting a 16 bit value from non-16 bit register!");
|
||||||
return 0xdead;
|
return 0xdead;
|
||||||
}
|
}
|
||||||
@ -797,7 +797,7 @@ std::string regIdAsString(const reg_id& regId)
|
|||||||
case iINVALID: return "!!"; break;
|
case iINVALID: return "!!"; break;
|
||||||
case iWEIRD: return "?"; break;
|
case iWEIRD: return "?"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "INVALID_REG_ID";
|
return "INVALID_REG_ID";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -821,13 +821,13 @@ std::string opMnemonicAsString(const op_mnem& mnem)
|
|||||||
case oES: return "es"; break;
|
case oES: return "es"; break;
|
||||||
case oLS: return "ls"; break;
|
case oLS: return "ls"; break;
|
||||||
case oLE: return "le"; break;
|
case oLE: return "le"; break;
|
||||||
|
|
||||||
case oSS: return "ss"; break;
|
case oSS: return "ss"; break;
|
||||||
case oSU: return "su"; break;
|
case oSU: return "su"; break;
|
||||||
case oUU: return "uu"; break;
|
case oUU: return "uu"; break;
|
||||||
case oINVALID: return "!!"; break;
|
case oINVALID: return "!!"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "INVALID_OPCODE_MNEMONIC";
|
return "INVALID_OPCODE_MNEMONIC";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -872,7 +872,7 @@ reg_id stringAsRegID(const std::string& str)
|
|||||||
if (str == "^F") return iFHAT;
|
if (str == "^F") return iFHAT;
|
||||||
if (str == "!!") return iINVALID;
|
if (str == "!!") return iINVALID;
|
||||||
if (str == "?") return iWEIRD;
|
if (str == "?") return iWEIRD;
|
||||||
|
|
||||||
return iINVALID;
|
return iINVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -892,7 +892,7 @@ UINT8 regIDAsNum(const reg_id& regId)
|
|||||||
if (regId == iM1) return 1;
|
if (regId == iM1) return 1;
|
||||||
if (regId == iM2) return 2;
|
if (regId == iM2) return 2;
|
||||||
if (regId == iM3) return 3;
|
if (regId == iM3) return 3;
|
||||||
|
|
||||||
return 255;
|
return 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,15 +16,15 @@ namespace DSP56K
|
|||||||
enum bitsModified {BM_NONE = 0x0, BM_LOW = 0x1, BM_MIDDLE = 0x2, BM_HIGH = 0x4};
|
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 bfShift {BBB_UPPER, BBB_MIDDLE, BBB_LOWER, BBB_INVALID};
|
||||||
enum reg_id {iX, iX0, iX1,
|
enum reg_id {iX, iX0, iX1,
|
||||||
iY, iY0, iY1,
|
iY, iY0, iY1,
|
||||||
iA, iA0, iA1, iA2,
|
iA, iA0, iA1, iA2,
|
||||||
iB, iB0, iB1, iB2,
|
iB, iB0, iB1, iB2,
|
||||||
iR0, iR1, iR2, iR3,
|
iR0, iR1, iR2, iR3,
|
||||||
iN0, iN1, iN2, iN3,
|
iN0, iN1, iN2, iN3,
|
||||||
iM0, iM1, iM2, iM3,
|
iM0, iM1, iM2, iM3,
|
||||||
iLC, iSR, iOMR, iSP, iSSH, iSSL, iLA, iMR, iCCR,
|
iLC, iSR, iOMR, iSP, iSSH, iSSL, iLA, iMR, iCCR,
|
||||||
iF, iFHAT,
|
iF, iFHAT,
|
||||||
iINVALID, iWEIRD};
|
iINVALID, iWEIRD};
|
||||||
|
|
||||||
enum op_mnem {oCC, oGE, oNE, oPL,
|
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).
|
CFX-9850 (and maybe some other things too).
|
||||||
|
|
||||||
This CPU core is based on the information provided by Martin Poupe.
|
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->temp1[i] = cpustate->temp2[i];
|
||||||
cpustate->temp2[i] = v;
|
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_IP: cpustate->ip = info->i; break;
|
||||||
case CPUINFO_INT_REGISTER + HCD62121_SP: cpustate->sp = 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_R00: break;
|
||||||
// case CPUINFO_INT_REGISTER + HCD62121_R02: 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_SS: info->i = cpustate->sseg; break;
|
||||||
case CPUINFO_INT_REGISTER + HCD62121_DSIZE: info->i = cpustate->dsize; 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_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 --- */
|
/* --- 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;
|
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 i;
|
||||||
int size = datasize( cpustate, op );
|
int size = datasize( cpustate, op );
|
||||||
UINT8 reg = read_op( cpustate );
|
UINT8 reg = read_op( cpustate );
|
||||||
|
|
||||||
for( i = 0; i < size; i++ )
|
for( i = 0; i < size; i++ )
|
||||||
{
|
{
|
||||||
cpustate->reg[(reg + i) & 0x7f] = read_op( cpustate );
|
cpustate->reg[(reg + i) & 0x7f] = read_op( cpustate );
|
||||||
|
@ -956,7 +956,7 @@ static CPU_RESET( m6800 )
|
|||||||
cpustate->txstate = M6800_TX_STATE_INIT;
|
cpustate->txstate = M6800_TX_STATE_INIT;
|
||||||
cpustate->txbits = cpustate->rxbits = 0;
|
cpustate->txbits = cpustate->rxbits = 0;
|
||||||
cpustate->trcsr_read = 0;
|
cpustate->trcsr_read = 0;
|
||||||
|
|
||||||
cpustate->cc = 0xc0;
|
cpustate->cc = 0xc0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -985,7 +985,7 @@ void m68k_memory_interface::init16(address_space &space)
|
|||||||
m_direct = &space.direct();
|
m_direct = &space.direct();
|
||||||
m_cpustate = get_safe_token(&space.device());
|
m_cpustate = get_safe_token(&space.device());
|
||||||
opcode_xor = 0;
|
opcode_xor = 0;
|
||||||
|
|
||||||
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, simple_read_immediate_16), *this);
|
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);
|
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);
|
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_direct = &space.direct();
|
||||||
m_cpustate = get_safe_token(&space.device());
|
m_cpustate = get_safe_token(&space.device());
|
||||||
opcode_xor = WORD_XOR_BE(0);
|
opcode_xor = WORD_XOR_BE(0);
|
||||||
|
|
||||||
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, read_immediate_16), *this);
|
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);
|
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);
|
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_direct = &space.direct();
|
||||||
m_cpustate = get_safe_token(&space.device());
|
m_cpustate = get_safe_token(&space.device());
|
||||||
opcode_xor = WORD_XOR_BE(0);
|
opcode_xor = WORD_XOR_BE(0);
|
||||||
|
|
||||||
readimm16 = m68k_readimm16_delegate(m68k_readimm16_proto_delegate::create_member(m68k_memory_interface, read_immediate_16_mmu), *this);
|
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);
|
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);
|
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);
|
m68_state->ireg = ROP(PCD);
|
||||||
PC++;
|
PC++;
|
||||||
(*m6809_main[m68_state->ireg])(m68_state);
|
(*m6809_main[m68_state->ireg])(m68_state);
|
||||||
m68_state->icount -= cycles1[m68_state->ireg];
|
m68_state->icount -= cycles1[m68_state->ireg];
|
||||||
|
|
||||||
} while( m68_state->icount > 0 );
|
} while( m68_state->icount > 0 );
|
||||||
|
@ -165,8 +165,8 @@ static CPU_EXIT( sm8500 )
|
|||||||
INLINE void sm8500_do_interrupt(sm8500_state *cpustate, UINT16 vector) {
|
INLINE void sm8500_do_interrupt(sm8500_state *cpustate, UINT16 vector) {
|
||||||
/* Get regs from ram */
|
/* Get regs from ram */
|
||||||
sm8500_get_sp(cpustate);
|
sm8500_get_sp(cpustate);
|
||||||
cpustate->SYS = cpustate->program->read_byte(0x19);
|
cpustate->SYS = cpustate->program->read_byte(0x19);
|
||||||
cpustate->PS1 = cpustate->program->read_byte(0x1f);
|
cpustate->PS1 = cpustate->program->read_byte(0x1f);
|
||||||
/* Push PC */
|
/* Push PC */
|
||||||
PUSH_BYTE( cpustate->PC & 0xFF );
|
PUSH_BYTE( cpustate->PC & 0xFF );
|
||||||
PUSH_BYTE( cpustate->PC >> 8 );
|
PUSH_BYTE( cpustate->PC >> 8 );
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
#define OpRead32(s, a) ((s)->direct->read_decrypted_dword(a))
|
#define OpRead32(s, a) ((s)->direct->read_decrypted_dword(a))
|
||||||
#else
|
#else
|
||||||
#define OpRead8(s, a) ((s)->direct->read_decrypted_byte((a) ^ (s)->fetch_xor))
|
#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))
|
((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)+1) ^ (s)->fetch_xor) << 8) | \
|
||||||
((s)->direct->read_decrypted_byte(((a)+2) ^ (s)->fetch_xor) << 16) | \
|
((s)->direct->read_decrypted_byte(((a)+2) ^ (s)->fetch_xor) << 16) | \
|
||||||
((s)->direct->read_decrypted_byte(((a)+3) ^ (s)->fetch_xor) << 24))
|
((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
|
// otherwise, it is the byte index into the vtable where the actual function lives
|
||||||
UINT8 *vtable_base = *reinterpret_cast<UINT8 **>(object);
|
UINT8 *vtable_base = *reinterpret_cast<UINT8 **>(object);
|
||||||
return *reinterpret_cast<delegate_generic_function *>(vtable_base + mfp.u.vtable_index - 1);
|
return *reinterpret_cast<delegate_generic_function *>(vtable_base + mfp.u.vtable_index - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,68 +37,68 @@
|
|||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
There are many implementations of delegate-like functionality for
|
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.
|
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:
|
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:
|
|
||||||
|
|
||||||
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
|
* Existing static functions need to be bound with an additional
|
||||||
for each target function. The static function takes the first
|
pointer parameter as the first argument. All existing
|
||||||
parameter, uses it as the object pointer, and calls through the
|
implementations that allow static function binding assume the
|
||||||
member function. For static functions, the stub is compatible with
|
same signature as the member functions.
|
||||||
the signature of a static function, so we just set the stub directly.
|
|
||||||
|
* We must be able to bind the function separately from the
|
||||||
Pros:
|
object. This is to allow configurations to bind functions
|
||||||
* should work with any modern compiler
|
before the objects are created.
|
||||||
* static bindings are just as fast as direct calls
|
|
||||||
|
Thus, the implementations below are based on existing works but are
|
||||||
Cons:
|
really a new implementation that is specific to MAME.
|
||||||
* lots of little stub functions generated
|
|
||||||
* double-hops on member function calls means more overhead
|
--------------------------------------------------------------------
|
||||||
* calling through stub functions repackages parameters
|
|
||||||
|
The "compatible" version of delegates is based on an implementation
|
||||||
--------------------------------------------------------------------
|
from Sergey Ryazanov, found here:
|
||||||
|
|
||||||
The "internal" version of delegates makes use of the internal
|
http://www.codeproject.com/KB/cpp/ImpossiblyFastCppDelegate.aspx
|
||||||
structure of member function pointers in order to convert them at
|
|
||||||
binding time into simple static function pointers. This only works
|
These delegates essentially generate a templated static stub function
|
||||||
on platforms where object->func(p1, p2) is equivalent in calling
|
for each target function. The static function takes the first
|
||||||
convention to func(object, p1, p2).
|
parameter, uses it as the object pointer, and calls through the
|
||||||
|
member function. For static functions, the stub is compatible with
|
||||||
Most of the information on how this works comes from Don Clugston
|
the signature of a static function, so we just set the stub directly.
|
||||||
in this article:
|
|
||||||
|
Pros:
|
||||||
http://www.codeproject.com/KB/cpp/FastDelegate.aspx
|
* should work with any modern compiler
|
||||||
|
* static bindings are just as fast as direct calls
|
||||||
Pros:
|
|
||||||
* as fast as a standard function call in static and member cases
|
Cons:
|
||||||
* no stub functions or double-hops needed
|
* lots of little stub functions generated
|
||||||
|
* double-hops on member function calls means more overhead
|
||||||
Cons:
|
* calling through stub functions repackages parameters
|
||||||
* requires internal knowledge of the member function pointer
|
|
||||||
* only works for GCC (for now; MSVC info is also readily available)
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
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
|
// 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_name(_class, _member, _name) _create_member<_class, &_class::_member>(_name)
|
||||||
#define create_member(_class, _member) _create_member<_class, &_class::_member>(#_class "::" #_member)
|
#define create_member(_class, _member) _create_member<_class, &_class::_member>(#_class "::" #_member)
|
||||||
#define create_static(_class, _func) _crate_static<_class, &_func>(#_func)
|
#define create_static(_class, _func) _crate_static<_class, &_func>(#_func)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ class delegate_generic_class;
|
|||||||
|
|
||||||
// ======================> bindable_object
|
// ======================> 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
|
// hierarchy which intends to do late binding
|
||||||
class bindable_object
|
class bindable_object
|
||||||
{
|
{
|
||||||
@ -157,8 +157,8 @@ public:
|
|||||||
virtual ~bindable_object();
|
virtual ~bindable_object();
|
||||||
};
|
};
|
||||||
|
|
||||||
// define a deferred cast helper function that does a proper dynamic_cast
|
// 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
|
// from a bindable_object to the target class, and returns a delegate_generic_class
|
||||||
template<class _TargetClass>
|
template<class _TargetClass>
|
||||||
static delegate_generic_class *deferred_cast(bindable_object &object)
|
static delegate_generic_class *deferred_cast(bindable_object &object)
|
||||||
{
|
{
|
||||||
@ -190,7 +190,7 @@ public:
|
|||||||
const char *name() const { return m_name; }
|
const char *name() const { return m_name; }
|
||||||
|
|
||||||
protected:
|
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
|
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)
|
proto_delegate_0param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
|
||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function) { }
|
m_function(function) { }
|
||||||
|
|
||||||
proto_delegate_0param(const proto_delegate_0param &proto)
|
proto_delegate_0param(const proto_delegate_0param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function) { }
|
m_function(proto.m_function) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
|
||||||
static proto_delegate_0param _create_member(const char *name = NULL)
|
static proto_delegate_0param _create_member(const char *name = NULL)
|
||||||
{
|
{
|
||||||
return proto_delegate_0param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_0param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
|
||||||
static proto_delegate_0param _create_static(const char *name = NULL)
|
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 delegate_base::m_caster;
|
||||||
using proto_base::m_function;
|
using proto_base::m_function;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// constructors
|
// constructors
|
||||||
delegate_0param()
|
delegate_0param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_0param(proto_base proto)
|
delegate_0param(proto_base proto)
|
||||||
: proto_delegate_0param<_ReturnType>(proto),
|
: proto_delegate_0param<_ReturnType>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_0param(proto_base proto, bindable_object &object)
|
delegate_0param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_0param<_ReturnType>(proto),
|
: proto_delegate_0param<_ReturnType>(proto),
|
||||||
m_object((*m_caster)(object)) { }
|
m_object((*m_caster)(object)) { }
|
||||||
|
|
||||||
// bind the actual object
|
// bind the actual object
|
||||||
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()() const { return (*m_function)(m_object); }
|
_ReturnType operator()() const { return (*m_function)(m_object); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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)
|
proto_delegate_1param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
|
||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function) { }
|
m_function(function) { }
|
||||||
|
|
||||||
proto_delegate_1param(const proto_delegate_1param &proto)
|
proto_delegate_1param(const proto_delegate_1param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function) { }
|
m_function(proto.m_function) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
|
||||||
static proto_delegate_1param _create_member(const char *name = NULL)
|
static proto_delegate_1param _create_member(const char *name = NULL)
|
||||||
{
|
{
|
||||||
return proto_delegate_1param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_1param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
|
||||||
static proto_delegate_1param _create_static(const char *name = NULL)
|
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>
|
class delegate_1param : public proto_delegate_1param<_ReturnType, _P1Type>
|
||||||
{
|
{
|
||||||
typedef proto_delegate_1param<_ReturnType, _P1Type> proto_base;
|
typedef proto_delegate_1param<_ReturnType, _P1Type> proto_base;
|
||||||
|
|
||||||
using delegate_base::m_caster;
|
using delegate_base::m_caster;
|
||||||
using proto_base::m_function;
|
using proto_base::m_function;
|
||||||
|
|
||||||
@ -361,21 +361,21 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_1param()
|
delegate_1param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto)
|
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto)
|
||||||
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto, bindable_object &object)
|
delegate_1param(proto_delegate_1param<_ReturnType, _P1Type> proto, bindable_object &object)
|
||||||
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
||||||
m_object((*m_caster)(object)) { }
|
m_object((*m_caster)(object)) { }
|
||||||
|
|
||||||
// bind the actual object
|
// bind the actual object
|
||||||
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
|
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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)
|
proto_delegate_2param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
|
||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function) { }
|
m_function(function) { }
|
||||||
|
|
||||||
proto_delegate_2param(const proto_delegate_2param &proto)
|
proto_delegate_2param(const proto_delegate_2param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function) { }
|
m_function(proto.m_function) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
|
||||||
static proto_delegate_2param _create_member(const char *name = NULL)
|
static proto_delegate_2param _create_member(const char *name = NULL)
|
||||||
{
|
{
|
||||||
return proto_delegate_2param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_2param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
|
||||||
static proto_delegate_2param _create_static(const char *name = NULL)
|
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>
|
class delegate_2param : public proto_delegate_2param<_ReturnType, _P1Type, _P2Type>
|
||||||
{
|
{
|
||||||
typedef proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto_base;
|
typedef proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto_base;
|
||||||
|
|
||||||
using delegate_base::m_caster;
|
using delegate_base::m_caster;
|
||||||
using proto_base::m_function;
|
using proto_base::m_function;
|
||||||
|
|
||||||
@ -453,21 +453,21 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_2param()
|
delegate_2param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto)
|
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto)
|
||||||
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto, bindable_object &object)
|
delegate_2param(proto_delegate_2param<_ReturnType, _P1Type, _P2Type> proto, bindable_object &object)
|
||||||
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
||||||
m_object((*m_caster)(object)) { }
|
m_object((*m_caster)(object)) { }
|
||||||
|
|
||||||
// bind the actual object
|
// bind the actual object
|
||||||
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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)
|
proto_delegate_3param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
|
||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function) { }
|
m_function(function) { }
|
||||||
|
|
||||||
proto_delegate_3param(const proto_delegate_3param &proto)
|
proto_delegate_3param(const proto_delegate_3param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function) { }
|
m_function(proto.m_function) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
|
||||||
static proto_delegate_3param _create_member(const char *name = NULL)
|
static proto_delegate_3param _create_member(const char *name = NULL)
|
||||||
{
|
{
|
||||||
return proto_delegate_3param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_3param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
|
||||||
static proto_delegate_3param _create_static(const char *name = NULL)
|
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>
|
class delegate_3param : public proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>
|
||||||
{
|
{
|
||||||
typedef proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto_base;
|
typedef proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto_base;
|
||||||
|
|
||||||
using delegate_base::m_caster;
|
using delegate_base::m_caster;
|
||||||
using proto_base::m_function;
|
using proto_base::m_function;
|
||||||
|
|
||||||
@ -545,21 +545,21 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_3param()
|
delegate_3param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto)
|
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto)
|
||||||
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto, bindable_object &object)
|
delegate_3param(proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type> proto, bindable_object &object)
|
||||||
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
||||||
m_object((*m_caster)(object)) { }
|
m_object((*m_caster)(object)) { }
|
||||||
|
|
||||||
// bind the actual object
|
// bind the actual object
|
||||||
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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)
|
proto_delegate_4param(static_func function = NULL, deferred_cast_func caster = NULL, const char *name = NULL)
|
||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function) { }
|
m_function(function) { }
|
||||||
|
|
||||||
proto_delegate_4param(const proto_delegate_4param &proto)
|
proto_delegate_4param(const proto_delegate_4param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function) { }
|
m_function(proto.m_function) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
|
||||||
static proto_delegate_4param _create_member(const char *name = NULL)
|
static proto_delegate_4param _create_member(const char *name = NULL)
|
||||||
{
|
{
|
||||||
return proto_delegate_4param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_4param(&method_stub<_FunctionClass, _FunctionPtr>, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
|
||||||
static proto_delegate_4param _create_static(const char *name = NULL)
|
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>
|
class delegate_4param : public proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>
|
||||||
{
|
{
|
||||||
typedef proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto_base;
|
typedef proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto_base;
|
||||||
|
|
||||||
using delegate_base::m_caster;
|
using delegate_base::m_caster;
|
||||||
using proto_base::m_function;
|
using proto_base::m_function;
|
||||||
|
|
||||||
@ -637,21 +637,21 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_4param()
|
delegate_4param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto)
|
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto)
|
||||||
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto, bindable_object &object)
|
delegate_4param(proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type> proto, bindable_object &object)
|
||||||
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
||||||
m_object((*m_caster)(object)) { }
|
m_object((*m_caster)(object)) { }
|
||||||
|
|
||||||
// bind the actual object
|
// bind the actual object
|
||||||
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
void bind(bindable_object &object) { m_object = (*m_caster)(object); }
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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:
|
union // first item can be one of two things:
|
||||||
{
|
{
|
||||||
delegate_generic_function funcptr; // if even, it's a pointer to the function
|
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;
|
} u;
|
||||||
int this_delta; // delta to apply to the 'this' pointer
|
int this_delta; // delta to apply to the 'this' pointer
|
||||||
};
|
};
|
||||||
@ -707,12 +707,12 @@ public:
|
|||||||
: delegate_base(caster, name),
|
: delegate_base(caster, name),
|
||||||
m_function(function),
|
m_function(function),
|
||||||
m_rawfunction(mfp) { }
|
m_rawfunction(mfp) { }
|
||||||
|
|
||||||
proto_delegate_0param(const proto_delegate_0param &proto)
|
proto_delegate_0param(const proto_delegate_0param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function),
|
m_function(proto.m_function),
|
||||||
m_rawfunction(proto.m_rawfunction) { }
|
m_rawfunction(proto.m_rawfunction) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)()>
|
||||||
static proto_delegate_0param _create_member(const char *name = NULL)
|
static proto_delegate_0param _create_member(const char *name = NULL)
|
||||||
@ -725,19 +725,19 @@ public:
|
|||||||
tempunion.mfp = _FunctionPtr;
|
tempunion.mfp = _FunctionPtr;
|
||||||
return proto_delegate_0param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_0param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *)>
|
||||||
static proto_delegate_0param _create_static(const char *name = NULL)
|
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);
|
return proto_delegate_0param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// equality testing
|
// equality testing
|
||||||
bool operator==(const proto_delegate_0param &rhs) const
|
bool operator==(const proto_delegate_0param &rhs) const
|
||||||
{
|
{
|
||||||
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
||||||
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
||||||
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -764,11 +764,11 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_0param()
|
delegate_0param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_0param(proto_base proto)
|
delegate_0param(proto_base proto)
|
||||||
: proto_delegate_0param<_ReturnType>(proto),
|
: proto_delegate_0param<_ReturnType>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_0param(proto_base proto, bindable_object &object)
|
delegate_0param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_0param<_ReturnType>(proto),
|
: proto_delegate_0param<_ReturnType>(proto),
|
||||||
m_object(NULL) { bind(object); }
|
m_object(NULL) { bind(object); }
|
||||||
@ -780,10 +780,10 @@ public:
|
|||||||
if (m_rawfunction.u.funcptr != NULL)
|
if (m_rawfunction.u.funcptr != NULL)
|
||||||
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()() const { return (*m_function)(m_object); }
|
_ReturnType operator()() const { return (*m_function)(m_object); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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),
|
: delegate_base(caster, name),
|
||||||
m_function(function),
|
m_function(function),
|
||||||
m_rawfunction(mfp) { }
|
m_rawfunction(mfp) { }
|
||||||
|
|
||||||
proto_delegate_1param(const proto_delegate_1param &proto)
|
proto_delegate_1param(const proto_delegate_1param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function),
|
m_function(proto.m_function),
|
||||||
m_rawfunction(proto.m_rawfunction) { }
|
m_rawfunction(proto.m_rawfunction) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type)>
|
||||||
static proto_delegate_1param _create_member(const char *name = NULL)
|
static proto_delegate_1param _create_member(const char *name = NULL)
|
||||||
@ -827,19 +827,19 @@ public:
|
|||||||
tempunion.mfp = _FunctionPtr;
|
tempunion.mfp = _FunctionPtr;
|
||||||
return proto_delegate_1param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_1param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type)>
|
||||||
static proto_delegate_1param _create_static(const char *name = NULL)
|
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);
|
return proto_delegate_1param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// equality testing
|
// equality testing
|
||||||
bool operator==(const proto_delegate_1param &rhs) const
|
bool operator==(const proto_delegate_1param &rhs) const
|
||||||
{
|
{
|
||||||
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
||||||
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
||||||
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,11 +866,11 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_1param()
|
delegate_1param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_1param(proto_base proto)
|
delegate_1param(proto_base proto)
|
||||||
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_1param(proto_base proto, bindable_object &object)
|
delegate_1param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
: proto_delegate_1param<_ReturnType, _P1Type>(proto),
|
||||||
m_object(NULL) { bind(object); }
|
m_object(NULL) { bind(object); }
|
||||||
@ -882,10 +882,10 @@ public:
|
|||||||
if (m_rawfunction.u.funcptr != NULL)
|
if (m_rawfunction.u.funcptr != NULL)
|
||||||
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
|
_ReturnType operator()(_P1Type p1) const { return (*m_function)(m_object, p1); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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),
|
: delegate_base(caster, name),
|
||||||
m_function(function),
|
m_function(function),
|
||||||
m_rawfunction(mfp) { }
|
m_rawfunction(mfp) { }
|
||||||
|
|
||||||
proto_delegate_2param(const proto_delegate_2param &proto)
|
proto_delegate_2param(const proto_delegate_2param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function),
|
m_function(proto.m_function),
|
||||||
m_rawfunction(proto.m_rawfunction) { }
|
m_rawfunction(proto.m_rawfunction) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type)>
|
||||||
static proto_delegate_2param _create_member(const char *name = NULL)
|
static proto_delegate_2param _create_member(const char *name = NULL)
|
||||||
@ -929,19 +929,19 @@ public:
|
|||||||
tempunion.mfp = _FunctionPtr;
|
tempunion.mfp = _FunctionPtr;
|
||||||
return proto_delegate_2param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_2param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type)>
|
||||||
static proto_delegate_2param _create_static(const char *name = NULL)
|
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);
|
return proto_delegate_2param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// equality testing
|
// equality testing
|
||||||
bool operator==(const proto_delegate_2param &rhs) const
|
bool operator==(const proto_delegate_2param &rhs) const
|
||||||
{
|
{
|
||||||
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
||||||
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
||||||
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,11 +968,11 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_2param()
|
delegate_2param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_2param(proto_base proto)
|
delegate_2param(proto_base proto)
|
||||||
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_2param(proto_base proto, bindable_object &object)
|
delegate_2param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
: proto_delegate_2param<_ReturnType, _P1Type, _P2Type>(proto),
|
||||||
m_object(NULL) { bind(object); }
|
m_object(NULL) { bind(object); }
|
||||||
@ -984,10 +984,10 @@ public:
|
|||||||
if (m_rawfunction.u.funcptr != NULL)
|
if (m_rawfunction.u.funcptr != NULL)
|
||||||
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2) const { return (*m_function)(m_object, p1, p2); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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),
|
: delegate_base(caster, name),
|
||||||
m_function(function),
|
m_function(function),
|
||||||
m_rawfunction(mfp) { }
|
m_rawfunction(mfp) { }
|
||||||
|
|
||||||
proto_delegate_3param(const proto_delegate_3param &proto)
|
proto_delegate_3param(const proto_delegate_3param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function),
|
m_function(proto.m_function),
|
||||||
m_rawfunction(proto.m_rawfunction) { }
|
m_rawfunction(proto.m_rawfunction) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type)>
|
||||||
static proto_delegate_3param _create_member(const char *name = NULL)
|
static proto_delegate_3param _create_member(const char *name = NULL)
|
||||||
@ -1031,19 +1031,19 @@ public:
|
|||||||
tempunion.mfp = _FunctionPtr;
|
tempunion.mfp = _FunctionPtr;
|
||||||
return proto_delegate_3param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_3param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type)>
|
||||||
static proto_delegate_3param _create_static(const char *name = NULL)
|
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);
|
return proto_delegate_3param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// equality testing
|
// equality testing
|
||||||
bool operator==(const proto_delegate_3param &rhs) const
|
bool operator==(const proto_delegate_3param &rhs) const
|
||||||
{
|
{
|
||||||
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
||||||
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
||||||
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1070,11 +1070,11 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_3param()
|
delegate_3param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_3param(proto_base proto)
|
delegate_3param(proto_base proto)
|
||||||
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_3param(proto_base proto, bindable_object &object)
|
delegate_3param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
: proto_delegate_3param<_ReturnType, _P1Type, _P2Type, _P3Type>(proto),
|
||||||
m_object(NULL) { bind(object); }
|
m_object(NULL) { bind(object); }
|
||||||
@ -1086,10 +1086,10 @@ public:
|
|||||||
if (m_rawfunction.u.funcptr != NULL)
|
if (m_rawfunction.u.funcptr != NULL)
|
||||||
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3) const { return (*m_function)(m_object, p1, p2, p3); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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),
|
: delegate_base(caster, name),
|
||||||
m_function(function),
|
m_function(function),
|
||||||
m_rawfunction(mfp) { }
|
m_rawfunction(mfp) { }
|
||||||
|
|
||||||
proto_delegate_4param(const proto_delegate_4param &proto)
|
proto_delegate_4param(const proto_delegate_4param &proto)
|
||||||
: delegate_base(proto.m_caster, proto.m_name),
|
: delegate_base(proto.m_caster, proto.m_name),
|
||||||
m_function(proto.m_function),
|
m_function(proto.m_function),
|
||||||
m_rawfunction(proto.m_rawfunction) { }
|
m_rawfunction(proto.m_rawfunction) { }
|
||||||
|
|
||||||
// create a member function proto-delegate
|
// create a member function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
|
template<class _FunctionClass, _ReturnType (_FunctionClass::*_FunctionPtr)(_P1Type, _P2Type, _P3Type, _P4Type)>
|
||||||
static proto_delegate_4param _create_member(const char *name = NULL)
|
static proto_delegate_4param _create_member(const char *name = NULL)
|
||||||
@ -1133,19 +1133,19 @@ public:
|
|||||||
tempunion.mfp = _FunctionPtr;
|
tempunion.mfp = _FunctionPtr;
|
||||||
return proto_delegate_4param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
return proto_delegate_4param(tempunion.internal, NULL, &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a static function proto-delegate
|
// create a static function proto-delegate
|
||||||
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
|
template<class _FunctionClass, _ReturnType (*_FunctionPtr)(_FunctionClass *, _P1Type, _P2Type, _P3Type, _P4Type)>
|
||||||
static proto_delegate_4param _create_static(const char *name = NULL)
|
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);
|
return proto_delegate_4param(delegate_gcc_mfp_null, reinterpret_cast<static_func>(_FunctionPtr), &deferred_cast<_FunctionClass>, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// equality testing
|
// equality testing
|
||||||
bool operator==(const proto_delegate_4param &rhs) const
|
bool operator==(const proto_delegate_4param &rhs) const
|
||||||
{
|
{
|
||||||
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
return (m_function == rhs.m_function && m_caster == rhs.m_caster &&
|
||||||
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
m_rawfunction.u.funcptr == rhs.m_rawfunction.u.funcptr &&
|
||||||
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
m_rawfunction.this_delta == rhs.m_rawfunction.this_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1172,11 +1172,11 @@ public:
|
|||||||
// constructors
|
// constructors
|
||||||
delegate_4param()
|
delegate_4param()
|
||||||
: m_object(NULL) { }
|
: m_object(NULL) { }
|
||||||
|
|
||||||
delegate_4param(proto_base proto)
|
delegate_4param(proto_base proto)
|
||||||
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
||||||
m_object(NULL) { }
|
m_object(NULL) { }
|
||||||
|
|
||||||
delegate_4param(proto_base proto, bindable_object &object)
|
delegate_4param(proto_base proto, bindable_object &object)
|
||||||
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
: proto_delegate_4param<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type>(proto),
|
||||||
m_object(NULL) { bind(object); }
|
m_object(NULL) { bind(object); }
|
||||||
@ -1188,10 +1188,10 @@ public:
|
|||||||
if (m_rawfunction.u.funcptr != NULL)
|
if (m_rawfunction.u.funcptr != NULL)
|
||||||
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
m_function = reinterpret_cast<static_func>(delegate_convert_raw(m_object, m_rawfunction));
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the function
|
// call the function
|
||||||
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
|
_ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4) const { return (*m_function)(m_object, p1, p2, p3, p4); }
|
||||||
|
|
||||||
// testing
|
// testing
|
||||||
bool has_object() const { return (m_object != NULL); }
|
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)); }
|
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
|
// machine_config - return a pointer to a machine
|
||||||
// config constructor describing sub-devices for
|
// config constructor describing sub-devices for
|
||||||
// this device
|
// this device
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ public:
|
|||||||
// methods that wrap both interface-level and device-level behavior
|
// methods that wrap both interface-level and device-level behavior
|
||||||
void config_complete();
|
void config_complete();
|
||||||
bool validity_check(const game_driver &driver) const;
|
bool validity_check(const game_driver &driver) const;
|
||||||
|
|
||||||
// configuration helpers
|
// configuration helpers
|
||||||
static void static_set_clock(device_config *device, UINT32 clock) { device->m_clock = clock; }
|
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; }
|
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
|
// to set a floating-point value in the inline
|
||||||
// configuration
|
// 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
|
// 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
|
// 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
|
// 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
|
// 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
|
// 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
|
// reset all existing routes to the device
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ public:
|
|||||||
num++;
|
num++;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
T &prepend(T &object)
|
T &prepend(T &object)
|
||||||
{
|
{
|
||||||
object.m_next = m_head;
|
object.m_next = m_head;
|
||||||
|
@ -161,17 +161,17 @@ typedef tagged_list<region_info> region_list;
|
|||||||
class driver_data_t : public bindable_object
|
class driver_data_t : public bindable_object
|
||||||
{
|
{
|
||||||
friend class running_machine;
|
friend class running_machine;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
driver_data_t(running_machine &machine);
|
driver_data_t(running_machine &machine);
|
||||||
virtual ~driver_data_t();
|
virtual ~driver_data_t();
|
||||||
|
|
||||||
virtual void machine_start();
|
virtual void machine_start();
|
||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
|
|
||||||
virtual void sound_start();
|
virtual void sound_start();
|
||||||
virtual void sound_reset();
|
virtual void sound_reset();
|
||||||
|
|
||||||
virtual void palette_init(const UINT8 *color_prom);
|
virtual void palette_init(const UINT8 *color_prom);
|
||||||
virtual void video_start();
|
virtual void video_start();
|
||||||
virtual void video_reset();
|
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)
|
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 )
|
TIMER_CALLBACK( ttl74123_device::output_callback )
|
||||||
|
@ -176,7 +176,7 @@ void ttl7474_device::device_reset()
|
|||||||
|
|
||||||
void ttl7474_device::update()
|
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 = 1;
|
||||||
m_output_comp = 0;
|
m_output_comp = 0;
|
||||||
@ -191,7 +191,7 @@ void ttl7474_device::update()
|
|||||||
m_output = 1;
|
m_output = 1;
|
||||||
m_output_comp = 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 = m_d;
|
||||||
m_output_comp = !m_d;
|
m_output_comp = !m_d;
|
||||||
|
@ -139,7 +139,7 @@ private:
|
|||||||
/* inputs */
|
/* inputs */
|
||||||
UINT8 m_clear; /* pin 1/13 */
|
UINT8 m_clear; /* pin 1/13 */
|
||||||
UINT8 m_preset; /* pin 4/10 */
|
UINT8 m_preset; /* pin 4/10 */
|
||||||
UINT8 m_clk; /* pin 3/11 */
|
UINT8 m_clk; /* pin 3/11 */
|
||||||
UINT8 m_d; /* pin 2/12 */
|
UINT8 m_d; /* pin 2/12 */
|
||||||
|
|
||||||
/* outputs */
|
/* 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() */
|
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. */
|
/* Check if a new DMA request has been received. */
|
||||||
/* Bit 6 of the command register determines whether the DREQ signals are active
|
/* 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;
|
UINT16 pending_request = ( ( m_command & 0x40 ) ? ~m_drq : m_drq ) & ~m_mask;
|
||||||
|
|
||||||
if ( pending_request & 0x0f )
|
if ( pending_request & 0x0f )
|
||||||
|
@ -69,4 +69,4 @@
|
|||||||
virtual void device_reset(); \
|
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
|
// 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);
|
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");
|
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 = data;
|
||||||
eeprom->m_default_data_size = size;
|
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);
|
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");
|
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 = reinterpret_cast<const UINT8 *>(data);
|
||||||
eeprom->m_default_data_size = size;
|
eeprom->m_default_data_size = size;
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Fairchild F3853 SRAM interface with integrated interrupt
|
Fairchild F3853 SRAM interface with integrated interrupt
|
||||||
controller and timer (SMI)
|
controller and timer (SMI)
|
||||||
|
|
||||||
This chip is a timer shift register, basically the same as in the
|
This chip is a timer shift register, basically the same as in the
|
||||||
F3851.
|
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
|
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
|
not respond to the main CPU's DC0/DC1 swap instruction. This may
|
||||||
lead to two devices responding to the same DC0 address and
|
lead to two devices responding to the same DC0 address and
|
||||||
attempting to place their bytes on the data bus simultaneously!
|
attempting to place their bytes on the data bus simultaneously!
|
||||||
|
|
||||||
8-bit shift register:
|
8-bit shift register:
|
||||||
Feedback in0 = !((out3 ^ out4) ^ (out5 ^ out7))
|
Feedback in0 = !((out3 ^ out4) ^ (out5 ^ out7))
|
||||||
Interrupts are at 0xfe
|
Interrupts are at 0xfe
|
||||||
0xff stops the register (0xfe is never reached)
|
0xff stops the register (0xfe is never reached)
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Fairchild F3853 SRAM interface with integrated interrupt
|
Fairchild F3853 SRAM interface with integrated interrupt
|
||||||
controller and timer
|
controller and timer
|
||||||
|
|
||||||
This chip is a timer shift register, basically the same as in the
|
This chip is a timer shift register, basically the same as in the
|
||||||
F3851.
|
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
|
// configuration
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
timekpr.h
|
timekpr.h
|
||||||
|
|
||||||
Various ST Microelectronics timekeeper SRAM implementations:
|
Various ST Microelectronics timekeeper SRAM implementations:
|
||||||
- M48T02
|
- M48T02
|
||||||
- M48T35
|
- M48T35
|
||||||
- M48T58
|
- M48T58
|
||||||
- MK48T08
|
- MK48T08
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
timekpr.h
|
timekpr.h
|
||||||
|
|
||||||
Various ST Microelectronics timekeeper SRAM implementations:
|
Various ST Microelectronics timekeeper SRAM implementations:
|
||||||
- M48T02
|
- M48T02
|
||||||
- M48T35
|
- M48T35
|
||||||
- M48T58
|
- M48T58
|
||||||
- MK48T08
|
- MK48T08
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
Copyright (c) 2008, The MESS Team.
|
Copyright (c) 2008, The MESS Team.
|
||||||
Visit http://mamedev.org for licensing and usage restrictions.
|
Visit http://mamedev.org for licensing and usage restrictions.
|
||||||
|
|
||||||
The z80dart/z80sio itself is based on an older intel serial chip, the i8274 MPSC
|
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
|
(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
|
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
|
scheme which uses write register 2 on channel A, that register which is unused on
|
||||||
the z80dart and z80sio.
|
the z80dart and z80sio.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -21,8 +21,8 @@
|
|||||||
- wr0 reset tx interrupt pending
|
- wr0 reset tx interrupt pending
|
||||||
- wait/ready
|
- wait/ready
|
||||||
- 1.5 stop bits
|
- 1.5 stop bits
|
||||||
- synchronous mode (Z80-SIO/1,2)
|
- synchronous mode (Z80-SIO/1,2)
|
||||||
- SDLC 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
|
// 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
|
// 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
|
// 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
|
// 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()
|
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
|
class direct_read_data
|
||||||
{
|
{
|
||||||
friend class address_table;
|
friend class address_table;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// direct_range is an internal class that is part of a list of start/end ranges
|
// direct_range is an internal class that is part of a list of start/end ranges
|
||||||
class direct_range
|
class direct_range
|
||||||
@ -226,7 +226,7 @@ public:
|
|||||||
|
|
||||||
// getters
|
// getters
|
||||||
direct_range *next() const { return m_next; }
|
direct_range *next() const { return m_next; }
|
||||||
|
|
||||||
// internal state
|
// internal state
|
||||||
direct_range * m_next; // pointer to the next range in the list
|
direct_range * m_next; // pointer to the next range in the list
|
||||||
offs_t m_bytestart; // starting byte offset of the range
|
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_bytestart; // minimum valid byte address
|
||||||
offs_t m_byteend; // maximum valid byte address
|
offs_t m_byteend; // maximum valid byte address
|
||||||
UINT8 m_entry; // live entry
|
UINT8 m_entry; // live entry
|
||||||
simple_list<direct_range> m_rangelist[256]; // list of ranges for each 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_freerangelist; // list of recycled range entries
|
||||||
direct_update_delegate m_directupdate; // fast direct-access update callback
|
direct_update_delegate m_directupdate; // fast direct-access update callback
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -420,7 +420,7 @@ public:
|
|||||||
|
|
||||||
// decryption
|
// decryption
|
||||||
void set_decrypted_region(offs_t addrstart, offs_t addrend, void *base);
|
void set_decrypted_region(offs_t addrstart, offs_t addrend, void *base);
|
||||||
|
|
||||||
// direct access
|
// direct access
|
||||||
direct_update_delegate set_direct_update_handler(direct_update_delegate function) { return m_direct.set_direct_update(function); }
|
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);
|
bool set_direct_region(offs_t &byteaddress);
|
||||||
@ -551,7 +551,7 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
// space read/write handler function macros
|
// 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 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 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)
|
#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 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 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_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_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)
|
#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_raw[byteaddress & m_bytemask];
|
||||||
return m_space.read_byte(byteaddress);
|
return m_space.read_byte(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline UINT8 direct_read_data::read_decrypted_byte(offs_t byteaddress)
|
inline UINT8 direct_read_data::read_decrypted_byte(offs_t byteaddress)
|
||||||
{
|
{
|
||||||
if (address_is_valid(byteaddress))
|
if (address_is_valid(byteaddress))
|
||||||
return m_decrypted[byteaddress & m_bytemask];
|
return m_decrypted[byteaddress & m_bytemask];
|
||||||
return m_space.read_byte(byteaddress);
|
return m_space.read_byte(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// read_raw_word - read a word via the
|
// 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 *reinterpret_cast<UINT16 *>(&m_raw[byteaddress & m_bytemask]);
|
||||||
return m_space.read_word(byteaddress);
|
return m_space.read_word(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline UINT16 direct_read_data::read_decrypted_word(offs_t byteaddress)
|
inline UINT16 direct_read_data::read_decrypted_word(offs_t byteaddress)
|
||||||
{
|
{
|
||||||
if (address_is_valid(byteaddress))
|
if (address_is_valid(byteaddress))
|
||||||
return *reinterpret_cast<UINT16 *>(&m_decrypted[byteaddress & m_bytemask]);
|
return *reinterpret_cast<UINT16 *>(&m_decrypted[byteaddress & m_bytemask]);
|
||||||
return m_space.read_word(byteaddress);
|
return m_space.read_word(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// read_raw_dword - read a dword via the
|
// 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 *reinterpret_cast<UINT32 *>(&m_raw[byteaddress & m_bytemask]);
|
||||||
return m_space.read_dword(byteaddress);
|
return m_space.read_dword(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline UINT32 direct_read_data::read_decrypted_dword(offs_t byteaddress)
|
inline UINT32 direct_read_data::read_decrypted_dword(offs_t byteaddress)
|
||||||
{
|
{
|
||||||
if (address_is_valid(byteaddress))
|
if (address_is_valid(byteaddress))
|
||||||
return *reinterpret_cast<UINT32 *>(&m_decrypted[byteaddress & m_bytemask]);
|
return *reinterpret_cast<UINT32 *>(&m_decrypted[byteaddress & m_bytemask]);
|
||||||
return m_space.read_dword(byteaddress);
|
return m_space.read_dword(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// read_raw_qword - read a qword via the
|
// 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 *reinterpret_cast<UINT64 *>(&m_raw[byteaddress & m_bytemask]);
|
||||||
return m_space.read_qword(byteaddress);
|
return m_space.read_qword(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline UINT64 direct_read_data::read_decrypted_qword(offs_t byteaddress)
|
inline UINT64 direct_read_data::read_decrypted_qword(offs_t byteaddress)
|
||||||
{
|
{
|
||||||
if (address_is_valid(byteaddress))
|
if (address_is_valid(byteaddress))
|
||||||
return *reinterpret_cast<UINT64 *>(&m_decrypted[byteaddress & m_bytemask]);
|
return *reinterpret_cast<UINT64 *>(&m_decrypted[byteaddress & m_bytemask]);
|
||||||
return m_space.read_qword(byteaddress);
|
return m_space.read_qword(byteaddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* __MEMORY_H__ */
|
#endif /* __MEMORY_H__ */
|
||||||
|
@ -37,14 +37,14 @@
|
|||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
Profiling is scope-based. To start profiling, put a profiler_scope
|
Profiling is scope-based. To start profiling, put a profiler_scope
|
||||||
object on the stack. To end profiling, just end the scope:
|
object on the stack. To end profiling, just end the scope:
|
||||||
|
|
||||||
{
|
{
|
||||||
profiler_scope scope(PROFILER_VIDEO);
|
profiler_scope scope(PROFILER_VIDEO);
|
||||||
|
|
||||||
your_work_here();
|
your_work_here();
|
||||||
}
|
}
|
||||||
|
|
||||||
the profiler handles a FILO list so calls may be nested.
|
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
|
// we are ready once we have wrapped around
|
||||||
if (m_dataindex == 0)
|
if (m_dataindex == 0)
|
||||||
m_dataready = true;
|
m_dataready = true;
|
||||||
|
|
||||||
g_profiler.stop();
|
g_profiler.stop();
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
@ -37,14 +37,14 @@
|
|||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
Profiling is scope-based. To start profiling, put a profiler_scope
|
Profiling is scope-based. To start profiling, put a profiler_scope
|
||||||
object on the stack. To end profiling, just end the scope:
|
object on the stack. To end profiling, just end the scope:
|
||||||
|
|
||||||
{
|
{
|
||||||
profiler_scope scope(PROFILER_VIDEO);
|
profiler_scope scope(PROFILER_VIDEO);
|
||||||
|
|
||||||
your_work_here();
|
your_work_here();
|
||||||
}
|
}
|
||||||
|
|
||||||
the profiler handles a FILO list so calls may be nested.
|
the profiler handles a FILO list so calls may be nested.
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ class real_profiler_state
|
|||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
real_profiler_state();
|
real_profiler_state();
|
||||||
|
|
||||||
// getters
|
// getters
|
||||||
bool enabled() const { return m_enabled; }
|
bool enabled() const { return m_enabled; }
|
||||||
const char *text(running_machine &machine, astring &string);
|
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
|
// set the speaker position
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ struct _bsmt2000_chip
|
|||||||
bsmt2000_voice voice[MAX_VOICES]; /* the voices */
|
bsmt2000_voice voice[MAX_VOICES]; /* the voices */
|
||||||
UINT16 * regmap[128]; /* mapping of registers to voice params */
|
UINT16 * regmap[128]; /* mapping of registers to voice params */
|
||||||
UINT8 mode; /* current mode */
|
UINT8 mode; /* current mode */
|
||||||
|
|
||||||
UINT32 clock; /* original clock on the chip */
|
UINT32 clock; /* original clock on the chip */
|
||||||
UINT8 stereo; /* stereo output? */
|
UINT8 stereo; /* stereo output? */
|
||||||
UINT8 voices; /* number of voices */
|
UINT8 voices; /* number of voices */
|
||||||
|
@ -241,7 +241,7 @@ static DEVICE_START( k053260 )
|
|||||||
/* register with the save state system */
|
/* register with the save state system */
|
||||||
state_save_register_device_item(device, 0, ic->mode);
|
state_save_register_device_item(device, 0, ic->mode);
|
||||||
state_save_register_device_item_array(device, 0, ic->regs);
|
state_save_register_device_item_array(device, 0, ic->regs);
|
||||||
|
|
||||||
for ( i = 0; i < 4; i++ )
|
for ( i = 0; i < 4; i++ )
|
||||||
{
|
{
|
||||||
state_save_register_device_item(device, i, ic->channels[i].rate);
|
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;
|
error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// count copies/fills as valid items
|
// count copies/fills as valid items
|
||||||
else if (ROMENTRY_ISCOPY(romp) || ROMENTRY_ISFILL(romp))
|
else if (ROMENTRY_ISCOPY(romp) || ROMENTRY_ISFILL(romp))
|
||||||
items_since_region++;
|
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
|
// 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
|
// helper to set the default position and scale
|
||||||
// factors for the screen
|
// factors for the screen
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -280,7 +280,7 @@ extern const device_type SCREEN;
|
|||||||
screen_device_config::static_set_type(device, SCREEN_TYPE_##_type); \
|
screen_device_config::static_set_type(device, SCREEN_TYPE_##_type); \
|
||||||
|
|
||||||
#define MDRV_SCREEN_RAW_PARAMS(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart) \
|
#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) \
|
#define MDRV_SCREEN_REFRESH_RATE(_rate) \
|
||||||
screen_device_config::static_set_refresh(device, HZ_TO_ATTOSECONDS(_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 char *string) { return cpy(string); }
|
||||||
astring &operator=(const astring &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 char *string) const { return (cmp(string) == 0); }
|
||||||
bool operator==(const astring &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); }
|
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.
|
the microcontroller is able to write to anywhere within main memory.
|
||||||
|
|
||||||
Gold Medalist (bootleg) has a 68705 in place of the Alpha controller.
|
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.
|
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");
|
UINT16 *rom = (UINT16 *)memory_region(machine, "maincpu");
|
||||||
|
|
||||||
/* Patch protection check, it does a divide by zero because the MCU is trying to
|
/* 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
|
calculate the ball speed when a strike is scored, notice that current emulation
|
||||||
just returns 49 mi/h every time that this event happens.
|
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.
|
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.
|
main CPU then writes the result to RAM location [0x41866], probably just to signal the result to the MCU.
|
||||||
*/
|
*/
|
||||||
rom[0xb672/2] = 0x4e71;
|
rom[0xb672/2] = 0x4e71;
|
||||||
|
|
||||||
/* And patch the ROM checksums */
|
/* And patch the ROM checksums */
|
||||||
|
@ -54,10 +54,10 @@
|
|||||||
Now using mc146818 rtc driver instead of rtc_get_reg.
|
Now using mc146818 rtc driver instead of rtc_get_reg.
|
||||||
|
|
||||||
19/8/10 - Roberto Fresca.
|
19/8/10 - Roberto Fresca.
|
||||||
Added 3 Bags Full - 5VXFC790 (Victorian).
|
Added 3 Bags Full - 5VXFC790 (Victorian).
|
||||||
Set is now parent. Replaced the bad dumped GFX from NZ set with the new ones,
|
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,
|
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.
|
so maybe is the correct one for this game.
|
||||||
|
|
||||||
The mc146818 driver is buggy - reported problem to Firewave and issues will be addressed.
|
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.
|
In this driver, the wrong day of the month is shown, wrong hours are shown.
|
||||||
|
@ -1,59 +1,59 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Aristocrat MK5 / MKV hardware
|
Aristocrat MK5 / MKV hardware
|
||||||
possibly 'Acorn Archimedes on a chip' 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
|
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.
|
by swapping them with the game ROMs u7/u11 locations.
|
||||||
|
|
||||||
TODO (MK-5 specific):
|
TODO (MK-5 specific):
|
||||||
- Fix remaining errors
|
- Fix remaining errors
|
||||||
- If all tests passes, this msg is printed on the keyboard serial port:
|
- 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"
|
"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 ...
|
Apparently it looks like some sort of protection device ...
|
||||||
|
|
||||||
code DASMing of POST (adonis):
|
code DASMing of POST (adonis):
|
||||||
- bp 0x3400224:
|
- bp 0x3400224:
|
||||||
checks work RAM [0x87000], if bit 0 active high then all tests are skipped (presumably for debugging), otherwise check stuff;
|
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 0x3400230: EPROM checksum branch test
|
||||||
- bp 0x3400258: DRAM Check branch test
|
- bp 0x3400258: DRAM Check branch test
|
||||||
- bp 0x3400280: CPU Check branch test
|
- bp 0x3400280: CPU Check branch test
|
||||||
bp 0x340027c: checks IRQ status A and FIQ status bit 7 (force IRQ flag)
|
bp 0x340027c: checks IRQ status A and FIQ status bit 7 (force IRQ flag)
|
||||||
- R0 == 0: CPU Check OK
|
- R0 == 0: CPU Check OK
|
||||||
- R0 == 1: IRQ status A force IRQ flag check failed
|
- R0 == 1: IRQ status A force IRQ flag check failed
|
||||||
- R0 == 2: FIQ status force IRQ flag check failed
|
- R0 == 2: FIQ status force IRQ flag check failed
|
||||||
- R0 == 3: Internal Latch check 0x3250050 == 0xf5
|
- R0 == 3: Internal Latch check 0x3250050 == 0xf5
|
||||||
- bp 0x34002a8: SRAM Check branch test (I2C)
|
- bp 0x34002a8: SRAM Check branch test (I2C)
|
||||||
- basically writes to the I2C clock/data then read-backs it
|
- basically writes to the I2C clock/data then read-backs it
|
||||||
- bp 0x34002d0: 2KHz Timer branch test
|
- bp 0x34002d0: 2KHz Timer branch test
|
||||||
bp 0x34002cc: it does various test with GO command reads (that are undefined on plain AA) and
|
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
|
IRQA status bit 0, that's "printer busy" on original AA but here it have a completely
|
||||||
different meaning.
|
different meaning.
|
||||||
- bp 0x34002f8: DRAM emulator branch tests
|
- bp 0x34002f8: DRAM emulator branch tests
|
||||||
bp 0x34002f4:
|
bp 0x34002f4:
|
||||||
- R0 == 0 "DRAM emulator found"
|
- R0 == 0 "DRAM emulator found"
|
||||||
- R0 == 1 "DRAM emulator found"
|
- R0 == 1 "DRAM emulator found"
|
||||||
- R0 == 3 "DRAM emulator not found - Error"
|
- R0 == 3 "DRAM emulator not found - Error"
|
||||||
- R0 == 4 "DRAM emulator found instead of DRAM - Error"
|
- R0 == 4 "DRAM emulator found instead of DRAM - Error"
|
||||||
- R0 == x "Undefined error in DRAM emulator area"
|
- R0 == x "Undefined error in DRAM emulator area"
|
||||||
It r/w RAM location 0 and it expects to NOT read-back value written.
|
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,
|
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)
|
returns an External Video Crystal Error (bp 3400278)
|
||||||
|
|
||||||
dmdtouch:
|
dmdtouch:
|
||||||
bp 3400640: checks 2MByte DRAM
|
bp 3400640: checks 2MByte DRAM
|
||||||
- writes from 0x1000 to 0x100000, with 0x400 bytes index increment and 0xfb data increment
|
- 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
|
- 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
|
- 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)
|
value that actually should be at 0x141000)
|
||||||
bp 340064c: if R0 == 0 2MB DRAM is ok, otherwise there's an error
|
bp 340064c: if R0 == 0 2MB DRAM is ok, otherwise there's an error
|
||||||
|
|
||||||
set chip (BIOS):
|
set chip (BIOS):
|
||||||
same as goldprmd (serial + ext video crystal check)
|
same as goldprmd (serial + ext video crystal check)
|
||||||
bp 3400110: External Video Crystal test
|
bp 3400110: External Video Crystal test
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ static ADDRESS_MAP_START( aristmk5_map, ADDRESS_SPACE_PROGRAM, 32 )
|
|||||||
/* MK-5 overrides */
|
/* MK-5 overrides */
|
||||||
AM_RANGE(0x03010420, 0x03010423) AM_RAM_WRITE(mk5_i2c_w)
|
AM_RANGE(0x03010420, 0x03010423) AM_RAM_WRITE(mk5_i2c_w)
|
||||||
AM_RANGE(0x03010810, 0x03010813) AM_READNOP //MK-5 specific, watchdog
|
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(0x03220000, 0x03220003) AM_READWRITE(mk5_econet_r,mk5_econet_w)
|
||||||
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(mk5_ext_latch_w)
|
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(mk5_ext_latch_w)
|
||||||
AM_RANGE(0x03250050, 0x03250053) AM_READ(mk5_unk_r)
|
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_CONFNAME( 0x03, 0x00, "System Mode" )
|
||||||
PORT_CONFSETTING( 0x00, "Set Chip v4.04 Mode" )
|
PORT_CONFSETTING( 0x00, "Set Chip v4.04 Mode" )
|
||||||
PORT_CONFSETTING( 0x01, "Set Chip v4.4 Mode" )
|
PORT_CONFSETTING( 0x01, "Set Chip v4.4 Mode" )
|
||||||
// Clear Chip (missing?)
|
// Clear Chip (missing?)
|
||||||
PORT_CONFSETTING( 0x03, "Game Mode" )
|
PORT_CONFSETTING( 0x03, "Game Mode" )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
@ -450,8 +450,8 @@
|
|||||||
- Promoted comg080 (Arcade Black Jack) to working state.
|
- Promoted comg080 (Arcade Black Jack) to working state.
|
||||||
|
|
||||||
- Added support for system 906III:
|
- Added support for system 906III:
|
||||||
- Accurate memory map, CRTC, and PIAs mapped.
|
- Accurate memory map, CRTC, and PIAs mapped.
|
||||||
- Preliminary PIAs support (no multiplexion yet).
|
- Preliminary PIAs support (no multiplexion yet).
|
||||||
- Added proper machine driver, with correct R65C02 CPU.
|
- Added proper machine driver, with correct R65C02 CPU.
|
||||||
- Documented the hardware specs.
|
- Documented the hardware specs.
|
||||||
- Added Game 51.08 (CEI Video Poker, Jacks or Better),
|
- Added Game 51.08 (CEI Video Poker, Jacks or Better),
|
||||||
@ -460,7 +460,7 @@
|
|||||||
- Mapped the AY8912.
|
- Mapped the AY8912.
|
||||||
- Added AY8912 proper interfase. Tied SW2 to AY8912 port.
|
- Added AY8912 proper interfase. Tied SW2 to AY8912 port.
|
||||||
- PIA0, portA is polled constantly. Tied some debug handlers
|
- 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.
|
- Added notes about the PIAs R/W.
|
||||||
|
|
||||||
|
|
||||||
@ -3973,9 +3973,9 @@ static DRIVER_INIT( comg080 )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Injecting missing Start and NMI vectors...
|
/* Injecting missing Start and NMI vectors...
|
||||||
Start = $2042; NMI = $26f8;
|
Start = $2042; NMI = $26f8;
|
||||||
Also a fake vector at $3ff8-$3ff9. The code checks these values to continue.
|
Also a fake vector at $3ff8-$3ff9. The code checks these values to continue.
|
||||||
*/
|
*/
|
||||||
UINT8 *PRGROM = memory_region( machine, "maincpu" );
|
UINT8 *PRGROM = memory_region( machine, "maincpu" );
|
||||||
|
|
||||||
PRGROM[0x3ff8] = 0x8e; /* checked by code */
|
PRGROM[0x3ff8] = 0x8e; /* checked by code */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Chihiro is an Xbox based arcade motherboard from SEGA
|
Chihiro is an Xbox based arcade motherboard from SEGA
|
||||||
A Chihiro system consists of network board, media board, base board & Xbox board
|
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"
|
#include "debug/debugcmd.h"
|
||||||
|
|
||||||
/* jamtable instructions for Chihiro
|
/* jamtable instructions for Chihiro
|
||||||
St. Instr. Comment
|
St. Instr. Comment
|
||||||
0x01 POKEPCI PCICONF[OP2] := OP1
|
0x01 POKEPCI PCICONF[OP2] := OP1
|
||||||
0x02 OUTB PORT[OP2] := OP1
|
0x02 OUTB PORT[OP2] := OP1
|
||||||
0x03 POKE MEM[OP2] := OP1
|
0x03 POKE MEM[OP2] := OP1
|
||||||
0x04 BNE IF ACC <> OP2 THEN PC := PC + OP1
|
0x04 BNE IF ACC <> OP2 THEN PC := PC + OP1
|
||||||
0x05 PEEKPCI ACC := PCICONF[OP2]
|
0x05 PEEKPCI ACC := PCICONF[OP2]
|
||||||
0x06 AND/OR ACC := (ACC & OP2) | OP1
|
0x06 AND/OR ACC := (ACC & OP2) | OP1
|
||||||
0x07 BRA PC := PC + OP1
|
0x07 BRA PC := PC + OP1
|
||||||
0x08 INB ACC := PORT[OP2]
|
0x08 INB ACC := PORT[OP2]
|
||||||
0x09 PEEK ACC := MEM[OP2]
|
0x09 PEEK ACC := MEM[OP2]
|
||||||
0xE1 (prefix) execute the instruction code in OP2 with OP2 := OP1, OP1 := ACC
|
0xE1 (prefix) execute the instruction code in OP2 with OP2 := OP1, OP1 := ACC
|
||||||
0xEE END
|
0xEE END
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* jamtable disassembler */
|
/* jamtable disassembler */
|
||||||
@ -258,7 +258,7 @@ static WRITE32_HANDLER( smbus_w )
|
|||||||
else {
|
else {
|
||||||
smbusst.data=smbusst.devices[smbusst.address & 127](smbusst.command,smbusst.rw,smbusst.data);
|
smbusst.data=smbusst.devices[smbusst.address & 127](smbusst.command,smbusst.rw,smbusst.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
smbusst.status |= 0x10;
|
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_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_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_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_LOAD16_WORD_SWAP( "ff-32m.8h", 0x80000, 0x80000, CRC(c747696e) SHA1(d3362dadded31ccb7eaf71ef282d698d18edd722) )
|
||||||
|
|
||||||
ROM_REGION( 0x200000, "gfx", 0 )
|
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) )
|
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_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_CONTINUE( 0x10000, 0x08000 )
|
||||||
|
|
||||||
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
|
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, 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, 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, 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, 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, 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 )
|
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.04", 0x080000, 0x80000, CRC(f800138d) SHA1(a8c05da5d33c338a82fed4f7b59c6ba8c10e8597) )
|
||||||
ROM_LOAD16_WORD_SWAP( "ueced.05", 0x100000, 0x80000, CRC(eb6a12f2) SHA1(5253a193a38b566eefbb8644511f283ac4a69850) )
|
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_LOAD16_WORD_SWAP( "ueced.06", 0x180000, 0x80000, CRC(8380ec9a) SHA1(4f3a95a2580f89ae214b588df9258bd9dc06f993) )
|
||||||
|
|
||||||
ROM_REGION( 0xc00000, "gfx", 0 )
|
ROM_REGION( 0xc00000, "gfx", 0 )
|
||||||
ROMX_LOAD( "uec.13m", 0x000000, 0x200000, CRC(dcaf1436) SHA1(ba124cc0bb10c1d1c07592a3623add4ed054182e) , ROM_GROUPWORD | ROM_SKIP(6) )
|
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) )
|
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_LOAD16_WORD_SWAP( "csc.58", 0x380000, 0x080000, CRC(2300b7b3) SHA1(f5ecbb45c24f7de1c1aa435870695551d4e343ca) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
ROM_START( cybotsud )
|
ROM_START( cybotsud )
|
||||||
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
|
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
|
||||||
ROM_LOAD16_WORD_SWAP( "cybu_d.03", 0x000000, 0x80000, CRC(ee7560fb) SHA1(632e057a7b3a61127beee4ed833a39dcec4ccbd5) )
|
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_DIPNAME( 0x00c0, 0x00c0, "Girls" ) PORT_DIPLOCATION("SW1:7,8") /* stored at 0x3a6faa.w */
|
||||||
PORT_DIPSETTING( 0x00c0, DEF_STR( No ) )
|
PORT_DIPSETTING( 0x00c0, DEF_STR( No ) )
|
||||||
PORT_DIPSETTING( 0x0080, DEF_STR( Yes ) )
|
PORT_DIPSETTING( 0x0080, DEF_STR( Yes ) )
|
||||||
// PORT_DIPSETTING( 0x0040, DEF_STR( No ) )
|
// PORT_DIPSETTING( 0x0040, DEF_STR( No ) )
|
||||||
// PORT_DIPSETTING( 0x0000, 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_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( 0x0700, "0" )
|
||||||
PORT_DIPSETTING( 0x0300, "1" )
|
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 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
|
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
|
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.
|
"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
|
The pal is also used to switch A15 on and off. This is done in locations
|
||||||
6800 and E800.
|
6800 and E800.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -1602,7 +1602,7 @@ GFXDECODE_END
|
|||||||
* Braze Tech Addon boards
|
* Braze Tech Addon boards
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static const eeprom_interface braze_eeprom_intf =
|
static const eeprom_interface braze_eeprom_intf =
|
||||||
{
|
{
|
||||||
7, /* address bits */
|
7, /* address bits */
|
||||||
|
@ -359,7 +359,7 @@ static READ8_HANDLER( dip_switch_r )
|
|||||||
{
|
{
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* For the DIP switches to be read, protection_data must be
|
/* 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)
|
if (state->protection_data != 0xff)
|
||||||
ret = state->protection_data ^ 0x88;
|
ret = state->protection_data ^ 0x88;
|
||||||
else
|
else
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
/*******************************************************************************************
|
/*******************************************************************************************
|
||||||
|
|
||||||
Erotictac/Tactic (c) 1990 Sisteme
|
Erotictac/Tactic (c) 1990 Sisteme
|
||||||
Poizone (c) 1991 Eterna
|
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
|
original driver by Tomasz Slanina, Steve Ellenoff, Nicola Salmoria
|
||||||
rewrite to use AA functions by R.Belmont & Angelo Salese
|
rewrite to use AA functions by R.Belmont & Angelo Salese
|
||||||
special thanks to Tom Walker (author of the Acorn Archimedes Arculator emulator)
|
special thanks to Tom Walker (author of the Acorn Archimedes Arculator emulator)
|
||||||
|
|
||||||
TODO (specific issues only):
|
TODO (specific issues only):
|
||||||
- Sound is currently ugly in both games, recognizable but still nowhere near perfection
|
- 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
|
- 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)
|
whatever reason (should be triggered as soon as it executes the POST)
|
||||||
- poizone: ARM core bugs causes it to crash at some point.
|
- poizone: ARM core bugs causes it to crash at some point.
|
||||||
- Does this Arcade conversion have I2C device? It seems unused afaik.
|
- 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"
|
- Need PCB for identify the exact model of AA, available RAM, what kind of i/o "podule"
|
||||||
it has etc.
|
it has etc.
|
||||||
|
|
||||||
*******************************************************************************************/
|
*******************************************************************************************/
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
@ -3305,7 +3305,7 @@ ROM_END
|
|||||||
1x 2716 for char gen. (4.8a)
|
1x 2716 for char gen. (4.8a)
|
||||||
3x 2716 for gfx bitplanes. (1.4a, 2.6a, 3.7a)
|
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 8 DIP switches bank.
|
||||||
1x 2x10 Edge connector. (GM1)
|
1x 2x10 Edge connector. (GM1)
|
||||||
1x 2x22 Edge connector. (GM2)
|
1x 2x22 Edge connector. (GM2)
|
||||||
|
@ -730,7 +730,7 @@ static INTERRUPT_GEN( karnov_interrupt )
|
|||||||
{
|
{
|
||||||
karnov_state *state = device->machine->driver_data<karnov_state>();
|
karnov_state *state = device->machine->driver_data<karnov_state>();
|
||||||
UINT8 port = input_port_read(device->machine, "FAKE");
|
UINT8 port = input_port_read(device->machine, "FAKE");
|
||||||
|
|
||||||
/* Coin input to the i8751 generates an interrupt to the main cpu */
|
/* Coin input to the i8751 generates an interrupt to the main cpu */
|
||||||
if (port == state->coin_mask)
|
if (port == state->coin_mask)
|
||||||
state->latch = 1;
|
state->latch = 1;
|
||||||
|
@ -1298,7 +1298,7 @@ ROM_START( legendb )
|
|||||||
ROM_LOAD( "03.s08", 0x2000, 0x2000, CRC(7e7b9ba9) SHA1(897779129108b0f3936234ea797d47cf46cb7a16) )
|
ROM_LOAD( "03.s08", 0x2000, 0x2000, CRC(7e7b9ba9) SHA1(897779129108b0f3936234ea797d47cf46cb7a16) )
|
||||||
ROM_LOAD( "04.s09", 0x4000, 0x2000, CRC(0dd50aa7) SHA1(001ba0d5e0b50fb030a95fdbeba40005ffc5c182) )
|
ROM_LOAD( "04.s09", 0x4000, 0x2000, CRC(0dd50aa7) SHA1(001ba0d5e0b50fb030a95fdbeba40005ffc5c182) )
|
||||||
ROM_LOAD( "01.n07", 0x6000, 0x2000, CRC(13915a53) SHA1(25ba3babc8eb0df413bdfe7dbcd8642e4c658120) )
|
ROM_LOAD( "01.n07", 0x6000, 0x2000, CRC(13915a53) SHA1(25ba3babc8eb0df413bdfe7dbcd8642e4c658120) )
|
||||||
|
|
||||||
ROM_REGION( 0x1000, "gfx1", 0 ) /* fg tiles */
|
ROM_REGION( 0x1000, "gfx1", 0 ) /* fg tiles */
|
||||||
ROM_LOAD( "15.b05", 0x0000, 0x1000, CRC(6c879f76) SHA1(9da84446e463264ed86e912589d826d86c27bf59) )
|
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_LOAD( "epl12p6.9j", 0x0200, 0x0034, CRC(dcae870d) SHA1(2224724a3faf0608083f5d6ff76712adc7616a54) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ Top Shooter PCB info
|
|||||||
Not Dumped
|
Not Dumped
|
||||||
|
|
||||||
Super Bubble Bobble (a bubble bobble rip-off from Sun Mixing, looks like it may be on this hardware)
|
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
|
TOP SHOOTER - Sun Mixing Co. Ltd. 1995
|
||||||
|
|
||||||
To me it seems like an original cartridge-based arcade board
|
To me it seems like an original cartridge-based arcade board
|
||||||
|
@ -431,12 +431,12 @@ Notes:
|
|||||||
4P,5P - SRAM (SOJ28) 32kx8, ISSI IS61C256AH-15J
|
4P,5P - SRAM (SOJ28) 32kx8, ISSI IS61C256AH-15J
|
||||||
CN1/2/3 - connectors joining to main board
|
CN1/2/3 - connectors joining to main board
|
||||||
|
|
||||||
|
|
||||||
Games known to use this PCB include....
|
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
|
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.
|
\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)
|
ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Note:
|
Note:
|
||||||
There was no sticker or silk screen markings on this PIC.
|
There was no sticker or silk screen markings on this PIC.
|
||||||
I have used the product number as a label instead.
|
I have used the product number as a label instead.
|
||||||
|
|
||||||
PIC16C621A-20 (317-0005-JPN)
|
PIC16C621A-20 (317-0005-JPN)
|
||||||
Sticker: 253-5509-0005J
|
Sticker: 253-5509-0005J
|
||||||
*/
|
*/
|
||||||
ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
|
ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
|
||||||
ROM_LOAD("317-0005-jpn.pic", 0x00, 0x4000, CRC(19f8d4d0) SHA1(d256f26f757d7019cab7950d81992902cdb65e07) )
|
ROM_LOAD("317-0005-jpn.pic", 0x00, 0x4000, CRC(19f8d4d0) SHA1(d256f26f757d7019cab7950d81992902cdb65e07) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
@ -5502,8 +5502,8 @@ ROM_END
|
|||||||
|
|
||||||
ROM_START( mslug4 ) /* Original Version - Encrypted GFX */ /* MVS VERSION */
|
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
|
/* 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.
|
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. */
|
These carts were manufactured by Mega Enterprise, not SNK. */
|
||||||
ROM_REGION( 0x500000, "maincpu", 0 )
|
ROM_REGION( 0x500000, "maincpu", 0 )
|
||||||
ROM_LOAD16_WORD_SWAP( "263-p1.bin", 0x000000, 0x100000, CRC(27e4def3) SHA1(a08785e8145981bb6b5332a3b2df7eb321253cca) )
|
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) )
|
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 */
|
/* 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). */
|
/* (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);
|
address_space *ramspace = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||||
UINT8 player = 0;
|
UINT8 player = 0;
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
Skeleton by R. Belmont
|
Skeleton by R. Belmont
|
||||||
|
|
||||||
H/W is a white-box PC consisting of:
|
H/W is a white-box PC consisting of:
|
||||||
Pentium II 450 CPU
|
Pentium II 450 CPU
|
||||||
DFI P2XBL motherboard (i440BX chipset)
|
DFI P2XBL motherboard (i440BX chipset)
|
||||||
128 MB RAM
|
128 MB RAM
|
||||||
Guillemot Maxi Gamer 3D2 Voodoo II
|
Guillemot Maxi Gamer 3D2 Voodoo II
|
||||||
Sound Blaster AWE64
|
Sound Blaster AWE64
|
||||||
|
|
||||||
Protected by a HASP brand parallel port dongle.
|
Protected by a HASP brand parallel port dongle.
|
||||||
I/O board has a PIC17C43 which is not readable.
|
I/O board has a PIC17C43 which is not readable.
|
||||||
@ -74,7 +74,7 @@ MACHINE_DRIVER_END
|
|||||||
|
|
||||||
ROM_START( savquest )
|
ROM_START( savquest )
|
||||||
ROM_REGION32_LE(0x40000, "user1", 0)
|
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_REGION( "disk" )
|
||||||
DISK_IMAGE( "savquest", 0, SHA1(b20cacf45e093b533c538bf4fc08f05f9475d640) )
|
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_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
|
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("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_LOAD("gd_8.216", 0x200000, 0x080000, BAD_DUMP CRC(f88cb6e4) SHA1(fb35b41307b490d5d08e4b8a70f8ff4ce2ca8105) )
|
||||||
ROM_END
|
ROM_END
|
||||||
@ -2909,7 +2909,7 @@ ROM_START( rdftam ) // Metrotainment license
|
|||||||
|
|
||||||
ROM_REGION(0x400000, "user2", ROMREGION_ERASE00) /* sound roms */
|
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
|
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("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_LOAD("gd_8.216", 0x200000, 0x080000, BAD_DUMP CRC(f88cb6e4) SHA1(fb35b41307b490d5d08e4b8a70f8ff4ce2ca8105) )
|
||||||
ROM_END
|
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(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */
|
||||||
AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */
|
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(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(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2")
|
||||||
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
|
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM")
|
||||||
AM_RANGE(0x1281, 0x1281) AM_MIRROR(0x007c) AM_READ_PORT("IN0")
|
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)
|
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
||||||
|
|
||||||
// z80 isn't used
|
// z80 isn't used
|
||||||
// MDRV_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
|
// MDRV_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/4)
|
||||||
// MDRV_CPU_PROGRAM_MAP(sound_map)
|
// MDRV_CPU_PROGRAM_MAP(sound_map)
|
||||||
|
|
||||||
MDRV_MACHINE_START(trackfld)
|
MDRV_MACHINE_START(trackfld)
|
||||||
MDRV_MACHINE_RESET(trackfld)
|
MDRV_MACHINE_RESET(trackfld)
|
||||||
@ -1517,7 +1517,7 @@ ROM_START( yieartf )
|
|||||||
ROM_REGION( 0x04000, "gfx2", 0 )
|
ROM_REGION( 0x04000, "gfx2", 0 )
|
||||||
ROM_LOAD( "6.16h", 0x00000, 0x2000, CRC(05a23af3) SHA1(d588a5d31e106a3c5b1e37b1826863108b87f02d) )
|
ROM_LOAD( "6.16h", 0x00000, 0x2000, CRC(05a23af3) SHA1(d588a5d31e106a3c5b1e37b1826863108b87f02d) )
|
||||||
ROM_LOAD( "7.15h", 0x02000, 0x2000, CRC(988154fa) SHA1(981273ef70ae6a947c24559750a8e7dc3d032444) )
|
ROM_LOAD( "7.15h", 0x02000, 0x2000, CRC(988154fa) SHA1(981273ef70ae6a947c24559750a8e7dc3d032444) )
|
||||||
|
|
||||||
ROM_REGION( 0x0220, "proms", 0 )
|
ROM_REGION( 0x0220, "proms", 0 )
|
||||||
ROM_LOAD( "yiear.clr", 0x00000, 0x0020, CRC(c283d71f) SHA1(10cd39f4e951ba6ca5610081c8c1fcd9d68b34d2) )
|
ROM_LOAD( "yiear.clr", 0x00000, 0x0020, CRC(c283d71f) SHA1(10cd39f4e951ba6ca5610081c8c1fcd9d68b34d2) )
|
||||||
ROM_LOAD( "prom1.b16", 0x0020, 0x0100, CRC(93dc32a0) SHA1(04e69d234e0ae93d90bbf2ef507f1cfd5cf3f87a) ) /* sprite lookup table */
|
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 CONTROL 0x00/4
|
||||||
#define KART 0x04/4 // Keyboard Asynchronous Receiver Transmitter
|
#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_REQUEST_A 0x14/4
|
||||||
#define IRQ_MASK_A 0x18/4
|
#define IRQ_MASK_A 0x18/4
|
||||||
#define IRQ_STATUS_B 0x20/4
|
#define IRQ_STATUS_B 0x20/4
|
||||||
#define IRQ_REQUEST_B 0x24/4
|
#define IRQ_REQUEST_B 0x24/4
|
||||||
#define IRQ_MASK_B 0x28/4
|
#define IRQ_MASK_B 0x28/4
|
||||||
|
@ -17,7 +17,7 @@ public:
|
|||||||
tilemap_t *pf2_tilemap;
|
tilemap_t *pf2_tilemap;
|
||||||
const UINT8 *scale_table_ptr;
|
const UINT8 *scale_table_ptr;
|
||||||
UINT8 scale_line_count;
|
UINT8 scale_line_count;
|
||||||
|
|
||||||
UINT16 *pf1_data;
|
UINT16 *pf1_data;
|
||||||
UINT16 *pf2_data;
|
UINT16 *pf2_data;
|
||||||
UINT16 *pf1_scroll_data;
|
UINT16 *pf1_scroll_data;
|
||||||
|
@ -16,13 +16,13 @@ public:
|
|||||||
beathead_state(running_machine &machine)
|
beathead_state(running_machine &machine)
|
||||||
: atarigen_state(machine),
|
: atarigen_state(machine),
|
||||||
m_maincpu(*machine.device<asap_device>("maincpu")) { }
|
m_maincpu(*machine.device<asap_device>("maincpu")) { }
|
||||||
|
|
||||||
virtual void machine_start();
|
virtual void machine_start();
|
||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
|
|
||||||
virtual void video_start();
|
virtual void video_start();
|
||||||
virtual bool video_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
|
virtual bool video_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
asap_device & m_maincpu;
|
asap_device & m_maincpu;
|
||||||
|
|
||||||
UINT32 * m_videoram;
|
UINT32 * m_videoram;
|
||||||
|
@ -11,7 +11,7 @@ public:
|
|||||||
UINT8 *spriteram;
|
UINT8 *spriteram;
|
||||||
UINT8 *fgram;
|
UINT8 *fgram;
|
||||||
UINT8 *bgram;
|
UINT8 *bgram;
|
||||||
|
|
||||||
int sound_cpu_busy;
|
int sound_cpu_busy;
|
||||||
UINT32 bg_tile_offset;
|
UINT32 bg_tile_offset;
|
||||||
};
|
};
|
||||||
|
@ -11,7 +11,7 @@ public:
|
|||||||
UINT16 *videoram;
|
UINT16 *videoram;
|
||||||
UINT16 *bg_videoram16;
|
UINT16 *bg_videoram16;
|
||||||
UINT16 invert_controls;
|
UINT16 invert_controls;
|
||||||
|
|
||||||
tilemap_t *bg2_tilemap;
|
tilemap_t *bg2_tilemap;
|
||||||
tilemap_t *bg_tilemap;
|
tilemap_t *bg_tilemap;
|
||||||
tilemap_t *fg_tilemap;
|
tilemap_t *fg_tilemap;
|
||||||
|
@ -10,7 +10,7 @@ public:
|
|||||||
int sound_status;
|
int sound_status;
|
||||||
|
|
||||||
UINT16* pow_fg_videoram;
|
UINT16* pow_fg_videoram;
|
||||||
|
|
||||||
UINT16 *spriteram;
|
UINT16 *spriteram;
|
||||||
UINT16 *paletteram;
|
UINT16 *paletteram;
|
||||||
int sprite_flip_axis;
|
int sprite_flip_axis;
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
/* Demon world */
|
/* Demon world */
|
||||||
int dsp_on;
|
int dsp_on;
|
||||||
int dsp_BIO;
|
int dsp_BIO;
|
||||||
int dsp_execute;
|
int dsp_execute;
|
||||||
UINT32 dsp_addr_w;
|
UINT32 dsp_addr_w;
|
||||||
UINT32 main_ram_seg;
|
UINT32 main_ram_seg;
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ public:
|
|||||||
int reset; /* Hack! See toaplan1_bcu_control below */
|
int reset; /* Hack! See toaplan1_bcu_control below */
|
||||||
|
|
||||||
tilemap_t *pf1_tilemap, *pf2_tilemap, *pf3_tilemap, *pf4_tilemap;
|
tilemap_t *pf1_tilemap, *pf2_tilemap, *pf3_tilemap, *pf4_tilemap;
|
||||||
|
|
||||||
// an empty tile, so that we can safely disable tiles
|
// an empty tile, so that we can safely disable tiles
|
||||||
UINT8 empty_tile[8*8];
|
UINT8 empty_tile[8*8];
|
||||||
};
|
};
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
size_t spriteram_size;
|
size_t spriteram_size;
|
||||||
UINT8 * palettebank; // sbasketb
|
UINT8 * palettebank; // sbasketb
|
||||||
UINT8 * spriteram_select; // sbasketb
|
UINT8 * spriteram_select; // sbasketb
|
||||||
|
|
||||||
/* video-related */
|
/* video-related */
|
||||||
tilemap_t *bg_tilemap;
|
tilemap_t *bg_tilemap;
|
||||||
int bg_bank, sprite_bank1, sprite_bank2; // trackfld
|
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];
|
page = (offset<<2) / page_sizes[memc_pagesize];
|
||||||
poffs = (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)
|
if (memc_pages[page] != -1)
|
||||||
{
|
{
|
||||||
@ -339,8 +339,8 @@ DIRECT_UPDATE_HANDLER( a310_setopbase )
|
|||||||
|
|
||||||
void archimedes_driver_init(running_machine *machine)
|
void archimedes_driver_init(running_machine *machine)
|
||||||
{
|
{
|
||||||
// address_space *space = machine->device<arm_device>("maincpu")->space(AS_PROGRAM);
|
// address_space *space = machine->device<arm_device>("maincpu")->space(AS_PROGRAM);
|
||||||
// space->set_direct_update_handler(direct_update_delegate_create_static(a310_setopbase, *machine));
|
// space->set_direct_update_handler(direct_update_delegate_create_static(a310_setopbase, *machine));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *const ioc_regnames[] =
|
static const char *const ioc_regnames[] =
|
||||||
@ -711,15 +711,15 @@ static void vidc_dynamic_res_change(running_machine *machine)
|
|||||||
{
|
{
|
||||||
/* sanity checks - first pass */
|
/* sanity checks - first pass */
|
||||||
/*
|
/*
|
||||||
total cycles + border end
|
total cycles + border end
|
||||||
*/
|
*/
|
||||||
if(vidc_regs[VIDC_HCR] && vidc_regs[VIDC_HBER] &&
|
if(vidc_regs[VIDC_HCR] && vidc_regs[VIDC_HBER] &&
|
||||||
vidc_regs[VIDC_VCR] && vidc_regs[VIDC_VBER])
|
vidc_regs[VIDC_VCR] && vidc_regs[VIDC_VBER])
|
||||||
{
|
{
|
||||||
/* sanity checks - second pass */
|
/* 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]) &&
|
if((vidc_regs[VIDC_HCR] >= vidc_regs[VIDC_HBER]) &&
|
||||||
(vidc_regs[VIDC_HBER] >= vidc_regs[VIDC_HBSR]) &&
|
(vidc_regs[VIDC_HBER] >= vidc_regs[VIDC_HBSR]) &&
|
||||||
(vidc_regs[VIDC_VCR] >= vidc_regs[VIDC_VBER]) &&
|
(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;
|
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]
|
// 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]);
|
// ,vidc_stereo_reg[4],vidc_stereo_reg[5],vidc_stereo_reg[6],vidc_stereo_reg[7]);
|
||||||
}
|
}
|
||||||
else if (reg >= 0x80 && reg <= 0xbc)
|
else if (reg >= 0x80 && reg <= 0xbc)
|
||||||
{
|
{
|
||||||
switch(reg)
|
switch(reg)
|
||||||
{
|
{
|
||||||
case VIDC_HCR: vidc_regs[VIDC_HCR] = ((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_HSWR: vidc_regs[VIDC_HSWR] = (val >> 14)+1; break;
|
||||||
case VIDC_HBSR: vidc_regs[VIDC_HBSR] = ((val >> 14)<<1)+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_HDSR: vidc_regs[VIDC_HDSR] = (val >> 14); break;
|
||||||
case VIDC_HDER: vidc_regs[VIDC_HDER] = (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;
|
case VIDC_HBER: vidc_regs[VIDC_HBER] = ((val >> 14)<<1)+1; break;
|
||||||
// #define VIDC_HCSR 0x98
|
// #define VIDC_HCSR 0x98
|
||||||
// #define VIDC_HIR 0x9c
|
// #define VIDC_HIR 0x9c
|
||||||
|
|
||||||
case VIDC_VCR: vidc_regs[VIDC_VCR] = ((val >> 14)<<1)+1; break;
|
case VIDC_VCR: vidc_regs[VIDC_VCR] = ((val >> 14)<<1)+1; break;
|
||||||
// #define VIDC_VSWR 0xa4
|
// #define VIDC_VSWR 0xa4
|
||||||
case VIDC_VBSR: vidc_regs[VIDC_VBSR] = (val >> 14)+1; break;
|
case VIDC_VBSR: vidc_regs[VIDC_VBSR] = (val >> 14)+1; break;
|
||||||
case VIDC_VDSR: vidc_regs[VIDC_VDSR] = (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_VDER: vidc_regs[VIDC_VDER] = (val >> 14)+1; break;
|
||||||
case VIDC_VBER: vidc_regs[VIDC_VBER] = (val >> 14)+1; break;
|
case VIDC_VBER: vidc_regs[VIDC_VBER] = (val >> 14)+1; break;
|
||||||
// #define VIDC_VCSR 0xb8
|
// #define VIDC_VCSR 0xb8
|
||||||
// #define VIDC_VCER 0xbc
|
// #define VIDC_VCER 0xbc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1000,7 +1000,7 @@ WRITE32_HANDLER(archimedes_memc_page_w)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// log >>= (12 + memc_pagesize);
|
// log >>= (12 + memc_pagesize);
|
||||||
|
|
||||||
// always make sure ROM mode is disconnected when this occurs
|
// always make sure ROM mode is disconnected when this occurs
|
||||||
memc_latchrom = 0;
|
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 */
|
/* 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;
|
flytiger_palette_bank = data & 0x08;
|
||||||
|
|
||||||
/* bit 4 changes tilemaps priority */
|
/* bit 4 changes tilemaps priority */
|
||||||
|
@ -76,7 +76,7 @@ static const pen_t default_colortable[] =
|
|||||||
typedef struct _ppu2c0x_state ppu2c0x_state;
|
typedef struct _ppu2c0x_state ppu2c0x_state;
|
||||||
struct _ppu2c0x_state
|
struct _ppu2c0x_state
|
||||||
{
|
{
|
||||||
address_space *space; /* memory space */
|
address_space *space; /* memory space */
|
||||||
bitmap_t *bitmap; /* target bitmap */
|
bitmap_t *bitmap; /* target bitmap */
|
||||||
UINT8 *spriteram; /* sprite ram */
|
UINT8 *spriteram; /* sprite ram */
|
||||||
pen_t *colortable; /* color table modified at run time */
|
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->pf2_tilemap, 0);
|
||||||
tilemap_set_transparent_pen(state->pf3_tilemap, 0);
|
tilemap_set_transparent_pen(state->pf3_tilemap, 0);
|
||||||
tilemap_set_transparent_pen(state->pf4_tilemap, 0);
|
tilemap_set_transparent_pen(state->pf4_tilemap, 0);
|
||||||
|
|
||||||
memset(state->empty_tile, 0x00, sizeof(state->empty_tile));
|
memset(state->empty_tile, 0x00, sizeof(state->empty_tile));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ VIDEO_START( toaplan2 )
|
|||||||
|
|
||||||
if (state->vdp1 != NULL)
|
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->custom_priority_bitmap = state->custom_priority_bitmap;
|
||||||
state->vdp1->displog = &state->displog;
|
state->vdp1->displog = &state->displog;
|
||||||
}
|
}
|
||||||
@ -345,7 +345,7 @@ VIDEO_UPDATE( toaplan2_dual )
|
|||||||
{
|
{
|
||||||
gp9001_log_vram(state->vdp0, screen->machine);
|
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);
|
bitmap_fill(state->custom_priority_bitmap, cliprect, 0);
|
||||||
state->vdp0->gp9001_render_vdp(screen->machine, bitmap, cliprect);
|
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>();
|
toaplan2_state *state = screen->machine->driver_data<toaplan2_state>();
|
||||||
|
|
||||||
// bitmap_fill(bitmap,cliprect,0);
|
// bitmap_fill(bitmap,cliprect,0);
|
||||||
// bitmap_fill(gp9001_custom_priority_bitmap, cliprect, 0);
|
// bitmap_fill(gp9001_custom_priority_bitmap, cliprect, 0);
|
||||||
|
|
||||||
if (state->vdp0)
|
if (state->vdp0)
|
||||||
{
|
{
|
||||||
@ -379,7 +379,7 @@ VIDEO_UPDATE( toaplan2_mixed )
|
|||||||
bitmap_fill(state->custom_priority_bitmap, cliprect, 0);
|
bitmap_fill(state->custom_priority_bitmap, cliprect, 0);
|
||||||
state->vdp1->gp9001_render_vdp(screen->machine, state->secondary_render_bitmap, cliprect);
|
state->vdp1->gp9001_render_vdp(screen->machine, state->secondary_render_bitmap, cliprect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// key test places in batsugun
|
// key test places in batsugun
|
||||||
// level 2 - the two layers of clouds (will appear under background, or over ships if wrong)
|
// 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
|
// when implemented based directly on the PAL equation it doesn't work, however, my own equations roughly based
|
||||||
// on that do.
|
// on that do.
|
||||||
//
|
//
|
||||||
|
|
||||||
if (state->vdp0 && state->vdp1)
|
if (state->vdp0 && state->vdp1)
|
||||||
{
|
{
|
||||||
@ -409,11 +409,11 @@ VIDEO_UPDATE( toaplan2_mixed )
|
|||||||
{
|
{
|
||||||
UINT16 GPU0_LUTaddr = src_vdp0[x];
|
UINT16 GPU0_LUTaddr = src_vdp0[x];
|
||||||
UINT16 GPU1_LUTaddr = src_vdp1[x];
|
UINT16 GPU1_LUTaddr = src_vdp1[x];
|
||||||
|
|
||||||
// these equations is derived from the PAL, but doesn't seem to work?
|
// these equations is derived from the PAL, but doesn't seem to work?
|
||||||
|
|
||||||
int COMPARISON = ((GPU0_LUTaddr & 0x0780) > (GPU1_LUTaddr & 0x0780));
|
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)
|
// 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
|
#if 0
|
||||||
int result =
|
int result =
|
||||||
|
@ -225,7 +225,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
|
|||||||
//
|
//
|
||||||
//if (offs < 0x26)
|
//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[];
|
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