Cleanups and version bump.

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

View File

@ -190,9 +190,9 @@ void address_map_entry::set_write_bank(const device_config &devconfig, const cha
void address_map_entry::set_readwrite_bank(const device_config &devconfig, const char *tag) 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);
} }

View File

@ -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)

View File

@ -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
***************************************************************************/ ***************************************************************************/

View File

@ -21,7 +21,7 @@
- 1-9 For fractional arithmetic, the 31-bit product is added to the 40-bit contents of A or B. No pipeline! - 1-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;

View File

@ -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) ||

View File

@ -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);
} }

View File

@ -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;

View File

@ -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)
{ {

View File

@ -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;

View File

@ -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;
} }

View File

@ -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,

View File

@ -6,7 +6,7 @@ The Hitachi hcd62121 is the custom cpu which was used in the Casio
CFX-9850 (and maybe some other things too). 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;

View File

@ -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 );

View File

@ -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;
} }

View File

@ -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);

View File

@ -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 );

View File

@ -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 );

View File

@ -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))

View File

@ -92,6 +92,6 @@ delegate_generic_function delegate_convert_raw(delegate_generic_class *&object,
// otherwise, it is the byte index into the vtable where the actual function lives // 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

View File

@ -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)); }

View File

@ -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
//------------------------------------------------- //-------------------------------------------------

View File

@ -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; }

View File

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

View File

@ -93,7 +93,7 @@ device_config_execute_interface::~device_config_execute_interface()
//------------------------------------------------- //-------------------------------------------------
// static_set_disable - configuration helper to // static_set_disable - configuration helper to
// set the disabled state of a device // 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
//------------------------------------------------- //-------------------------------------------------

View File

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

View File

@ -68,7 +68,7 @@ device_config_sound_interface::~device_config_sound_interface()
//------------------------------------------------- //-------------------------------------------------
// static_add_route - configuration helper to add // static_add_route - configuration helper to add
// a new route to the device // 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
//------------------------------------------------- //-------------------------------------------------

View File

@ -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;

View File

@ -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();

View File

@ -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)

View File

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

View File

@ -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;

View File

@ -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__ */

View File

@ -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 )

View File

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

View File

@ -107,7 +107,7 @@ device_t *eeprom_device_config::alloc_device(running_machine &machine) const
//------------------------------------------------- //-------------------------------------------------
// static_set_interface - configuration helper // static_set_interface - configuration helper
// to set the interface // 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;
} }

View File

@ -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)
**********************************************************************/ **********************************************************************/

View File

@ -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.
**********************************************************************/ **********************************************************************/

View File

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

View File

@ -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
***************************************************************************/ ***************************************************************************/

View File

@ -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
***************************************************************************/ ***************************************************************************/

View File

@ -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)
*/ */

View File

@ -117,7 +117,7 @@ device_config *machine_config::device_add(device_config *owner, const char *tag,
//------------------------------------------------- //-------------------------------------------------
// device_replace - configuration helper to // device_replace - configuration helper to
// replace one device with a new device // 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
//------------------------------------------------- //-------------------------------------------------

View File

@ -3289,7 +3289,7 @@ void address_table::populate_range_mirrored(offs_t bytestart, offs_t byteend, of
//------------------------------------------------- //-------------------------------------------------
// depopulate_unused - scan the table and // 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()

View File

@ -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__ */

View File

@ -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;
} }

View File

@ -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);

View File

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

View File

@ -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 */

View File

@ -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);

View File

@ -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++;

View File

@ -1802,7 +1802,7 @@ void screen_device_config::static_set_size(device_config *device, UINT16 width,
//------------------------------------------------- //-------------------------------------------------
// static_set_visarea - configuration helper to // static_set_visarea - configuration helper to
// set the visible area of the screen // 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
//------------------------------------------------- //-------------------------------------------------

View File

@ -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)); \

View File

@ -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); }

View File

@ -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 */

View File

@ -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.

View File

@ -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

View File

@ -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 */

View File

@ -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;
} }
} }

View File

@ -4403,7 +4403,7 @@ ROM_START( ffightu )
ROM_LOAD16_BYTE( "ff_36.11f", 0x00000, 0x20000, CRC(f9a5ce83) SHA1(0756ae576a1f6d5b8b22f8630dca40ef38567ea6) ) // in "30" socket ROM_LOAD16_BYTE( "ff_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 )

View File

@ -8417,7 +8417,7 @@ ROM_START( ecofghtrd )
ROM_LOAD16_WORD_SWAP( "ueced.04", 0x080000, 0x80000, CRC(f800138d) SHA1(a8c05da5d33c338a82fed4f7b59c6ba8c10e8597) ) ROM_LOAD16_WORD_SWAP( "ueced.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) )

View File

@ -266,8 +266,8 @@ static INPUT_PORTS_START( bestri )
PORT_DIPNAME( 0x00c0, 0x00c0, "Girls" ) PORT_DIPLOCATION("SW1:7,8") /* stored at 0x3a6faa.w */ PORT_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" )

View File

@ -297,15 +297,15 @@ Donkey Kong Junior Notes
------------------------------------------------ ------------------------------------------------
D2K Jumpman returns Notes D2K Jumpman returns Notes
========================= =========================
This is a DKong/Hack combo using a Braze Technologies High Score Save pcb. This 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 */

View File

@ -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

View File

@ -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"

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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) )

View File

@ -309,7 +309,7 @@ static INTERRUPT_GEN( pachifev_vblank_irq )
/* I wish I had found a better way to handle cocktail inputs, but I can't find a way to access internal RAM */ /* 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;

View File

@ -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) )

View File

@ -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

View File

@ -300,7 +300,7 @@ static ADDRESS_MAP_START( yieartf_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */ AM_RANGE(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 */

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;
}; };

View File

@ -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;

View File

@ -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;

View File

@ -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];
}; };

View File

@ -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

View File

@ -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;

View File

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

View File

@ -195,7 +195,7 @@ WRITE8_HANDLER( flytiger_ctrl_w )
/* bits 1, 2 used but unknown */ /* 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 */

View File

@ -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 */

View File

@ -223,7 +223,7 @@ static void toaplan1_create_tilemaps(running_machine *machine)
tilemap_set_transparent_pen(state->pf2_tilemap, 0); tilemap_set_transparent_pen(state->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));
} }

View File

@ -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 =

View File

@ -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 */
//} //}

View File

@ -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__")";