Cleanups and version bump

This commit is contained in:
Miodrag Milanovic 2013-07-23 07:18:56 +00:00
parent d3f32a1ba7
commit 14629cbcb4
392 changed files with 4488 additions and 4636 deletions

View File

@ -182,7 +182,7 @@ int include_mapping(const char *srcfile)
filename[pos] = *srcptr++; filename[pos] = *srcptr++;
filename[pos+1] = 0; filename[pos+1] = 0;
} }
srcptr++; // skip comma srcptr++; // skip comma
char mapping[256]; char mapping[256];
mapping[0] = 0; mapping[0] = 0;
for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(mapping) - 1 && (*srcptr!=10) && (*srcptr!=13); pos++) for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(mapping) - 1 && (*srcptr!=10) && (*srcptr!=13); pos++)
@ -296,23 +296,23 @@ int parse_file(const char *srcfile)
drivname[pos] = *srcptr++; drivname[pos] = *srcptr++;
drivname[pos+1] = 0; drivname[pos+1] = 0;
} }
librarylist_entry *lentry = new librarylist_entry; librarylist_entry *lentry = new librarylist_entry;
lentry->name.cpy(drivname); lentry->name.cpy(drivname);
lentry->next = NULL; lentry->next = NULL;
lentry->sourcefiles = NULL; lentry->sourcefiles = NULL;
if (last_libraryitem!=NULL) if (last_libraryitem!=NULL)
{ {
last_libraryitem->next = lentry; last_libraryitem->next = lentry;
} }
last_libraryitem = lentry; last_libraryitem = lentry;
last_sourceitem = NULL; last_sourceitem = NULL;
if (librarylist==NULL) if (librarylist==NULL)
{ {
librarylist = lentry; librarylist = lentry;
} }
continue; continue;
} }
@ -331,9 +331,9 @@ int parse_file(const char *srcfile)
lentry->next = NULL; lentry->next = NULL;
if (last_sourceitem!=NULL) if (last_sourceitem!=NULL)
{ {
last_sourceitem->next = lentry; last_sourceitem->next = lentry;
} }
last_sourceitem = lentry; last_sourceitem = lentry;
if (last_libraryitem->sourcefiles==NULL) if (last_libraryitem->sourcefiles==NULL)
{ {
last_libraryitem->sourcefiles = lentry; last_libraryitem->sourcefiles = lentry;
@ -361,7 +361,7 @@ int parse_for_drivers(const char *srcfile)
while (core_fgets(buffer, ARRAY_LENGTH(buffer), file) != NULL) while (core_fgets(buffer, ARRAY_LENGTH(buffer), file) != NULL)
{ {
astring line; astring line;
// rip through it to find all drivers // rip through it to find all drivers
char *srcptr = (char *)buffer; char *srcptr = (char *)buffer;
char *endptr = srcptr + strlen(buffer); char *endptr = srcptr + strlen(buffer);
@ -408,7 +408,7 @@ int parse_for_drivers(const char *srcfile)
line.cat(*srcptr++); line.cat(*srcptr++);
} }
} }
if ((line.find(0,"GAME(")==0) || (line.find(0,"GAMEL(")==0) || if ((line.find(0,"GAME(")==0) || (line.find(0,"GAMEL(")==0) ||
(line.find(0,"COMP(")==0) || (line.find(0,"CONS(")==0) || (line.find(0,"COMP(")==0) || (line.find(0,"CONS(")==0) ||
(line.find(0,"SYST(")==0)) (line.find(0,"SYST(")==0))
@ -417,7 +417,7 @@ int parse_for_drivers(const char *srcfile)
if (p1<0) continue; if (p1<0) continue;
int p2 = line.find(p1+1,","); int p2 = line.find(p1+1,",");
if (p2<0) continue; if (p2<0) continue;
printf("%s\n",line.substr(p1+1,p2-p1-1).cstr()); printf("%s\n",line.substr(p1+1,p2-p1-1).cstr());
} }
} }
@ -445,14 +445,14 @@ int main(int argc, char *argv[])
exclude_path **excpathhead = &excpaths; exclude_path **excpathhead = &excpaths;
astring srcdir; astring srcdir;
int unadorned = 0; int unadorned = 0;
librarylist = NULL; librarylist = NULL;
last_libraryitem = NULL; last_libraryitem = NULL;
last_sourceitem = NULL; last_sourceitem = NULL;
// extract arguments // extract arguments
const char *srcfile = argv[1]; const char *srcfile = argv[1];
if (parse_file(srcfile)) if (parse_file(srcfile))
return 1; return 1;
@ -500,16 +500,16 @@ int main(int argc, char *argv[])
// generate list of drivers // generate list of drivers
if (srcdir.len() == 0) if (srcdir.len() == 0)
{ {
for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next) for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next)
{ {
for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next) for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next)
{ {
printf("// Drivers from %s.c\n",src->name.cstr()); printf("// Drivers from %s.c\n",src->name.cstr());
astring srcfile; astring srcfile;
// build the source filename // build the source filename
srcfile.printf("%s%c%s.c", "src", PATH_SEPARATOR[0], src->name.cstr()); srcfile.printf("%s%c%s.c", "src", PATH_SEPARATOR[0], src->name.cstr());
parse_for_drivers(srcfile); parse_for_drivers(srcfile);
astring srcfile_inc; astring srcfile_inc;
// build the source filename // build the source filename
srcfile_inc.printf("%s%c%s.inc", "src", PATH_SEPARATOR[0], src->name.cstr()); srcfile_inc.printf("%s%c%s.inc", "src", PATH_SEPARATOR[0], src->name.cstr());
@ -518,15 +518,15 @@ int main(int argc, char *argv[])
} }
} }
return 0; return 0;
} }
else else
{ {
include_mapping("src/emu/cpu/cpu.mak"); include_mapping("src/emu/cpu/cpu.mak");
include_mapping("src/emu/video/video.mak"); include_mapping("src/emu/video/video.mak");
include_mapping("src/emu/sound/sound.mak"); include_mapping("src/emu/sound/sound.mak");
include_mapping("src/emu/machine/machine.mak"); include_mapping("src/emu/machine/machine.mak");
if (librarylist!=NULL) if (librarylist!=NULL)
{ {
printf("OBJDIRS += \\\n"); printf("OBJDIRS += \\\n");
printf("\t$(OBJ)/target \\\n"); printf("\t$(OBJ)/target \\\n");
printf("\t$(OBJ)/mame/audio \\\n"); printf("\t$(OBJ)/mame/audio \\\n");
@ -541,13 +541,13 @@ int main(int argc, char *argv[])
printf("\t$(OBJ)/mess/video \\\n"); printf("\t$(OBJ)/mess/video \\\n");
printf("\n\n"); printf("\n\n");
printf("DRVLIBS += \\\n"); printf("DRVLIBS += \\\n");
for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next) for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next)
{ {
printf("\t$(OBJ)/target/%s.a \\\n",lib->name.cstr()); printf("\t$(OBJ)/target/%s.a \\\n",lib->name.cstr());
} }
printf("\n"); printf("\n");
} }
// recurse over subdirectories // recurse over subdirectories
return recurse_dir(srcdir); return recurse_dir(srcdir);
@ -593,24 +593,23 @@ static int recurse_dir(astring &srcdir)
{ {
int result = 0; int result = 0;
// iterate through each file // iterate through each file
for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next) for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next)
{ {
for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next) for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next)
{ {
astring srcfile; astring srcfile;
// build the source filename // build the source filename
srcfile.printf("%s%s.c", srcdir.cstr(), src->name.cstr()); srcfile.printf("%s%s.c", srcdir.cstr(), src->name.cstr());
dependency_map depend_map; dependency_map depend_map;
// find dependencies // find dependencies
file_entry &file = compute_dependencies(srcfile); file_entry &file = compute_dependencies(srcfile);
recurse_dependencies(file, depend_map); recurse_dependencies(file, depend_map);
for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry)) for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry))
{ {
astring t(entry->tag()); astring t(entry->tag());
if (core_filename_ends_with(t, ".h")) if (core_filename_ends_with(t, ".h"))
@ -623,19 +622,19 @@ static int recurse_dir(astring &srcdir)
} }
} }
} }
} }
} }
// iterate through each file // iterate through each file
for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next) for (librarylist_entry *lib = librarylist; lib != NULL; lib = lib->next)
{ {
// convert the target from source to object (makes assumptions about rules) // convert the target from source to object (makes assumptions about rules)
astring target("$(OBJ)/target/",lib->name.cstr()); astring target("$(OBJ)/target/",lib->name.cstr());
target.cat(".a"); target.cat(".a");
printf("\n%s : \\\n", target.cstr()); printf("\n%s : \\\n", target.cstr());
for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next) for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next)
{ {
astring srcfile; astring srcfile;
@ -648,7 +647,7 @@ static int recurse_dir(astring &srcdir)
recurse_dependencies(file, depend_map); recurse_dependencies(file, depend_map);
// iterate over the hashed dependencies and output them as well // iterate over the hashed dependencies and output them as well
for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry)) for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry))
{ {
astring t(entry->tag()); astring t(entry->tag());
t.replace(0, "src/", "$(OBJ)/"); t.replace(0, "src/", "$(OBJ)/");
@ -659,8 +658,8 @@ static int recurse_dir(astring &srcdir)
} }
} }
} }
printf("\n"); printf("\n");
for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next) for (list_entry *src = lib->sourcefiles; src != NULL; src = src->next)
{ {
astring srcfile; astring srcfile;
@ -670,8 +669,8 @@ static int recurse_dir(astring &srcdir)
// find dependencies // find dependencies
file_entry &file = compute_dependencies(srcfile); file_entry &file = compute_dependencies(srcfile);
recurse_dependencies(file, depend_map); recurse_dependencies(file, depend_map);
for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry)) for (dependency_map::entry_t *entry = depend_map.first(); entry != NULL; entry = depend_map.next(entry))
{ {
astring t(entry->tag()); astring t(entry->tag());
if (core_filename_ends_with(t, ".lay")) if (core_filename_ends_with(t, ".lay"))
@ -682,8 +681,8 @@ static int recurse_dir(astring &srcdir)
t.replace(0, "src/", "$(OBJ)/"); t.replace(0, "src/", "$(OBJ)/");
t.replace(0, ".lay", ".lh"); t.replace(0, ".lay", ".lh");
printf("%s: %s\n", target2.cstr(), t.cstr()); printf("%s: %s\n", target2.cstr(), t.cstr());
} }
if (core_filename_ends_with(t, ".inc")) if (core_filename_ends_with(t, ".inc"))
{ {
@ -691,7 +690,7 @@ static int recurse_dir(astring &srcdir)
target2.replace(0, "src/", "$(OBJ)/"); target2.replace(0, "src/", "$(OBJ)/");
target2.replace(0, ".c", ".o"); target2.replace(0, ".c", ".o");
printf("%s: %s\n", target2.cstr(), t.cstr()); printf("%s: %s\n", target2.cstr(), t.cstr());
} }
} }
} }
@ -747,7 +746,7 @@ static file_entry &compute_dependencies(astring &srcfile)
file.deplist = dep; file.deplist = dep;
dep->file = &compute_dependencies(machinefile); dep->file = &compute_dependencies(machinefile);
} }
astring videofile = astring(srcfile); astring videofile = astring(srcfile);
videofile.replace("drivers","video"); videofile.replace("drivers","video");
if (check_file(videofile)) if (check_file(videofile))
@ -757,7 +756,7 @@ static file_entry &compute_dependencies(astring &srcfile)
file.deplist = dep; file.deplist = dep;
dep->file = &compute_dependencies(videofile); dep->file = &compute_dependencies(videofile);
} }
// find the #include directives in this file // find the #include directives in this file
for (int index = 0; index < filelength; index++) for (int index = 0; index < filelength; index++)
@ -795,7 +794,7 @@ static file_entry &compute_dependencies(astring &srcfile)
astring target; astring target;
filename.replace(".lh",".lay"); filename.replace(".lh",".lay");
// create a new dependency // create a new dependency
if (find_include_file(target, srcfile, filename)) if (find_include_file(target, srcfile, filename))
{ {

View File

@ -441,7 +441,7 @@ void _class :: _name(::address_map &map, device_t &device) \
#define AM_WRITE_LEGACY(_handler) \ #define AM_WRITE_LEGACY(_handler) \
curentry->set_handler(_handler, #_handler); curentry->set_handler(_handler, #_handler);
// legacy space reads/writes // legacy space reads/writes
#define AM_READWRITE_LEGACY(_rhandler, _whandler) \ #define AM_READWRITE_LEGACY(_rhandler, _whandler) \
curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler); curentry->set_handler(_rhandler, #_rhandler, _whandler, #_whandler);

View File

@ -645,4 +645,3 @@ offs_t alpha8201_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const U
extern CPU_DISASSEMBLE( alpha8201 ); extern CPU_DISASSEMBLE( alpha8201 );
return CPU_DISASSEMBLE_NAME(alpha8201)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(alpha8201)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -196,9 +196,9 @@ void am29000_cpu_device::device_start()
state_add( AM29000_IPB, "IPB", m_ipb ).formatstr("%08X"); state_add( AM29000_IPB, "IPB", m_ipb ).formatstr("%08X");
state_add( AM29000_Q, "Q", m_q ).formatstr("%08X"); state_add( AM29000_Q, "Q", m_q ).formatstr("%08X");
state_add( AM29000_ALU, "ALU", m_alu ).formatstr("%08X"); state_add( AM29000_ALU, "ALU", m_alu ).formatstr("%08X");
// state_add( AM29000_BP, "BP", GET_ALU_BP).formatstr("%08X"); // state_add( AM29000_BP, "BP", GET_ALU_BP).formatstr("%08X");
// state_add( AM29000_FC, "FC", GET_ALU_FC).formatstr("%08X"); // state_add( AM29000_FC, "FC", GET_ALU_FC).formatstr("%08X");
// state_add( AM29000_CR, "CR", GET_CHC_CR).formatstr("%08X"); // state_add( AM29000_CR, "CR", GET_CHC_CR).formatstr("%08X");
state_add( AM29000_FPE, "FPE", m_fpe ).formatstr("%08X"); state_add( AM29000_FPE, "FPE", m_fpe ).formatstr("%08X");
state_add( AM29000_INTE, "INTE", m_inte ).formatstr("%08X"); state_add( AM29000_INTE, "INTE", m_inte ).formatstr("%08X");
state_add( AM29000_FPS, "FPS", m_fps ).formatstr("%08X"); state_add( AM29000_FPS, "FPS", m_fps ).formatstr("%08X");
@ -409,15 +409,15 @@ void am29000_cpu_device::state_string_export(const device_state_entry &entry, as
{ {
case STATE_GENFLAGS: case STATE_GENFLAGS:
string.printf("%c%c%c%c%c%c%c%c%c|%3d", m_alu & ALU_V ? 'V' : '.', string.printf("%c%c%c%c%c%c%c%c%c|%3d", m_alu & ALU_V ? 'V' : '.',
m_alu & ALU_Z ? 'Z' : '.', m_alu & ALU_Z ? 'Z' : '.',
m_alu & ALU_N ? 'N' : '.', m_alu & ALU_N ? 'N' : '.',
m_alu & ALU_C ? 'C' : '.', m_alu & ALU_C ? 'C' : '.',
m_cps & CPS_IP ? 'I' : '.', m_cps & CPS_IP ? 'I' : '.',
m_cps & CPS_FZ ? 'F' : '.', m_cps & CPS_FZ ? 'F' : '.',
m_cps & CPS_SM ? 'S' : 'U', m_cps & CPS_SM ? 'S' : 'U',
m_cps & CPS_DI ? 'I' : '.', m_cps & CPS_DI ? 'I' : '.',
m_cps & CPS_DA ? 'D' : '.', m_cps & CPS_DA ? 'D' : '.',
(m_r[1] >> 2) & 0x7f); (m_r[1] >> 2) & 0x7f);
break; break;
} }
} }
@ -675,4 +675,3 @@ offs_t am29000_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UIN
extern CPU_DISASSEMBLE( am29000 ); extern CPU_DISASSEMBLE( am29000 );
return CPU_DISASSEMBLE_NAME(am29000)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(am29000)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -825,7 +825,7 @@ void apexc_cpu_device::device_reset()
/* next two lines are just the product of my bold fantasy */ /* next two lines are just the product of my bold fantasy */
m_cr = 0; /* first instruction executed will be a stop */ m_cr = 0; /* first instruction executed will be a stop */
m_running = TRUE; /* this causes the CPU to load the instruction at 0/0, m_running = TRUE; /* this causes the CPU to load the instruction at 0/0,
which enables easy booting (just press run on the panel) */ which enables easy booting (just press run on the panel) */
m_a = 0; m_a = 0;
m_r = 0; m_r = 0;
m_pc = 0; m_pc = 0;
@ -854,4 +854,3 @@ offs_t apexc_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
extern CPU_DISASSEMBLE( apexc ); extern CPU_DISASSEMBLE( apexc );
return CPU_DISASSEMBLE_NAME(apexc)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(apexc)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -73,7 +73,7 @@ protected:
int m_current_word; /* current word position within track (0-31) */ int m_current_word; /* current word position within track (0-31) */
int m_running; /* 1 flag: */ int m_running; /* 1 flag: */
/* running: flag implied by the existence of the stop instruction */ /* running: flag implied by the existence of the stop instruction */
UINT32 m_pc; /* address of next instruction for the disassembler */ UINT32 m_pc; /* address of next instruction for the disassembler */
address_space *m_program; address_space *m_program;

View File

@ -320,7 +320,7 @@ void arm_cpu_device::device_reset()
m_coproRegister[i] = 0; m_coproRegister[i] = 0;
} }
m_pendingIrq = 0; m_pendingIrq = 0;
m_pendingFiq = 0; m_pendingFiq = 0;
/* start up in SVC mode with interrupts disabled. */ /* start up in SVC mode with interrupts disabled. */
R15 = eARM_MODE_SVC|I_MASK|F_MASK; R15 = eARM_MODE_SVC|I_MASK|F_MASK;
@ -549,13 +549,13 @@ void arm_cpu_device::state_string_export(const device_state_entry &entry, astrin
{ {
case STATE_GENFLAGS: case STATE_GENFLAGS:
string.printf("%c%c%c%c%c%c %s", string.printf("%c%c%c%c%c%c %s",
(m_sArmRegister[15] & N_MASK) ? 'N' : '-', (m_sArmRegister[15] & N_MASK) ? 'N' : '-',
(m_sArmRegister[15] & Z_MASK) ? 'Z' : '-', (m_sArmRegister[15] & Z_MASK) ? 'Z' : '-',
(m_sArmRegister[15] & C_MASK) ? 'C' : '-', (m_sArmRegister[15] & C_MASK) ? 'C' : '-',
(m_sArmRegister[15] & V_MASK) ? 'V' : '-', (m_sArmRegister[15] & V_MASK) ? 'V' : '-',
(m_sArmRegister[15] & I_MASK) ? 'I' : '-', (m_sArmRegister[15] & I_MASK) ? 'I' : '-',
(m_sArmRegister[15] & F_MASK) ? 'F' : '-', (m_sArmRegister[15] & F_MASK) ? 'F' : '-',
s[m_sArmRegister[15] & 3] ); s[m_sArmRegister[15] & 3] );
break; break;
} }
} }
@ -1470,4 +1470,3 @@ offs_t arm_be_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT
extern CPU_DISASSEMBLE( arm_be ); extern CPU_DISASSEMBLE( arm_be );
return CPU_DISASSEMBLE_NAME(arm_be)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(arm_be)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -95,8 +95,8 @@ protected:
class arm_be_cpu_device : public arm_cpu_device class arm_be_cpu_device : public arm_cpu_device
{ {
public: public:
// construction/destruction // construction/destruction
arm_be_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); arm_be_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected: protected:
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);

View File

@ -132,7 +132,7 @@ sa1110_cpu_device::sa1110_cpu_device(const machine_config &mconfig, const char *
} }
void arm7_cpu_device::set_cpsr(UINT32 val) void arm7_cpu_device::set_cpsr(UINT32 val)
{ {
if (m_archFlags & eARM_ARCHFLAGS_MODE26) if (m_archFlags & eARM_ARCHFLAGS_MODE26)
{ {
@ -558,7 +558,7 @@ void arm7_cpu_device::device_start()
state_add( ARM7_UR14, "UR14", m_r[eR14_UND] ).formatstr("%08X"); state_add( ARM7_UR14, "UR14", m_r[eR14_UND] ).formatstr("%08X");
state_add( ARM7_USPSR, "UR16", m_r[eSPSR_UND]).formatstr("%08X"); state_add( ARM7_USPSR, "UR16", m_r[eSPSR_UND]).formatstr("%08X");
state_add(STATE_GENFLAGS, "GENFLAGS", m_r[eCPSR]).formatstr("%13s").noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_r[eCPSR]).formatstr("%13s").noshow();
} }
@ -579,15 +579,15 @@ void arm7_cpu_device::state_string_export(const device_state_entry &entry, astri
{ {
case STATE_GENFLAGS: case STATE_GENFLAGS:
string.printf("%c%c%c%c%c%c%c%c %s", string.printf("%c%c%c%c%c%c%c%c %s",
(ARM7REG(eCPSR) & N_MASK) ? 'N' : '-', (ARM7REG(eCPSR) & N_MASK) ? 'N' : '-',
(ARM7REG(eCPSR) & Z_MASK) ? 'Z' : '-', (ARM7REG(eCPSR) & Z_MASK) ? 'Z' : '-',
(ARM7REG(eCPSR) & C_MASK) ? 'C' : '-', (ARM7REG(eCPSR) & C_MASK) ? 'C' : '-',
(ARM7REG(eCPSR) & V_MASK) ? 'V' : '-', (ARM7REG(eCPSR) & V_MASK) ? 'V' : '-',
(ARM7REG(eCPSR) & Q_MASK) ? 'Q' : '-', (ARM7REG(eCPSR) & Q_MASK) ? 'Q' : '-',
(ARM7REG(eCPSR) & I_MASK) ? 'I' : '-', (ARM7REG(eCPSR) & I_MASK) ? 'I' : '-',
(ARM7REG(eCPSR) & F_MASK) ? 'F' : '-', (ARM7REG(eCPSR) & F_MASK) ? 'F' : '-',
(ARM7REG(eCPSR) & T_MASK) ? 'T' : '-', (ARM7REG(eCPSR) & T_MASK) ? 'T' : '-',
GetModeText(ARM7REG(eCPSR)) ); GetModeText(ARM7REG(eCPSR)) );
break; break;
} }
} }
@ -1219,4 +1219,3 @@ UINT8 arm7_cpu_device::arm7_cpu_read8(UINT32 addr)
} }
#include "arm7drc.c" #include "arm7drc.c"

View File

@ -131,7 +131,7 @@ protected:
UINT8 m_archFlags; // architecture flags UINT8 m_archFlags; // architecture flags
//#if ARM7_MMU_ENABLE_HACK //#if ARM7_MMU_ENABLE_HACK
// UINT32 mmu_enable_addr; // workaround for "MMU is enabled when PA != VA" problem // UINT32 mmu_enable_addr; // workaround for "MMU is enabled when PA != VA" problem
//#endif //#endif
UINT32 m_copro_id; UINT32 m_copro_id;

View File

@ -228,4 +228,3 @@ void arm7_cpu_device::arm7_check_irq_state()
return; return;
} }
} }

View File

@ -358,8 +358,8 @@ void arm7_cpu_device::code_compile_block(UINT8 mode, offs_t pc)
/* get a description of this sequence */ /* get a description of this sequence */
// TODO FIXME // TODO FIXME
const opcode_desc *desclist = NULL; //m_impstate.drcfe->describe_code(pc); // TODO const opcode_desc *desclist = NULL; //m_impstate.drcfe->describe_code(pc); // TODO
// if (LOG_UML || LOG_NATIVE) // if (LOG_UML || LOG_NATIVE)
// log_opcode_desc(drcuml, desclist, 0); // log_opcode_desc(drcuml, desclist, 0);
/* if we get an error back, flush the cache and try again */ /* if we get an error back, flush the cache and try again */
bool succeeded = false; bool succeeded = false;
@ -1281,8 +1281,8 @@ void arm7_cpu_device::generate_sequence_instruction(drcuml_block *block, compile
/* add an entry for the log */ /* add an entry for the log */
// TODO FIXME // TODO FIXME
// if (LOG_UML && !(desc->flags & OPFLAG_VIRTUAL_NOOP)) // if (LOG_UML && !(desc->flags & OPFLAG_VIRTUAL_NOOP))
// log_add_disasm_comment(block, desc->pc, desc->opptr.l[0]); // log_add_disasm_comment(block, desc->pc, desc->opptr.l[0]);
/* set the PC map variable */ /* set the PC map variable */
//expc = (desc->flags & OPFLAG_IN_DELAY_SLOT) ? desc->pc - 3 : desc->pc; //expc = (desc->flags & OPFLAG_IN_DELAY_SLOT) ? desc->pc - 3 : desc->pc;

View File

@ -22,8 +22,8 @@ INT64 arm7_cpu_device::saturate_qbit_overflow(INT64 res)
void arm7_cpu_device::SwitchMode(UINT32 cpsr_mode_val) void arm7_cpu_device::SwitchMode(UINT32 cpsr_mode_val)
{ {
UINT32 cspr = m_r[eCPSR] & ~MODE_FLAG; UINT32 cspr = m_r[eCPSR] & ~MODE_FLAG;
set_cpsr(cspr | cpsr_mode_val); set_cpsr(cspr | cpsr_mode_val);
} }

View File

@ -1589,4 +1589,3 @@ void arm7_cpu_device::drctg0f_1(drcuml_block *block, compiler_state *compiler, c
UML_OR(block, DRC_REG(14), DRC_REG(14), 1); UML_OR(block, DRC_REG(14), DRC_REG(14), 1);
UML_MOV(block, DRC_PC, uml::I0); UML_MOV(block, DRC_PC, uml::I0);
} }

View File

@ -142,7 +142,7 @@ void ccpu_cpu_device::state_string_export(const device_state_entry &entry, astri
switch (entry.index()) switch (entry.index())
{ {
case STATE_GENFLAGS: case STATE_GENFLAGS:
string.printf("%c%c%c%c%c%c", string.printf("%c%c%c%c%c%c",
TEST_A0 ? '0' : 'o', TEST_A0 ? '0' : 'o',
TEST_NC ? 'N' : 'n', TEST_NC ? 'N' : 'n',
TEST_LT ? 'L' : 'l', TEST_LT ? 'L' : 'l',
@ -685,5 +685,3 @@ offs_t ccpu_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
extern CPU_DISASSEMBLE( ccpu ); extern CPU_DISASSEMBLE( ccpu );
return CPU_DISASSEMBLE_NAME(ccpu)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(ccpu)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -1270,4 +1270,3 @@ offs_t cop400_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT
return CPU_DISASSEMBLE_NAME(cop410)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(cop410)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -131,7 +131,7 @@ protected:
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
{ {
return (spacenum == AS_PROGRAM) ? &m_program_config : return (spacenum == AS_PROGRAM) ? &m_program_config :
( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) ); ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) );
} }
// device_state_interface overrides // device_state_interface overrides

View File

@ -3442,5 +3442,3 @@ offs_t cp1610_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT
extern CPU_DISASSEMBLE( cp1610 ); extern CPU_DISASSEMBLE( cp1610 );
return CPU_DISASSEMBLE_NAME(cp1610)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(cp1610)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -566,7 +566,7 @@ $(CPUOBJ)/sh2/sh2fe.o: $(CPUSRC)/sh2/sh2fe.c \
#------------------------------------------------- #-------------------------------------------------
# Hitachi SH4 # Hitachi SH4
#@src/emu/cpu/sh4/sh4.h,CPUS += SH4 #@src/emu/cpu/sh4/sh4.h,CPUS += SH4
#------------------------------------------------- #-------------------------------------------------
ifneq ($(filter SH4,$(CPUS)),) ifneq ($(filter SH4,$(CPUS)),)

View File

@ -18,7 +18,7 @@
// * Handle virtual shift addressing using RB & RE (when RE is enabled) (page 2-6) // * Handle virtual shift addressing using RB & RE (when RE is enabled) (page 2-6)
// * The ALU sign-extends 32-bit operands from y or p to 36 bits and produces a 36-bit output // * The ALU sign-extends 32-bit operands from y or p to 36 bits and produces a 36-bit output
// * Interrupt lines (page 2-15) // * Interrupt lines (page 2-15)
// //
//************************************************************************** //**************************************************************************
// DEVICE INTERFACE // DEVICE INTERFACE
@ -176,13 +176,13 @@ void dsp16_device::device_reset()
m_pc = 0x0000; m_pc = 0x0000;
m_pi = 0x0000; m_pi = 0x0000;
m_sioc = 0x0000; // (page 5-4) m_sioc = 0x0000; // (page 5-4)
// SRTA is unaltered by reset // SRTA is unaltered by reset
m_pioc = 0x0008; m_pioc = 0x0008;
m_rb = 0x0000; m_rb = 0x0000;
m_re = 0x0000; m_re = 0x0000;
// AUC is not affected by reset // AUC is not affected by reset
m_ppc = m_pc; m_ppc = m_pc;
// Hacky cache emulation. // Hacky cache emulation.
@ -202,8 +202,8 @@ void dsp16_device::device_reset()
const address_space_config *dsp16_device::memory_space_config(address_spacenum spacenum) const const address_space_config *dsp16_device::memory_space_config(address_spacenum spacenum) const
{ {
return (spacenum == AS_PROGRAM) ? &m_program_config : return (spacenum == AS_PROGRAM) ? &m_program_config :
(spacenum == AS_DATA) ? &m_data_config : (spacenum == AS_DATA) ? &m_data_config :
NULL; NULL;
} }
@ -220,101 +220,101 @@ void dsp16_device::state_string_export(const device_state_entry &entry, astring
string.printf("(below)"); string.printf("(below)");
break; break;
case DSP16_AUC: case DSP16_AUC:
{ {
astring alignString; astring alignString;
const UINT8 align = m_auc & 0x03; const UINT8 align = m_auc & 0x03;
switch (align) switch (align)
{ {
case 0x00: alignString.printf("xy"); break; case 0x00: alignString.printf("xy"); break;
case 0x01: alignString.printf("/4"); break; case 0x01: alignString.printf("/4"); break;
case 0x02: alignString.printf("x4"); break; case 0x02: alignString.printf("x4"); break;
case 0x03: alignString.printf(",,"); break; case 0x03: alignString.printf(",,"); break;
} }
string.printf("%c%c%c%c%c%s", string.printf("%c%c%c%c%c%s",
m_auc & 0x40 ? 'Y':'.', m_auc & 0x40 ? 'Y':'.',
m_auc & 0x20 ? '1':'.', m_auc & 0x20 ? '1':'.',
m_auc & 0x10 ? '0':'.', m_auc & 0x10 ? '0':'.',
m_auc & 0x08 ? '1':'.', m_auc & 0x08 ? '1':'.',
m_auc & 0x04 ? '0':'.', m_auc & 0x04 ? '0':'.',
alignString.cstr()); alignString.cstr());
break; break;
} }
case DSP16_PSW: case DSP16_PSW:
string.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", string.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_psw & 0x8000 ? 'M':'.', m_psw & 0x8000 ? 'M':'.',
m_psw & 0x4000 ? 'E':'.', m_psw & 0x4000 ? 'E':'.',
m_psw & 0x2000 ? 'L':'.', m_psw & 0x2000 ? 'L':'.',
m_psw & 0x1000 ? 'V':'.', m_psw & 0x1000 ? 'V':'.',
m_psw & 0x0800 ? ',':',', m_psw & 0x0800 ? ',':',',
m_psw & 0x0400 ? ',':',', m_psw & 0x0400 ? ',':',',
m_psw & 0x0200 ? 'O':'.', m_psw & 0x0200 ? 'O':'.',
m_psw & 0x0100 ? '1':'.', m_psw & 0x0100 ? '1':'.',
m_psw & 0x0080 ? '1':'.', m_psw & 0x0080 ? '1':'.',
m_psw & 0x0040 ? '1':'.', m_psw & 0x0040 ? '1':'.',
m_psw & 0x0020 ? '1':'.', m_psw & 0x0020 ? '1':'.',
m_psw & 0x0010 ? 'O':'.', m_psw & 0x0010 ? 'O':'.',
m_psw & 0x0008 ? '1':'.', m_psw & 0x0008 ? '1':'.',
m_psw & 0x0004 ? '1':'.', m_psw & 0x0004 ? '1':'.',
m_psw & 0x0002 ? '1':'.', m_psw & 0x0002 ? '1':'.',
m_psw & 0x0001 ? '1':'.'); m_psw & 0x0001 ? '1':'.');
break; break;
case DSP16_PIOC:
{
astring strobeString;
const UINT8 strobe = (m_pioc & 0x6000) >> 13;
switch (strobe)
{
case 0x00: strobeString.printf("1T"); break;
case 0x01: strobeString.printf("2T"); break;
case 0x02: strobeString.printf("3T"); break;
case 0x03: strobeString.printf("4T"); break;
}
string.printf("%c%s%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_pioc & 0x8000 ? 'I':'.',
strobeString.cstr(),
m_pioc & 0x1000 ? 'O':'I',
m_pioc & 0x0800 ? 'O':'I',
m_pioc & 0x0400 ? 'S':'.',
m_pioc & 0x0200 ? 'I':'.',
m_pioc & 0x0100 ? 'O':'.',
m_pioc & 0x0080 ? 'P':'.',
m_pioc & 0x0040 ? 'P':'.',
m_pioc & 0x0020 ? 'I':'.',
m_pioc & 0x0010 ? 'I':'.',
m_pioc & 0x0008 ? 'O':'.',
m_pioc & 0x0004 ? 'P':'.',
m_pioc & 0x0002 ? 'P':'.',
m_pioc & 0x0001 ? 'I':'.');
break;
}
case DSP16_PIOC:
{
astring strobeString;
const UINT8 strobe = (m_pioc & 0x6000) >> 13;
switch (strobe)
{
case 0x00: strobeString.printf("1T"); break;
case 0x01: strobeString.printf("2T"); break;
case 0x02: strobeString.printf("3T"); break;
case 0x03: strobeString.printf("4T"); break;
}
string.printf("%c%s%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_pioc & 0x8000 ? 'I':'.',
strobeString.cstr(),
m_pioc & 0x1000 ? 'O':'I',
m_pioc & 0x0800 ? 'O':'I',
m_pioc & 0x0400 ? 'S':'.',
m_pioc & 0x0200 ? 'I':'.',
m_pioc & 0x0100 ? 'O':'.',
m_pioc & 0x0080 ? 'P':'.',
m_pioc & 0x0040 ? 'P':'.',
m_pioc & 0x0020 ? 'I':'.',
m_pioc & 0x0010 ? 'I':'.',
m_pioc & 0x0008 ? 'O':'.',
m_pioc & 0x0004 ? 'P':'.',
m_pioc & 0x0002 ? 'P':'.',
m_pioc & 0x0001 ? 'I':'.');
break;
}
// Placeholder for a better view later (TODO) // Placeholder for a better view later (TODO)
case DSP16_SIOC: case DSP16_SIOC:
{ {
astring clkString; astring clkString;
const UINT8 clk = (m_sioc & 0x0180) >> 7; const UINT8 clk = (m_sioc & 0x0180) >> 7;
switch (clk) switch (clk)
{ {
case 0x00: clkString.printf("/4"); break; case 0x00: clkString.printf("/4"); break;
case 0x01: clkString.printf("12"); break; case 0x01: clkString.printf("12"); break;
case 0x02: clkString.printf("16"); break; case 0x02: clkString.printf("16"); break;
case 0x03: clkString.printf("20"); break; case 0x03: clkString.printf("20"); break;
} }
string.printf("%c%s%c%c%c%c%c%c%c", string.printf("%c%s%c%c%c%c%c%c%c",
m_sioc & 0x0200 ? 'I':'O', m_sioc & 0x0200 ? 'I':'O',
clkString.cstr(), clkString.cstr(),
m_sioc & 0x0040 ? 'L':'M', m_sioc & 0x0040 ? 'L':'M',
m_sioc & 0x0020 ? 'I':'O', m_sioc & 0x0020 ? 'I':'O',
m_sioc & 0x0010 ? 'I':'O', m_sioc & 0x0010 ? 'I':'O',
m_sioc & 0x0008 ? 'I':'O', m_sioc & 0x0008 ? 'I':'O',
m_sioc & 0x0004 ? 'I':'O', m_sioc & 0x0004 ? 'I':'O',
m_sioc & 0x0002 ? '2':'1', m_sioc & 0x0002 ? '2':'1',
m_sioc & 0x0001 ? '2':'1'); m_sioc & 0x0001 ? '2':'1');
break; break;
} }
} }
} }
@ -441,9 +441,9 @@ void dsp16_device::execute_run()
m_pc += pcAdvance; m_pc += pcAdvance;
m_icount -= cycles; m_icount -= cycles;
// The 16 bit PI "shadow" register gets set to PC on each instruction except // The 16 bit PI "shadow" register gets set to PC on each instruction except
// when an interrupt service routine is active (TODO: Interrupt check) (page 2-4) // when an interrupt service routine is active (TODO: Interrupt check) (page 2-4)
m_pi = m_pc; m_pi = m_pc;
} while (m_icount > 0); } while (m_icount > 0);
} }

View File

@ -60,7 +60,7 @@ protected:
UINT16 m_pt; UINT16 m_pt;
UINT16 m_pr; UINT16 m_pr;
UINT16 m_pi; UINT16 m_pi;
// RAM Address Arithmetic Unit (YAAU) (page 2-6) // RAM Address Arithmetic Unit (YAAU) (page 2-6)
UINT16 m_j; // Signed UINT16 m_j; // Signed
UINT16 m_k; // Signed UINT16 m_k; // Signed
@ -70,8 +70,8 @@ protected:
UINT16 m_r1; UINT16 m_r1;
UINT16 m_r2; UINT16 m_r2;
UINT16 m_r3; UINT16 m_r3;
// Data Arithmetic Unit (DAU) (page 2-6) // Data Arithmetic Unit (DAU) (page 2-6)
UINT16 m_x; UINT16 m_x;
UINT32 m_y; UINT32 m_y;
UINT32 m_p; UINT32 m_p;
@ -82,8 +82,8 @@ protected:
UINT8 m_c0; UINT8 m_c0;
UINT8 m_c1; UINT8 m_c1;
UINT8 m_c2; UINT8 m_c2;
// Serial and parallel interfaces (TODO: More here (page 2-13)) // Serial and parallel interfaces (TODO: More here (page 2-13))
UINT16 m_sioc; UINT16 m_sioc;
UINT16 m_srta; UINT16 m_srta;
UINT16 m_sdx; UINT16 m_sdx;
@ -133,12 +133,12 @@ protected:
void* addressYL(); void* addressYL();
void writeRegister(void* reg, const UINT16& value); void writeRegister(void* reg, const UINT16& value);
bool conditionTest(const UINT8& CON); bool conditionTest(const UINT8& CON);
// flags // flags
bool lmi(); bool lmi();
bool leq(); bool leq();
bool llv(); bool llv();
bool lmv(); bool lmv();
}; };

View File

@ -4,19 +4,19 @@
// TODO: // TODO:
// * AUC has a CLR field for writing to A0 & A1 + sign extension + psw + zero lower bits // * AUC has a CLR field for writing to A0 & A1 + sign extension + psw + zero lower bits
// implement as a clean function (page 2-7) // implement as a clean function (page 2-7)
// * Implement saturation overflow (SAT on AUC) (page 2-8) // * Implement saturation overflow (SAT on AUC) (page 2-8)
// * Implement p alignment (ALIGN on AUC) (page 2-9) // * Implement p alignment (ALIGN on AUC) (page 2-9)
// * When a register is used as a memory pointer. its value is compared with re. If its value is // * When a register is used as a memory pointer. its value is compared with re. If its value is
// equal to the contents of re and the postincrement is +1, then the value in rb is copied into // equal to the contents of re and the postincrement is +1, then the value in rb is copied into
// the register after the memory access is complete. See Section 4.2.3. // the register after the memory access is complete. See Section 4.2.3.
// * CPU flags go to the PSW & conditionTest() works on that (Page 3-4) // * CPU flags go to the PSW & conditionTest() works on that (Page 3-4)
// * Some instructions are not interruptible. // * Some instructions are not interruptible.
// //
// NOTES: // NOTES:
// When y is used in an assembly-language instruction, the DSPI6/DSPI6A device will read // When y is used in an assembly-language instruction, the DSPI6/DSPI6A device will read
// or write the high half (bits 16-31) of the y register (page 2-7) // or write the high half (bits 16-31) of the y register (page 2-7)
// The YL register is the lower half of the 32 bit Y register // The YL register is the lower half of the 32 bit Y register
@ -34,17 +34,17 @@ bool dsp16_device::lmi()
bool dsp16_device::leq() bool dsp16_device::leq()
{ {
return m_psw & 0x4000; return m_psw & 0x4000;
} }
bool dsp16_device::llv() bool dsp16_device::llv()
{ {
return m_psw & 0x2000; return m_psw & 0x2000;
} }
bool dsp16_device::lmv() bool dsp16_device::lmv()
{ {
return m_psw & 0x1000; return m_psw & 0x1000;
} }
@ -78,7 +78,7 @@ void dsp16_device::writeRegister(void* reg, const UINT16 &value)
} }
else if (reg == &m_y) else if (reg == &m_y)
{ {
// Y register // Y register
// TODO - Automatic clearing of yl may be selected (according to the CLR field of the auc register) (page 2-7) // TODO - Automatic clearing of yl may be selected (according to the CLR field of the auc register) (page 2-7)
m_y = (value << 16) | (m_y & 0x0000ffff); m_y = (value << 16) | (m_y & 0x0000ffff);
} }
@ -119,9 +119,9 @@ bool dsp16_device::conditionTest(const UINT8& CON)
case 0x11: return (lmi() || leq()); // le (result <= 0) case 0x11: return (lmi() || leq()); // le (result <= 0)
default: logerror("Unrecognized condition at PC=0x%04x\n", m_pc); break; default: logerror("Unrecognized condition at PC=0x%04x\n", m_pc); break;
} }
// Testing each of these conditions (*) increments the respective counter being tested (page 3-5) // Testing each of these conditions (*) increments the respective counter being tested (page 3-5)
return false; return false;
} }
@ -187,7 +187,7 @@ void* dsp16_device::registerFromRTable(const UINT8 &R)
void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8& S) void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8& S)
{ {
// TODO: I'm pretty sure we need to feed X into these as well - Double check // TODO: I'm pretty sure we need to feed X into these as well - Double check
// Note these instructions read right-to-left, so act accordingly (page 3-6) // Note these instructions read right-to-left, so act accordingly (page 3-6)
// y & p are sign extended (page 3-9) // y & p are sign extended (page 3-9)
// implementation details (page 3-9) // implementation details (page 3-9)
@ -223,7 +223,7 @@ void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8&
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x01: case 0x01:
{ {
// Ad = aS+p p = x*y // Ad = aS+p p = x*y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
@ -238,112 +238,112 @@ void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8&
justATest = true; justATest = true;
break; break;
} }
case 0x03: case 0x03:
{ {
// Ad = aS-p p = x*y // Ad = aS-p p = x*y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x04: case 0x04:
{ {
// Ad = p // Ad = p
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x05: case 0x05:
{ {
// Ad = aS+p // Ad = aS+p
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x06: case 0x06:
{ {
// nop // nop
justATest = true; justATest = true;
break; break;
} }
case 0x07: case 0x07:
{ {
// Ad = aS-p // Ad = aS-p
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x08: case 0x08:
{ {
// Ad = aS|y // Ad = aS|y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x09: case 0x09:
{ {
// Ad = aS^y // Ad = aS^y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x0a: case 0x0a:
{ {
// aS&y // aS&y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
justATest = true; justATest = true;
break; break;
} }
case 0x0b: case 0x0b:
{ {
// aS-y // aS-y
INT64 aS = *sourceReg; INT64 aS = *sourceReg;
if (aS & U64(0x800000000)) if (aS & U64(0x800000000))
aS |= U64(0xfffffff000000000); aS |= U64(0xfffffff000000000);
INT64 y = (m_y & 0xffff0000) >> 16; INT64 y = (m_y & 0xffff0000) >> 16;
if (y & 0x8000) if (y & 0x8000)
y |= U64(0xffffffffffff0000); y |= U64(0xffffffffffff0000);
result = aS-y; result = aS-y;
justATest = true; justATest = true;
break; break;
} }
case 0x0c: case 0x0c:
{ {
// Ad = y // Ad = y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x0d: case 0x0d:
{ {
// Ad = aS+y // Ad = aS+y
INT64 aS = *sourceReg; INT64 aS = *sourceReg;
if (aS & U64(0x800000000)) if (aS & U64(0x800000000))
aS |= U64(0xfffffff000000000); aS |= U64(0xfffffff000000000);
INT64 y = (m_y & 0xffff0000) >> 16; INT64 y = (m_y & 0xffff0000) >> 16;
if (y & 0x8000) if (y & 0x8000)
y |= U64(0xffffffffffff0000); y |= U64(0xffffffffffff0000);
result = aS+y; result = aS+y;
break; break;
} }
case 0x0e: case 0x0e:
{ {
// Ad = aS&y // Ad = aS&y
printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__); printf("UNIMPLEMENTED F1 operation @ PC 0x%04x (%d)\n", m_pc, __LINE__);
break; break;
} }
case 0x0f: case 0x0f:
{ {
// Ad = aS-y // Ad = aS-y
INT64 aS = *sourceReg; INT64 aS = *sourceReg;
if (aS & U64(0x800000000)) if (aS & U64(0x800000000))
aS |= U64(0xfffffff000000000); aS |= U64(0xfffffff000000000);
INT64 y = (m_y & 0xffff0000) >> 16; INT64 y = (m_y & 0xffff0000) >> 16;
if (y & 0x8000) if (y & 0x8000)
y |= U64(0xffffffffffff0000); y |= U64(0xffffffffffff0000);
result = aS-y; result = aS-y;
break; break;
} }
} }
// CPU Flags (page 3-4) // CPU Flags (page 3-4)
// LMI (logical minus) // LMI (logical minus)
if (result & U64(0x800000000)) if (result & U64(0x800000000))
@ -359,7 +359,7 @@ void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8&
// LLV (logical overflow) // LLV (logical overflow)
// TODO // TODO
// LMV (mathematical overflow) // LMV (mathematical overflow)
if ((result | U64(0xf00000000)) != U64(0xf00000000) && if ((result | U64(0xf00000000)) != U64(0xf00000000) &&
(result | U64(0xf00000000)) != U64(0x000000000)) (result | U64(0xf00000000)) != U64(0x000000000))
@ -369,7 +369,7 @@ void dsp16_device::executeF1Field(const UINT8& F1, const UINT8& D, const UINT8&
// If it was a real operation, make sure the data goes where it should // If it was a real operation, make sure the data goes where it should
if (!justATest) if (!justATest)
*destinationReg = (UINT64)result & U64(0x0000000fffffffff); *destinationReg = (UINT64)result & U64(0x0000000fffffffff);
} }
@ -570,7 +570,7 @@ void dsp16_device::execute_one(const UINT16& op, UINT8& cycles, UINT8& pcAdvance
case 0x14: case 0x14:
{ {
DSP_LINE("3-53") DSP_LINE("3-53")
// F1, Y = y[l] : (page 3-53) // F1, Y = y[l] : (page 3-53)
const UINT8 Y = (op & 0x000f); const UINT8 Y = (op & 0x000f);
const UINT8 X = (op & 0x0010) >> 4; const UINT8 X = (op & 0x0010) >> 4;
const UINT8 S = (op & 0x0200) >> 9; const UINT8 S = (op & 0x0200) >> 9;

View File

@ -559,7 +559,7 @@ void es5510_device::execute_set_input(int linenum, int state) {
void es5510_device::list_program(void(p)(const char *, ...)) { void es5510_device::list_program(void(p)(const char *, ...)) {
LOG(("ES5501: Starting!\n")); LOG(("ES5501: Starting!\n"));
UINT8 addr; UINT8 addr;
char buf[1024]; char buf[1024];
for (addr = 0; addr < 0xa0; addr++) { for (addr = 0; addr < 0xa0; addr++) {
@ -802,14 +802,14 @@ void es5510_device::run_once()
{ {
// turn HALT off // turn HALT off
set_HALT(false); set_HALT(false);
// run for one instruction // run for one instruction
icount = 1; icount = 1;
execute_run(); execute_run();
// turn HALT on again // turn HALT on again
set_HALT(true); set_HALT(true);
// run ESP to the end of its program, a few instructions at a time // run ESP to the end of its program, a few instructions at a time
while (state != STATE_HALTED) { while (state != STATE_HALTED) {
icount = 1; icount = 1;
@ -898,7 +898,7 @@ void es5510_device::write_to_dol(INT32 value) {
} }
void es5510_device::alu_operation_end() { void es5510_device::alu_operation_end() {
// Handle the END instruction separately // Handle the END instruction separately
LOG(("ES5510: END\n")); LOG(("ES5510: END\n"));
// sample the HALT line // sample the HALT line
if (halt_asserted) { if (halt_asserted) {

View File

@ -104,7 +104,7 @@ public:
ram_cycle_t cycle; // cycle type ram_cycle_t cycle; // cycle type
}; };
// direct access to the 'HALT' pin - not just through the // direct access to the 'HALT' pin - not just through the
void set_HALT(bool halt) { halt_asserted = halt; } void set_HALT(bool halt) { halt_asserted = halt; }
bool get_HALT() { return halt_asserted; } bool get_HALT() { return halt_asserted; }

View File

@ -287,7 +287,7 @@ int hcd62121_cpu_device::check_cond( UINT8 op )
void hcd62121_cpu_device::device_start() void hcd62121_cpu_device::device_start()
{ {
// m_irq_callback = irqcallback; // m_irq_callback = irqcallback;
m_program = &space(AS_PROGRAM); m_program = &space(AS_PROGRAM);
m_io = &space(AS_IO); m_io = &space(AS_IO);
@ -519,4 +519,3 @@ offs_t hcd62121_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UI
extern CPU_DISASSEMBLE( hcd62121 ); extern CPU_DISASSEMBLE( hcd62121 );
return CPU_DISASSEMBLE_NAME(hcd62121)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(hcd62121)(this, buffer, pc, oprom, opram, options);
} }

View File

@ -321,26 +321,26 @@ static const X86_OPCODE x86_opcode_table[] =
{ 0x2c, OP_2BYTE|OP_SSE, SSEOP(cvttps2pi_r64_r128m64), SSEOP(cvttps2pi_r64_r128m64),}, { 0x2c, OP_2BYTE|OP_SSE, SSEOP(cvttps2pi_r64_r128m64), SSEOP(cvttps2pi_r64_r128m64),},
{ 0x2d, OP_2BYTE|OP_SSE, SSEOP(cvtps2pi_r64_r128m64), SSEOP(cvtps2pi_r64_r128m64),}, { 0x2d, OP_2BYTE|OP_SSE, SSEOP(cvtps2pi_r64_r128m64), SSEOP(cvtps2pi_r64_r128m64),},
{ 0x2e, OP_2BYTE|OP_SSE, SSEOP(ucomiss_r128_r128m32), SSEOP(ucomiss_r128_r128m32),}, { 0x2e, OP_2BYTE|OP_SSE, SSEOP(ucomiss_r128_r128m32), SSEOP(ucomiss_r128_r128m32),},
{ 0x2f, OP_2BYTE|OP_SSE, SSEOP(comiss_r128_r128m32), SSEOP(comiss_r128_r128m32), }, { 0x2f, OP_2BYTE|OP_SSE, SSEOP(comiss_r128_r128m32), SSEOP(comiss_r128_r128m32), },
{ 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), }, { 0x30, OP_2BYTE|OP_PENTIUM, PENTIUMOP(wrmsr), PENTIUMOP(wrmsr), },
{ 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), }, { 0x31, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdtsc), PENTIUMOP(rdtsc), },
{ 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), }, { 0x32, OP_2BYTE|OP_PENTIUM, PENTIUMOP(rdmsr), PENTIUMOP(rdmsr), },
{ 0x40, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovo_r16_rm16), PENTIUMOP(cmovo_r32_rm32), }, { 0x40, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovo_r16_rm16), PENTIUMOP(cmovo_r32_rm32), },
{ 0x41, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovno_r16_rm16), PENTIUMOP(cmovno_r32_rm32), }, { 0x41, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovno_r16_rm16), PENTIUMOP(cmovno_r32_rm32), },
{ 0x42, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovb_r16_rm16), PENTIUMOP(cmovb_r32_rm32), }, { 0x42, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovb_r16_rm16), PENTIUMOP(cmovb_r32_rm32), },
{ 0x43, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovae_r16_rm16), PENTIUMOP(cmovae_r32_rm32), }, { 0x43, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovae_r16_rm16), PENTIUMOP(cmovae_r32_rm32), },
{ 0x44, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmove_r16_rm16), PENTIUMOP(cmove_r32_rm32), }, { 0x44, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmove_r16_rm16), PENTIUMOP(cmove_r32_rm32), },
{ 0x45, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovne_r16_rm16), PENTIUMOP(cmovne_r32_rm32), }, { 0x45, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovne_r16_rm16), PENTIUMOP(cmovne_r32_rm32), },
{ 0x46, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovbe_r16_rm16), PENTIUMOP(cmovbe_r32_rm32), }, { 0x46, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovbe_r16_rm16), PENTIUMOP(cmovbe_r32_rm32), },
{ 0x47, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmova_r16_rm16), PENTIUMOP(cmova_r32_rm32), }, { 0x47, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmova_r16_rm16), PENTIUMOP(cmova_r32_rm32), },
{ 0x48, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovs_r16_rm16), PENTIUMOP(cmovs_r32_rm32), }, { 0x48, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovs_r16_rm16), PENTIUMOP(cmovs_r32_rm32), },
{ 0x49, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovns_r16_rm16), PENTIUMOP(cmovns_r32_rm32), }, { 0x49, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovns_r16_rm16), PENTIUMOP(cmovns_r32_rm32), },
{ 0x4a, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovp_r16_rm16), PENTIUMOP(cmovp_r32_rm32), }, { 0x4a, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovp_r16_rm16), PENTIUMOP(cmovp_r32_rm32), },
{ 0x4b, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovnp_r16_rm16), PENTIUMOP(cmovnp_r32_rm32), }, { 0x4b, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovnp_r16_rm16), PENTIUMOP(cmovnp_r32_rm32), },
{ 0x4c, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovl_r16_rm16), PENTIUMOP(cmovl_r32_rm32), }, { 0x4c, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovl_r16_rm16), PENTIUMOP(cmovl_r32_rm32), },
{ 0x4d, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovge_r16_rm16), PENTIUMOP(cmovge_r32_rm32), }, { 0x4d, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovge_r16_rm16), PENTIUMOP(cmovge_r32_rm32), },
{ 0x4e, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovle_r16_rm16), PENTIUMOP(cmovle_r32_rm32), }, { 0x4e, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovle_r16_rm16), PENTIUMOP(cmovle_r32_rm32), },
{ 0x4f, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovg_r16_rm16), PENTIUMOP(cmovg_r32_rm32), }, { 0x4f, OP_2BYTE|OP_PENTIUM, PENTIUMOP(cmovg_r16_rm16), PENTIUMOP(cmovg_r32_rm32), },
{ 0x50, OP_2BYTE|OP_SSE, SSEOP(movmskps_r16_r128), SSEOP(movmskps_r32_r128), }, { 0x50, OP_2BYTE|OP_SSE, SSEOP(movmskps_r16_r128), SSEOP(movmskps_r32_r128), },
{ 0x51, OP_2BYTE|OP_SSE, SSEOP(sqrtps_r128_rm128), SSEOP(sqrtps_r128_rm128), }, { 0x51, OP_2BYTE|OP_SSE, SSEOP(sqrtps_r128_rm128), SSEOP(sqrtps_r128_rm128), },
{ 0x52, OP_2BYTE|OP_SSE, SSEOP(rsqrtps_r128_rm128), SSEOP(rsqrtps_r128_rm128), }, { 0x52, OP_2BYTE|OP_SSE, SSEOP(rsqrtps_r128_rm128), SSEOP(rsqrtps_r128_rm128), },
@ -363,8 +363,8 @@ static const X86_OPCODE x86_opcode_table[] =
{ 0x63, OP_2BYTE|OP_MMX, MMXOP(packsswb_r64_rm64), MMXOP(packsswb_r64_rm64), }, { 0x63, OP_2BYTE|OP_MMX, MMXOP(packsswb_r64_rm64), MMXOP(packsswb_r64_rm64), },
{ 0x64, OP_2BYTE|OP_MMX, MMXOP(pcmpgtb_r64_rm64), MMXOP(pcmpgtb_r64_rm64), }, { 0x64, OP_2BYTE|OP_MMX, MMXOP(pcmpgtb_r64_rm64), MMXOP(pcmpgtb_r64_rm64), },
{ 0x65, OP_2BYTE|OP_MMX, MMXOP(pcmpgtw_r64_rm64), MMXOP(pcmpgtw_r64_rm64), }, { 0x65, OP_2BYTE|OP_MMX, MMXOP(pcmpgtw_r64_rm64), MMXOP(pcmpgtw_r64_rm64), },
{ 0x66, OP_2BYTE|OP_MMX, MMXOP(pcmpgtd_r64_rm64), MMXOP(pcmpgtd_r64_rm64), }, { 0x66, OP_2BYTE|OP_MMX, MMXOP(pcmpgtd_r64_rm64), MMXOP(pcmpgtd_r64_rm64), },
{ 0x67, OP_2BYTE|OP_MMX, MMXOP(packuswb_r64_rm64), MMXOP(packuswb_r64_rm64), }, { 0x67, OP_2BYTE|OP_MMX, MMXOP(packuswb_r64_rm64), MMXOP(packuswb_r64_rm64), },
{ 0x68, OP_2BYTE|OP_MMX, MMXOP(punpckhbw_r64_rm64), MMXOP(punpckhbw_r64_rm64), }, { 0x68, OP_2BYTE|OP_MMX, MMXOP(punpckhbw_r64_rm64), MMXOP(punpckhbw_r64_rm64), },
{ 0x69, OP_2BYTE|OP_MMX, MMXOP(punpckhwd_r64_rm64), MMXOP(punpckhwd_r64_rm64), }, { 0x69, OP_2BYTE|OP_MMX, MMXOP(punpckhwd_r64_rm64), MMXOP(punpckhwd_r64_rm64), },
{ 0x6a, OP_2BYTE|OP_MMX, MMXOP(punpckhdq_r64_rm64), MMXOP(punpckhdq_r64_rm64), }, { 0x6a, OP_2BYTE|OP_MMX, MMXOP(punpckhdq_r64_rm64), MMXOP(punpckhdq_r64_rm64), },
@ -444,8 +444,8 @@ static const X86_OPCODE x86_opcode_table[] =
{ 0xBF, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movsx_r32_rm16), }, { 0xBF, OP_2BYTE|OP_I386, I386OP(invalid), I386OP(movsx_r32_rm16), },
{ 0xC0, OP_2BYTE|OP_I486, I486OP(xadd_rm8_r8), I486OP(xadd_rm8_r8), }, { 0xC0, OP_2BYTE|OP_I486, I486OP(xadd_rm8_r8), I486OP(xadd_rm8_r8), },
{ 0xC1, OP_2BYTE|OP_I486, I486OP(xadd_rm16_r16), I486OP(xadd_rm32_r32), }, { 0xC1, OP_2BYTE|OP_I486, I486OP(xadd_rm16_r16), I486OP(xadd_rm32_r32), },
{ 0xC2, OP_2BYTE|OP_SSE, SSEOP(cmpps_r128_rm128_i8), SSEOP(cmpps_r128_rm128_i8), }, { 0xC2, OP_2BYTE|OP_SSE, SSEOP(cmpps_r128_rm128_i8), SSEOP(cmpps_r128_rm128_i8), },
{ 0xC3, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movnti_m16_r16), PENTIUMOP(movnti_m32_r32), }, { 0xC3, OP_2BYTE|OP_PENTIUM, PENTIUMOP(movnti_m16_r16), PENTIUMOP(movnti_m32_r32), },
{ 0xC4, OP_2BYTE|OP_SSE, SSEOP(pinsrw_r64_r16m16_i8), SSEOP(pinsrw_r64_r32m16_i8),}, { 0xC4, OP_2BYTE|OP_SSE, SSEOP(pinsrw_r64_r16m16_i8), SSEOP(pinsrw_r64_r32m16_i8),},
{ 0xC5, OP_2BYTE|OP_SSE, SSEOP(pextrw_r16_r64_i8), SSEOP(pextrw_r32_r64_i8), }, { 0xC5, OP_2BYTE|OP_SSE, SSEOP(pextrw_r16_r64_i8), SSEOP(pextrw_r32_r64_i8), },
{ 0xC6, OP_2BYTE|OP_SSE, SSEOP(shufps), SSEOP(shufps), }, { 0xC6, OP_2BYTE|OP_SSE, SSEOP(shufps), SSEOP(shufps), },
@ -502,30 +502,30 @@ static const X86_OPCODE x86_opcode_table[] =
{ 0xFD, OP_2BYTE|OP_MMX, MMXOP(paddw_r64_rm64), MMXOP(paddw_r64_rm64), }, { 0xFD, OP_2BYTE|OP_MMX, MMXOP(paddw_r64_rm64), MMXOP(paddw_r64_rm64), },
{ 0xFE, OP_2BYTE|OP_MMX, MMXOP(paddd_r64_rm64), MMXOP(paddd_r64_rm64), }, { 0xFE, OP_2BYTE|OP_MMX, MMXOP(paddd_r64_rm64), MMXOP(paddd_r64_rm64), },
/* F3 0F ?? */ /* F3 0F ?? */
{ 0x10, OP_3BYTEF3|OP_SSE, SSEOP(movss_r128_rm128), SSEOP(movss_r128_rm128), }, { 0x10, OP_3BYTEF3|OP_SSE, SSEOP(movss_r128_rm128), SSEOP(movss_r128_rm128), },
{ 0x11, OP_3BYTEF3|OP_SSE, SSEOP(movss_rm128_r128), SSEOP(movss_rm128_r128), }, { 0x11, OP_3BYTEF3|OP_SSE, SSEOP(movss_rm128_r128), SSEOP(movss_rm128_r128), },
{ 0x12, OP_3BYTEF3|OP_SSE, SSEOP(movsldup_r128_rm128), SSEOP(movsldup_r128_rm128), }, { 0x12, OP_3BYTEF3|OP_SSE, SSEOP(movsldup_r128_rm128), SSEOP(movsldup_r128_rm128), },
{ 0x16, OP_3BYTEF3|OP_SSE, SSEOP(movshdup_r128_rm128), SSEOP(movshdup_r128_rm128), }, { 0x16, OP_3BYTEF3|OP_SSE, SSEOP(movshdup_r128_rm128), SSEOP(movshdup_r128_rm128), },
{ 0x2A, OP_3BYTEF3|OP_SSE, SSEOP(cvtsi2ss_r128_rm32), SSEOP(cvtsi2ss_r128_rm32), }, { 0x2A, OP_3BYTEF3|OP_SSE, SSEOP(cvtsi2ss_r128_rm32), SSEOP(cvtsi2ss_r128_rm32), },
{ 0x2C, OP_3BYTEF3|OP_SSE, SSEOP(cvttss2si_r32_r128m32), SSEOP(cvttss2si_r32_r128m32),}, { 0x2C, OP_3BYTEF3|OP_SSE, SSEOP(cvttss2si_r32_r128m32), SSEOP(cvttss2si_r32_r128m32),},
{ 0x2D, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2si_r32_r128m32), SSEOP(cvtss2si_r32_r128m32),}, { 0x2D, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2si_r32_r128m32), SSEOP(cvtss2si_r32_r128m32),},
{ 0x51, OP_3BYTEF3|OP_SSE, SSEOP(sqrtss_r128_r128m32), SSEOP(sqrtss_r128_r128m32), }, { 0x51, OP_3BYTEF3|OP_SSE, SSEOP(sqrtss_r128_r128m32), SSEOP(sqrtss_r128_r128m32), },
{ 0x52, OP_3BYTEF3|OP_SSE, SSEOP(rsqrtss_r128_r128m32), SSEOP(rsqrtss_r128_r128m32),}, { 0x52, OP_3BYTEF3|OP_SSE, SSEOP(rsqrtss_r128_r128m32), SSEOP(rsqrtss_r128_r128m32),},
{ 0x53, OP_3BYTEF3|OP_SSE, SSEOP(rcpss_r128_r128m32), SSEOP(rcpss_r128_r128m32), }, { 0x53, OP_3BYTEF3|OP_SSE, SSEOP(rcpss_r128_r128m32), SSEOP(rcpss_r128_r128m32), },
{ 0x58, OP_3BYTEF3|OP_SSE, SSEOP(addss), SSEOP(addss), }, { 0x58, OP_3BYTEF3|OP_SSE, SSEOP(addss), SSEOP(addss), },
{ 0x59, OP_3BYTEF3|OP_SSE, SSEOP(mulss), SSEOP(mulss), }, { 0x59, OP_3BYTEF3|OP_SSE, SSEOP(mulss), SSEOP(mulss), },
{ 0x5A, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2sd_r128_r128m32), SSEOP(cvtss2sd_r128_r128m32),}, { 0x5A, OP_3BYTEF3|OP_SSE, SSEOP(cvtss2sd_r128_r128m32), SSEOP(cvtss2sd_r128_r128m32),},
{ 0x5B, OP_3BYTEF3|OP_SSE, SSEOP(cvttps2dq_r128_rm128), SSEOP(cvttps2dq_r128_rm128),}, { 0x5B, OP_3BYTEF3|OP_SSE, SSEOP(cvttps2dq_r128_rm128), SSEOP(cvttps2dq_r128_rm128),},
{ 0x5C, OP_3BYTEF3|OP_SSE, SSEOP(subss), SSEOP(subss), }, { 0x5C, OP_3BYTEF3|OP_SSE, SSEOP(subss), SSEOP(subss), },
{ 0x5D, OP_3BYTEF3|OP_SSE, SSEOP(minss_r128_r128m32), SSEOP(minss_r128_r128m32), }, { 0x5D, OP_3BYTEF3|OP_SSE, SSEOP(minss_r128_r128m32), SSEOP(minss_r128_r128m32), },
{ 0x5E, OP_3BYTEF3|OP_SSE, SSEOP(divss), SSEOP(divss), }, { 0x5E, OP_3BYTEF3|OP_SSE, SSEOP(divss), SSEOP(divss), },
{ 0x5F, OP_3BYTEF3|OP_SSE, SSEOP(maxss_r128_r128m32), SSEOP(maxss_r128_r128m32), }, { 0x5F, OP_3BYTEF3|OP_SSE, SSEOP(maxss_r128_r128m32), SSEOP(maxss_r128_r128m32), },
{ 0x6F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_r128_rm128), SSEOP(movdqu_r128_rm128), }, { 0x6F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_r128_rm128), SSEOP(movdqu_r128_rm128), },
{ 0x70, OP_3BYTEF3|OP_SSE, SSEOP(pshufhw_r128_rm128_i8), SSEOP(pshufhw_r128_rm128_i8),}, { 0x70, OP_3BYTEF3|OP_SSE, SSEOP(pshufhw_r128_rm128_i8), SSEOP(pshufhw_r128_rm128_i8),},
{ 0x7E, OP_3BYTEF3|OP_SSE, SSEOP(movq_r128_r128m64), SSEOP(movq_r128_r128m64), }, { 0x7E, OP_3BYTEF3|OP_SSE, SSEOP(movq_r128_r128m64), SSEOP(movq_r128_r128m64), },
{ 0x7F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_rm128_r128), SSEOP(movdqu_rm128_r128), }, { 0x7F, OP_3BYTEF3|OP_SSE, SSEOP(movdqu_rm128_r128), SSEOP(movdqu_rm128_r128), },
{ 0xB8, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(popcnt_r16_rm16), PENTIUMOP(popcnt_r32_rm32), }, { 0xB8, OP_3BYTEF3|OP_PENTIUM, PENTIUMOP(popcnt_r16_rm16), PENTIUMOP(popcnt_r32_rm32), },
{ 0xC2, OP_3BYTEF3|OP_SSE, SSEOP(cmpss_r128_r128m32_i8), SSEOP(cmpss_r128_r128m32_i8),}, { 0xC2, OP_3BYTEF3|OP_SSE, SSEOP(cmpss_r128_r128m32_i8), SSEOP(cmpss_r128_r128m32_i8),},
{ 0xD6, OP_3BYTEF3|OP_SSE, SSEOP(movq2dq_r128_r64), SSEOP(movq2dq_r128_r64), }, { 0xD6, OP_3BYTEF3|OP_SSE, SSEOP(movq2dq_r128_r64), SSEOP(movq2dq_r128_r64), },
{ 0xE6, OP_3BYTEF3|OP_SSE, SSEOP(cvtdq2pd_r128_r128m64), SSEOP(cvtdq2pd_r128_r128m64)} { 0xE6, OP_3BYTEF3|OP_SSE, SSEOP(cvtdq2pd_r128_r128m64), SSEOP(cvtdq2pd_r128_r128m64)}
}; };

View File

@ -1467,17 +1467,17 @@ static void MMXOP(pmaddwd_r64_rm64)(i386_state *cpustate) // Opcode 0f f5
UINT8 modrm = FETCH(cpustate); UINT8 modrm = FETCH(cpustate);
if( modrm >= 0xc0 ) { if( modrm >= 0xc0 ) {
MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+ MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+
(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]; (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1];
MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+ MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+
(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]; (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3];
} else { } else {
MMX_REG s; MMX_REG s;
UINT32 ea = GetEA(cpustate, modrm, 0); UINT32 ea = GetEA(cpustate, modrm, 0);
READMMX(cpustate, ea, s); READMMX(cpustate, ea, s);
MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+ MMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+
(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1]; (INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1];
MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+ MMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+
(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3]; (INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3];
} }
CYCLES(cpustate,1); // TODO: correct cycle count CYCLES(cpustate,1); // TODO: correct cycle count
} }
@ -2772,11 +2772,11 @@ static void SSEOP(subps)(i386_state *cpustate) // Opcode 0f 5c
INLINE float sse_min_single(float src1, float src2) INLINE float sse_min_single(float src1, float src2)
{ {
/*if ((src1 == 0) && (src2 == 0)) /*if ((src1 == 0) && (src2 == 0))
return src2; return src2;
if (src1 = SNaN) if (src1 = SNaN)
return src2; return src2;
if (src2 = SNaN) if (src2 = SNaN)
return src2;*/ return src2;*/
if (src1 < src2) if (src1 < src2)
return src1; return src1;
return src2; return src2;
@ -2825,11 +2825,11 @@ static void SSEOP(divps)(i386_state *cpustate) // Opcode 0f 5e
INLINE float sse_max_single(float src1, float src2) INLINE float sse_max_single(float src1, float src2)
{ {
/*if ((src1 == 0) && (src2 == 0)) /*if ((src1 == 0) && (src2 == 0))
return src2; return src2;
if (src1 = SNaN) if (src1 = SNaN)
return src2; return src2;
if (src2 = SNaN) if (src2 = SNaN)
return src2;*/ return src2;*/
if (src1 > src2) if (src1 > src2)
return src1; return src1;
return src2; return src2;

View File

@ -501,8 +501,8 @@ void i4004_cpu_device::state_export(const device_state_entry &entry)
{ {
case STATE_GENFLAGS: case STATE_GENFLAGS:
m_flags = ((m_A == 0) ? 0x04 : 0x00) | m_flags = ((m_A == 0) ? 0x04 : 0x00) |
(m_C ? 0x02 : 0x00) | (m_C ? 0x02 : 0x00) |
(m_TEST ? 0x01 : 0x00); (m_TEST ? 0x01 : 0x00);
break; break;
} }
} }
@ -526,4 +526,4 @@ offs_t i4004_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
return CPU_DISASSEMBLE_NAME(i4004)(this, buffer, pc, oprom, opram, options); return CPU_DISASSEMBLE_NAME(i4004)(this, buffer, pc, oprom, opram, options);
} }
// case CPUINFO_IS_OCTAL: info->i = true; break; // case CPUINFO_IS_OCTAL: info->i = true; break;

View File

@ -77,7 +77,7 @@ protected:
protected: protected:
address_space_config m_program_config; address_space_config m_program_config;
UINT8 m_A; UINT8 m_A;
UINT8 m_F; UINT8 m_F;
UINT8 m_B; UINT8 m_B;
@ -110,7 +110,7 @@ protected:
UINT8 m_features; UINT8 m_features;
const UINT16 *c_regs; const UINT16 *c_regs;
const struct lr35902_config *m_config; const struct lr35902_config *m_config;
/* Flag bit definitions */ /* Flag bit definitions */
static const UINT8 LR35902_FLAG_Z = 0x80; static const UINT8 LR35902_FLAG_Z = 0x80;
static const UINT8 LR35902_FLAG_N = 0x40; static const UINT8 LR35902_FLAG_N = 0x40;

View File

@ -182,7 +182,7 @@ public:
UINT32 cpu_type; /* CPU Type: 68000, 68008, 68010, 68EC020, 68020, 68EC030, 68030, 68EC040, or 68040 */ UINT32 cpu_type; /* CPU Type: 68000, 68008, 68010, 68EC020, 68020, 68EC030, 68030, 68EC040, or 68040 */
// UINT32 dasm_type; /* disassembly type */ // UINT32 dasm_type; /* disassembly type */
UINT32 dar[16]; /* Data and Address Registers */ UINT32 dar[16]; /* Data and Address Registers */
UINT32 ppc; /* Previous program counter */ UINT32 ppc; /* Previous program counter */
UINT32 pc; /* Program Counter */ UINT32 pc; /* Program Counter */
@ -272,8 +272,8 @@ public:
typedef delegate<void (offs_t, UINT16)> m68k_write16_delegate; typedef delegate<void (offs_t, UINT16)> m68k_write16_delegate;
typedef delegate<void (offs_t, UINT32)> m68k_write32_delegate; typedef delegate<void (offs_t, UINT32)> m68k_write32_delegate;
// class m68k_memory_interface // class m68k_memory_interface
// { // {
public: public:
void init8(address_space &space); void init8(address_space &space);
void init16(address_space &space); void init16(address_space &space);
@ -312,15 +312,15 @@ public:
UINT32 readlong_d32_hmmu(offs_t address); UINT32 readlong_d32_hmmu(offs_t address);
void writelong_d32_hmmu(offs_t address, UINT32 data); void writelong_d32_hmmu(offs_t address, UINT32 data);
// m68000_base_device *m_cpustate; // m68000_base_device *m_cpustate;
// }; // };
public: public:
// m68k_memory_interface memory; // m68k_memory_interface memory;
address_space *m_space; address_space *m_space;
direct_read_data *m_direct; direct_read_data *m_direct;
offs_t encrypted_start; offs_t encrypted_start;
offs_t encrypted_end; offs_t encrypted_end;
@ -390,7 +390,7 @@ public:
void reset_cpu(void); void reset_cpu(void);
inline void cpu_execute(void); inline void cpu_execute(void);
// device_state_interface overrides // device_state_interface overrides
virtual void state_import(const device_state_entry &entry); virtual void state_import(const device_state_entry &entry);
virtual void state_export(const device_state_entry &entry); virtual void state_export(const device_state_entry &entry);
@ -720,7 +720,7 @@ class fscpu32_device : public m68000_base_device
public: public:
// construction/destruction // construction/destruction
fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
fscpu32_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock, fscpu32_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock,
const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source); const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source);

View File

@ -774,7 +774,7 @@ inline void m68000_base_device::cpu_execute(void)
m_address_error = 0; m_address_error = 0;
try { try {
m68ki_exception_address_error(this); m68ki_exception_address_error(this);
} }
catch(int error) catch(int error)
{ {
if (error==10) if (error==10)
@ -1199,7 +1199,7 @@ void m68000_base_device::init8(address_space &space)
{ {
m_space = &space; m_space = &space;
m_direct = &space.direct(); m_direct = &space.direct();
// m_cpustate = this; // m_cpustate = this;
opcode_xor = 0; opcode_xor = 0;
readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::m68008_read_immediate_16), this); readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::m68008_read_immediate_16), this);
@ -1698,8 +1698,8 @@ void m68000_base_device::init_cpu_m68000(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_000; cpu_type = CPU_TYPE_000;
// dasm_type = M68K_CPU_TYPE_68000; // dasm_type = M68K_CPU_TYPE_68000;
init16(*program); init16(*program);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[0]; jump_table = m68ki_instruction_jump_table[0];
@ -1725,12 +1725,11 @@ void m68000_base_device::init_cpu_m68000(void)
void m68000_base_device::init_cpu_m68008(void) void m68000_base_device::init_cpu_m68008(void)
{ {
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_008; cpu_type = CPU_TYPE_008;
// dasm_type = M68K_CPU_TYPE_68008; // dasm_type = M68K_CPU_TYPE_68008;
init8(*program); init8(*program);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[0]; jump_table = m68ki_instruction_jump_table[0];
@ -1755,11 +1754,10 @@ void m68000_base_device::init_cpu_m68008(void)
void m68000_base_device::init_cpu_m68010(void) void m68000_base_device::init_cpu_m68010(void)
{ {
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_010; cpu_type = CPU_TYPE_010;
// dasm_type = M68K_CPU_TYPE_68010; // dasm_type = M68K_CPU_TYPE_68010;
init16(*program); init16(*program);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[1]; jump_table = m68ki_instruction_jump_table[1];
@ -1785,8 +1783,8 @@ void m68000_base_device::init_cpu_m68020(void)
{ {
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_020; cpu_type = CPU_TYPE_020;
// dasm_type = M68K_CPU_TYPE_68020; // dasm_type = M68K_CPU_TYPE_68020;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[2]; jump_table = m68ki_instruction_jump_table[2];
@ -1813,7 +1811,7 @@ void m68000_base_device::init_cpu_m68020pmmu(void)
has_pmmu = 1; has_pmmu = 1;
has_fpu = 1; has_fpu = 1;
init32mmu(*program); init32mmu(*program);
} }
@ -1826,7 +1824,7 @@ void m68000_base_device::init_cpu_m68020hmmu(void)
has_hmmu = 1; has_hmmu = 1;
has_fpu = 1; has_fpu = 1;
init32hmmu(*program); init32hmmu(*program);
} }
@ -1835,9 +1833,9 @@ void m68000_base_device::init_cpu_m68ec020(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_EC020; cpu_type = CPU_TYPE_EC020;
// dasm_type = M68K_CPU_TYPE_68EC020; // dasm_type = M68K_CPU_TYPE_68EC020;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[2]; jump_table = m68ki_instruction_jump_table[2];
@ -1864,9 +1862,9 @@ void m68000_base_device::init_cpu_m68030(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_030; cpu_type = CPU_TYPE_030;
// dasm_type = M68K_CPU_TYPE_68030; // dasm_type = M68K_CPU_TYPE_68030;
init32mmu(*program); init32mmu(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[3]; jump_table = m68ki_instruction_jump_table[3];
@ -1892,11 +1890,11 @@ void m68000_base_device::init_cpu_m68030(void)
void m68000_base_device::init_cpu_m68ec030(void) void m68000_base_device::init_cpu_m68ec030(void)
{ {
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_EC030;
// dasm_type = M68K_CPU_TYPE_68EC030;
cpu_type = CPU_TYPE_EC030;
// dasm_type = M68K_CPU_TYPE_68EC030;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[3]; jump_table = m68ki_instruction_jump_table[3];
@ -1924,9 +1922,9 @@ void m68000_base_device::init_cpu_m68040(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_040; cpu_type = CPU_TYPE_040;
// dasm_type = M68K_CPU_TYPE_68040; // dasm_type = M68K_CPU_TYPE_68040;
init32mmu(*program); init32mmu(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4]; jump_table = m68ki_instruction_jump_table[4];
@ -1953,9 +1951,9 @@ void m68000_base_device::init_cpu_m68ec040(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_EC040; cpu_type = CPU_TYPE_EC040;
// dasm_type = M68K_CPU_TYPE_68EC040; // dasm_type = M68K_CPU_TYPE_68EC040;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4]; jump_table = m68ki_instruction_jump_table[4];
@ -1982,9 +1980,9 @@ void m68000_base_device::init_cpu_m68lc040(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_LC040; cpu_type = CPU_TYPE_LC040;
// dasm_type = M68K_CPU_TYPE_68LC040; // dasm_type = M68K_CPU_TYPE_68LC040;
init32mmu(*program); init32mmu(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4]; jump_table = m68ki_instruction_jump_table[4];
@ -2018,9 +2016,9 @@ void m68000_base_device::init_cpu_fscpu32(void)
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_FSCPU32; cpu_type = CPU_TYPE_FSCPU32;
// dasm_type = M68K_CPU_TYPE_FSCPU32; // dasm_type = M68K_CPU_TYPE_FSCPU32;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[5]; jump_table = m68ki_instruction_jump_table[5];
@ -2044,11 +2042,11 @@ void m68000_base_device::init_cpu_fscpu32(void)
void m68000_base_device::init_cpu_coldfire(void) void m68000_base_device::init_cpu_coldfire(void)
{ {
init_cpu_common(); init_cpu_common();
cpu_type = CPU_TYPE_COLDFIRE;
// dasm_type = M68K_CPU_TYPE_COLDFIRE;
cpu_type = CPU_TYPE_COLDFIRE;
// dasm_type = M68K_CPU_TYPE_COLDFIRE;
init32(*program); init32(*program);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */ sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[6]; jump_table = m68ki_instruction_jump_table[6];
@ -2073,25 +2071,25 @@ void m68000_base_device::init_cpu_coldfire(void)
/* /*
case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break; case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break;
case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break; case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break;
case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 24; break; case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 24; break;
case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = 0; break; case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = 0; break;
case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; // there is no level 0 case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; // there is no level 0
case CPUINFO_INT_INPUT_STATE + 1: info->i = (m68k->virq_state >> 1) & 1; break; case CPUINFO_INT_INPUT_STATE + 1: info->i = (m68k->virq_state >> 1) & 1; break;
case CPUINFO_INT_INPUT_STATE + 2: info->i = (m68k->virq_state >> 2) & 1; break; case CPUINFO_INT_INPUT_STATE + 2: info->i = (m68k->virq_state >> 2) & 1; break;
case CPUINFO_INT_INPUT_STATE + 3: info->i = (m68k->virq_state >> 3) & 1; break; case CPUINFO_INT_INPUT_STATE + 3: info->i = (m68k->virq_state >> 3) & 1; break;
case CPUINFO_INT_INPUT_STATE + 4: info->i = (m68k->virq_state >> 4) & 1; break; case CPUINFO_INT_INPUT_STATE + 4: info->i = (m68k->virq_state >> 4) & 1; break;
case CPUINFO_INT_INPUT_STATE + 5: info->i = (m68k->virq_state >> 5) & 1; break; case CPUINFO_INT_INPUT_STATE + 5: info->i = (m68k->virq_state >> 5) & 1; break;
case CPUINFO_INT_INPUT_STATE + 6: info->i = (m68k->virq_state >> 6) & 1; break; case CPUINFO_INT_INPUT_STATE + 6: info->i = (m68k->virq_state >> 6) & 1; break;
case CPUINFO_INT_INPUT_STATE + 7: info->i = (m68k->virq_state >> 7) & 1; break; case CPUINFO_INT_INPUT_STATE + 7: info->i = (m68k->virq_state >> 7) & 1; break;
case CPUINFO_STR_FAMILY: strcpy(info->s, "Motorola 68K"); break; case CPUINFO_STR_FAMILY: strcpy(info->s, "Motorola 68K"); break;
case CPUINFO_STR_VERSION: strcpy(info->s, "4.95"); break; case CPUINFO_STR_VERSION: strcpy(info->s, "4.95"); break;
case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break;
case CPUINFO_STR_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB, FPU+MMU by RB+HO+OG)"); break; case CPUINFO_STR_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB, FPU+MMU by RB+HO+OG)"); break;
*/ */
@ -2196,7 +2194,7 @@ void m68000_base_device::m68ki_exception_interrupt(m68000_base_device *m68k, UIN
/* Acknowledge the interrupt */ /* Acknowledge the interrupt */
vector = (*int_ack_callback)(this, int_level); vector = (*int_ack_callback)(this, int_level);
/* Get the interrupt vector */ /* Get the interrupt vector */
if(vector == M68K_INT_ACK_AUTOVECTOR) if(vector == M68K_INT_ACK_AUTOVECTOR)
/* Use the autovectors. This is the most commonly used implementation */ /* Use the autovectors. This is the most commonly used implementation */
@ -2273,7 +2271,7 @@ m68000_base_device::m68000_base_device(const machine_config &mconfig, const char
void m68000_base_device::clear_all() void m68000_base_device::clear_all()
{ {
cpu_type= 0; cpu_type= 0;
// dasm_type= 0; // dasm_type= 0;
for (int i=0;i<16;i++) for (int i=0;i<16;i++)
dar[i]= 0; dar[i]= 0;
ppc= 0; ppc= 0;
@ -2286,8 +2284,8 @@ void m68000_base_device::clear_all()
cacr= 0; cacr= 0;
caar= 0; caar= 0;
ir= 0; ir= 0;
// for (int i=0;i<8;i++) // for (int i=0;i<8;i++)
// fpr[i]= 0; // fpr[i]= 0;
fpiar= 0; fpiar= 0;
fpsr= 0; fpsr= 0;
fpcr= 0; fpcr= 0;
@ -2352,13 +2350,13 @@ void m68000_base_device::clear_all()
program = 0; program = 0;
opcode_xor = 0; opcode_xor = 0;
// readimm16 = 0; // readimm16 = 0;
// read8 = 0; // read8 = 0;
// read16 = 0; // read16 = 0;
// read32 = 0; // read32 = 0;
// write8 = 0; // write8 = 0;
// write16 = 0; // write16 = 0;
// write32 = 0; // write32 = 0;
m_space = 0; m_space = 0;
m_direct = 0; m_direct = 0;
@ -2383,7 +2381,7 @@ void m68000_base_device::clear_all()
for (int i=0; i<MMU_ATC_ENTRIES;i++) for (int i=0; i<MMU_ATC_ENTRIES;i++)
mmu_atc_tag[i] = mmu_atc_data[i] = 0; mmu_atc_tag[i] = mmu_atc_data[i] = 0;
mmu_atc_rr = 0; mmu_atc_rr = 0;
mmu_tt0 = mmu_tt1 = 0; mmu_tt0 = mmu_tt1 = 0;
mmu_itt0 = mmu_itt1 = mmu_dtt0 = mmu_dtt1 = 0; mmu_itt0 = mmu_itt1 = mmu_dtt0 = mmu_dtt1 = 0;
@ -2398,7 +2396,7 @@ void m68000_base_device::clear_all()
for (int i=0;i<M68K_IC_SIZE;i++) for (int i=0;i<M68K_IC_SIZE;i++)
ic_address[i] = 0; ic_address[i] = 0;
for (int i=0;i<M68K_IC_SIZE;i++) for (int i=0;i<M68K_IC_SIZE;i++)
ic_data[i] = 0; ic_data[i] = 0;
@ -2415,7 +2413,6 @@ void m68000_base_device::execute_run()
void m68000_base_device::device_start() void m68000_base_device::device_start()
{ {
} }
void m68000_base_device::device_reset() void m68000_base_device::device_reset()
@ -2425,7 +2422,6 @@ void m68000_base_device::device_reset()
void m68000_base_device::device_stop() void m68000_base_device::device_stop()
{ {
} }
@ -2491,7 +2487,6 @@ const device_type MCF5206E = &device_creator<mcf5206e_device>;
m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68000_device::m68000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68000", tag, owner, clock, M68000, 16,24, "m68000", __FILE__) : m68000_base_device(mconfig, "M68000", tag, owner, clock, M68000, 16,24, "m68000", __FILE__)
{ {
} }
void m68000_device::device_start() void m68000_device::device_start()
@ -2503,7 +2498,6 @@ m68000_device::m68000_device(const machine_config &mconfig, const char *name, co
const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source) const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source)
: m68000_base_device(mconfig, name, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map, shortname, source) : m68000_base_device(mconfig, name, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map, shortname, source)
{ {
} }
@ -2513,7 +2507,6 @@ m68000_device::m68000_device(const machine_config &mconfig, const char *name, co
m68301_device::m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68301_device::m68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68301", tag, owner, clock, M68301, 16,24, "m68301", __FILE__) : m68000_base_device(mconfig, "M68301", tag, owner, clock, M68301, 16,24, "m68301", __FILE__)
{ {
} }
@ -2532,7 +2525,6 @@ void m68301_device::device_start()
m68008_device::m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68008_device::m68008_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68008", tag, owner, clock, M68008, 8,20, "m68008", __FILE__) : m68000_base_device(mconfig, "M68008", tag, owner, clock, M68008, 8,20, "m68008", __FILE__)
{ {
} }
void m68008_device::device_start() void m68008_device::device_start()
@ -2544,7 +2536,6 @@ void m68008_device::device_start()
m68008plcc_device::m68008plcc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68008plcc_device::m68008plcc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68008PLCC", tag, owner, clock, M68008, 8,22, "m68008plcc", __FILE__) : m68000_base_device(mconfig, "M68008PLCC", tag, owner, clock, M68008, 8,22, "m68008plcc", __FILE__)
{ {
} }
void m68008plcc_device::device_start() void m68008plcc_device::device_start()
@ -2557,7 +2548,6 @@ void m68008plcc_device::device_start()
m68010_device::m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68010_device::m68010_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68010", tag, owner, clock, M68010, 16,24, "m68010", __FILE__) : m68000_base_device(mconfig, "M68010", tag, owner, clock, M68010, 16,24, "m68010", __FILE__)
{ {
} }
void m68010_device::device_start() void m68010_device::device_start()
@ -2570,7 +2560,6 @@ void m68010_device::device_start()
m68020_device::m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68020_device::m68020_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68020", tag, owner, clock, M68020, 32,32, "m68020", __FILE__) : m68000_base_device(mconfig, "M68020", tag, owner, clock, M68020, 32,32, "m68020", __FILE__)
{ {
} }
void m68020_device::device_start() void m68020_device::device_start()
@ -2582,7 +2571,6 @@ void m68020_device::device_start()
m68020pmmu_device::m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68020pmmu_device::m68020pmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68020PMMU", tag, owner, clock, M68020PMMU, 32,32, "m68020pmmu", __FILE__) : m68000_base_device(mconfig, "M68020PMMU", tag, owner, clock, M68020PMMU, 32,32, "m68020pmmu", __FILE__)
{ {
} }
void m68020pmmu_device::device_start() void m68020pmmu_device::device_start()
@ -2605,11 +2593,10 @@ bool m68020hmmu_device::memory_translate(address_spacenum space, int intention,
// 68020 with Apple HMMU & 68881 FPU // 68020 with Apple HMMU & 68881 FPU
// case CPUINFO_FCT_TRANSLATE: info->translate = CPU_TRANSLATE_NAME(m68khmmu); break; // case CPUINFO_FCT_TRANSLATE: info->translate = CPU_TRANSLATE_NAME(m68khmmu); break;
m68020hmmu_device::m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68020hmmu_device::m68020hmmu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68020HMMU", tag, owner, clock, M68020HMMU, 32,32, "m68020hmmu", __FILE__) : m68000_base_device(mconfig, "M68020HMMU", tag, owner, clock, M68020HMMU, 32,32, "m68020hmmu", __FILE__)
{ {
} }
void m68020hmmu_device::device_start() void m68020hmmu_device::device_start()
@ -2621,7 +2608,6 @@ void m68020hmmu_device::device_start()
m68ec020_device::m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68ec020_device::m68ec020_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68EC020", tag, owner, clock, M68EC020, 32,24, "m68ec020", __FILE__) : m68000_base_device(mconfig, "M68EC020", tag, owner, clock, M68EC020, 32,24, "m68ec020", __FILE__)
{ {
} }
void m68ec020_device::device_start() void m68ec020_device::device_start()
@ -2632,7 +2618,6 @@ void m68ec020_device::device_start()
m68030_device::m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68030_device::m68030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68030", tag, owner, clock, M68030, 32,32, "m68030", __FILE__) : m68000_base_device(mconfig, "M68030", tag, owner, clock, M68030, 32,32, "m68030", __FILE__)
{ {
} }
void m68030_device::device_start() void m68030_device::device_start()
@ -2643,7 +2628,6 @@ void m68030_device::device_start()
m68ec030_device::m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68ec030_device::m68ec030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68EC030", tag, owner, clock, M68EC030, 32,32, "m68ec030", __FILE__) : m68000_base_device(mconfig, "M68EC030", tag, owner, clock, M68EC030, 32,32, "m68ec030", __FILE__)
{ {
} }
void m68ec030_device::device_start() void m68ec030_device::device_start()
@ -2654,7 +2638,6 @@ void m68ec030_device::device_start()
m68040_device::m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68040_device::m68040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68040", tag, owner, clock, M68040, 32,32, "m68040", __FILE__) : m68000_base_device(mconfig, "M68040", tag, owner, clock, M68040, 32,32, "m68040", __FILE__)
{ {
} }
@ -2668,7 +2651,6 @@ void m68040_device::device_start()
m68ec040_device::m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68ec040_device::m68ec040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68EC040", tag, owner, clock, M68EC040, 32,32, "m68ec040", __FILE__) : m68000_base_device(mconfig, "M68EC040", tag, owner, clock, M68EC040, 32,32, "m68ec040", __FILE__)
{ {
} }
void m68ec040_device::device_start() void m68ec040_device::device_start()
@ -2681,7 +2663,6 @@ void m68ec040_device::device_start()
m68lc040_device::m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) m68lc040_device::m68lc040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "M68LC040", tag, owner, clock, M68LC040, 32,32, "m68lc040", __FILE__) : m68000_base_device(mconfig, "M68LC040", tag, owner, clock, M68LC040, 32,32, "m68lc040", __FILE__)
{ {
} }
void m68lc040_device::device_start() void m68lc040_device::device_start()
@ -2693,7 +2674,6 @@ void m68lc040_device::device_start()
scc68070_device::scc68070_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) scc68070_device::scc68070_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "SCC68070", tag, owner, clock, SCC68070, 16,32, "scc68070", __FILE__) : m68000_base_device(mconfig, "SCC68070", tag, owner, clock, SCC68070, 16,32, "scc68070", __FILE__)
{ {
} }
void scc68070_device::device_start() void scc68070_device::device_start()
@ -2705,14 +2685,12 @@ void scc68070_device::device_start()
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "Freescale CPU32 Core", tag, owner, clock, FSCPU32, 32,32, "fscpu32", __FILE__) : m68000_base_device(mconfig, "Freescale CPU32 Core", tag, owner, clock, FSCPU32, 32,32, "fscpu32", __FILE__)
{ {
} }
fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock, fscpu32_device::fscpu32_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock,
const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source) const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source)
: m68000_base_device(mconfig, name, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map, shortname, source) : m68000_base_device(mconfig, name, tag, owner, clock, type, prg_data_width, prg_address_bits, internal_map, shortname, source)
{ {
} }
@ -2726,10 +2704,9 @@ void fscpu32_device::device_start()
mcf5206e_device::mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) mcf5206e_device::mcf5206e_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_base_device(mconfig, "MCF5206E", tag, owner, clock, MCF5206E, 32,32, "mcf5206e", __FILE__) : m68000_base_device(mconfig, "MCF5206E", tag, owner, clock, MCF5206E, 32,32, "mcf5206e", __FILE__)
{ {
} }
void mcf5206e_device::device_start() void mcf5206e_device::device_start()
{ {
init_cpu_coldfire(); init_cpu_coldfire();
} }

View File

@ -88,7 +88,7 @@ enum
***************************************************************************/ ***************************************************************************/
#define MCS48_LC_CLOCK(_L, _C) \ #define MCS48_LC_CLOCK(_L, _C) \
(1 / (2 * 3.14159265358979323846 * sqrt(_L * _C))) (1 / (2 * 3.14159265358979323846 * sqrt(_L * _C)))
#define MCS48_ALE_CLOCK(_clock) \ #define MCS48_ALE_CLOCK(_clock) \
attotime::from_hz(_clock/(3*5)) attotime::from_hz(_clock/(3*5))

View File

@ -238,9 +238,9 @@ static void log_add_disasm_comment(rsp_state *rsp, drcuml_block *block, UINT32 p
} }
#define VREG_B(reg, offset) rsp->v[(reg)].b[(offset)^1] #define VREG_B(reg, offset) rsp->v[(reg)].b[(offset)^1]
#define W_VREG_S(reg, offset) rsp->v[(reg)].s[(offset)] #define W_VREG_S(reg, offset) rsp->v[(reg)].s[(offset)]
#define VREG_S(reg, offset) (INT16)rsp->v[(reg)].s[(offset)] #define VREG_S(reg, offset) (INT16)rsp->v[(reg)].s[(offset)]
#define VEC_EL_2(x,z) (vector_elements_2[(x)][(z)]) #define VEC_EL_2(x,z) (vector_elements_2[(x)][(z)])
@ -1192,7 +1192,7 @@ static void cfunc_rsp_lwv(void *param)
#if USE_SIMD #if USE_SIMD
rsp->xv[dest] = _mm_set_epi8(val[15], val[14], val[13], val[12], val[11], val[10], val[ 9], val[ 8], rsp->xv[dest] = _mm_set_epi8(val[15], val[14], val[13], val[12], val[11], val[10], val[ 9], val[ 8],
val[ 7], val[ 6], val[ 5], val[ 4], val[ 3], val[ 2], val[ 1], val[ 0]); val[ 7], val[ 6], val[ 5], val[ 4], val[ 3], val[ 2], val[ 1], val[ 0]);
#endif #endif
} }
@ -2850,67 +2850,67 @@ INLINE void cfunc_rsp_vmadh(void *param)
vres[i] = C_SATURATE_ACCUM1(caccumh, caccumm, i, 0x8000, 0x7fff);*/ vres[i] = C_SATURATE_ACCUM1(caccumh, caccumm, i, 0x8000, 0x7fff);*/
} }
/* printf("%08x\n", rsp->pc); /* printf("%08x\n", rsp->pc);
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
if ((UINT16)vres[i] != vresult[i]) if ((UINT16)vres[i] != vresult[i])
{ {
printf("Result mismatch:\n"); printf("Result mismatch:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]);
printf("High accumulator:\n"); printf("High accumulator:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7));
printf("Mid accumulator:\n"); printf("Mid accumulator:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7));
printf("VS1:\n"); printf("VS1:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]);
printf("VS2:\n"); printf("VS2:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]);
fatalerror("asdf"); fatalerror("asdf");
} }
if (caccumh[i] != (UINT16)ACCUM_H(i)) if (caccumh[i] != (UINT16)ACCUM_H(i))
{ {
printf("Result:\n"); printf("Result:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]);
printf("High accumulator mismatch:\n"); printf("High accumulator mismatch:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7));
printf("Mid accumulator:\n"); printf("Mid accumulator:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7));
printf("VS1:\n"); printf("VS1:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]);
printf("VS2:\n"); printf("VS2:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]);
fatalerror("asdf"); fatalerror("asdf");
} }
if (caccumm[i] != (UINT16)ACCUM_M(i)) if (caccumm[i] != (UINT16)ACCUM_M(i))
{ {
printf("Result:\n"); printf("Result:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vres[0], vres[1], vres[2], vres[3], vres[4], vres[5], vres[6], vres[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", vresult[0], vresult[1], vresult[2], vresult[3], vresult[4], vresult[5], vresult[6], vresult[7]);
printf("High accumulator:\n"); printf("High accumulator:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumh[0], caccumh[1], caccumh[2], caccumh[3], caccumh[4], caccumh[5], caccumh[6], caccumh[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_H(0), ACCUM_H(1), ACCUM_H(2), ACCUM_H(3), ACCUM_H(4), ACCUM_H(5), ACCUM_H(6), ACCUM_H(7));
printf("Mid accumulator mismatch:\n"); printf("Mid accumulator mismatch:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", caccumm[0], caccumm[1], caccumm[2], caccumm[3], caccumm[4], caccumm[5], caccumm[6], caccumm[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7)); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", ACCUM_M(0), ACCUM_M(1), ACCUM_M(2), ACCUM_M(3), ACCUM_M(4), ACCUM_M(5), ACCUM_M(6), ACCUM_M(7));
printf("VS1:\n"); printf("VS1:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs1[0], vs1[1], vs1[2], vs1[3], vs1[4], vs1[5], vs1[6], vs1[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs1[0], svs1[1], svs1[2], svs1[3], svs1[4], svs1[5], svs1[6], svs1[7]);
printf("VS2:\n"); printf("VS2:\n");
printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]); printf(" C: %04x %04x %04x %04x %04x %04x %04x %04x\n", vs2[0], vs2[1], vs2[2], vs2[3], vs2[4], vs2[5], vs2[6], vs2[7]);
printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]); printf("SIMD: %04x %04x %04x %04x %04x %04x %04x %04x\n", svs2[0], svs2[1], svs2[2], svs2[3], svs2[4], svs2[5], svs2[6], svs2[7]);
fatalerror("asdf"); fatalerror("asdf");
} }
}*/ }*/
WRITEBACK_RESULT(); WRITEBACK_RESULT();
#endif #endif
} }
@ -2930,7 +2930,7 @@ INLINE void cfunc_rsp_vadd(void *param)
__m128i shuffled = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]); __m128i shuffled = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]);
__m128i unsat = rsp->xv[VS1REG]; __m128i unsat = rsp->xv[VS1REG];
__m128i carry = _mm_set_epi16(CARRY_FLAG(7), CARRY_FLAG(6), CARRY_FLAG(5), CARRY_FLAG(4), __m128i carry = _mm_set_epi16(CARRY_FLAG(7), CARRY_FLAG(6), CARRY_FLAG(5), CARRY_FLAG(4),
CARRY_FLAG(3), CARRY_FLAG(2), CARRY_FLAG(1), CARRY_FLAG(0)); CARRY_FLAG(3), CARRY_FLAG(2), CARRY_FLAG(1), CARRY_FLAG(0));
unsat = _mm_add_epi16(unsat, shuffled); unsat = _mm_add_epi16(unsat, shuffled);
unsat = _mm_add_epi16(unsat, carry); unsat = _mm_add_epi16(unsat, carry);
@ -3011,7 +3011,7 @@ INLINE void cfunc_rsp_vsub(void *param)
__m128i shuffled = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]); __m128i shuffled = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]);
__m128i unsat = rsp->xv[VS1REG]; __m128i unsat = rsp->xv[VS1REG];
__m128i carry = _mm_set_epi16(CARRY_FLAG(7), CARRY_FLAG(6), CARRY_FLAG(5), CARRY_FLAG(4), __m128i carry = _mm_set_epi16(CARRY_FLAG(7), CARRY_FLAG(6), CARRY_FLAG(5), CARRY_FLAG(4),
CARRY_FLAG(3), CARRY_FLAG(2), CARRY_FLAG(1), CARRY_FLAG(0)); CARRY_FLAG(3), CARRY_FLAG(2), CARRY_FLAG(1), CARRY_FLAG(0));
unsat = _mm_sub_epi16(unsat, shuffled); unsat = _mm_sub_epi16(unsat, shuffled);
unsat = _mm_sub_epi16(unsat, carry); unsat = _mm_sub_epi16(unsat, carry);
@ -3142,7 +3142,7 @@ INLINE void cfunc_rsp_vaddc(void *param)
#if USE_SIMD #if USE_SIMD
__m128i shuf2 = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]); __m128i shuf2 = _mm_shuffle_epi8(rsp->xv[VS2REG], vec_shuf_inverse[EL]);
__m128i vec7531 = _mm_and_si128(rsp->xv[VS1REG], vec_lomask); __m128i vec7531 = _mm_and_si128(rsp->xv[VS1REG], vec_lomask);
__m128i vec6420 = _mm_srli_epi32(rsp->xv[VS1REG], 16); __m128i vec6420 = _mm_srli_epi32(rsp->xv[VS1REG], 16);
__m128i shuf7531 = _mm_and_si128(shuf2, vec_lomask); __m128i shuf7531 = _mm_and_si128(shuf2, vec_lomask);
__m128i shuf6420 = _mm_srli_epi32(shuf2, 16); __m128i shuf6420 = _mm_srli_epi32(shuf2, 16);

View File

@ -1042,7 +1042,7 @@ void tms1100_cpu_device::state_string_export(const device_state_entry &entry, as
tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: tms1xxx_cpu_device( mconfig, TMS0980, "TMS0980", tag, owner, clock, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4 : tms1xxx_cpu_device( mconfig, TMS0980, "TMS0980", tag, owner, clock, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4
, 12, ADDRESS_MAP_NAME( tms0980_internal_rom ), 7, ADDRESS_MAP_NAME( tms0980_internal_ram ), "tms0980", __FILE__) , 12, ADDRESS_MAP_NAME( tms0980_internal_rom ), 7, ADDRESS_MAP_NAME( tms0980_internal_ram ), "tms0980", __FILE__)
{ {
} }
@ -1056,14 +1056,14 @@ offs_t tms0980_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UIN
tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: tms1xxx_cpu_device( mconfig, TMS1000, "TMS1000", tag, owner, clock, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2 : tms1xxx_cpu_device( mconfig, TMS1000, "TMS1000", tag, owner, clock, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2
, 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), "tms1000", __FILE__) , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), "tms1000", __FILE__)
{ {
} }
tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source) tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
: tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1000_default_decode, o_mask, r_mask, 6, 8, 2 : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1000_default_decode, o_mask, r_mask, 6, 8, 2
, 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_6bit ), shortname, source ) , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_6bit ), shortname, source )
{ {
} }
@ -1095,14 +1095,14 @@ tms1270_cpu_device::tms1270_cpu_device(const machine_config &mconfig, const char
tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: tms1xxx_cpu_device( mconfig, TMS1100, "TMS1100", tag, owner, clock, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3 : tms1xxx_cpu_device( mconfig, TMS1100, "TMS1100", tag, owner, clock, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3
, 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), "tms1100", __FILE__ ) , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), "tms1100", __FILE__ )
{ {
} }
tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source) tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
: tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1100_default_decode, o_mask, r_mask, 6, 8, 3 : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1100_default_decode, o_mask, r_mask, 6, 8, 3
, 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), shortname, source ) , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), shortname, source )
{ {
} }
@ -1118,4 +1118,3 @@ tms1300_cpu_device::tms1300_cpu_device(const machine_config &mconfig, const char
: tms1100_cpu_device( mconfig, TMS1300, "TMS1300", tag, owner, clock, 0x00ff, 0xffff, "tms1300", __FILE__ ) : tms1100_cpu_device( mconfig, TMS1300, "TMS1300", tag, owner, clock, 0x00ff, 0xffff, "tms1300", __FILE__ )
{ {
} }

View File

@ -27,8 +27,8 @@ class tms1xxx_cpu_device : public cpu_device
public: public:
// construction/destruction // construction/destruction
tms1xxx_cpu_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock tms1xxx_cpu_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock
, const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size, UINT8 x_bits , const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size, UINT8 x_bits
, int program_addrbus_width, address_map_constructor program, int data_addrbus_width, address_map_constructor data, const char *shortname, const char *source) , int program_addrbus_width, address_map_constructor program, int data_addrbus_width, address_map_constructor data, const char *shortname, const char *source)
: cpu_device( mconfig, type, name, tag, owner, clock, shortname, source) : cpu_device( mconfig, type, name, tag, owner, clock, shortname, source)
, m_program_config("program", ENDIANNESS_BIG, byte_size > 8 ? 16 : 8, program_addrbus_width, 0, program ) , m_program_config("program", ENDIANNESS_BIG, byte_size > 8 ? 16 : 8, program_addrbus_width, 0, program )
, m_data_config("data", ENDIANNESS_BIG, 8, data_addrbus_width, 0, data ) , m_data_config("data", ENDIANNESS_BIG, 8, data_addrbus_width, 0, data )
@ -72,7 +72,7 @@ protected:
void set_cki_bus(); void set_cki_bus();
address_space_config m_program_config; address_space_config m_program_config;
address_space_config m_data_config; address_space_config m_data_config;
UINT8 m_prev_pc; /* previous program counter */ UINT8 m_prev_pc; /* previous program counter */
UINT8 m_prev_pa; /* previous page address register */ UINT8 m_prev_pa; /* previous page address register */

View File

@ -7,10 +7,10 @@
static const char *BCND_CONDITION[32] = static const char *BCND_CONDITION[32] =
{ {
"nev.b", "gt0.b", "eq0.b", "ge0.b", "lt0.b", "ne0.b", "le0.b", "alw.b", "nev.b", "gt0.b", "eq0.b", "ge0.b", "lt0.b", "ne0.b", "le0.b", "alw.b",
"nev.h", "gt0.h", "eq0.h", "ge0.h", "lt0.h", "ne0.h", "le0.h", "alw.h", "nev.h", "gt0.h", "eq0.h", "ge0.h", "lt0.h", "ne0.h", "le0.h", "alw.h",
"nev.w", "gt0.w", "eq0.w", "ge0.w", "lt0.w", "ne0.w", "le0.w", "alw.w", "nev.w", "gt0.w", "eq0.w", "ge0.w", "lt0.w", "ne0.w", "le0.w", "alw.w",
"nev.d", "gt0.d", "eq0.d", "ge0.d", "lt0.d", "ne0.d", "le0.d", "alw.d", "nev.d", "gt0.d", "eq0.d", "ge0.d", "lt0.d", "ne0.d", "le0.d", "alw.d",
}; };
static char *output; static char *output;
@ -40,33 +40,33 @@ static char* get_creg_name(UINT32 reg)
switch (reg) switch (reg)
{ {
case 0x0000: sprintf(buffer, "EPC"); break; case 0x0000: sprintf(buffer, "EPC"); break;
case 0x0001: sprintf(buffer, "EIP"); break; case 0x0001: sprintf(buffer, "EIP"); break;
case 0x0002: sprintf(buffer, "CONFIG"); break; case 0x0002: sprintf(buffer, "CONFIG"); break;
case 0x0004: sprintf(buffer, "INTPEN"); break; case 0x0004: sprintf(buffer, "INTPEN"); break;
case 0x0006: sprintf(buffer, "IE"); break; case 0x0006: sprintf(buffer, "IE"); break;
case 0x0008: sprintf(buffer, "FPST"); break; case 0x0008: sprintf(buffer, "FPST"); break;
case 0x000a: sprintf(buffer, "PPERROR"); break; case 0x000a: sprintf(buffer, "PPERROR"); break;
case 0x000d: sprintf(buffer, "PKTREQ"); break; case 0x000d: sprintf(buffer, "PKTREQ"); break;
case 0x000e: sprintf(buffer, "TCOUNT"); break; case 0x000e: sprintf(buffer, "TCOUNT"); break;
case 0x000f: sprintf(buffer, "TSCALE"); break; case 0x000f: sprintf(buffer, "TSCALE"); break;
case 0x0010: sprintf(buffer, "FLTOP"); break; case 0x0010: sprintf(buffer, "FLTOP"); break;
case 0x0011: sprintf(buffer, "FLTADR"); break; case 0x0011: sprintf(buffer, "FLTADR"); break;
case 0x0012: sprintf(buffer, "FLTTAG"); break; case 0x0012: sprintf(buffer, "FLTTAG"); break;
case 0x0013: sprintf(buffer, "FLTDTL"); break; case 0x0013: sprintf(buffer, "FLTDTL"); break;
case 0x0014: sprintf(buffer, "FLTDTH"); break; case 0x0014: sprintf(buffer, "FLTDTH"); break;
case 0x0020: sprintf(buffer, "SYSSTK"); break; case 0x0020: sprintf(buffer, "SYSSTK"); break;
case 0x0021: sprintf(buffer, "SYSTMP"); break; case 0x0021: sprintf(buffer, "SYSTMP"); break;
case 0x0030: sprintf(buffer, "MPC"); break; case 0x0030: sprintf(buffer, "MPC"); break;
case 0x0031: sprintf(buffer, "MIP"); break; case 0x0031: sprintf(buffer, "MIP"); break;
case 0x0033: sprintf(buffer, "ECOMCNTL"); break; case 0x0033: sprintf(buffer, "ECOMCNTL"); break;
case 0x0034: sprintf(buffer, "ANASTAT"); break; case 0x0034: sprintf(buffer, "ANASTAT"); break;
case 0x0039: sprintf(buffer, "BRK1"); break; case 0x0039: sprintf(buffer, "BRK1"); break;
case 0x003a: sprintf(buffer, "BRK2"); break; case 0x003a: sprintf(buffer, "BRK2"); break;
case 0x4000: sprintf(buffer, "IN0P"); break; case 0x4000: sprintf(buffer, "IN0P"); break;
case 0x4001: sprintf(buffer, "IN1P"); break; case 0x4001: sprintf(buffer, "IN1P"); break;
case 0x4002: sprintf(buffer, "OUTP"); break; case 0x4002: sprintf(buffer, "OUTP"); break;
default: sprintf(buffer, "CR %04X\n", reg); default: sprintf(buffer, "CR %04X\n", reg);
} }
return buffer; return buffer;
@ -92,36 +92,36 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
switch ((op >> 20) & 3) switch ((op >> 20) & 3)
{ {
case 0: case 1: case 2: // Short immediate case 0: case 1: case 2: // Short immediate
{ {
int subop = (op >> 15) & 0x7f; int subop = (op >> 15) & 0x7f;
switch (subop) switch (subop)
{ {
case 0x00: print("illop0 "); break; case 0x00: print("illop0 "); break;
case 0x01: print("trap %d", UIMM15(uimm15)); break; case 0x01: print("trap %d", UIMM15(uimm15)); break;
case 0x02: print("cmnd 0x%04X", UIMM15(uimm15)); break; case 0x02: print("cmnd 0x%04X", UIMM15(uimm15)); break;
case 0x04: print("rdcr R%d, %s", rd, get_creg_name(UIMM15(uimm15))); break; case 0x04: print("rdcr R%d, %s", rd, get_creg_name(UIMM15(uimm15))); break;
case 0x05: print("swcr %s, R%d, R%d", get_creg_name(UIMM15(uimm15)), rs, rd); break; case 0x05: print("swcr %s, R%d, R%d", get_creg_name(UIMM15(uimm15)), rs, rd); break;
case 0x06: print("brcr 0x%04X", UIMM15(uimm15)); break; case 0x06: print("brcr 0x%04X", UIMM15(uimm15)); break;
case 0x08: print("shift%s.dz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x08: print("shift%s.dz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x09: print("shift%s.dm %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x09: print("shift%s.dm %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0a: print("shift%s.ds %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0a: print("shift%s.ds %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0b: print("shift%s.ez %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0b: print("shift%s.ez %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0c: print("shift%s.em %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0c: print("shift%s.em %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0d: print("shift%s.es %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0d: print("shift%s.es %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0e: print("shift%s.iz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0e: print("shift%s.iz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x0f: print("shift%s.im %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x0f: print("shift%s.im %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x11: print("and 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x11: print("and 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x12: print("and.tf 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x12: print("and.tf 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x14: print("and.ft 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x14: print("and.ft 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x16: print("xor 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x16: print("xor 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x17: print("or 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x17: print("or 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x18: print("and.ff 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x18: print("and.ff 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x19: print("xnor 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x19: print("xnor 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x1b: print("or.tf 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x1b: print("or.tf 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x1d: print("or.ft 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x1d: print("or.ft 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x1e: print("or.ff 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break; case 0x1e: print("or.ff 0x%04X, R%d, R%d", UIMM15(uimm15), rs, rd); break;
case 0x24: case 0x20: case 0x24: case 0x20:
print("ld.b 0x%04X(R%d), R%d", UIMM15(uimm15), rs, rd); print("ld.b 0x%04X(R%d), R%d", UIMM15(uimm15), rs, rd);
@ -155,76 +155,76 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
print("st.d R%d, 0x%04X(R%d)", rd, UIMM15(uimm15), rs); print("st.d R%d, 0x%04X(R%d)", rd, UIMM15(uimm15), rs);
break; break;
case 0x40: print("bsr 0x%08X, R%d", pc + (SIMM15(uimm15) * 4), link); break; case 0x40: print("bsr 0x%08X, R%d", pc + (SIMM15(uimm15) * 4), link); break;
case 0x41: print("bsr.a 0x%08X, R%d", pc + (SIMM15(uimm15) * 4), link); break; case 0x41: print("bsr.a 0x%08X, R%d", pc + (SIMM15(uimm15) * 4), link); break;
case 0x44: print("jsr 0x%04X(R%d), R%d", SIMM15(uimm15), rs, link); break; case 0x44: print("jsr 0x%04X(R%d), R%d", SIMM15(uimm15), rs, link); break;
case 0x45: print("jsr.a 0x%04X(R%d), R%d", SIMM15(uimm15), rs, link); break; case 0x45: print("jsr.a 0x%04X(R%d), R%d", SIMM15(uimm15), rs, link); break;
case 0x48: print("bbz 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break; case 0x48: print("bbz 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break;
case 0x49: print("bbz.a 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break; case 0x49: print("bbz.a 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break;
case 0x4a: print("bbo 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break; case 0x4a: print("bbo 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break;
case 0x4b: print("bbo.a 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break; case 0x4b: print("bbo.a 0x%08X, R%d, #%d", pc + (SIMM15(uimm15) * 4), rs, bitnum); break;
case 0x4c: print("bcnd 0x%08X, R%d, %s", pc + (SIMM15(uimm15) * 4), rs, BCND_CONDITION[rd]); break; case 0x4c: print("bcnd 0x%08X, R%d, %s", pc + (SIMM15(uimm15) * 4), rs, BCND_CONDITION[rd]); break;
case 0x4d: print("bcnd.a 0x%08X, R%d, %s", pc + (SIMM15(uimm15) * 4), rs, BCND_CONDITION[rd]); break; case 0x4d: print("bcnd.a 0x%08X, R%d, %s", pc + (SIMM15(uimm15) * 4), rs, BCND_CONDITION[rd]); break;
case 0x50: print("cmp 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break; case 0x50: print("cmp 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break;
case 0x58: print("add 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break; case 0x58: print("add 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break;
case 0x59: print("addu 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break; case 0x59: print("addu 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break;
case 0x5a: print("sub 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break; case 0x5a: print("sub 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break;
case 0x5b: print("subu 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break; case 0x5b: print("subu 0x%08X, R%d, R%d", SIMM15(uimm15), rs, rd); break;
} }
break; break;
} }
case 3: // Register / Long immediate case 3: // Register / Long immediate
{ {
int subop = (op >> 12) & 0xff; int subop = (op >> 12) & 0xff;
UINT32 imm32 = 0; UINT32 imm32 = 0;
if (op & (1 << 12)) // fetch 32-bit immediate if needed if (op & (1 << 12)) // fetch 32-bit immediate if needed
imm32 = fetch(); imm32 = fetch();
switch (subop) switch (subop)
{ {
case 0x02: print("trap %d", src1); break; case 0x02: print("trap %d", src1); break;
case 0x03: print("trap %d", imm32); break; case 0x03: print("trap %d", imm32); break;
case 0x04: print("cmnd R%d", src1); break; case 0x04: print("cmnd R%d", src1); break;
case 0x05: print("cmnd 0x%08X", imm32); break; case 0x05: print("cmnd 0x%08X", imm32); break;
case 0x08: print("rdcr R%d, R%d", rd, src1); break; case 0x08: print("rdcr R%d, R%d", rd, src1); break;
case 0x09: print("rdcr R%d, %s", rd, get_creg_name(imm32)); break; case 0x09: print("rdcr R%d, %s", rd, get_creg_name(imm32)); break;
case 0x0a: print("swcr R%d, R%d, R%d", src1, rs, rd); break; case 0x0a: print("swcr R%d, R%d, R%d", src1, rs, rd); break;
case 0x0b: print("swcr %s, R%d, R%d", get_creg_name(imm32), rs, rd); break; case 0x0b: print("swcr %s, R%d, R%d", get_creg_name(imm32), rs, rd); break;
case 0x0c: print("brcr R%d", src1); break; case 0x0c: print("brcr R%d", src1); break;
case 0x0d: print("brcr 0x%08X", imm32); break; case 0x0d: print("brcr 0x%08X", imm32); break;
case 0x10: print("shift%s.dz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x10: print("shift%s.dz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x12: print("shift%s.dm %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x12: print("shift%s.dm %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x14: print("shift%s.ds %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x14: print("shift%s.ds %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x16: print("shift%s.ez %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x16: print("shift%s.ez %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x18: print("shift%s.em %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x18: print("shift%s.em %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x1a: print("shift%s.es %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x1a: print("shift%s.es %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x1c: print("shift%s.iz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x1c: print("shift%s.iz %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x1e: print("shift%s.im %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break; case 0x1e: print("shift%s.im %d, %d, R%d, R%d", (op & (1 << 10)) ? "r" : "l", rotate, endmask, rs, rd); break;
case 0x22: print("and R%d, R%d, R%d", src1, rs, rd); break; case 0x22: print("and R%d, R%d, R%d", src1, rs, rd); break;
case 0x23: print("and 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x23: print("and 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x24: print("and.tf R%d, R%d, R%d", src1, rs, rd); break; case 0x24: print("and.tf R%d, R%d, R%d", src1, rs, rd); break;
case 0x25: print("and.tf 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x25: print("and.tf 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x28: print("and.ft R%d, R%d, R%d", src1, rs, rd); break; case 0x28: print("and.ft R%d, R%d, R%d", src1, rs, rd); break;
case 0x29: print("and.ft 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x29: print("and.ft 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x2c: print("xor R%d, R%d, R%d", src1, rs, rd); break; case 0x2c: print("xor R%d, R%d, R%d", src1, rs, rd); break;
case 0x2d: print("xor 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x2d: print("xor 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x2e: print("or R%d, R%d, R%d", src1, rs, rd); break; case 0x2e: print("or R%d, R%d, R%d", src1, rs, rd); break;
case 0x2f: print("or 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x2f: print("or 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x30: print("and.ff R%d, R%d, R%d", src1, rs, rd); break; case 0x30: print("and.ff R%d, R%d, R%d", src1, rs, rd); break;
case 0x31: print("and.ff 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x31: print("and.ff 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x32: print("xnor R%d, R%d, R%d", src1, rs, rd); break; case 0x32: print("xnor R%d, R%d, R%d", src1, rs, rd); break;
case 0x33: print("xnor 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x33: print("xnor 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x36: print("or.tf R%d, R%d, R%d", src1, rs, rd); break; case 0x36: print("or.tf R%d, R%d, R%d", src1, rs, rd); break;
case 0x37: print("or.tf 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x37: print("or.tf 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x3a: print("or.ft R%d, R%d, R%d", src1, rs, rd); break; case 0x3a: print("or.ft R%d, R%d, R%d", src1, rs, rd); break;
case 0x3b: print("or.ft 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x3b: print("or.ft 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x3c: print("or.ff R%d, R%d, R%d", src1, rs, rd); break; case 0x3c: print("or.ff R%d, R%d, R%d", src1, rs, rd); break;
case 0x3d: print("or.ff 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0x3d: print("or.ff 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0x48: case 0x40: case 0x48: case 0x40:
print("ld.b R%d(R%d), R%d", src1, rs, rd); print("ld.b R%d(R%d), R%d", src1, rs, rd);
@ -232,22 +232,22 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
case 0x49: case 0x41: case 0x49: case 0x41:
print("ld.b 0x%08X(R%d), R%d", imm32, rs, rd); print("ld.b 0x%08X(R%d), R%d", imm32, rs, rd);
break; break;
case 0x4a: case 0x42: case 0x4a: case 0x42:
print("ld.h R%d(R%d), R%d", src1, rs, rd); print("ld.h R%d(R%d), R%d", src1, rs, rd);
break; break;
case 0x4b: case 0x43: case 0x4b: case 0x43:
print("ld.h 0x%08X(R%d), R%d", imm32, rs, rd); print("ld.h 0x%08X(R%d), R%d", imm32, rs, rd);
break; break;
case 0x4c: case 0x44: case 0x4c: case 0x44:
print("ld R%d(R%d), R%d", src1, rs, rd); print("ld R%d(R%d), R%d", src1, rs, rd);
break; break;
case 0x4d: case 0x45: case 0x4d: case 0x45:
print("ld 0x%08X(R%d), R%d", imm32, rs, rd); print("ld 0x%08X(R%d), R%d", imm32, rs, rd);
break; break;
case 0x4e: case 0x46: case 0x4e: case 0x46:
print("ld.d R%d(R%d), R%d", src1, rs, rd); print("ld.d R%d(R%d), R%d", src1, rs, rd);
break; break;
case 0x4f: case 0x47: case 0x4f: case 0x47:
print("ld.d 0x%08X(R%d), R%d", imm32, rs, rd); print("ld.d 0x%08X(R%d), R%d", imm32, rs, rd);
break; break;
case 0x58: case 0x50: case 0x58: case 0x50:
@ -256,7 +256,7 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
case 0x59: case 0x51: case 0x59: case 0x51:
print("ld.ub 0x%08X(R%d), R%d", imm32, rs, rd); print("ld.ub 0x%08X(R%d), R%d", imm32, rs, rd);
break; break;
case 0x5a: case 0x52: case 0x5a: case 0x52:
print("ld.uh R%d(R%d), R%d", src1, rs, rd); print("ld.uh R%d(R%d), R%d", src1, rs, rd);
break; break;
case 0x5b: case 0x53: case 0x5b: case 0x53:
@ -272,66 +272,66 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
case 0x6a: case 0x62: case 0x6a: case 0x62:
print("st.h R%d, R%d(R%d)", rd, src1, rs); print("st.h R%d, R%d(R%d)", rd, src1, rs);
break; break;
case 0x6b: case 0x63: case 0x6b: case 0x63:
print("st.h R%d, 0x%08X(R%d)", rd, imm32, rs); print("st.h R%d, 0x%08X(R%d)", rd, imm32, rs);
break; break;
case 0x6c: case 0x64: case 0x6c: case 0x64:
print("st R%d, R%d(R%d)", rd, src1, rs); print("st R%d, R%d(R%d)", rd, src1, rs);
break; break;
case 0x6d: case 0x65: case 0x6d: case 0x65:
print("st R%d, 0x%08X(R%d)", rd, imm32, rs); print("st R%d, 0x%08X(R%d)", rd, imm32, rs);
break; break;
case 0x6e: case 0x66: case 0x6e: case 0x66:
print("st.d R%d, R%d(R%d)", rd, src1, rs); print("st.d R%d, R%d(R%d)", rd, src1, rs);
break; break;
case 0x6f: case 0x67: case 0x6f: case 0x67:
print("st.d R%d, 0x%08X(R%d)", rd, imm32, rs); print("st.d R%d, 0x%08X(R%d)", rd, imm32, rs);
break; break;
case 0x78: case 0x70: case 0x78: case 0x70:
print("dcache R%d(R%d)", src1, rs); print("dcache R%d(R%d)", src1, rs);
break; break;
case 0x79: case 0x71: case 0x79: case 0x71:
print("dcache 0x%08X(R%d)", imm32, rs); print("dcache 0x%08X(R%d)", imm32, rs);
break; break;
case 0x80: print("bsr R%d, R%d", src1, link); break; case 0x80: print("bsr R%d, R%d", src1, link); break;
case 0x81: print("bsr 0x%08X, R%d", imm32, link); break; case 0x81: print("bsr 0x%08X, R%d", imm32, link); break;
case 0x82: print("bsr.a R%d, R%d", src1, rd); break; case 0x82: print("bsr.a R%d, R%d", src1, rd); break;
case 0x83: print("bsr.a 0x%08X, R%d", imm32, link); break; case 0x83: print("bsr.a 0x%08X, R%d", imm32, link); break;
case 0x88: print("jsr R%d, R%d", src1, link); break; case 0x88: print("jsr R%d, R%d", src1, link); break;
case 0x89: print("jsr 0x%08X, R%d", imm32, link); break; case 0x89: print("jsr 0x%08X, R%d", imm32, link); break;
case 0x8a: print("jsr.a R%d, R%d", src1, link); break; case 0x8a: print("jsr.a R%d, R%d", src1, link); break;
case 0x8b: print("jsr.a 0x%08X, R%d", imm32, link); break; case 0x8b: print("jsr.a 0x%08X, R%d", imm32, link); break;
case 0x90: print("bbz R%d, R%d, #%d", src1, rs, bitnum); break; case 0x90: print("bbz R%d, R%d, #%d", src1, rs, bitnum); break;
case 0x91: print("bbz 0x%08X, R%d, #%d", imm32, rs, bitnum); break; case 0x91: print("bbz 0x%08X, R%d, #%d", imm32, rs, bitnum); break;
case 0x92: print("bbz.a R%d, R%d, #%d", src1, rs, bitnum); break; case 0x92: print("bbz.a R%d, R%d, #%d", src1, rs, bitnum); break;
case 0x93: print("bbz.a 0x%08X, R%d, #%d", imm32, rs, bitnum); break; case 0x93: print("bbz.a 0x%08X, R%d, #%d", imm32, rs, bitnum); break;
case 0x94: print("bbo R%d, R%d, #%d", src1, rs, bitnum); break; case 0x94: print("bbo R%d, R%d, #%d", src1, rs, bitnum); break;
case 0x95: print("bbo 0x%08X, R%d, #%d", imm32, rs, bitnum); break; case 0x95: print("bbo 0x%08X, R%d, #%d", imm32, rs, bitnum); break;
case 0x96: print("bbo.a R%d, R%d, #%d", src1, rs, bitnum); break; case 0x96: print("bbo.a R%d, R%d, #%d", src1, rs, bitnum); break;
case 0x97: print("bbo.a 0x%08X, R%d, #%d", imm32, rs, bitnum); break; case 0x97: print("bbo.a 0x%08X, R%d, #%d", imm32, rs, bitnum); break;
case 0x98: print("bcnd R%d, R%d, %s", src1, rs, BCND_CONDITION[rd]); break; case 0x98: print("bcnd R%d, R%d, %s", src1, rs, BCND_CONDITION[rd]); break;
case 0x99: print("bcnd 0x%08X, R%d, %s", imm32, rs, BCND_CONDITION[rd]); break; case 0x99: print("bcnd 0x%08X, R%d, %s", imm32, rs, BCND_CONDITION[rd]); break;
case 0x9a: print("bcnd.a R%d, R%d, %s", src1, rs, BCND_CONDITION[rd]); break; case 0x9a: print("bcnd.a R%d, R%d, %s", src1, rs, BCND_CONDITION[rd]); break;
case 0x9b: print("bcnd.a 0x%08X, R%d, %s", imm32, rs, BCND_CONDITION[rd]); break; case 0x9b: print("bcnd.a 0x%08X, R%d, %s", imm32, rs, BCND_CONDITION[rd]); break;
case 0xa0: print("cmp R%d, R%d, R%d", src1, rs, rd); break; case 0xa0: print("cmp R%d, R%d, R%d", src1, rs, rd); break;
case 0xa1: print("cmp 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xa1: print("cmp 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xb0: print("add R%d, R%d, R%d", src1, rs, rd); break; case 0xb0: print("add R%d, R%d, R%d", src1, rs, rd); break;
case 0xb1: print("add 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xb1: print("add 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xb2: print("addu R%d, R%d, R%d", src1, rs, rd); break; case 0xb2: print("addu R%d, R%d, R%d", src1, rs, rd); break;
case 0xb3: print("addu 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xb3: print("addu 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xb4: print("sub R%d, R%d, R%d", src1, rs, rd); break; case 0xb4: print("sub R%d, R%d, R%d", src1, rs, rd); break;
case 0xb5: print("sub 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xb5: print("sub 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xb6: print("subu R%d, R%d, R%d", src1, rs, rd); break; case 0xb6: print("subu R%d, R%d, R%d", src1, rs, rd); break;
case 0xb7: print("subu 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xb7: print("subu 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xc0: print("vadd R%d, R%d, R%d", src1, rs, rd); break; case 0xc0: print("vadd R%d, R%d, R%d", src1, rs, rd); break;
case 0xc1: print("vadd 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xc1: print("vadd 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xc2: print("vsub R%d, R%d, R%d", src1, rs, rd); break; case 0xc2: print("vsub R%d, R%d, R%d", src1, rs, rd); break;
case 0xc3: print("vsub 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xc3: print("vsub 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xc4: print("vmpy R%d, R%d, R%d", src1, rs, rd); break; case 0xc4: print("vmpy R%d, R%d, R%d", src1, rs, rd); break;
case 0xc5: print("vmpy 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xc5: print("vmpy 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xd6: case 0xc6: case 0xd6: case 0xc6:
print("vmsub R%d, R%d, R%d", src1, rs, rd); print("vmsub R%d, R%d, R%d", src1, rs, rd);
@ -342,34 +342,34 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
case 0xd8: case 0xc8: case 0xd8: case 0xc8:
print("vrnd R%d, R%d, R%d", src1, rs, rd); print("vrnd R%d, R%d, R%d", src1, rs, rd);
break; break;
case 0xd9: case 0xc9: case 0xd9: case 0xc9:
print("vrnd 0x%08X, R%d, R%d", imm32, rs, rd); print("vrnd 0x%08X, R%d, R%d", imm32, rs, rd);
break; break;
case 0xca: print("vrnd R%d, R%d, R%d", src1, rs, rd); break; case 0xca: print("vrnd R%d, R%d, R%d", src1, rs, rd); break;
case 0xcb: print("vrnd 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xcb: print("vrnd 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xcc: print("vmac R%d, R%d, R%d", src1, rs, rd); break; case 0xcc: print("vmac R%d, R%d, R%d", src1, rs, rd); break;
case 0xcd: print("vmac 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xcd: print("vmac 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xce: print("vmsc R%d, R%d, R%d", src1, rs, rd); break; case 0xce: print("vmsc R%d, R%d, R%d", src1, rs, rd); break;
case 0xcf: print("vmsc 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xcf: print("vmsc 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xe0: print("fadd R%d, R%d, R%d", src1, rs, rd); break; case 0xe0: print("fadd R%d, R%d, R%d", src1, rs, rd); break;
case 0xe1: print("fadd 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xe1: print("fadd 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xe2: print("fsub R%d, R%d, R%d", src1, rs, rd); break; case 0xe2: print("fsub R%d, R%d, R%d", src1, rs, rd); break;
case 0xe3: print("fsub 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xe3: print("fsub 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xe4: print("fmpy R%d, R%d, R%d", src1, rs, rd); break; case 0xe4: print("fmpy R%d, R%d, R%d", src1, rs, rd); break;
case 0xe5: print("fmpy 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xe5: print("fmpy 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xe6: print("fdiv R%d, R%d, R%d", src1, rs, rd); break; case 0xe6: print("fdiv R%d, R%d, R%d", src1, rs, rd); break;
case 0xe7: print("fdiv 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xe7: print("fdiv 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xe8: print("frndx R%d, R%d", src1, rd); break; case 0xe8: print("frndx R%d, R%d", src1, rd); break;
case 0xe9: print("frndx 0x%08X, R%d", imm32, rd); break; case 0xe9: print("frndx 0x%08X, R%d", imm32, rd); break;
case 0xea: print("fcmp R%d, R%d, R%d", src1, rs, rd); break; case 0xea: print("fcmp R%d, R%d, R%d", src1, rs, rd); break;
case 0xeb: print("fcmp 0x%08X, R%d, R%d", imm32, rs, rd); break; case 0xeb: print("fcmp 0x%08X, R%d, R%d", imm32, rs, rd); break;
case 0xee: print("fsqrt R%d, R%d", src1, rd); break; case 0xee: print("fsqrt R%d, R%d", src1, rd); break;
case 0xef: print("fsqrt 0x%08X, R%d", imm32, rd); break; case 0xef: print("fsqrt 0x%08X, R%d", imm32, rd); break;
case 0xf0: print("lmo R%d, R%d", rs, rd); break; case 0xf0: print("lmo R%d, R%d", rs, rd); break;
case 0xf2: print("rmo R%d, R%d", rs, rd); break; case 0xf2: print("rmo R%d, R%d", rs, rd); break;
case 0xfc: print("estop "); break; case 0xfc: print("estop "); break;
case 0xfe: case 0xff: case 0xfe: case 0xff:
print("illopF "); print("illopF ");
break; break;
@ -384,4 +384,4 @@ static offs_t tms32082_disasm_mp(char *buffer, offs_t pc, const UINT8 *oprom)
CPU_DISASSEMBLE(tms32082_mp) CPU_DISASSEMBLE(tms32082_mp)
{ {
return tms32082_disasm_mp(buffer, pc, oprom); return tms32082_disasm_mp(buffer, pc, oprom);
} }

View File

@ -18,15 +18,15 @@
#define ROTATE_L(x, r) ((x << r) | (x >> (32-r))) #define ROTATE_L(x, r) ((x << r) | (x >> (32-r)))
#define ROTATE_R(x, r) ((x >> r) | (x << (32-r))) #define ROTATE_R(x, r) ((x >> r) | (x << (32-r)))
#define CMP_OVERFLOW32(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0) #define CMP_OVERFLOW32(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0)
#define CMP_OVERFLOW16(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0) #define CMP_OVERFLOW16(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0)
#define CMP_OVERFLOW8(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0) #define CMP_OVERFLOW8(r, s, d) ((((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0)
#define CARRY32(x) (((x) & (((UINT64)1) << 32)) ? 1 : 0) #define CARRY32(x) (((x) & (((UINT64)1) << 32)) ? 1 : 0)
#define CARRY16(x) (((x) & 0x10000) ? 1 : 0) #define CARRY16(x) (((x) & 0x10000) ? 1 : 0)
#define CARRY8(x) (((x) & 0x100) ? 1 : 0) #define CARRY8(x) (((x) & 0x100) ? 1 : 0)
#define SIGN32(x) (((x) & 0x80000000) ? 1 : 0) #define SIGN32(x) (((x) & 0x80000000) ? 1 : 0)
#define SIGN16(x) (((x) & 0x8000) ? 1 : 0) #define SIGN16(x) (((x) & 0x8000) ? 1 : 0)
#define SIGN8(x) (((x) & 0x80) ? 1 : 0) #define SIGN8(x) (((x) & 0x80) ? 1 : 0)
@ -34,31 +34,31 @@ bool tms32082_mp_device::test_condition(int condition, UINT32 value)
{ {
switch (condition) switch (condition)
{ {
case 0x00: return false; // never, byte case 0x00: return false; // never, byte
case 0x01: return (INT8)(value) > 0; // greater than zero, byte case 0x01: return (INT8)(value) > 0; // greater than zero, byte
case 0x02: return (INT8)(value) == 0; // equals zero, byte case 0x02: return (INT8)(value) == 0; // equals zero, byte
case 0x03: return (INT8)(value) >= 0; // greater than or equal to zero, byte case 0x03: return (INT8)(value) >= 0; // greater than or equal to zero, byte
case 0x04: return (INT8)(value) < 0; // less than zero, byte case 0x04: return (INT8)(value) < 0; // less than zero, byte
case 0x05: return (INT8)(value) != 0; // not equal to zero, byte case 0x05: return (INT8)(value) != 0; // not equal to zero, byte
case 0x06: return (INT8)(value) <= 0; // less than or equal to zero, byte case 0x06: return (INT8)(value) <= 0; // less than or equal to zero, byte
case 0x07: return true; // always, byte case 0x07: return true; // always, byte
case 0x08: return false; // never, word case 0x08: return false; // never, word
case 0x09: return (INT16)(value) > 0; // greater than zero, word case 0x09: return (INT16)(value) > 0; // greater than zero, word
case 0x0a: return (INT16)(value) == 0; // equals zero, word case 0x0a: return (INT16)(value) == 0; // equals zero, word
case 0x0b: return (INT16)(value) >= 0; // greater than or equal to zero, word case 0x0b: return (INT16)(value) >= 0; // greater than or equal to zero, word
case 0x0c: return (INT16)(value) < 0; // less than zero, word case 0x0c: return (INT16)(value) < 0; // less than zero, word
case 0x0d: return (INT16)(value) != 0; // not equal to zero, word case 0x0d: return (INT16)(value) != 0; // not equal to zero, word
case 0x0e: return (INT16)(value) <= 0; // less than or equal to zero, word case 0x0e: return (INT16)(value) <= 0; // less than or equal to zero, word
case 0x0f: return true; // always, word case 0x0f: return true; // always, word
case 0x10: return false; // never, dword case 0x10: return false; // never, dword
case 0x11: return (INT32)(value) > 0; // greater than zero, dword case 0x11: return (INT32)(value) > 0; // greater than zero, dword
case 0x12: return (INT32)(value) == 0; // equals zero, dword case 0x12: return (INT32)(value) == 0; // equals zero, dword
case 0x13: return (INT32)(value) >= 0; // greater than or equal to zero, dword case 0x13: return (INT32)(value) >= 0; // greater than or equal to zero, dword
case 0x14: return (INT32)(value) < 0; // less than zero, dword case 0x14: return (INT32)(value) < 0; // less than zero, dword
case 0x15: return (INT32)(value) != 0; // not equal to zero, dword case 0x15: return (INT32)(value) != 0; // not equal to zero, dword
case 0x16: return (INT32)(value) <= 0; // less than or equal to zero, dword case 0x16: return (INT32)(value) <= 0; // less than or equal to zero, dword
case 0x17: return true; // always, dword case 0x17: return true; // always, dword
default: return false; // reserved default: return false; // reserved
} }
} }
@ -66,7 +66,7 @@ void tms32082_mp_device::execute_short_imm()
{ {
switch ((m_ir >> 15) & 0x7f) switch ((m_ir >> 15) & 0x7f)
{ {
case 0x04: // rdcr case 0x04: // rdcr
{ {
int rd = OP_RD(); int rd = OP_RD();
INT32 imm = OP_SIMM15(); INT32 imm = OP_SIMM15();
@ -78,7 +78,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x05: // swcr case 0x05: // swcr
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -92,7 +92,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x0b: // shift.ez case 0x0b: // shift.ez
{ {
int r = (m_ir & (1 << 10)); int r = (m_ir & (1 << 10));
int inv = (m_ir & (1 << 11)); int inv = (m_ir & (1 << 11));
@ -109,11 +109,11 @@ void tms32082_mp_device::execute_short_imm()
UINT32 compmask = endmask & shiftmask; UINT32 compmask = endmask & shiftmask;
UINT32 res = 0; UINT32 res = 0;
if (r) // right if (r) // right
{ {
res = ROTATE_R(source, rot) & compmask; res = ROTATE_R(source, rot) & compmask;
} }
else // left else // left
{ {
res = ROTATE_L(source, rot) & compmask; res = ROTATE_L(source, rot) & compmask;
} }
@ -123,7 +123,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x0e: // shift.iz case 0x0e: // shift.iz
{ {
int r = (m_ir & (1 << 10)); int r = (m_ir & (1 << 10));
int inv = (m_ir & (1 << 11)); int inv = (m_ir & (1 << 11));
@ -139,11 +139,11 @@ void tms32082_mp_device::execute_short_imm()
UINT32 compmask = endmask & ~shiftmask; UINT32 compmask = endmask & ~shiftmask;
UINT32 res = 0; UINT32 res = 0;
if (r) // right if (r) // right
{ {
res = ROTATE_R(source, rot) & compmask; res = ROTATE_R(source, rot) & compmask;
} }
else // left else // left
{ {
res = ROTATE_L(source, rot) & compmask; res = ROTATE_L(source, rot) & compmask;
} }
@ -153,7 +153,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x11: // and case 0x11: // and
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -164,7 +164,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x17: // or case 0x17: // or
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -176,7 +176,7 @@ void tms32082_mp_device::execute_short_imm()
} }
case 0x36: case 0x36:
case 0x32: // st case 0x32: // st
{ {
int rd = OP_RD(); int rd = OP_RD();
int base = OP_BASE(); int base = OP_BASE();
@ -192,7 +192,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x49: // bbz.a case 0x49: // bbz.a
{ {
int bitnum = OP_BITNUM(); int bitnum = OP_BITNUM();
INT32 offset = OP_SIMM15(); INT32 offset = OP_SIMM15();
@ -205,7 +205,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x4b: // bbo.a case 0x4b: // bbo.a
{ {
int bitnum = OP_BITNUM(); int bitnum = OP_BITNUM();
INT32 offset = OP_SIMM15(); INT32 offset = OP_SIMM15();
@ -218,7 +218,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x4d: // bcnd.a case 0x4d: // bcnd.a
{ {
INT32 offset = OP_SIMM15(); INT32 offset = OP_SIMM15();
int code = OP_RD(); int code = OP_RD();
@ -231,7 +231,7 @@ void tms32082_mp_device::execute_short_imm()
break; break;
} }
case 0x50: // cmp case 0x50: // cmp
{ {
UINT32 src1 = OP_SIMM15(); UINT32 src1 = OP_SIMM15();
UINT32 src2 = m_reg[OP_RS()]; UINT32 src2 = m_reg[OP_RS()];
@ -262,45 +262,45 @@ void tms32082_mp_device::execute_short_imm()
UINT32 flags = 0; UINT32 flags = 0;
// 32-bits (bits 20-29) // 32-bits (bits 20-29)
flags |= ((c32) & 1) << 29; // higher than or same (C) flags |= ((c32) & 1) << 29; // higher than or same (C)
flags |= ((~c32) & 1) << 28; // lower than (~C) flags |= ((~c32) & 1) << 28; // lower than (~C)
flags |= ((~c32|z32) & 1) << 27; // lower than or same (~C|Z) flags |= ((~c32|z32) & 1) << 27; // lower than or same (~C|Z)
flags |= ((c32&~z32) & 1) << 26; // higher than (C&~Z) flags |= ((c32&~z32) & 1) << 26; // higher than (C&~Z)
flags |= (((n32&v32)|(~n32&~v32)) & 1) << 25; // greater than or equal (N&V)|(~N&~V) flags |= (((n32&v32)|(~n32&~v32)) & 1) << 25; // greater than or equal (N&V)|(~N&~V)
flags |= (((n32&~v32)|(~n32&v32)) & 1) << 24; // less than (N&~V)|(~N&V) flags |= (((n32&~v32)|(~n32&v32)) & 1) << 24; // less than (N&~V)|(~N&V)
flags |= (((n32&~v32)|(~n32&v32)|(z32)) & 1) << 23; // less than or equal (N&~V)|(~N&V)|Z flags |= (((n32&~v32)|(~n32&v32)|(z32)) & 1) << 23; // less than or equal (N&~V)|(~N&V)|Z
flags |= (((n32&v32&~z32)|(~n32&~v32&~z32)) & 1) << 22; // greater than (N&V&~Z)|(~N&~V&~Z) flags |= (((n32&v32&~z32)|(~n32&~v32&~z32)) & 1) << 22; // greater than (N&V&~Z)|(~N&~V&~Z)
flags |= ((~z32) & 1) << 21; // not equal (~Z) flags |= ((~z32) & 1) << 21; // not equal (~Z)
flags |= ((z32) & 1) << 20; // equal (Z) flags |= ((z32) & 1) << 20; // equal (Z)
// 16-bits (bits 10-19) // 16-bits (bits 10-19)
flags |= ((c16) & 1) << 19; // higher than or same (C) flags |= ((c16) & 1) << 19; // higher than or same (C)
flags |= ((~c16) & 1) << 18; // lower than (~C) flags |= ((~c16) & 1) << 18; // lower than (~C)
flags |= ((~c16|z16) & 1) << 17; // lower than or same (~C|Z) flags |= ((~c16|z16) & 1) << 17; // lower than or same (~C|Z)
flags |= ((c16&~z16) & 1) << 16; // higher than (C&~Z) flags |= ((c16&~z16) & 1) << 16; // higher than (C&~Z)
flags |= (((n16&v16)|(~n16&~v16)) & 1) << 15; // greater than or equal (N&V)|(~N&~V) flags |= (((n16&v16)|(~n16&~v16)) & 1) << 15; // greater than or equal (N&V)|(~N&~V)
flags |= (((n16&~v16)|(~n16&v16)) & 1) << 14; // less than (N&~V)|(~N&V) flags |= (((n16&~v16)|(~n16&v16)) & 1) << 14; // less than (N&~V)|(~N&V)
flags |= (((n16&~v16)|(~n16&v16)|(z16)) & 1) << 13; // less than or equal (N&~V)|(~N&V)|Z flags |= (((n16&~v16)|(~n16&v16)|(z16)) & 1) << 13; // less than or equal (N&~V)|(~N&V)|Z
flags |= (((n16&v16&~z16)|(~n16&~v16&~z16)) & 1) << 12; // greater than (N&V&~Z)|(~N&~V&~Z) flags |= (((n16&v16&~z16)|(~n16&~v16&~z16)) & 1) << 12; // greater than (N&V&~Z)|(~N&~V&~Z)
flags |= ((~z16) & 1) << 11; // not equal (~Z) flags |= ((~z16) & 1) << 11; // not equal (~Z)
flags |= ((z16) & 1) << 10; // equal (Z) flags |= ((z16) & 1) << 10; // equal (Z)
// 8-bits (bits 0-9) // 8-bits (bits 0-9)
flags |= ((c8) & 1) << 9; // higher than or same (C) flags |= ((c8) & 1) << 9; // higher than or same (C)
flags |= ((~c8) & 1) << 8; // lower than (~C) flags |= ((~c8) & 1) << 8; // lower than (~C)
flags |= ((~c8|z8) & 1) << 7; // lower than or same (~C|Z) flags |= ((~c8|z8) & 1) << 7; // lower than or same (~C|Z)
flags |= ((c8&~z8) & 1) << 6; // higher than (C&~Z) flags |= ((c8&~z8) & 1) << 6; // higher than (C&~Z)
flags |= (((n8&v8)|(~n8&~v8)) & 1) << 5; // greater than or equal (N&V)|(~N&~V) flags |= (((n8&v8)|(~n8&~v8)) & 1) << 5; // greater than or equal (N&V)|(~N&~V)
flags |= (((n8&~v8)|(~n8&v8)) & 1) << 4; // less than (N&~V)|(~N&V) flags |= (((n8&~v8)|(~n8&v8)) & 1) << 4; // less than (N&~V)|(~N&V)
flags |= (((n8&~v8)|(~n8&v8)|(z8)) & 1) << 3; // less than or equal (N&~V)|(~N&V)|Z flags |= (((n8&~v8)|(~n8&v8)|(z8)) & 1) << 3; // less than or equal (N&~V)|(~N&V)|Z
flags |= (((n8&v8&~z8)|(~n8&~v8&~z8)) & 1) << 2; // greater than (N&V&~Z)|(~N&~V&~Z) flags |= (((n8&v8&~z8)|(~n8&~v8&~z8)) & 1) << 2; // greater than (N&V&~Z)|(~N&~V&~Z)
flags |= ((~z8) & 1) << 1; // not equal (~Z) flags |= ((~z8) & 1) << 1; // not equal (~Z)
flags |= ((z8) & 1) << 0; // equal (Z) flags |= ((z8) & 1) << 0; // equal (Z)
if (rd) if (rd)
m_reg[rd] = flags; m_reg[rd] = flags;
break; break;
} }
case 0x59: // addu case 0x59: // addu
{ {
INT32 imm = OP_SIMM15(); INT32 imm = OP_SIMM15();
int rd = OP_RD(); int rd = OP_RD();
@ -327,7 +327,7 @@ void tms32082_mp_device::execute_reg_long_imm()
switch ((m_ir >> 12) & 0xff) switch ((m_ir >> 12) & 0xff)
{ {
case 0x04: // cmnd case 0x04: // cmnd
{ {
UINT32 data = has_imm ? imm32 : m_reg[OP_SRC1()]; UINT32 data = has_imm ? imm32 : m_reg[OP_SRC1()];
@ -335,7 +335,7 @@ void tms32082_mp_device::execute_reg_long_imm()
break; break;
} }
case 0x16: // shift.ez case 0x16: // shift.ez
{ {
int r = (m_ir & (1 << 10)); int r = (m_ir & (1 << 10));
int inv = (m_ir & (1 << 11)); int inv = (m_ir & (1 << 11));
@ -352,11 +352,11 @@ void tms32082_mp_device::execute_reg_long_imm()
UINT32 compmask = endmask & shiftmask; UINT32 compmask = endmask & shiftmask;
UINT32 res = 0; UINT32 res = 0;
if (r) // right if (r) // right
{ {
res = ROTATE_R(source, rot) & compmask; res = ROTATE_R(source, rot) & compmask;
} }
else // left else // left
{ {
res = ROTATE_L(source, rot) & compmask; res = ROTATE_L(source, rot) & compmask;
} }
@ -367,7 +367,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0x24: case 0x24:
case 0x25: // and.tf case 0x25: // and.tf
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -379,7 +379,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0x2e: case 0x2e:
case 0x2f: // or case 0x2f: // or
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -389,7 +389,7 @@ void tms32082_mp_device::execute_reg_long_imm()
break; break;
} }
case 0x43: // ld.h case 0x43: // ld.h
case 0x4b: case 0x4b:
{ {
int shift = (m_ir & (1 << 11)) ? 1 : 0; int shift = (m_ir & (1 << 11)) ? 1 : 0;
@ -401,7 +401,7 @@ void tms32082_mp_device::execute_reg_long_imm()
UINT32 address = m_reg[base] + ((has_imm ? imm32 : m_reg[OP_SRC1()]) << shift); UINT32 address = m_reg[base] + ((has_imm ? imm32 : m_reg[OP_SRC1()]) << shift);
UINT32 r = m_program->read_word(address); UINT32 r = m_program->read_word(address);
if (r & 0x8000) r |= 0xffff0000; if (r & 0x8000) r |= 0xffff0000;
if (rd) if (rd)
m_reg[rd] = r; m_reg[rd] = r;
@ -411,7 +411,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0x6d: case 0x6d:
case 0x65: // st case 0x65: // st
{ {
int shift = (m_ir & (1 << 11)) ? 2 : 0; int shift = (m_ir & (1 << 11)) ? 2 : 0;
int m = m_ir & (1 << 15); int m = m_ir & (1 << 15);
@ -427,7 +427,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0x88: case 0x88:
case 0x89: // jsr case 0x89: // jsr
{ {
int link = OP_LINK(); int link = OP_LINK();
int base = OP_BASE(); int base = OP_BASE();
@ -445,7 +445,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0x8a: case 0x8a:
case 0x8b: // jsr.a case 0x8b: // jsr.a
{ {
int link = OP_LINK(); int link = OP_LINK();
int base = OP_BASE(); int base = OP_BASE();
@ -458,7 +458,7 @@ void tms32082_mp_device::execute_reg_long_imm()
} }
case 0xb2: case 0xb2:
case 0xb3: // addu case 0xb3: // addu
{ {
int rd = OP_RD(); int rd = OP_RD();
int rs = OP_RS(); int rs = OP_RS();
@ -488,4 +488,4 @@ void tms32082_mp_device::execute()
execute_reg_long_imm(); execute_reg_long_imm();
break; break;
} }
} }

View File

@ -1,7 +1,7 @@
/* /*
Texas Instruments TMS320C82 DSP Emulator Texas Instruments TMS320C82 DSP Emulator
Written by Ville Linde Written by Ville Linde
*/ */
@ -213,7 +213,7 @@ UINT32 tms32082_mp_device::read_creg(int reg)
{ {
switch (reg) switch (reg)
{ {
case 0xa: // PPERROR case 0xa: // PPERROR
return 0; return 0;
default: default:
@ -258,4 +258,4 @@ void tms32082_mp_device::execute_run()
}; };
return; return;
} }

View File

@ -64,7 +64,7 @@ protected:
virtual UINT32 execute_max_cycles() const { return 1; } virtual UINT32 execute_max_cycles() const { return 1; }
virtual UINT32 execute_input_lines() const { return 0; } virtual UINT32 execute_input_lines() const { return 0; }
virtual void execute_run(); virtual void execute_run();
// device_memory_interface overrides // device_memory_interface overrides
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
{ {
@ -114,4 +114,4 @@ protected:
extern const device_type TMS32082_MP; extern const device_type TMS32082_MP;
#endif /* __TMS32082_H__ */ #endif /* __TMS32082_H__ */

View File

@ -3278,19 +3278,19 @@ void device_debug::set_state(symbol_table &table, void *ref, UINT64 value)
// breakpoint - constructor // breakpoint - constructor
//------------------------------------------------- //-------------------------------------------------
device_debug::breakpoint::breakpoint(device_debug* debugInterface, device_debug::breakpoint::breakpoint(device_debug* debugInterface,
symbol_table &symbols, symbol_table &symbols,
int index, int index,
offs_t address, offs_t address,
const char *condition, const char *condition,
const char *action) const char *action)
: m_debugInterface(debugInterface), : m_debugInterface(debugInterface),
m_next(NULL), m_next(NULL),
m_index(index), m_index(index),
m_enabled(true), m_enabled(true),
m_address(address), m_address(address),
m_condition(&symbols, (condition != NULL) ? condition : "1"), m_condition(&symbols, (condition != NULL) ? condition : "1"),
m_action((action != NULL) ? action : "") m_action((action != NULL) ? action : "")
{ {
} }

View File

@ -80,11 +80,11 @@ public:
public: public:
// construction/destruction // construction/destruction
breakpoint(device_debug* debugInterface, breakpoint(device_debug* debugInterface,
symbol_table &symbols, symbol_table &symbols,
int index, int index,
offs_t address, offs_t address,
const char *condition = NULL, const char *condition = NULL,
const char *action = NULL); const char *action = NULL);
// getters // getters
const device_debug *debugInterface() const { return m_debugInterface; } const device_debug *debugInterface() const { return m_debugInterface; }
@ -118,14 +118,14 @@ public:
public: public:
// construction/destruction // construction/destruction
watchpoint(symbol_table &symbols, watchpoint(symbol_table &symbols,
int index, int index,
address_space &space, address_space &space,
int type, int type,
offs_t address, offs_t address,
offs_t length, offs_t length,
const char *condition = NULL, const char *condition = NULL,
const char *action = NULL); const char *action = NULL);
// getters // getters
watchpoint *next() const { return m_next; } watchpoint *next() const { return m_next; }
@ -193,7 +193,7 @@ public:
int logaddrchars(address_spacenum spacenum = AS_0) const { return (m_memory != NULL && m_memory->has_space(spacenum)) ? m_memory->space(spacenum).logaddrchars() : 8; } int logaddrchars(address_spacenum spacenum = AS_0) const { return (m_memory != NULL && m_memory->has_space(spacenum)) ? m_memory->space(spacenum).logaddrchars() : 8; }
int min_opcode_bytes() const { return (m_disasm != NULL) ? m_disasm->max_opcode_bytes() : 1; } int min_opcode_bytes() const { return (m_disasm != NULL) ? m_disasm->max_opcode_bytes() : 1; }
int max_opcode_bytes() const { return (m_disasm != NULL) ? m_disasm->max_opcode_bytes() : 1; } int max_opcode_bytes() const { return (m_disasm != NULL) ? m_disasm->max_opcode_bytes() : 1; }
device_t& device() const { return m_device; } device_t& device() const { return m_device; }
// hooks used by the rest of the system // hooks used by the rest of the system

View File

@ -2,7 +2,7 @@
dvpoints.c dvpoints.c
Breakpoint debugger view. Breakpoint debugger view.
**************************************************************************** ****************************************************************************
@ -52,7 +52,7 @@
debug_view_breakpoints::debug_view_breakpoints(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate) debug_view_breakpoints::debug_view_breakpoints(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate)
: debug_view(machine, DVT_BREAK_POINTS, osdupdate, osdprivate), : debug_view(machine, DVT_BREAK_POINTS, osdupdate, osdprivate),
m_sortType(SORT_INDEX_ASCENDING) m_sortType(SORT_INDEX_ASCENDING)
{ {
// fail if no available sources // fail if no available sources
enumerate_sources(); enumerate_sources();
@ -126,7 +126,7 @@ void debug_view_breakpoints::view_char(int chval)
void debug_view_breakpoints::view_click(const int button, const debug_view_xy& pos) void debug_view_breakpoints::view_click(const int button, const debug_view_xy& pos)
{ {
bool clickedTopRow = (m_topleft.y == pos.y); bool clickedTopRow = (m_topleft.y == pos.y);
if (clickedTopRow) if (clickedTopRow)
{ {
if (pos.x < 5 && m_sortType == SORT_INDEX_ASCENDING) if (pos.x < 5 && m_sortType == SORT_INDEX_ASCENDING)
@ -163,13 +163,13 @@ void debug_view_breakpoints::view_click(const int button, const debug_view_xy& p
const int bpIndex = pos.y-1; const int bpIndex = pos.y-1;
if (bpIndex > numBPs || bpIndex < 0) if (bpIndex > numBPs || bpIndex < 0)
return; return;
// Enable / disable // Enable / disable
if (bpList[bpIndex]->enabled()) if (bpList[bpIndex]->enabled())
bpList[bpIndex]->setEnabled(false); bpList[bpIndex]->setEnabled(false);
else else
bpList[bpIndex]->setEnabled(true); bpList[bpIndex]->setEnabled(true);
delete[] bpList; delete[] bpList;
} }
@ -295,7 +295,7 @@ int debug_view_breakpoints::breakpoints(SortMode sort, device_debug::breakpoint*
numBPs++; numBPs++;
bpList = new device_debug::breakpoint*[numBPs]; bpList = new device_debug::breakpoint*[numBPs];
} }
int bpAddIndex = 1; int bpAddIndex = 1;
for (const debug_view_source *source = m_source_list.head(); source != NULL; source = source->next()) for (const debug_view_source *source = m_source_list.head(); source != NULL; source = source->next())
{ {
@ -310,7 +310,7 @@ int debug_view_breakpoints::breakpoints(SortMode sort, device_debug::breakpoint*
} }
} }
} }
// And now for the sort // And now for the sort
switch (m_sortType) switch (m_sortType)
{ {
@ -353,7 +353,7 @@ int debug_view_breakpoints::breakpoints(SortMode sort, device_debug::breakpoint*
qsort(bpList, numBPs, sizeof(device_debug::breakpoint*), cActionDescending); qsort(bpList, numBPs, sizeof(device_debug::breakpoint*), cActionDescending);
break; break;
} }
return numBPs; return numBPs;
} }
@ -368,7 +368,7 @@ void debug_view_breakpoints::view_update()
// Gather a list of all the breakpoints for all the CPUs // Gather a list of all the breakpoints for all the CPUs
device_debug::breakpoint** bpList = NULL; device_debug::breakpoint** bpList = NULL;
const int numBPs = breakpoints(SORT_NONE, bpList); const int numBPs = breakpoints(SORT_NONE, bpList);
// Set the view region so the scroll bars update // Set the view region so the scroll bars update
m_total.y = numBPs+1; m_total.y = numBPs+1;
@ -377,7 +377,7 @@ void debug_view_breakpoints::view_update()
for (int row = 0; row < m_visible.y; row++) for (int row = 0; row < m_visible.y; row++)
{ {
UINT32 effrow = m_topleft.y + row; UINT32 effrow = m_topleft.y + row;
// Header // Header
if (row == 0) if (row == 0)
{ {
@ -406,7 +406,7 @@ void debug_view_breakpoints::view_update()
if (m_sortType == SORT_ACTION_ASCENDING) header.catprintf("\\"); if (m_sortType == SORT_ACTION_ASCENDING) header.catprintf("\\");
else if (m_sortType == SORT_ACTION_DESCENDING) header.catprintf("/"); else if (m_sortType == SORT_ACTION_DESCENDING) header.catprintf("/");
pad_astring_to_length(header, 80); pad_astring_to_length(header, 80);
for (int i = 0; i < m_visible.x; i++) for (int i = 0; i < m_visible.x; i++)
{ {
dest->byte = (i < header.len()) ? header[i] : ' '; dest->byte = (i < header.len()) ? header[i] : ' ';
@ -421,8 +421,8 @@ void debug_view_breakpoints::view_update()
if (bpi < numBPs && bpi >= 0) if (bpi < numBPs && bpi >= 0)
{ {
device_debug::breakpoint* bp = bpList[bpi]; device_debug::breakpoint* bp = bpList[bpi];
astring buffer; astring buffer;
buffer.printf("%x", bp->index()); buffer.printf("%x", bp->index());
pad_astring_to_length(buffer, 5); pad_astring_to_length(buffer, 5);
buffer.catprintf("%c", bp->enabled() ? 'X' : 'O'); buffer.catprintf("%c", bp->enabled() ? 'X' : 'O');
@ -441,21 +441,21 @@ void debug_view_breakpoints::view_update()
buffer.catprintf("%s", bp->action()); buffer.catprintf("%s", bp->action());
pad_astring_to_length(buffer, 80); pad_astring_to_length(buffer, 80);
} }
for (int i = 0; i < m_visible.x; i++) for (int i = 0; i < m_visible.x; i++)
{ {
dest->byte = (i < buffer.len()) ? buffer[i] : ' '; dest->byte = (i < buffer.len()) ? buffer[i] : ' ';
dest->attrib = DCA_NORMAL; dest->attrib = DCA_NORMAL;
// Color disabled breakpoints red // Color disabled breakpoints red
if (i == 5 && dest->byte == 'O') if (i == 5 && dest->byte == 'O')
dest->attrib = DCA_CHANGED; dest->attrib = DCA_CHANGED;
dest++; dest++;
} }
continue; continue;
} }
// Fill the remaining vertical space // Fill the remaining vertical space
for (int i = 0; i < m_visible.x; i++) for (int i = 0; i < m_visible.x; i++)
{ {
@ -464,6 +464,6 @@ void debug_view_breakpoints::view_update()
dest++; dest++;
} }
} }
delete[] bpList; delete[] bpList;
} }

View File

@ -2,7 +2,7 @@
dvpoints.h dvpoints.h
Breakpoint debugger view. Breakpoint debugger view.
**************************************************************************** ****************************************************************************
@ -64,23 +64,23 @@ class debug_view_breakpoints : public debug_view
virtual ~debug_view_breakpoints(); virtual ~debug_view_breakpoints();
public: public:
enum SortMode enum SortMode
{ {
SORT_NONE, SORT_NONE,
SORT_INDEX_ASCENDING, SORT_INDEX_ASCENDING,
SORT_INDEX_DESCENDING, SORT_INDEX_DESCENDING,
SORT_ENABLED_ASCENDING, SORT_ENABLED_ASCENDING,
SORT_ENABLED_DESCENDING, SORT_ENABLED_DESCENDING,
SORT_CPU_ASCENDING, SORT_CPU_ASCENDING,
SORT_CPU_DESCENDING, SORT_CPU_DESCENDING,
SORT_ADDRESS_ASCENDING, SORT_ADDRESS_ASCENDING,
SORT_ADDRESS_DESCENDING, SORT_ADDRESS_DESCENDING,
SORT_CONDITION_ASCENDING, SORT_CONDITION_ASCENDING,
SORT_CONDITION_DESCENDING, SORT_CONDITION_DESCENDING,
SORT_ACTION_ASCENDING, SORT_ACTION_ASCENDING,
SORT_ACTION_DESCENDING SORT_ACTION_DESCENDING
}; };
// getters // getters
// setters // setters
@ -100,7 +100,7 @@ private:
// internal state // internal state
SortMode m_sortType; SortMode m_sortType;
}; };

View File

@ -919,4 +919,4 @@ PALETTE_INIT_MEMBER(driver_device, RRRRR_GGGGGG_BBBBB)
for (i = 0; i < 0x10000; i++) for (i = 0; i < 0x10000; i++)
palette_set_color(machine(), i, MAKE_RGB(pal5bit(i >> 11), pal6bit(i >> 5), pal5bit(i >> 0))); palette_set_color(machine(), i, MAKE_RGB(pal5bit(i >> 11), pal6bit(i >> 5), pal5bit(i >> 0)));
} }

View File

@ -381,7 +381,7 @@ public:
// general fatal error handlers // general fatal error handlers
DECLARE_READ8_MEMBER( fatal_generic_read ); DECLARE_READ8_MEMBER( fatal_generic_read );
DECLARE_WRITE8_MEMBER( fatal_generic_write ); DECLARE_WRITE8_MEMBER( fatal_generic_write );
// generic palette init routines // generic palette init routines
DECLARE_PALETTE_INIT( all_black ); DECLARE_PALETTE_INIT( all_black );
DECLARE_PALETTE_INIT( black_and_white ); DECLARE_PALETTE_INIT( black_and_white );

View File

@ -51,23 +51,23 @@
#define MCFG_MACHINE_RESET(_func) \ #define MCFG_MACHINE_RESET(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_MACHINE_RESET, MACHINE_RESET_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_MACHINE_RESET, MACHINE_RESET_NAME(_func));
#define MCFG_SOUND_START(_func) \ #define MCFG_SOUND_START(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_SOUND_START, SOUND_START_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_SOUND_START, SOUND_START_NAME(_func));
#define MCFG_SOUND_RESET(_func) \ #define MCFG_SOUND_RESET(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_SOUND_RESET, SOUND_RESET_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_SOUND_RESET, SOUND_RESET_NAME(_func));
#define MCFG_PALETTE_INIT(_func) \ #define MCFG_PALETTE_INIT(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_PALETTE_INIT, PALETTE_INIT_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_PALETTE_INIT, PALETTE_INIT_NAME(_func));
#define MCFG_VIDEO_START(_func) \ #define MCFG_VIDEO_START(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_VIDEO_START, VIDEO_START_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_VIDEO_START, VIDEO_START_NAME(_func));
#define MCFG_VIDEO_RESET(_func) \ #define MCFG_VIDEO_RESET(_func) \
driver_device::static_set_callback(*owner, driver_device::CB_VIDEO_RESET, VIDEO_RESET_NAME(_func)); driver_device::static_set_callback(*owner, driver_device::CB_VIDEO_RESET, VIDEO_RESET_NAME(_func));
#define MACHINE_START_CALL(name) MACHINE_START_NAME(name)(machine) #define MACHINE_START_CALL(name) MACHINE_START_NAME(name)(machine)
#define MACHINE_RESET_CALL(name) MACHINE_RESET_NAME(name)(machine) #define MACHINE_RESET_CALL(name) MACHINE_RESET_NAME(name)(machine)

View File

@ -205,7 +205,7 @@ void m68307cpu_device::device_start()
/* basic CS logic, timers, mbus, serial logic /* basic CS logic, timers, mbus, serial logic
set via remappable register set via remappable register
*/ */
init16_m68307(*program); init16_m68307(*program);
m68307SIM = new m68307_sim(); m68307SIM = new m68307_sim();

View File

@ -96,4 +96,4 @@ extern void m68307_serial_interrupt(m68307cpu_device *cpudev, int vector);
extern void m68307_mbus_interrupt(m68307cpu_device *cpudev); extern void m68307_mbus_interrupt(m68307cpu_device *cpudev);
extern void m68307_licr2_interrupt(m68307cpu_device *cpudev); extern void m68307_licr2_interrupt(m68307cpu_device *cpudev);
#endif #endif

View File

@ -146,5 +146,3 @@ void m68340cpu_device::device_start()
internal = &this->space(AS_PROGRAM); internal = &this->space(AS_PROGRAM);
} }

View File

@ -65,4 +65,4 @@ extern UINT16 m68340_get_cs(m68340cpu_device *device, offs_t address);
#endif #endif

View File

@ -96,7 +96,7 @@ void ds2404_device::device_start()
m_rtc[2] = (current_time >> 8) & 0xff; m_rtc[2] = (current_time >> 8) & 0xff;
m_rtc[3] = (current_time >> 16) & 0xff; m_rtc[3] = (current_time >> 16) & 0xff;
m_rtc[4] = (current_time >> 24) & 0xff; m_rtc[4] = (current_time >> 24) & 0xff;
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
m_state[i] = DS2404_STATE_IDLE; m_state[i] = DS2404_STATE_IDLE;
@ -361,7 +361,7 @@ void ds2404_device::device_timer(emu_timer &timer, device_timer_id id, int param
break; break;
} }
} }
break; break;
} }

View File

@ -8,7 +8,7 @@ void jvs_device::static_set_jvs_host_tag(device_t &device, const char *jvs_host_
} }
jvs_device::jvs_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) jvs_device::jvs_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
{ {
jvs_host_tag = 0; jvs_host_tag = 0;
next_device = 0; next_device = 0;

View File

@ -26,8 +26,8 @@ void jvs_host::device_reset()
memset(recv_buffer, 0, sizeof(recv_buffer)); memset(recv_buffer, 0, sizeof(recv_buffer));
} }
jvs_host::jvs_host(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) jvs_host::jvs_host(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
{ {
first_device = 0; first_device = 0;
} }

View File

@ -19,7 +19,7 @@ struct k053252_interface
}; };
class k053252_device : public device_t, class k053252_device : public device_t,
public k053252_interface public k053252_interface
{ {
public: public:
k053252_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); k053252_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);

View File

@ -14,7 +14,7 @@
const device_type TMP68301 = &device_creator<tmp68301_device>; const device_type TMP68301 = &device_creator<tmp68301_device>;
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__) : device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__)
{ {
} }
@ -50,7 +50,7 @@ void tmp68301_device::device_reset()
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
m_IE[i] = 0; m_IE[i] = 0;
machine().firstcpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback),this)); machine().firstcpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback),this));
} }

View File

@ -21,7 +21,7 @@ protected:
virtual void device_config_complete(); virtual void device_config_complete();
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
private: private:
// internal state // internal state
UINT16 m_regs[0x400]; UINT16 m_regs[0x400];
@ -30,7 +30,7 @@ private:
emu_timer *m_tmp68301_timer[3]; // 3 Timers emu_timer *m_tmp68301_timer[3]; // 3 Timers
int m_irq_vector[8]; int m_irq_vector[8];
TIMER_CALLBACK_MEMBER( timer_callback ); TIMER_CALLBACK_MEMBER( timer_callback );
void update_timer( int i ); void update_timer( int i );
IRQ_CALLBACK_MEMBER(irq_callback); IRQ_CALLBACK_MEMBER(irq_callback);

View File

@ -753,7 +753,7 @@ private:
void * m_ptr; // pointer to the memory backing the region void * m_ptr; // pointer to the memory backing the region
size_t m_bytes; // size of the shared region in bytes size_t m_bytes; // size of the shared region in bytes
UINT8 m_width; // width of the shared region UINT8 m_width; // width of the shared region
endianness_t m_endianness; // endianness of the memory endianness_t m_endianness; // endianness of the memory
}; };

View File

@ -55,8 +55,8 @@
screen_device::static_set_screen_update(*device, screen_update_delegate_smart(&screen_update_##_func, "screen_update_" #_func)); screen_device::static_set_screen_update(*device, screen_update_delegate_smart(&screen_update_##_func, "screen_update_" #_func));
#define MCFG_SCREEN_VBLANK_STATIC(_func) \ #define MCFG_SCREEN_VBLANK_STATIC(_func) \
screen_device::static_set_screen_vblank(*device, screen_vblank_delegate(&screen_vblank_##_func, "screen_vblank_" #_func)); screen_device::static_set_screen_vblank(*device, screen_vblank_delegate(&screen_vblank_##_func, "screen_vblank_" #_func));
//************************************************************************** //**************************************************************************
// INLINE HELPERS // INLINE HELPERS
//************************************************************************** //**************************************************************************

View File

@ -194,7 +194,7 @@ struct es5506_state
UINT16 * volume_lookup; UINT16 * volume_lookup;
device_t *device; device_t *device;
int channels; /* the number of output stereo channels: 1..4 for 5505, 1..6 for 5506 */ int channels; /* the number of output stereo channels: 1..4 for 5505, 1..6 for 5506 */
#if MAKE_WAVS #if MAKE_WAVS
void * wavraw; /* raw waveform */ void * wavraw; /* raw waveform */

View File

@ -19,7 +19,7 @@ public:
/* returns whether the clock is currently LO or HI */ /* returns whether the clock is currently LO or HI */
int clock_state_r(); int clock_state_r();
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -28,9 +28,9 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
void start_common(UINT8 _shiftreg_mask, int _active_clock_hi); void start_common(UINT8 _shiftreg_mask, int _active_clock_hi);
// internal state // internal state
sound_stream *m_channel; sound_stream *m_channel;
int m_active_clock_hi; int m_active_clock_hi;
@ -48,11 +48,11 @@ protected:
double m_filter; double m_filter;
double m_integrator; double m_integrator;
double m_charge; double m_charge;
double m_decay; double m_decay;
double m_leak; double m_leak;
inline int is_external_oscillator(); inline int is_external_oscillator();
inline int is_active_clock_transition(int clock_state); inline int is_active_clock_transition(int clock_state);
inline int current_clock_state(); inline int current_clock_state();

View File

@ -149,7 +149,6 @@ k007232_device::k007232_device(const machine_config &mconfig, const char *tag, d
: device_t(mconfig, K007232, "K007232", tag, owner, clock, "k007232", __FILE__), : device_t(mconfig, K007232, "K007232", tag, owner, clock, "k007232", __FILE__),
device_sound_interface(mconfig, *this) device_sound_interface(mconfig, *this)
{ {
} }
//------------------------------------------------- //-------------------------------------------------
@ -198,7 +197,7 @@ void k007232_device::device_start()
m_vol[1][0] = 0; m_vol[1][0] = 0;
m_vol[1][1] = 255; /* channel B output to output B */ m_vol[1][1] = 255; /* channel B output to output B */
for (int i = 0; i < 0x10; i++) for (int i = 0; i < 0x10; i++)
m_wreg[i] = 0; m_wreg[i] = 0;
m_stream = machine().sound().stream_alloc(*this, 0 , 2, clock()/128, this); m_stream = machine().sound().stream_alloc(*this, 0 , 2, clock()/128, this);

View File

@ -24,19 +24,19 @@ public:
DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( write );
DECLARE_READ8_MEMBER( read ); DECLARE_READ8_MEMBER( read );
/* /*
The 007232 has two channels and produces two outputs. The volume control The 007232 has two channels and produces two outputs. The volume control
is external, however to make it easier to use we handle that inside the is external, however to make it easier to use we handle that inside the
emulation. You can control volume and panning: for each of the two channels emulation. You can control volume and panning: for each of the two channels
you can set the volume of the two outputs. If panning is not required, you can set the volume of the two outputs. If panning is not required,
then volumeB will be 0 for channel 0, and volumeA will be 0 for channel 1. then volumeB will be 0 for channel 0, and volumeA will be 0 for channel 1.
Volume is in the range 0-255. Volume is in the range 0-255.
*/ */
void set_volume(int channel,int volumeA,int volumeB); void set_volume(int channel,int volumeA,int volumeB);
void set_bank( int chABank, int chBBank ); void set_bank( int chABank, int chBBank );
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -44,7 +44,7 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
void KDAC_A_make_fncode(); void KDAC_A_make_fncode();
private: private:

View File

@ -106,12 +106,12 @@ void k056800_device::sound_reg_w( int reg, UINT8 data )
void k056800_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) void k056800_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{ {
switch (id) switch (id)
{ {
case TIMER_TICK_SOUND_CPU: case TIMER_TICK_SOUND_CPU:
if (m_sound_cpu_irq1_enable) if (m_sound_cpu_irq1_enable)
m_irq_cb_func(machine(), 0); m_irq_cb_func(machine(), 0);
break; break;
default: default:
assert_always(FALSE, "Unknown id in k056800_device::device_timer"); assert_always(FALSE, "Unknown id in k056800_device::device_timer");
} }

View File

@ -31,7 +31,7 @@ public:
{ {
TIMER_TICK_SOUND_CPU TIMER_TICK_SOUND_CPU
}; };
DECLARE_READ32_MEMBER( host_r ); DECLARE_READ32_MEMBER( host_r );
DECLARE_WRITE32_MEMBER( host_w ); DECLARE_WRITE32_MEMBER( host_w );
DECLARE_READ16_MEMBER( sound_r ); DECLARE_READ16_MEMBER( sound_r );
@ -42,7 +42,7 @@ protected:
virtual void device_config_complete(); virtual void device_config_complete();
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
private: private:
@ -51,13 +51,13 @@ private:
UINT8 m_sound_reg[8]; UINT8 m_sound_reg[8];
emu_timer *m_sound_cpu_timer; emu_timer *m_sound_cpu_timer;
UINT8 m_sound_cpu_irq1_enable; UINT8 m_sound_cpu_irq1_enable;
k056800_irq_cb m_irq_cb_func; k056800_irq_cb m_irq_cb_func;
UINT8 host_reg_r( int reg ); UINT8 host_reg_r( int reg );
void host_reg_w( int reg, UINT8 data ); void host_reg_w( int reg, UINT8 data );
UINT8 sound_reg_r( int reg ); UINT8 sound_reg_r( int reg );
void sound_reg_w( int reg, UINT8 data ); void sound_reg_w( int reg, UINT8 data );
}; };
extern const device_type K056800; extern const device_type K056800;

View File

@ -29,7 +29,7 @@ void msm5232_device::device_config_complete()
const msm5232_interface *intf = reinterpret_cast<const msm5232_interface *>(static_config()); const msm5232_interface *intf = reinterpret_cast<const msm5232_interface *>(static_config());
if (intf != NULL) if (intf != NULL)
*static_cast<msm5232_interface *>(this) = *intf; *static_cast<msm5232_interface *>(this) = *intf;
// or initialize to defaults if none provided // or initialize to defaults if none provided
else else
{ {

View File

@ -49,7 +49,7 @@ public:
~msm5232_device() {} ~msm5232_device() {}
DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( write );
void set_clock(int clock); void set_clock(int clock);
protected: protected:
// device-level overrides // device-level overrides
@ -93,7 +93,7 @@ protected:
double m_external_capacity[8]; /* in Farads, eg 0.39e-6 = 0.36 uF (microFarads) */ double m_external_capacity[8]; /* in Farads, eg 0.39e-6 = 0.36 uF (microFarads) */
devcb_resolved_write_line m_gate_handler_func;/* callback called when the GATE output pin changes state */ devcb_resolved_write_line m_gate_handler_func;/* callback called when the GATE output pin changes state */
void init_tables(); void init_tables();
void init_voice(int i); void init_voice(int i);
void gate_update(); void gate_update();

View File

@ -72,7 +72,7 @@ namco_cus30_device::namco_cus30_device(const machine_config &mconfig, const char
void namco_audio_device::device_config_complete() void namco_audio_device::device_config_complete()
{ {
// inherit a copy of the static data // inherit a copy of the static data
const namco_interface *intf = reinterpret_cast<const namco_interface *>(static_config()); const namco_interface *intf = reinterpret_cast<const namco_interface *>(static_config());
if (intf != NULL) if (intf != NULL)
*static_cast<namco_interface *>(this) = *intf; *static_cast<namco_interface *>(this) = *intf;
@ -96,7 +96,7 @@ void namco_audio_device::device_start()
/* extract globals from the interface */ /* extract globals from the interface */
m_last_channel = m_channel_list + m_voices; m_last_channel = m_channel_list + m_voices;
m_soundregs = auto_alloc_array_clear(machine(), UINT8, 0x400); m_soundregs = auto_alloc_array_clear(machine(), UINT8, 0x400);
/* adjust internal clock */ /* adjust internal clock */
@ -559,7 +559,7 @@ WRITE8_MEMBER(namco_15xx_device::namco_15xx_w)
0x3c ch 0 noise sw 0x3c ch 0 noise sw
*/ */
WRITE8_MEMBER(namco_cus30_device::namcos1_sound_w) WRITE8_MEMBER(namco_cus30_device::namcos1_sound_w)
{ {
sound_channel *voice; sound_channel *voice;
int ch; int ch;
@ -664,7 +664,7 @@ WRITE8_MEMBER( namco_15xx_device::sharedram_w )
void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{ {
if (m_stereo) if (m_stereo)
{ {
sound_channel *voice; sound_channel *voice;
@ -774,16 +774,16 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample
else else
{ {
sound_channel *voice; sound_channel *voice;
stream_sample_t *buffer = outputs[0]; stream_sample_t *buffer = outputs[0];
/* zap the contents of the buffer */ /* zap the contents of the buffer */
memset(buffer, 0, samples * sizeof(*buffer)); memset(buffer, 0, samples * sizeof(*buffer));
/* if no sound, we're done */ /* if no sound, we're done */
if (m_sound_enable == 0) if (m_sound_enable == 0)
return; return;
/* loop over each voice and add its contribution */ /* loop over each voice and add its contribution */
for (voice = m_channel_list; voice < m_last_channel; voice++) for (voice = m_channel_list; voice < m_last_channel; voice++)
{ {
@ -801,25 +801,25 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample
UINT32 c = voice->noise_counter; UINT32 c = voice->noise_counter;
INT16 noise_data = OUTPUT_LEVEL(0x07 * (v >> 1)); INT16 noise_data = OUTPUT_LEVEL(0x07 * (v >> 1));
int i; int i;
/* add our contribution */ /* add our contribution */
for (i = 0; i < samples; i++) for (i = 0; i < samples; i++)
{ {
int cnt; int cnt;
if (voice->noise_state) if (voice->noise_state)
*mix++ += noise_data; *mix++ += noise_data;
else else
*mix++ -= noise_data; *mix++ -= noise_data;
if (hold) if (hold)
{ {
hold--; hold--;
continue; continue;
} }
hold = hold_time; hold = hold_time;
c += delta; c += delta;
cnt = (c >> 12); cnt = (c >> 12);
c &= (1 << 12) - 1; c &= (1 << 12) - 1;
@ -830,7 +830,7 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample
voice->noise_seed >>= 1; voice->noise_seed >>= 1;
} }
} }
/* update the counter and hold time for this voice */ /* update the counter and hold time for this voice */
voice->noise_counter = c; voice->noise_counter = c;
voice->noise_hold = hold; voice->noise_hold = hold;
@ -842,26 +842,26 @@ void namco_audio_device::sound_stream_update(sound_stream &stream, stream_sample
if (v && voice->frequency) if (v && voice->frequency)
{ {
const INT16 *w = &m_waveform[v][voice->waveform_select * 32]; const INT16 *w = &m_waveform[v][voice->waveform_select * 32];
/* generate sound into buffer and update the counter for this voice */ /* generate sound into buffer and update the counter for this voice */
voice->counter = namco_update_one(mix, samples, w, voice->counter, voice->frequency); voice->counter = namco_update_one(mix, samples, w, voice->counter, voice->frequency);
} }
} }
} }
} }
} }
void namco_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) void namco_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{ {
namco_audio_device::sound_stream_update(stream, inputs, outputs, samples); namco_audio_device::sound_stream_update(stream, inputs, outputs, samples);
} }
void namco_15xx_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) void namco_15xx_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{ {
namco_audio_device::sound_stream_update(stream, inputs, outputs, samples); namco_audio_device::sound_stream_update(stream, inputs, outputs, samples);
} }
void namco_cus30_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) void namco_cus30_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{ {
namco_audio_device::sound_stream_update(stream, inputs, outputs, samples); namco_audio_device::sound_stream_update(stream, inputs, outputs, samples);
} }

View File

@ -2,122 +2,122 @@
#ifndef __NAMCO_H__ #ifndef __NAMCO_H__
#define __NAMCO_H__ #define __NAMCO_H__
/* 8 voices max */ /* 8 voices max */
#define MAX_VOICES 8 #define MAX_VOICES 8
#define MAX_VOLUME 16 #define MAX_VOLUME 16
struct namco_interface struct namco_interface
{ {
int m_voices; /* number of voices */ int m_voices; /* number of voices */
int m_stereo; /* set to 1 to indicate stereo (e.g., System 1) */ int m_stereo; /* set to 1 to indicate stereo (e.g., System 1) */
}; };
/* this structure defines the parameters for a channel */ /* this structure defines the parameters for a channel */
struct sound_channel struct sound_channel
{ {
UINT32 frequency; UINT32 frequency;
UINT32 counter; UINT32 counter;
INT32 volume[2]; INT32 volume[2];
INT32 noise_sw; INT32 noise_sw;
INT32 noise_state; INT32 noise_state;
INT32 noise_seed; INT32 noise_seed;
UINT32 noise_counter; UINT32 noise_counter;
INT32 noise_hold; INT32 noise_hold;
INT32 waveform_select; INT32 waveform_select;
}; };
class namco_audio_device : public device_t, class namco_audio_device : public device_t,
public device_sound_interface, public device_sound_interface,
public namco_interface public namco_interface
{ {
public: public:
namco_audio_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); namco_audio_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
~namco_audio_device() {} ~namco_audio_device() {}
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
virtual void device_start(); virtual void device_start();
// internal state // internal state
void build_decoded_waveform( UINT8 *rgnbase ); void build_decoded_waveform( UINT8 *rgnbase );
void update_namco_waveform(int offset, UINT8 data); void update_namco_waveform(int offset, UINT8 data);
UINT32 namco_update_one(stream_sample_t *buffer, int length, const INT16 *wave, UINT32 counter, UINT32 freq); UINT32 namco_update_one(stream_sample_t *buffer, int length, const INT16 *wave, UINT32 counter, UINT32 freq);
/* data about the sound system */ /* data about the sound system */
sound_channel m_channel_list[MAX_VOICES]; sound_channel m_channel_list[MAX_VOICES];
sound_channel *m_last_channel; sound_channel *m_last_channel;
UINT8 *m_soundregs; UINT8 *m_soundregs;
UINT8 *m_wavedata; UINT8 *m_wavedata;
/* global sound parameters */ /* global sound parameters */
int m_wave_size; int m_wave_size;
INT32 m_sound_enable; INT32 m_sound_enable;
sound_stream *m_stream; sound_stream *m_stream;
int m_namco_clock; int m_namco_clock;
int m_sample_rate; int m_sample_rate;
int m_f_fracbits; int m_f_fracbits;
/* decoded waveform table */ /* decoded waveform table */
INT16 *m_waveform[MAX_VOLUME]; INT16 *m_waveform[MAX_VOLUME];
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
}; };
class namco_device : public namco_audio_device class namco_device : public namco_audio_device
{ {
public: public:
namco_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); namco_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE8_MEMBER( pacman_sound_enable_w ); DECLARE_WRITE8_MEMBER( pacman_sound_enable_w );
DECLARE_WRITE8_MEMBER( pacman_sound_w ); DECLARE_WRITE8_MEMBER( pacman_sound_w );
void polepos_sound_enable(int enable); void polepos_sound_enable(int enable);
DECLARE_READ8_MEMBER( polepos_sound_r ); DECLARE_READ8_MEMBER( polepos_sound_r );
DECLARE_WRITE8_MEMBER( polepos_sound_w ); DECLARE_WRITE8_MEMBER( polepos_sound_w );
protected: protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
}; };
extern const device_type NAMCO; extern const device_type NAMCO;
class namco_15xx_device : public namco_audio_device class namco_15xx_device : public namco_audio_device
{ {
public: public:
namco_15xx_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); namco_15xx_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE8_MEMBER( namco_15xx_w ); DECLARE_WRITE8_MEMBER( namco_15xx_w );
DECLARE_READ8_MEMBER( sharedram_r ); DECLARE_READ8_MEMBER( sharedram_r );
DECLARE_WRITE8_MEMBER( sharedram_w ); DECLARE_WRITE8_MEMBER( sharedram_w );
void mappy_sound_enable(int enable); void mappy_sound_enable(int enable);
protected: protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
}; };
extern const device_type NAMCO_15XX; extern const device_type NAMCO_15XX;
class namco_cus30_device : public namco_audio_device class namco_cus30_device : public namco_audio_device
{ {
public: public:
namco_cus30_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); namco_cus30_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE8_MEMBER( namcos1_cus30_w ); /* wavedata + sound registers + RAM */ DECLARE_WRITE8_MEMBER( namcos1_cus30_w ); /* wavedata + sound registers + RAM */
DECLARE_READ8_MEMBER( namcos1_cus30_r ); DECLARE_READ8_MEMBER( namcos1_cus30_r );
DECLARE_WRITE8_MEMBER( namcos1_sound_w ); DECLARE_WRITE8_MEMBER( namcos1_sound_w );
DECLARE_WRITE8_MEMBER( pacman_sound_w ); DECLARE_WRITE8_MEMBER( pacman_sound_w );
protected: protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
}; };
extern const device_type NAMCO_CUS30; extern const device_type NAMCO_CUS30;
#endif /* __NAMCO_H__ */ #endif /* __NAMCO_H__ */

View File

@ -157,7 +157,7 @@ endif
#------------------------------------------------- #-------------------------------------------------
# Excellent Systems ADPCM sound chip # Excellent Systems ADPCM sound chip
#@src/emu/sound/es8712.h,SOUNDS += ES8712 #@src/emu/sound/es8712.h,SOUNDS += ES8712
#------------------------------------------------- #-------------------------------------------------
ifneq ($(filter ES8712,$(SOUNDS)),) ifneq ($(filter ES8712,$(SOUNDS)),)

View File

@ -189,7 +189,7 @@ upd775x_device::upd775x_device(const machine_config &mconfig, device_type type,
m_rom(NULL), m_rom(NULL),
m_rombase(NULL), m_rombase(NULL),
m_romoffset(0), m_romoffset(0),
m_rommask(0) m_rommask(0)
{ {
} }
@ -260,7 +260,7 @@ void upd7759_device::device_start()
{ {
assert(type() == UPD7759); // other chips do not support slave mode assert(type() == UPD7759); // other chips do not support slave mode
m_timer = timer_alloc(TIMER_SLAVE_UPDATE); m_timer = timer_alloc(TIMER_SLAVE_UPDATE);
m_rommask = 0; m_rommask = 0;
} }
else else
{ {
@ -331,7 +331,7 @@ void upd7756_device::device_start()
m_rom = m_rombase = *region(); m_rom = m_rombase = *region();
if (m_rombase == NULL) if (m_rombase == NULL)
{ {
m_rommask = 0; m_rommask = 0;
} }
else else
{ {
@ -707,11 +707,11 @@ void upd775x_device::advance_state()
void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{ {
UINT8 olddrq = m_drq; UINT8 olddrq = m_drq;
switch (id) switch (id)
{ {
case TIMER_SLAVE_UPDATE: case TIMER_SLAVE_UPDATE:
/* update the stream */ /* update the stream */
m_channel->update(); m_channel->update();

View File

@ -33,7 +33,7 @@ public:
int busy_r(); int busy_r();
DECLARE_WRITE8_MEMBER( port_w ); DECLARE_WRITE8_MEMBER( port_w );
void postload(); void postload();
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -42,7 +42,7 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
// internal state // internal state
sound_stream *m_channel; /* stream channel for playback */ sound_stream *m_channel; /* stream channel for playback */
@ -53,13 +53,13 @@ protected:
UINT32 m_pos; /* current output sample position */ UINT32 m_pos; /* current output sample position */
UINT32 m_step; /* step value per output sample */ UINT32 m_step; /* step value per output sample */
attotime m_clock_period; /* clock period */ attotime m_clock_period; /* clock period */
/* I/O lines */ /* I/O lines */
UINT8 m_fifo_in; /* last data written to the sound chip */ UINT8 m_fifo_in; /* last data written to the sound chip */
UINT8 m_reset; /* current state of the RESET line */ UINT8 m_reset; /* current state of the RESET line */
UINT8 m_start; /* current state of the START line */ UINT8 m_start; /* current state of the START line */
UINT8 m_drq; /* current state of the DRQ line */ UINT8 m_drq; /* current state of the DRQ line */
/* internal state machine */ /* internal state machine */
INT8 m_state; /* current overall chip state */ INT8 m_state; /* current overall chip state */
INT32 m_clocks_left; /* number of clocks left in this state */ INT32 m_clocks_left; /* number of clocks left in this state */
@ -85,7 +85,7 @@ protected:
UINT8 * m_rombase; /* pointer to ROM data or NULL for slave mode */ UINT8 * m_rombase; /* pointer to ROM data or NULL for slave mode */
UINT32 m_romoffset; /* ROM offset to make save/restore easier */ UINT32 m_romoffset; /* ROM offset to make save/restore easier */
UINT32 m_rommask; /* maximum address offset */ UINT32 m_rommask; /* maximum address offset */
void update_adpcm(int data); void update_adpcm(int data);
void advance_state(); void advance_state();
}; };
@ -94,19 +94,19 @@ class upd7759_device : public upd775x_device
{ {
public: public:
upd7759_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); upd7759_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
enum enum
{ {
TIMER_SLAVE_UPDATE TIMER_SLAVE_UPDATE
}; };
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
emu_timer *m_timer; /* timer */ emu_timer *m_timer; /* timer */
void start_w(UINT8 data); void start_w(UINT8 data);
}; };
@ -118,7 +118,7 @@ public:
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
void start_w(UINT8 data); void start_w(UINT8 data);
}; };

View File

@ -225,7 +225,7 @@ void vlm5030_device::device_config_complete()
void vlm5030_device::device_start() void vlm5030_device::device_start()
{ {
m_coeff = &vlm5030_coeff; m_coeff = &vlm5030_coeff;
/* reset input pins */ /* reset input pins */
m_pin_RST = m_pin_ST = m_pin_VCU= 0; m_pin_RST = m_pin_ST = m_pin_VCU= 0;
m_latch_data = 0; m_latch_data = 0;

View File

@ -4,35 +4,35 @@
#define __VLM5030_H__ #define __VLM5030_H__
struct vlm5030_interface struct vlm5030_interface
{ {
int m_memory_size; /* memory size of speech rom (0=memory region length) */ int m_memory_size; /* memory size of speech rom (0=memory region length) */
}; };
class vlm5030_device : public device_t, class vlm5030_device : public device_t,
public device_sound_interface, public device_sound_interface,
public vlm5030_interface public vlm5030_interface
{ {
public: public:
vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~vlm5030_device() {} ~vlm5030_device() {}
/* set speech rom address */ /* set speech rom address */
void set_rom(void *speech_rom); void set_rom(void *speech_rom);
/* get BSY pin level */ /* get BSY pin level */
int bsy(); int bsy();
/* latch contoll data */ /* latch contoll data */
DECLARE_WRITE8_MEMBER( data_w ); DECLARE_WRITE8_MEMBER( data_w );
/* set RST pin level : reset / set table address A8-A15 */ /* set RST pin level : reset / set table address A8-A15 */
void rst (int pin ); void rst (int pin );
/* set VCU pin level : ?? unknown */ /* set VCU pin level : ?? unknown */
void vcu( int pin ); void vcu( int pin );
/* set ST pin level : set table address A0-A7 / start speech */ /* set ST pin level : set table address A0-A7 / start speech */
void st( int pin ); void st( int pin );
protected: protected:
@ -92,7 +92,7 @@ private:
int m_current_k[10]; int m_current_k[10];
INT32 m_x[10]; INT32 m_x[10];
int get_bits(int sbit,int bits); int get_bits(int sbit,int bits);
int parse_frame(); int parse_frame();
void update(); void update();

View File

@ -109,7 +109,7 @@ void x1_010_device::device_config_complete()
const x1_010_interface *intf = reinterpret_cast<const x1_010_interface *>(static_config()); const x1_010_interface *intf = reinterpret_cast<const x1_010_interface *>(static_config());
if (intf != NULL) if (intf != NULL)
*static_cast<x1_010_interface *>(this) = *intf; *static_cast<x1_010_interface *>(this) = *intf;
// or initialize to defaults if none provided // or initialize to defaults if none provided
else else
{ {
@ -128,7 +128,7 @@ void x1_010_device::device_start()
m_region = *region(); m_region = *region();
m_base_clock = clock(); m_base_clock = clock();
m_rate = clock() / 1024; m_rate = clock() / 1024;
for( i = 0; i < SETA_NUM_CHANNELS; i++ ) { for( i = 0; i < SETA_NUM_CHANNELS; i++ ) {
m_smp_offset[i] = 0; m_smp_offset[i] = 0;
m_env_offset[i] = 0; m_env_offset[i] = 0;
@ -138,7 +138,7 @@ void x1_010_device::device_start()
/* get stream channels */ /* get stream channels */
m_stream = machine().sound().stream_alloc(*this, 0, 2, m_rate, this); m_stream = machine().sound().stream_alloc(*this, 0, 2, m_rate, this);
save_item(NAME(m_rate)); save_item(NAME(m_rate));
save_item(NAME(m_sound_enable)); save_item(NAME(m_sound_enable));
save_item(NAME(m_reg)); save_item(NAME(m_reg));

View File

@ -36,7 +36,7 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
private: private:
// internal state // internal state
/* Variables only used here */ /* Variables only used here */
int m_rate; // Output sampling rate (Hz) int m_rate; // Output sampling rate (Hz)
sound_stream * m_stream; // Stream handle sound_stream * m_stream; // Stream handle

View File

@ -497,7 +497,7 @@ void ymf271_device::update_pcm(int slotnum, INT32 *mixp, int length)
*mixp++ += (sample * ch0_vol) >> 16; *mixp++ += (sample * ch0_vol) >> 16;
*mixp++ += (sample * ch1_vol) >> 16; *mixp++ += (sample * ch1_vol) >> 16;
// go to next step // go to next step
slot->stepptr += slot->step; slot->stepptr += slot->step;
} }
@ -508,11 +508,11 @@ INT64 ymf271_device::calculate_op(int slotnum, INT64 inp)
{ {
YMF271Slot *slot = &m_slots[slotnum]; YMF271Slot *slot = &m_slots[slotnum];
INT64 env, slot_output, slot_input = 0; INT64 env, slot_output, slot_input = 0;
update_envelope(slot); update_envelope(slot);
update_lfo(slot); update_lfo(slot);
env = calculate_slot_volume(slot); env = calculate_slot_volume(slot);
if (inp == OP_INPUT_FEEDBACK) if (inp == OP_INPUT_FEEDBACK)
{ {
// from own feedback // from own feedback
@ -524,11 +524,11 @@ INT64 ymf271_device::calculate_op(int slotnum, INT64 inp)
// from previous slot output // from previous slot output
slot_input = ((inp << (SIN_BITS-2)) * modulation_level[slot->feedback]); slot_input = ((inp << (SIN_BITS-2)) * modulation_level[slot->feedback]);
} }
slot_output = m_lut_waves[slot->waveform][((slot->stepptr + slot_input) >> 16) & SIN_MASK]; slot_output = m_lut_waves[slot->waveform][((slot->stepptr + slot_input) >> 16) & SIN_MASK];
slot_output = (slot_output * env) >> 16; slot_output = (slot_output * env) >> 16;
slot->stepptr += slot->step; slot->stepptr += slot->step;
return slot_output; return slot_output;
} }
@ -702,7 +702,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t **
// --[S4]--| // --[S4]--|
// --[S2]--| // --[S2]--|
// <--------| | // <--------| |
// +--[S1]--|--+--[S3]--+--> // +--[S1]--|--+--[S3]--+-->
case 10: case 10:
phase_mod1 = calculate_op(slot1, OP_INPUT_FEEDBACK); phase_mod1 = calculate_op(slot1, OP_INPUT_FEEDBACK);
set_feedback(slot1, phase_mod1); set_feedback(slot1, phase_mod1);
@ -714,7 +714,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t **
// --[S4]-----| // --[S4]-----|
// --[S2]-----| // --[S2]-----|
// <-----------------| | // <-----------------| |
// +--[S1]--+--[S3]--|--+--> // +--[S1]--+--[S3]--|--+-->
case 11: case 11:
phase_mod1 = calculate_op(slot1, OP_INPUT_FEEDBACK); phase_mod1 = calculate_op(slot1, OP_INPUT_FEEDBACK);
phase_mod3 = calculate_op(slot3, phase_mod1); phase_mod3 = calculate_op(slot3, phase_mod1);
@ -1298,7 +1298,7 @@ void ymf271_device::device_timer(emu_timer &timer, device_timer_id id, int param
// reload timer // reload timer
m_timB->adjust(attotime::from_hz(m_clock) * (384 * 16 * (256 - m_timerB)), 0); m_timB->adjust(attotime::from_hz(m_clock) * (384 * 16 * (256 - m_timerB)), 0);
break; break;
default: default:
assert_always(FALSE, "Unknown id in ymf271_device::device_timer"); assert_always(FALSE, "Unknown id in ymf271_device::device_timer");
break; break;
@ -1416,7 +1416,7 @@ void ymf271_device::ymf271_write_timer(UINT8 address, UINT8 data)
if (!m_ext_rw && !m_ext_write_handler.isnull()) if (!m_ext_rw && !m_ext_write_handler.isnull())
m_ext_write_handler(m_ext_address, data); m_ext_write_handler(m_ext_address, data);
break; break;
case 0x20: case 0x20:
case 0x21: case 0x21:
case 0x22: case 0x22:
@ -1432,7 +1432,7 @@ void ymf271_device::ymf271_write_timer(UINT8 address, UINT8 data)
WRITE8_MEMBER( ymf271_device::write ) WRITE8_MEMBER( ymf271_device::write )
{ {
m_stream->update(); m_stream->update();
m_regs_main[offset & 0xf] = data; m_regs_main[offset & 0xf] = data;
switch (offset & 0xf) switch (offset & 0xf)
@ -1481,7 +1481,7 @@ READ8_MEMBER( ymf271_device::read )
{ {
case 0x0: case 0x0:
return m_status; return m_status;
case 0x1: case 0x1:
// statusreg 2 // statusreg 2
return 0; return 0;
@ -1496,7 +1496,7 @@ READ8_MEMBER( ymf271_device::read )
m_ext_readlatch = ymf271_read_memory(m_ext_address); m_ext_readlatch = ymf271_read_memory(m_ext_address);
return ret; return ret;
} }
default: default:
break; break;
} }
@ -1507,10 +1507,10 @@ READ8_MEMBER( ymf271_device::read )
void ymf271_device::init_tables() void ymf271_device::init_tables()
{ {
int i, j; int i, j;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
m_lut_waves[i] = auto_alloc_array(machine(), INT16, SIN_LEN); m_lut_waves[i] = auto_alloc_array(machine(), INT16, SIN_LEN);
for (i = 0; i < 4*8; i++) for (i = 0; i < 4*8; i++)
m_lut_plfo[i>>3][i&7] = auto_alloc_array(machine(), double, LFO_LENGTH); m_lut_plfo[i>>3][i&7] = auto_alloc_array(machine(), double, LFO_LENGTH);
@ -1607,7 +1607,7 @@ void ymf271_device::init_tables()
double db = 0.75 * (double)i; double db = 0.75 * (double)i;
m_lut_total_level[i] = (int)(65536.0 / pow(10.0, db / 20.0)); m_lut_total_level[i] = (int)(65536.0 / pow(10.0, db / 20.0));
} }
// timing may use a non-standard XTAL // timing may use a non-standard XTAL
double clock_correction = (double)(STD_CLOCK) / (double)(m_clock); double clock_correction = (double)(STD_CLOCK) / (double)(m_clock);
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++)

View File

@ -112,12 +112,12 @@ private:
void ymf271_write_pcm(UINT8 address, UINT8 data); void ymf271_write_pcm(UINT8 address, UINT8 data);
void ymf271_write_timer(UINT8 address, UINT8 data); void ymf271_write_timer(UINT8 address, UINT8 data);
UINT8 ymf271_read_memory(UINT32 offset); UINT8 ymf271_read_memory(UINT32 offset);
inline int get_keyscaled_rate(int rate, int keycode, int keyscale); inline int get_keyscaled_rate(int rate, int keycode, int keyscale);
inline int get_internal_keycode(int block, int fns); inline int get_internal_keycode(int block, int fns);
inline int get_external_keycode(int block, int fns); inline int get_external_keycode(int block, int fns);
inline bool check_envelope_end(YMF271Slot *slot); inline bool check_envelope_end(YMF271Slot *slot);
// lookup tables // lookup tables
INT16 *m_lut_waves[8]; INT16 *m_lut_waves[8];
double *m_lut_plfo[4][8]; double *m_lut_plfo[4][8];
@ -128,11 +128,11 @@ private:
int m_lut_attenuation[16]; int m_lut_attenuation[16];
int m_lut_total_level[128]; int m_lut_total_level[128];
int m_lut_env_volume[256]; int m_lut_env_volume[256];
// internal state // internal state
YMF271Slot m_slots[48]; YMF271Slot m_slots[48];
YMF271Group m_groups[12]; YMF271Group m_groups[12];
UINT8 m_regs_main[0x10]; UINT8 m_regs_main[0x10];
UINT32 m_timerA; UINT32 m_timerA;

View File

@ -22,7 +22,7 @@
- Is memory handling 100% correct? At the moment, Konami firebeat.c is the only - Is memory handling 100% correct? At the moment, Konami firebeat.c is the only
hardware currently emulated that uses external handlers. hardware currently emulated that uses external handlers.
It also happens to be the only one using 16-bit PCM. It also happens to be the only one using 16-bit PCM.
Some other drivers (eg. bishi.c, bfm_sc4/5.c) also use ROM readback. Some other drivers (eg. bishi.c, bfm_sc4/5.c) also use ROM readback.
*/ */

View File

@ -379,7 +379,7 @@ tilemap_t &tilemap_t::init(tilemap_manager &manager, tilemap_get_info_delegate t
m_device = dynamic_cast<tilemap_device *>(this); m_device = dynamic_cast<tilemap_device *>(this);
m_next = NULL; m_next = NULL;
m_user_data = NULL; m_user_data = NULL;
// populate tilemap metrics // populate tilemap metrics
m_rows = rows; m_rows = rows;
m_cols = cols; m_cols = cols;
@ -387,14 +387,14 @@ tilemap_t &tilemap_t::init(tilemap_manager &manager, tilemap_get_info_delegate t
m_tileheight = tileheight; m_tileheight = tileheight;
m_width = cols * tilewidth; m_width = cols * tilewidth;
m_height = rows * tileheight; m_height = rows * tileheight;
// populate logical <-> memory mappings // populate logical <-> memory mappings
m_mapper = mapper; m_mapper = mapper;
m_memory_to_logical = NULL; m_memory_to_logical = NULL;
m_max_logical_index = 0; m_max_logical_index = 0;
m_logical_to_memory = NULL; m_logical_to_memory = NULL;
m_max_memory_index = 0; m_max_memory_index = 0;
// initialize tile information geters // initialize tile information geters
m_tile_get_info = tile_get_info; m_tile_get_info = tile_get_info;
@ -422,7 +422,7 @@ tilemap_t &tilemap_t::init(tilemap_manager &manager, tilemap_get_info_delegate t
// allocate pixmap // allocate pixmap
m_pixmap.allocate(m_width, m_height); m_pixmap.allocate(m_width, m_height);
// allocate transparency mapping // allocate transparency mapping
m_flagsmap.allocate(m_width, m_height); m_flagsmap.allocate(m_width, m_height);
m_tileflags = NULL; m_tileflags = NULL;
@ -1498,9 +1498,9 @@ void tilemap_t::draw_debug(bitmap_rgb32 &dest, UINT32 scrollx, UINT32 scrolly)
tilemap_memory::tilemap_memory() tilemap_memory::tilemap_memory()
: m_base(NULL), : m_base(NULL),
m_bytes(0), m_bytes(0),
m_membits(0), m_membits(0),
m_bytes_per_entry(0) m_bytes_per_entry(0)
{ {
} }
@ -1516,45 +1516,45 @@ void tilemap_memory::set(void *base, UINT32 bytes, int membits, endianness_t end
assert(bytes > 0); assert(bytes > 0);
assert(membits == 8 || membits == 16 || membits == 32 || membits == 64); assert(membits == 8 || membits == 16 || membits == 32 || membits == 64);
assert(bpe == 1 || bpe == 2 || bpe == 4); assert(bpe == 1 || bpe == 2 || bpe == 4);
// populate direct data // populate direct data
m_base = base; m_base = base;
m_bytes = bytes; m_bytes = bytes;
m_membits = membits; m_membits = membits;
m_endianness = endianness; m_endianness = endianness;
m_bytes_per_entry = bpe; m_bytes_per_entry = bpe;
// derive data // derive data
switch (bpe*1000 + membits*10 + endianness) switch (bpe*1000 + membits*10 + endianness)
{ {
case 1*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_8; m_writer = &tilemap_memory::write8_to_8; break; case 1*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_8; m_writer = &tilemap_memory::write8_to_8; break;
case 1*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_8; m_writer = &tilemap_memory::write8_to_8; break; case 1*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_8; m_writer = &tilemap_memory::write8_to_8; break;
case 1*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_16le; m_writer = &tilemap_memory::write8_to_16le; break; case 1*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_16le; m_writer = &tilemap_memory::write8_to_16le; break;
case 1*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_16be; m_writer = &tilemap_memory::write8_to_16be; break; case 1*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_16be; m_writer = &tilemap_memory::write8_to_16be; break;
case 1*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_32le; m_writer = &tilemap_memory::write8_to_32le; break; case 1*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_32le; m_writer = &tilemap_memory::write8_to_32le; break;
case 1*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_32be; m_writer = &tilemap_memory::write8_to_32be; break; case 1*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_32be; m_writer = &tilemap_memory::write8_to_32be; break;
case 1*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_64le; m_writer = &tilemap_memory::write8_to_64le; break; case 1*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read8_from_64le; m_writer = &tilemap_memory::write8_to_64le; break;
case 1*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_64be; m_writer = &tilemap_memory::write8_to_64be; break; case 1*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read8_from_64be; m_writer = &tilemap_memory::write8_to_64be; break;
case 2*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_8le; m_writer = &tilemap_memory::write16_to_8le; break; case 2*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_8le; m_writer = &tilemap_memory::write16_to_8le; break;
case 2*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_8be; m_writer = &tilemap_memory::write16_to_8be; break; case 2*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_8be; m_writer = &tilemap_memory::write16_to_8be; break;
case 2*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_16; m_writer = &tilemap_memory::write16_to_16; break; case 2*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_16; m_writer = &tilemap_memory::write16_to_16; break;
case 2*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_16; m_writer = &tilemap_memory::write16_to_16; break; case 2*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_16; m_writer = &tilemap_memory::write16_to_16; break;
case 2*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_32le; m_writer = &tilemap_memory::write16_to_32le; break; case 2*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_32le; m_writer = &tilemap_memory::write16_to_32le; break;
case 2*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_32be; m_writer = &tilemap_memory::write16_to_32be; break; case 2*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_32be; m_writer = &tilemap_memory::write16_to_32be; break;
case 2*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_64le; m_writer = &tilemap_memory::write16_to_64le; break; case 2*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read16_from_64le; m_writer = &tilemap_memory::write16_to_64le; break;
case 2*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_64be; m_writer = &tilemap_memory::write16_to_64be; break; case 2*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read16_from_64be; m_writer = &tilemap_memory::write16_to_64be; break;
case 4*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_8le; m_writer = &tilemap_memory::write32_to_8le; break; case 4*1000 + 8*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_8le; m_writer = &tilemap_memory::write32_to_8le; break;
case 4*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_8be; m_writer = &tilemap_memory::write32_to_8be; break; case 4*1000 + 8*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_8be; m_writer = &tilemap_memory::write32_to_8be; break;
case 4*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_16le; m_writer = &tilemap_memory::write32_to_16le; break; case 4*1000 + 16*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_16le; m_writer = &tilemap_memory::write32_to_16le; break;
case 4*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_16be; m_writer = &tilemap_memory::write32_to_16be; break; case 4*1000 + 16*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_16be; m_writer = &tilemap_memory::write32_to_16be; break;
case 4*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_32; m_writer = &tilemap_memory::write32_to_32; break; case 4*1000 + 32*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_32; m_writer = &tilemap_memory::write32_to_32; break;
case 4*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_32; m_writer = &tilemap_memory::write32_to_32; break; case 4*1000 + 32*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_32; m_writer = &tilemap_memory::write32_to_32; break;
case 4*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_64le; m_writer = &tilemap_memory::write32_to_64le; break; case 4*1000 + 64*10 + ENDIANNESS_LITTLE: m_reader = &tilemap_memory::read32_from_64le; m_writer = &tilemap_memory::write32_to_64le; break;
case 4*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_64be; m_writer = &tilemap_memory::write32_to_64be; break; case 4*1000 + 64*10 + ENDIANNESS_BIG: m_reader = &tilemap_memory::read32_from_64be; m_writer = &tilemap_memory::write32_to_64be; break;
default: throw emu_fatalerror("Illegal memory bits/bus width combo in tilemap_memory"); default: throw emu_fatalerror("Illegal memory bits/bus width combo in tilemap_memory");
} }
} }
@ -1581,7 +1581,7 @@ void tilemap_memory::set(const tilemap_memory &helper)
//------------------------------------------------- //-------------------------------------------------
// read8_from_*/write8_to_* - entry read/write // read8_from_*/write8_to_* - entry read/write
// heleprs for 1 byte-per-entry // heleprs for 1 byte-per-entry
//------------------------------------------------- //-------------------------------------------------
UINT32 tilemap_memory::read8_from_8(int index) { return reinterpret_cast<UINT8 *>(m_base)[index]; } UINT32 tilemap_memory::read8_from_8(int index) { return reinterpret_cast<UINT8 *>(m_base)[index]; }
@ -1605,7 +1605,7 @@ void tilemap_memory::write8_to_64be(int index, UINT32 data) { reinterpret_cast<U
//------------------------------------------------- //-------------------------------------------------
// read16_from_*/write16_to_* - entry read/write // read16_from_*/write16_to_* - entry read/write
// heleprs for 2 bytes-per-entry // heleprs for 2 bytes-per-entry
//------------------------------------------------- //-------------------------------------------------
UINT32 tilemap_memory::read16_from_8le(int index) { return read8_from_8(index*2) | (read8_from_8(index*2+1) << 8); } UINT32 tilemap_memory::read16_from_8le(int index) { return read8_from_8(index*2) | (read8_from_8(index*2+1) << 8); }
@ -1629,7 +1629,7 @@ void tilemap_memory::write16_to_64be(int index, UINT32 data) { reinterpret_cast<
//------------------------------------------------- //-------------------------------------------------
// read32_from_*/write32_to_* - entry read/write // read32_from_*/write32_to_* - entry read/write
// heleprs for 4 bytes-per-entry // heleprs for 4 bytes-per-entry
//------------------------------------------------- //-------------------------------------------------
UINT32 tilemap_memory::read32_from_8le(int index) { return read16_from_8le(index*2) | (read16_from_8le(index*2+1) << 16); } UINT32 tilemap_memory::read32_from_8le(int index) { return read16_from_8le(index*2) | (read16_from_8le(index*2+1) << 16); }
@ -1756,8 +1756,8 @@ tilemap_device::tilemap_device(const machine_config &mconfig, const char *tag, d
//------------------------------------------------- //-------------------------------------------------
// static_set_bytes_per_entry: Set the // static_set_bytes_per_entry: Set the
// transparent pen // transparent pen
//------------------------------------------------- //-------------------------------------------------
void tilemap_device::static_set_bytes_per_entry(device_t &device, int bpe) void tilemap_device::static_set_bytes_per_entry(device_t &device, int bpe)
@ -1768,7 +1768,7 @@ void tilemap_device::static_set_bytes_per_entry(device_t &device, int bpe)
//------------------------------------------------- //-------------------------------------------------
// static_set_info_callback: Set the get info // static_set_info_callback: Set the get info
// callback delegate // callback delegate
//------------------------------------------------- //-------------------------------------------------
void tilemap_device::static_set_info_callback(device_t &device, tilemap_get_info_delegate get_info) void tilemap_device::static_set_info_callback(device_t &device, tilemap_get_info_delegate get_info)
@ -1779,7 +1779,7 @@ void tilemap_device::static_set_info_callback(device_t &device, tilemap_get_info
//------------------------------------------------- //-------------------------------------------------
// static_set_layout: Set the tilemap size and // static_set_layout: Set the tilemap size and
// layout // layout
//------------------------------------------------- //-------------------------------------------------
void tilemap_device::static_set_layout(device_t &device, tilemap_standard_mapper mapper, int columns, int rows) void tilemap_device::static_set_layout(device_t &device, tilemap_standard_mapper mapper, int columns, int rows)
@ -1813,8 +1813,8 @@ void tilemap_device::static_set_tile_size(device_t &device, int width, int heigh
//------------------------------------------------- //-------------------------------------------------
// static_set_transparent_pen: Set the // static_set_transparent_pen: Set the
// transparent pen // transparent pen
//------------------------------------------------- //-------------------------------------------------
void tilemap_device::static_set_transparent_pen(device_t &device, pen_t pen) void tilemap_device::static_set_transparent_pen(device_t &device, pen_t pen)
@ -1914,7 +1914,7 @@ void tilemap_device::device_start()
// bind our callbacks // bind our callbacks
m_get_info.bind_relative_to(*owner()); m_get_info.bind_relative_to(*owner());
m_mapper.bind_relative_to(*owner()); m_mapper.bind_relative_to(*owner());
// allocate the tilemap // allocate the tilemap
if (m_standard_mapper == TILEMAP_STANDARD_COUNT) if (m_standard_mapper == TILEMAP_STANDARD_COUNT)
machine().tilemap().create(m_get_info, m_mapper, m_tile_width, m_tile_height, m_num_columns, m_num_rows, this); machine().tilemap().create(m_get_info, m_mapper, m_tile_width, m_tile_height, m_num_columns, m_num_rows, this);
@ -1933,7 +1933,7 @@ void tilemap_device::device_start()
if (share != NULL) if (share != NULL)
m_extmem.set(*share, m_bytes_per_entry); m_extmem.set(*share, m_bytes_per_entry);
} }
// configure the device and set the pen // configure the device and set the pen
if (m_transparent_pen_set) if (m_transparent_pen_set)
set_transparent_pen(m_transparent_pen); set_transparent_pen(m_transparent_pen);

View File

@ -411,31 +411,27 @@ enum tilemap_standard_mapper
MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \ MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \
MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \ MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \
MCFG_TILEMAP_LAYOUT_STANDARD(_mapper, _columns, _rows) \ MCFG_TILEMAP_LAYOUT_STANDARD(_mapper, _columns, _rows) \
MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \ MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight)
#define MCFG_TILEMAP_ADD_CUSTOM(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows) \ #define MCFG_TILEMAP_ADD_CUSTOM(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows) \
MCFG_TILEMAP_ADD(_tag) \ MCFG_TILEMAP_ADD(_tag) \
MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \ MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \
MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \ MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \
MCFG_TILEMAP_LAYOUT_CB_DRIVER(_class, _mapper, _columns, _rows) \ MCFG_TILEMAP_LAYOUT_CB_DRIVER(_class, _mapper, _columns, _rows) \
MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \ MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight)
#define MCFG_TILEMAP_ADD_STANDARD_TRANSPEN(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows, _transpen) \ #define MCFG_TILEMAP_ADD_STANDARD_TRANSPEN(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows, _transpen) \
MCFG_TILEMAP_ADD(_tag) \ MCFG_TILEMAP_ADD(_tag) \
MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \ MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \
MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \ MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \
MCFG_TILEMAP_LAYOUT_STANDARD(_mapper, _columns, _rows) \ MCFG_TILEMAP_LAYOUT_STANDARD(_mapper, _columns, _rows) \
MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \ MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \
MCFG_TILEMAP_TRANSPARENT_PEN(_transpen) \ MCFG_TILEMAP_TRANSPARENT_PEN(_transpen)
#define MCFG_TILEMAP_ADD_CUSTOM_TRANSPEN(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows, _transpen) \ #define MCFG_TILEMAP_ADD_CUSTOM_TRANSPEN(_tag, _bytes_per_entry, _class, _method, _tilewidth, _tileheight, _mapper, _columns, _rows, _transpen) \
MCFG_TILEMAP_ADD(_tag) \ MCFG_TILEMAP_ADD(_tag) \
MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \ MCFG_TILEMAP_BYTES_PER_ENTRY(_bytes_per_entry) \
MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \ MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \
MCFG_TILEMAP_LAYOUT_CB_DRIVER(_columns, _mapper, _rows, _class) \ MCFG_TILEMAP_LAYOUT_CB_DRIVER(_columns, _mapper, _rows, _class) \
MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \ MCFG_TILEMAP_TILE_SIZE(_tilewidth, _tileheight) \
MCFG_TILEMAP_TRANSPARENT_PEN(_transpen) \ MCFG_TILEMAP_TRANSPARENT_PEN(_transpen)
//************************************************************************** //**************************************************************************
@ -498,59 +494,59 @@ class tilemap_memory
// construction/destruction // construction/destruction
tilemap_memory(); tilemap_memory();
public: public:
// configuration // configuration
void set(void *base, UINT32 bytes, int membits, endianness_t endianness, int bpe); void set(void *base, UINT32 bytes, int membits, endianness_t endianness, int bpe);
void set(const address_space &space, void *base, UINT32 bytes, int bpe); void set(const address_space &space, void *base, UINT32 bytes, int bpe);
void set(const memory_share &share, int bpe); void set(const memory_share &share, int bpe);
void set(const tilemap_memory &helper); void set(const tilemap_memory &helper);
// getters // getters
void *base() const { return m_base; } void *base() const { return m_base; }
UINT32 bytes() const { return m_bytes; } UINT32 bytes() const { return m_bytes; }
int membits() const { return m_membits; } int membits() const { return m_membits; }
endianness_t endianness() const { return m_endianness; } endianness_t endianness() const { return m_endianness; }
int bytes_per_entry() const { return m_bytes_per_entry; } int bytes_per_entry() const { return m_bytes_per_entry; }
private: private:
// readers and writers // readers and writers
UINT32 read(int index) { return (this->*m_reader)(index); } UINT32 read(int index) { return (this->*m_reader)(index); }
void write(int index, UINT32 data) { (this->*m_writer)(index, data); } void write(int index, UINT32 data) { (this->*m_writer)(index, data); }
// internal read/write helpers for 1 byte entries // internal read/write helpers for 1 byte entries
UINT32 read8_from_8(int index); void write8_to_8(int index, UINT32 data); UINT32 read8_from_8(int index); void write8_to_8(int index, UINT32 data);
UINT32 read8_from_16le(int index); void write8_to_16le(int index, UINT32 data); UINT32 read8_from_16le(int index); void write8_to_16le(int index, UINT32 data);
UINT32 read8_from_16be(int index); void write8_to_16be(int index, UINT32 data); UINT32 read8_from_16be(int index); void write8_to_16be(int index, UINT32 data);
UINT32 read8_from_32le(int index); void write8_to_32le(int index, UINT32 data); UINT32 read8_from_32le(int index); void write8_to_32le(int index, UINT32 data);
UINT32 read8_from_32be(int index); void write8_to_32be(int index, UINT32 data); UINT32 read8_from_32be(int index); void write8_to_32be(int index, UINT32 data);
UINT32 read8_from_64le(int index); void write8_to_64le(int index, UINT32 data); UINT32 read8_from_64le(int index); void write8_to_64le(int index, UINT32 data);
UINT32 read8_from_64be(int index); void write8_to_64be(int index, UINT32 data); UINT32 read8_from_64be(int index); void write8_to_64be(int index, UINT32 data);
// internal read/write helpers for 2 byte entries // internal read/write helpers for 2 byte entries
UINT32 read16_from_8le(int index); void write16_to_8le(int index, UINT32 data); UINT32 read16_from_8le(int index); void write16_to_8le(int index, UINT32 data);
UINT32 read16_from_8be(int index); void write16_to_8be(int index, UINT32 data); UINT32 read16_from_8be(int index); void write16_to_8be(int index, UINT32 data);
UINT32 read16_from_16(int index); void write16_to_16(int index, UINT32 data); UINT32 read16_from_16(int index); void write16_to_16(int index, UINT32 data);
UINT32 read16_from_32le(int index); void write16_to_32le(int index, UINT32 data); UINT32 read16_from_32le(int index); void write16_to_32le(int index, UINT32 data);
UINT32 read16_from_32be(int index); void write16_to_32be(int index, UINT32 data); UINT32 read16_from_32be(int index); void write16_to_32be(int index, UINT32 data);
UINT32 read16_from_64le(int index); void write16_to_64le(int index, UINT32 data); UINT32 read16_from_64le(int index); void write16_to_64le(int index, UINT32 data);
UINT32 read16_from_64be(int index); void write16_to_64be(int index, UINT32 data); UINT32 read16_from_64be(int index); void write16_to_64be(int index, UINT32 data);
// internal read/write helpers for 4 byte entries // internal read/write helpers for 4 byte entries
UINT32 read32_from_8le(int index); void write32_to_8le(int index, UINT32 data); UINT32 read32_from_8le(int index); void write32_to_8le(int index, UINT32 data);
UINT32 read32_from_8be(int index); void write32_to_8be(int index, UINT32 data); UINT32 read32_from_8be(int index); void write32_to_8be(int index, UINT32 data);
UINT32 read32_from_16le(int index); void write32_to_16le(int index, UINT32 data); UINT32 read32_from_16le(int index); void write32_to_16le(int index, UINT32 data);
UINT32 read32_from_16be(int index); void write32_to_16be(int index, UINT32 data); UINT32 read32_from_16be(int index); void write32_to_16be(int index, UINT32 data);
UINT32 read32_from_32(int index); void write32_to_32(int index, UINT32 data); UINT32 read32_from_32(int index); void write32_to_32(int index, UINT32 data);
UINT32 read32_from_64le(int index); void write32_to_64le(int index, UINT32 data); UINT32 read32_from_64le(int index); void write32_to_64le(int index, UINT32 data);
UINT32 read32_from_64be(int index); void write32_to_64be(int index, UINT32 data); UINT32 read32_from_64be(int index); void write32_to_64be(int index, UINT32 data);
// internal state // internal state
void * m_base; void * m_base;
UINT32 m_bytes; UINT32 m_bytes;
int m_membits; int m_membits;
endianness_t m_endianness; endianness_t m_endianness;
int m_bytes_per_entry; int m_bytes_per_entry;
UINT32 (tilemap_memory::*m_reader)(int); UINT32 (tilemap_memory::*m_reader)(int);
void (tilemap_memory::*m_writer)(int, UINT32); void (tilemap_memory::*m_writer)(int, UINT32);
}; };
@ -675,7 +671,7 @@ private:
UINT8 value; UINT8 value;
UINT8 alpha; UINT8 alpha;
}; };
// inline helpers // inline helpers
INT32 effective_rowscroll(int index, UINT32 screen_width); INT32 effective_rowscroll(int index, UINT32 screen_width);
INT32 effective_colscroll(int index, UINT32 screen_height); INT32 effective_colscroll(int index, UINT32 screen_height);
@ -710,13 +706,13 @@ private:
// managers and devices // managers and devices
tilemap_manager * m_manager; // reference to the owning manager tilemap_manager * m_manager; // reference to the owning manager
tilemap_device * m_device; // pointer to our owning device tilemap_device * m_device; // pointer to our owning device
tilemap_t * m_next; // pointer to next tilemap tilemap_t * m_next; // pointer to next tilemap
void * m_user_data; // user data value void * m_user_data; // user data value
// optional memory info // optional memory info
tilemap_memory m_basemem; // info about base memory tilemap_memory m_basemem; // info about base memory
tilemap_memory m_extmem; // info about extension memory tilemap_memory m_extmem; // info about extension memory
// basic tilemap metrics // basic tilemap metrics
UINT32 m_rows; // number of tile rows UINT32 m_rows; // number of tile rows
@ -815,7 +811,7 @@ class tilemap_device : public device_t,
public: public:
// construction/destruction // construction/destruction
tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// static configuration // static configuration
static void static_set_bytes_per_entry(device_t &device, int bpe); static void static_set_bytes_per_entry(device_t &device, int bpe);
static void static_set_info_callback(device_t &device, tilemap_get_info_delegate tile_get_info); static void static_set_info_callback(device_t &device, tilemap_get_info_delegate tile_get_info);
@ -823,7 +819,7 @@ public:
static void static_set_layout(device_t &device, tilemap_mapper_delegate mapper, int columns, int rows); static void static_set_layout(device_t &device, tilemap_mapper_delegate mapper, int columns, int rows);
static void static_set_tile_size(device_t &device, int width, int height); static void static_set_tile_size(device_t &device, int width, int height);
static void static_set_transparent_pen(device_t &device, pen_t pen); static void static_set_transparent_pen(device_t &device, pen_t pen);
// write handlers // write handlers
DECLARE_WRITE8_HANDLER(write); DECLARE_WRITE8_HANDLER(write);
DECLARE_WRITE16_HANDLER(write); DECLARE_WRITE16_HANDLER(write);
@ -831,10 +827,10 @@ public:
DECLARE_WRITE8_HANDLER(write_ext); DECLARE_WRITE8_HANDLER(write_ext);
DECLARE_WRITE16_HANDLER(write_ext); DECLARE_WRITE16_HANDLER(write_ext);
DECLARE_WRITE32_HANDLER(write_ext); DECLARE_WRITE32_HANDLER(write_ext);
// pick one to use to avoid ambiguity errors // pick one to use to avoid ambiguity errors
using device_t::machine; using device_t::machine;
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start(); virtual void device_start();
@ -844,13 +840,13 @@ private:
tilemap_get_info_delegate m_get_info; tilemap_get_info_delegate m_get_info;
tilemap_standard_mapper m_standard_mapper; tilemap_standard_mapper m_standard_mapper;
tilemap_mapper_delegate m_mapper; tilemap_mapper_delegate m_mapper;
int m_bytes_per_entry; int m_bytes_per_entry;
int m_tile_width; int m_tile_width;
int m_tile_height; int m_tile_height;
int m_num_columns; int m_num_columns;
int m_num_rows; int m_num_rows;
bool m_transparent_pen_set; bool m_transparent_pen_set;
pen_t m_transparent_pen; pen_t m_transparent_pen;
}; };

View File

@ -154,4 +154,4 @@ const rgb_t RGB_MONOCHROME_YELLOW[] =
{ {
RGB_BLACK, RGB_BLACK,
MAKE_RGB(0xff, 0xff, 0x00) MAKE_RGB(0xff, 0xff, 0x00)
}; };

View File

@ -76,7 +76,7 @@ public:
/* video update handling */ /* video update handling */
void get_display_state(); void get_display_state();
struct tms34061_display m_display; struct tms34061_display m_display;
protected: protected:
@ -84,7 +84,7 @@ protected:
virtual void device_config_complete(); virtual void device_config_complete();
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
private: private:
UINT16 m_regs[TMS34061_REGCOUNT]; UINT16 m_regs[TMS34061_REGCOUNT];
UINT16 m_xmask; UINT16 m_xmask;
@ -96,7 +96,7 @@ private:
UINT8 * m_shiftreg; UINT8 * m_shiftreg;
emu_timer * m_timer; emu_timer * m_timer;
screen_device *m_screen; screen_device *m_screen;
void update_interrupts(void); void update_interrupts(void);
TIMER_CALLBACK_MEMBER( interrupt ); TIMER_CALLBACK_MEMBER( interrupt );
void register_w(address_space &space, offs_t offset, UINT8 data); void register_w(address_space &space, offs_t offset, UINT8 data);

View File

@ -1,7 +1,7 @@
/*************************************************************************** /***************************************************************************
audio/atarijsa.c audio/atarijsa.c
Functions to emulate the Atari "JSA" audio boards Functions to emulate the Atari "JSA" audio boards
**************************************************************************** ****************************************************************************
@ -37,31 +37,31 @@
**************************************************************************** ****************************************************************************
JSA I (stereo): used by: JSA I (stereo): used by:
* Blasteroids (YM2151 only) * Blasteroids (YM2151 only)
* Toobin' (YM2151 + POKEY) * Toobin' (YM2151 + POKEY)
* Vindicators (YM2151 + POKEY) * Vindicators (YM2151 + POKEY)
* Escape from the Planets of the Robot Monsters (YM2151 + TMS5220) * Escape from the Planets of the Robot Monsters (YM2151 + TMS5220)
JSA II (mono), used by: JSA II (mono), used by:
* Cyberball 2072 * Cyberball 2072
* STUN Runner * STUN Runner
* Skull & Crossbones * Skull & Crossbones
* ThunderJaws * ThunderJaws
* Hydra * Hydra
* Pit Fighter * Pit Fighter
JSA III (mono), used by: JSA III (mono), used by:
* Off the Wall (YM2151 only) * Off the Wall (YM2151 only)
* Batman * Batman
* Guardians of the 'Hood * Guardians of the 'Hood
* Road Riot 4WD * Road Riot 4WD
* Steel Talons * Steel Talons
JSA IIIs (stereo), used by: JSA IIIs (stereo), used by:
* Space Lords * Space Lords
* Moto Frenzy * Moto Frenzy
* Road Riot's Revenge Rally * Road Riot's Revenge Rally
**************************************************************************** ****************************************************************************
@ -127,14 +127,14 @@ extern const device_type ATARI_JSA_IIIS = &device_creator<atari_jsa_iiis_device>
static ADDRESS_MAP_START( atarijsa1_map, AS_PROGRAM, 8, atari_jsa_i_device ) static ADDRESS_MAP_START( atarijsa1_map, AS_PROGRAM, 8, atari_jsa_i_device )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_RANGE(0x0000, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x01f9) // N/C AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x01f9) // N/C
AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x01f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x01f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP
AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x01f9) AM_READ(rdio_r) // /RDIO AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x01f9) AM_READ(rdio_r) // /RDIO
AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x01f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x01f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK
AM_RANGE(0x2a00, 0x2a00) AM_MIRROR(0x01f9) AM_WRITE(tms5220_voice) // /VOICE AM_RANGE(0x2a00, 0x2a00) AM_MIRROR(0x01f9) AM_WRITE(tms5220_voice) // /VOICE
AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x01f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x01f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP
AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x01f9) AM_WRITE(wrio_w) // /WRIO AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x01f9) AM_WRITE(wrio_w) // /WRIO
AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x01f9) AM_WRITE(mix_w) // /MIX AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x01f9) AM_WRITE(mix_w) // /MIX
AM_RANGE(0x2c00, 0x2c0f) AM_MIRROR(0x03f0) AM_READWRITE(pokey_r, pokey_w) AM_RANGE(0x2c00, 0x2c0f) AM_MIRROR(0x03f0) AM_READWRITE(pokey_r, pokey_w)
AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank") AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank")
AM_RANGE(0x4000, 0xffff) AM_ROM AM_RANGE(0x4000, 0xffff) AM_ROM
@ -144,14 +144,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( atarijsa2_map, AS_PROGRAM, 8, atari_jsa_ii_device ) static ADDRESS_MAP_START( atarijsa2_map, AS_PROGRAM, 8, atari_jsa_ii_device )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_RANGE(0x0000, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x01f9) AM_READ(oki_r) // /RDV AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x01f9) AM_READ(oki_r) // /RDV
AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x01f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x01f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP
AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x01f9) AM_READ(rdio_r) // /RDIO AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x01f9) AM_READ(rdio_r) // /RDIO
AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x01f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x01f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK
AM_RANGE(0x2a00, 0x2a00) AM_MIRROR(0x01f9) AM_WRITE(oki_w) // /WRV AM_RANGE(0x2a00, 0x2a00) AM_MIRROR(0x01f9) AM_WRITE(oki_w) // /WRV
AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x01f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x01f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP
AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x01f9) AM_WRITE(wrio_w) // /WRIO AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x01f9) AM_WRITE(wrio_w) // /WRIO
AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x01f9) AM_WRITE(mix_w) // /MIX AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x01f9) AM_WRITE(mix_w) // /MIX
AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank") AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank")
AM_RANGE(0x4000, 0xffff) AM_ROM AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -161,14 +161,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( atarijsa3_map, AS_PROGRAM, 8, atari_jsa_iii_device ) static ADDRESS_MAP_START( atarijsa3_map, AS_PROGRAM, 8, atari_jsa_iii_device )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_RANGE(0x0000, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x07fe) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x07fe) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
AM_RANGE(0x2800, 0x2801) AM_MIRROR(0x05f8) AM_READWRITE(oki_r, overall_volume_w) // /RDV AM_RANGE(0x2800, 0x2801) AM_MIRROR(0x05f8) AM_READWRITE(oki_r, overall_volume_w) // /RDV
AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x05f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP AM_RANGE(0x2802, 0x2802) AM_MIRROR(0x05f9) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) // /RDP
AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x05f9) AM_READ(rdio_r) // /RDIO AM_RANGE(0x2804, 0x2804) AM_MIRROR(0x05f9) AM_READ(rdio_r) // /RDIO
AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x05f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK AM_RANGE(0x2806, 0x2806) AM_MIRROR(0x05f9) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_irq_ack_r, sound_irq_ack_w) // R/W=/IRQACK
AM_RANGE(0x2a00, 0x2a01) AM_MIRROR(0x05f8) AM_WRITE(oki_w) // /WRV AM_RANGE(0x2a00, 0x2a01) AM_MIRROR(0x05f8) AM_WRITE(oki_w) // /WRV
AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x05f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP AM_RANGE(0x2a02, 0x2a02) AM_MIRROR(0x05f9) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) // /WRP
AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x05f9) AM_WRITE(wrio_w) // /WRIO AM_RANGE(0x2a04, 0x2a04) AM_MIRROR(0x05f9) AM_WRITE(wrio_w) // /WRIO
AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x05f9) AM_WRITE(mix_w) // /MIX AM_RANGE(0x2a06, 0x2a06) AM_MIRROR(0x05f9) AM_WRITE(mix_w) // /MIX
AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank") AM_RANGE(0x3000, 0x3fff) AM_ROMBANK("cpubank")
AM_RANGE(0x4000, 0xffff) AM_ROM AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -342,7 +342,7 @@ void atari_jsa_base_device::device_start()
// resolve devices // resolve devices
m_test_read_cb.resolve_safe(0); m_test_read_cb.resolve_safe(0);
m_main_int_cb.resolve_safe(); m_main_int_cb.resolve_safe();
// save states // save states
save_item(NAME(m_ym2151_volume)); save_item(NAME(m_ym2151_volume));
save_item(NAME(m_ym2151_ct1)); save_item(NAME(m_ym2151_ct1));
@ -398,7 +398,7 @@ WRITE16_MEMBER( atari_jsa_base_device::sound_reset_w )
//------------------------------------------------- //-------------------------------------------------
// ym2151_port_w: Handle writes from the YM2151 // ym2151_port_w: Handle writes from the YM2151
// output port // output port
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_base_device::ym2151_port_w ) WRITE8_MEMBER( atari_jsa_base_device::ym2151_port_w )
@ -411,7 +411,7 @@ WRITE8_MEMBER( atari_jsa_base_device::ym2151_port_w )
//------------------------------------------------- //-------------------------------------------------
// main_test_read_line: Return the state of the // main_test_read_line: Return the state of the
// main's test line, provided by a callback // main's test line, provided by a callback
//------------------------------------------------- //-------------------------------------------------
READ_LINE_MEMBER(atari_jsa_base_device::main_test_read_line) READ_LINE_MEMBER(atari_jsa_base_device::main_test_read_line)
@ -422,7 +422,7 @@ READ_LINE_MEMBER(atari_jsa_base_device::main_test_read_line)
//------------------------------------------------- //-------------------------------------------------
// main_int_write_line: Forward interrupt signals // main_int_write_line: Forward interrupt signals
// from the comm device to the owning callback // from the comm device to the owning callback
//------------------------------------------------- //-------------------------------------------------
WRITE_LINE_MEMBER( atari_jsa_base_device::main_int_write_line ) WRITE_LINE_MEMBER( atari_jsa_base_device::main_int_write_line )
@ -456,7 +456,7 @@ atari_jsa_oki_base_device::atari_jsa_oki_base_device(const machine_config &mconf
//------------------------------------------------- //-------------------------------------------------
// oki_r: Handle reads from the OKI chip(s) // oki_r: Handle reads from the OKI chip(s)
// on the JSA II, III, and IIIs boards // on the JSA II, III, and IIIs boards
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( atari_jsa_oki_base_device::oki_r ) READ8_MEMBER( atari_jsa_oki_base_device::oki_r )
@ -465,7 +465,7 @@ READ8_MEMBER( atari_jsa_oki_base_device::oki_r )
if (m_oki2 != NULL && offset == 1) if (m_oki2 != NULL && offset == 1)
return m_oki2->read(space, offset); return m_oki2->read(space, offset);
// OKI may not be populated at all // OKI may not be populated at all
else if (m_oki1 != NULL) else if (m_oki1 != NULL)
return m_oki1->read(space, offset); return m_oki1->read(space, offset);
@ -476,7 +476,7 @@ READ8_MEMBER( atari_jsa_oki_base_device::oki_r )
//------------------------------------------------- //-------------------------------------------------
// oki_w: Handle writes to the OKI chip(s) // oki_w: Handle writes to the OKI chip(s)
// on the JSA II, III, and IIIs boards // on the JSA II, III, and IIIs boards
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_oki_base_device::oki_w ) WRITE8_MEMBER( atari_jsa_oki_base_device::oki_w )
@ -485,7 +485,7 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::oki_w )
if (m_oki2 != NULL && offset == 1) if (m_oki2 != NULL && offset == 1)
m_oki2->write(space, offset, data); m_oki2->write(space, offset, data);
// OKI may not be populated at all // OKI may not be populated at all
else if (m_oki1 != NULL) else if (m_oki1 != NULL)
m_oki1->write(space, offset, data); m_oki1->write(space, offset, data);
} }
@ -493,7 +493,7 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::oki_w )
//------------------------------------------------- //-------------------------------------------------
// wrio_w: Handle writes to the general // wrio_w: Handle writes to the general
// I/O port on JSA II, III, and IIIs boards // I/O port on JSA II, III, and IIIs boards
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_oki_base_device::wrio_w ) WRITE8_MEMBER( atari_jsa_oki_base_device::wrio_w )
@ -522,7 +522,7 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::wrio_w )
if ((data & 4) == 0) if ((data & 4) == 0)
m_oki1->reset(); m_oki1->reset();
} }
// same for the 2nd OKI (JSA IIIs only) // same for the 2nd OKI (JSA IIIs only)
if (m_oki2 != NULL) if (m_oki2 != NULL)
{ {
@ -530,7 +530,7 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::wrio_w )
if ((data & 4) == 0) if ((data & 4) == 0)
m_oki2->reset(); m_oki2->reset();
} }
// update the (left) OKI bank (JSA III/IIIs only) // update the (left) OKI bank (JSA III/IIIs only)
if (m_oki1_banklo != NULL) if (m_oki1_banklo != NULL)
m_oki1_banklo->set_entry((m_oki1_banklo->entry() & 2) | ((data >> 1) & 1)); m_oki1_banklo->set_entry((m_oki1_banklo->entry() & 2) | ((data >> 1) & 1));
@ -543,7 +543,7 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::wrio_w )
//------------------------------------------------- //-------------------------------------------------
// mix_w: Handle writes to the mixing // mix_w: Handle writes to the mixing
// register on JSA II, III, and IIIs boards // register on JSA II, III, and IIIs boards
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_oki_base_device::mix_w ) WRITE8_MEMBER( atari_jsa_oki_base_device::mix_w )
@ -572,8 +572,8 @@ WRITE8_MEMBER( atari_jsa_oki_base_device::mix_w )
//------------------------------------------------- //-------------------------------------------------
// overall_volume_w: Handle writes to control the // overall_volume_w: Handle writes to control the
// total sound volume on JSA III/IIIs boards // total sound volume on JSA III/IIIs boards
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_oki_base_device::overall_volume_w ) WRITE8_MEMBER( atari_jsa_oki_base_device::overall_volume_w )
@ -591,7 +591,7 @@ void atari_jsa_oki_base_device::device_start()
{ {
// call the parent // call the parent
atari_jsa_base_device::device_start(); atari_jsa_base_device::device_start();
// save states // save states
save_item(NAME(m_oki6295_volume)); save_item(NAME(m_oki6295_volume));
save_item(NAME(m_overall_volume)); save_item(NAME(m_overall_volume));
@ -622,7 +622,7 @@ void atari_jsa_oki_base_device::device_reset()
{ {
// call the parent // call the parent
atari_jsa_base_device::device_reset(); atari_jsa_base_device::device_reset();
// reset the static states // reset the static states
m_oki6295_volume = 1.0; m_oki6295_volume = 1.0;
m_overall_volume = 1.0; m_overall_volume = 1.0;
@ -631,8 +631,8 @@ void atari_jsa_oki_base_device::device_reset()
//------------------------------------------------- //-------------------------------------------------
// update_all_volumes: Update volumes for all // update_all_volumes: Update volumes for all
// chips // chips
//------------------------------------------------- //-------------------------------------------------
void atari_jsa_oki_base_device::update_all_volumes() void atari_jsa_oki_base_device::update_all_volumes()
@ -666,7 +666,7 @@ atari_jsa_i_device::atari_jsa_i_device(const machine_config &mconfig, const char
//------------------------------------------------- //-------------------------------------------------
// rdio_r: Handle reads from the general I/O // rdio_r: Handle reads from the general I/O
// port on a JSA I board // port on a JSA I board
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( atari_jsa_i_device::rdio_r ) READ8_MEMBER( atari_jsa_i_device::rdio_r )
@ -689,14 +689,14 @@ READ8_MEMBER( atari_jsa_i_device::rdio_r )
result |= 0x10; result |= 0x10;
else else
result &= ~0x10; result &= ~0x10;
return result; return result;
} }
//------------------------------------------------- //-------------------------------------------------
// wrio_w: Handle writes to the general I/O // wrio_w: Handle writes to the general I/O
// port on a JSA I board // port on a JSA I board
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_i_device::wrio_w ) WRITE8_MEMBER( atari_jsa_i_device::wrio_w )
@ -734,8 +734,8 @@ WRITE8_MEMBER( atari_jsa_i_device::wrio_w )
//------------------------------------------------- //-------------------------------------------------
// mix_w: Handle writes to the mixing register // mix_w: Handle writes to the mixing register
// on a JSA I board // on a JSA I board
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_i_device::mix_w ) WRITE8_MEMBER( atari_jsa_i_device::mix_w )
@ -756,7 +756,7 @@ WRITE8_MEMBER( atari_jsa_i_device::mix_w )
//------------------------------------------------- //-------------------------------------------------
// tms5220_voice: Handle writes to the TMS5220 // tms5220_voice: Handle writes to the TMS5220
// voice data register // voice data register
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_i_device::tms5220_voice ) WRITE8_MEMBER( atari_jsa_i_device::tms5220_voice )
@ -768,7 +768,7 @@ WRITE8_MEMBER( atari_jsa_i_device::tms5220_voice )
//------------------------------------------------- //-------------------------------------------------
// pokey_r: Handle reads from the POKEY if // pokey_r: Handle reads from the POKEY if
// present // present
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( atari_jsa_i_device::pokey_r ) READ8_MEMBER( atari_jsa_i_device::pokey_r )
@ -781,7 +781,7 @@ READ8_MEMBER( atari_jsa_i_device::pokey_r )
//------------------------------------------------- //-------------------------------------------------
// pokey_w: Handle writes to the POKEY if // pokey_w: Handle writes to the POKEY if
// present // present
//------------------------------------------------- //-------------------------------------------------
WRITE8_MEMBER( atari_jsa_i_device::pokey_w ) WRITE8_MEMBER( atari_jsa_i_device::pokey_w )
@ -821,7 +821,7 @@ void atari_jsa_i_device::device_start()
{ {
// call the parent // call the parent
atari_jsa_base_device::device_start(); atari_jsa_base_device::device_start();
// save states // save states
save_item(NAME(m_pokey_volume)); save_item(NAME(m_pokey_volume));
save_item(NAME(m_tms5220_volume)); save_item(NAME(m_tms5220_volume));
@ -836,7 +836,7 @@ void atari_jsa_i_device::device_reset()
{ {
// call the parent // call the parent
atari_jsa_base_device::device_reset(); atari_jsa_base_device::device_reset();
// reset the static states // reset the static states
m_pokey_volume = 1.0; m_pokey_volume = 1.0;
m_tms5220_volume = 1.0; m_tms5220_volume = 1.0;
@ -845,8 +845,8 @@ void atari_jsa_i_device::device_reset()
//------------------------------------------------- //-------------------------------------------------
// update_all_volumes: Update volumes for all // update_all_volumes: Update volumes for all
// chips // chips
//------------------------------------------------- //-------------------------------------------------
void atari_jsa_i_device::update_all_volumes() void atari_jsa_i_device::update_all_volumes()
@ -876,7 +876,7 @@ atari_jsa_ii_device::atari_jsa_ii_device(const machine_config &mconfig, const ch
//------------------------------------------------- //-------------------------------------------------
// rdio_r: Handle reads from the general I/O // rdio_r: Handle reads from the general I/O
// port on a JSA II board // port on a JSA II board
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( atari_jsa_ii_device::rdio_r ) READ8_MEMBER( atari_jsa_ii_device::rdio_r )
@ -895,7 +895,7 @@ READ8_MEMBER( atari_jsa_ii_device::rdio_r )
UINT8 result = ioport("JSAII")->read(); UINT8 result = ioport("JSAII")->read();
if (!m_test_read_cb()) if (!m_test_read_cb())
result ^= 0x80; result ^= 0x80;
return result; return result;
} }
@ -944,7 +944,7 @@ atari_jsa_iii_device::atari_jsa_iii_device(const machine_config &mconfig, device
//------------------------------------------------- //-------------------------------------------------
// jsa_iii_rdio: Handle reads from the general I/O // jsa_iii_rdio: Handle reads from the general I/O
// port on a JSA III/IIIs board // port on a JSA III/IIIs board
//------------------------------------------------- //-------------------------------------------------
READ8_MEMBER( atari_jsa_iii_device::rdio_r ) READ8_MEMBER( atari_jsa_iii_device::rdio_r )

View File

@ -1,7 +1,7 @@
/*************************************************************************** /***************************************************************************
audio/atarijsa.h audio/atarijsa.h
Functions to emulate the Atari "JSA" audio boards Functions to emulate the Atari "JSA" audio boards
**************************************************************************** ****************************************************************************
@ -83,8 +83,7 @@ extern const device_type ATARI_JSA_IIIS;
#define MCFG_ATARI_JSA_TEST_PORT(_port, _bitnum) \ #define MCFG_ATARI_JSA_TEST_PORT(_port, _bitnum) \
devcb = &atari_jsa_base_device::static_set_test_read_cb(*device, DEVCB2_IOPORT(_port)); \ devcb = &atari_jsa_base_device::static_set_test_read_cb(*device, DEVCB2_IOPORT(_port)); \
MCFG_DEVCB_RSHIFT(_bitnum); \ MCFG_DEVCB_RSHIFT(_bitnum);
//************************************************************************** //**************************************************************************
@ -105,7 +104,7 @@ extern const device_type ATARI_JSA_IIIS;
// ======================> atari_jsa_base_device // ======================> atari_jsa_base_device
class atari_jsa_base_device : public device_t, class atari_jsa_base_device : public device_t,
public device_mixer_interface public device_mixer_interface
{ {
protected: protected:
@ -126,7 +125,7 @@ public:
DECLARE_WRITE8_MEMBER(main_command_w); DECLARE_WRITE8_MEMBER(main_command_w);
DECLARE_READ8_MEMBER(main_response_r); DECLARE_READ8_MEMBER(main_response_r);
DECLARE_WRITE16_MEMBER(sound_reset_w); DECLARE_WRITE16_MEMBER(sound_reset_w);
// read/write handlers // read/write handlers
DECLARE_WRITE8_MEMBER(ym2151_port_w); DECLARE_WRITE8_MEMBER(ym2151_port_w);
DECLARE_READ_LINE_MEMBER(main_test_read_line); DECLARE_READ_LINE_MEMBER(main_test_read_line);
@ -138,7 +137,7 @@ protected:
// device-level overrides // device-level overrides
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
// internal helpers // internal helpers
virtual void update_all_volumes() = 0; virtual void update_all_volumes() = 0;
@ -146,18 +145,18 @@ protected:
required_device<atari_sound_comm_device> m_soundcomm; required_device<atari_sound_comm_device> m_soundcomm;
required_device<m6502_device> m_jsacpu; required_device<m6502_device> m_jsacpu;
required_device<ym2151_device> m_ym2151; required_device<ym2151_device> m_ym2151;
// memory banks // memory banks
required_memory_bank m_cpu_bank; required_memory_bank m_cpu_bank;
// configuration state // configuration state
devcb2_read_line m_test_read_cb; devcb2_read_line m_test_read_cb;
devcb2_write_line m_main_int_cb; devcb2_write_line m_main_int_cb;
// internal state // internal state
double m_ym2151_volume; double m_ym2151_volume;
UINT8 m_ym2151_ct1; UINT8 m_ym2151_ct1;
UINT8 m_ym2151_ct2; UINT8 m_ym2151_ct2;
}; };
@ -187,17 +186,17 @@ protected:
// devices // devices
optional_device<okim6295_device> m_oki1; optional_device<okim6295_device> m_oki1;
optional_device<okim6295_device> m_oki2; // JSA IIIs only optional_device<okim6295_device> m_oki2; // JSA IIIs only
// memory banks // memory banks
optional_memory_bank m_oki1_banklo; // JSA III(s) only optional_memory_bank m_oki1_banklo; // JSA III(s) only
optional_memory_bank m_oki1_bankhi; // JSA III(s) optional_memory_bank m_oki1_bankhi; // JSA III(s)
optional_memory_bank m_oki2_banklo; // JSA IIIs only optional_memory_bank m_oki2_banklo; // JSA IIIs only
optional_memory_bank m_oki2_bankhi; // JSA IIIs only optional_memory_bank m_oki2_bankhi; // JSA IIIs only
// internal state // internal state
double m_oki6295_volume; double m_oki6295_volume;
double m_overall_volume; // JSA III(s) only double m_overall_volume; // JSA III(s) only
}; };
@ -223,7 +222,7 @@ protected:
virtual ioport_constructor device_input_ports() const; virtual ioport_constructor device_input_ports() const;
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
// internal helpers // internal helpers
virtual void update_all_volumes(); virtual void update_all_volumes();
@ -231,9 +230,9 @@ protected:
optional_device<pokey_device> m_pokey; optional_device<pokey_device> m_pokey;
optional_device<tms5220_device> m_tms5220; optional_device<tms5220_device> m_tms5220;
// internal state // internal state
double m_pokey_volume; double m_pokey_volume;
double m_tms5220_volume; double m_tms5220_volume;
}; };

View File

@ -82,7 +82,7 @@ beezer_sound_device::beezer_sound_device(const machine_config &mconfig, const ch
m_sh6840_noiselatch1(0), m_sh6840_noiselatch1(0),
m_sh6840_noiselatch3(0), m_sh6840_noiselatch3(0),
m_stream(NULL)/*, m_stream(NULL)/*,
m_freq_to_step(0)*/ m_freq_to_step(0)*/
{ {
memset(m_sh6840_timer, 0, sizeof(m_sh6840_timer)); memset(m_sh6840_timer, 0, sizeof(m_sh6840_timer));
m_sh6840_volume[0] = 0; m_sh6840_volume[0] = 0;
@ -477,4 +477,4 @@ void beezer_sound_device::sound_stream_update(sound_stream &stream, stream_sampl
sample += (((sample3*0x80)^(m_sh6840_volume[3]&0x80))?-1:1)*(m_sh6840_volume[3]&0x7F); sample += (((sample3*0x80)^(m_sh6840_volume[3]&0x80))?-1:1)*(m_sh6840_volume[3]&0x7F);
*buffer++ = sample*64; // adding 4 numbers ranging from -128 to 127 yields a range of -512 to 508; to scale that to '-32768 to 32767' we multiply by 64 *buffer++ = sample*64; // adding 4 numbers ranging from -128 to 127 yields a range of -512 to 508; to scale that to '-32768 to 32767' we multiply by 64
} }
} }

View File

@ -44,10 +44,10 @@ public:
DECLARE_READ8_MEMBER( m6844_r ); DECLARE_READ8_MEMBER( m6844_r );
DECLARE_WRITE8_MEMBER( m6844_w ); DECLARE_WRITE8_MEMBER( m6844_w );
DECLARE_WRITE8_MEMBER( sound_banks_w ); DECLARE_WRITE8_MEMBER( sound_banks_w );
void exidy440_sound_command(UINT8 param); void exidy440_sound_command(UINT8 param);
UINT8 exidy440_sound_command_ack(); UINT8 exidy440_sound_command_ack();
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -86,7 +86,7 @@ private:
/* channel frequency is configurable */ /* channel frequency is configurable */
int m_channel_frequency[4]; int m_channel_frequency[4];
void m6844_update(); void m6844_update();
void m6844_finished(m6844_channel_data *channel); void m6844_finished(m6844_channel_data *channel);
void play_cvsd(int ch); void play_cvsd(int ch);
@ -98,7 +98,7 @@ private:
void decode_and_filter_cvsd(UINT8 *data, int bytes, int maskbits, int frequency, INT16 *dest); void decode_and_filter_cvsd(UINT8 *data, int bytes, int maskbits, int frequency, INT16 *dest);
void fir_filter(INT32 *input, INT16 *output, int count); void fir_filter(INT32 *input, INT16 *output, int count);
void add_and_scale_samples(int ch, INT32 *dest, int samples, int volume); void add_and_scale_samples(int ch, INT32 *dest, int samples, int volume);
void mix_to_16(int length, stream_sample_t *dest_left, stream_sample_t *dest_right); void mix_to_16(int length, stream_sample_t *dest_left, stream_sample_t *dest_right);
}; };

View File

@ -9,12 +9,12 @@ public:
DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( write );
DECLARE_READ8_MEMBER( busy_r ); DECLARE_READ8_MEMBER( busy_r );
WRITE8_MEMBER( msm_data_w ); WRITE8_MEMBER( msm_data_w );
READ8_MEMBER( msm_vck_r ); READ8_MEMBER( msm_vck_r );
READ8_MEMBER( ready_r ); READ8_MEMBER( ready_r );
READ8_MEMBER( data_r ); READ8_MEMBER( data_r );
void vck_callback( int st ); void vck_callback( int st );
protected: protected:

View File

@ -18,7 +18,7 @@ public:
DECLARE_WRITE8_MEMBER( sound_irq_ack_w ); DECLARE_WRITE8_MEMBER( sound_irq_ack_w );
DECLARE_WRITE8_MEMBER( m52_adpcm_w ); DECLARE_WRITE8_MEMBER( m52_adpcm_w );
DECLARE_WRITE8_MEMBER( m62_adpcm_w ); DECLARE_WRITE8_MEMBER( m62_adpcm_w );
void adpcm_int(int st); void adpcm_int(int st);
protected: protected:
@ -31,8 +31,8 @@ protected:
private: private:
// internal state // internal state
UINT8 m_port1; UINT8 m_port1;
UINT8 m_port2; UINT8 m_port2;
ay8910_device *m_ay1; ay8910_device *m_ay1;
ay8910_device *m_ay2; ay8910_device *m_ay2;

View File

@ -21,7 +21,7 @@ public:
Z80_ASSERT, Z80_ASSERT,
Z80_CLEAR Z80_CLEAR
}; };
WRITE_LINE_MEMBER( ym2151_irq_handler ); WRITE_LINE_MEMBER( ym2151_irq_handler );
DECLARE_WRITE8_MEMBER( sound_command_byte_w ); DECLARE_WRITE8_MEMBER( sound_command_byte_w );
DECLARE_WRITE16_MEMBER( sound_command_w ); DECLARE_WRITE16_MEMBER( sound_command_w );
@ -44,7 +44,7 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
private: private:
// internal state // internal state
UINT8 m_irqvector; UINT8 m_irqvector;
@ -53,7 +53,7 @@ private:
UINT32 m_samples_size; UINT32 m_samples_size;
address_space *m_space; address_space *m_space;
dac_device *m_dac; dac_device *m_dac;
TIMER_CALLBACK_MEMBER( setvector_callback ); TIMER_CALLBACK_MEMBER( setvector_callback );
}; };

View File

@ -206,7 +206,7 @@ int phoenix_sound_device::noise(int samplerate)
int vc24 = update_c24(samplerate); int vc24 = update_c24(samplerate);
int vc25 = update_c25(samplerate); int vc25 = update_c25(samplerate);
int sum = 0, level, frequency; int sum = 0, level, frequency;
/* /*
* The voltage levels are added and control I(CE) of transistor TR1 * The voltage levels are added and control I(CE) of transistor TR1
* (NPN) which then controls the noise clock frequency (linearily?). * (NPN) which then controls the noise clock frequency (linearily?).

View File

@ -12,7 +12,7 @@ public:
DECLARE_WRITE8_MEMBER( sh_irqtrigger_w ); DECLARE_WRITE8_MEMBER( sh_irqtrigger_w );
DECLARE_WRITE8_MEMBER( filter_w ); DECLARE_WRITE8_MEMBER( filter_w );
DECLARE_READ8_MEMBER( portB_r ); DECLARE_READ8_MEMBER( portB_r );
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -32,7 +32,7 @@ private:
device_t *m_filter_1_0; device_t *m_filter_1_0;
device_t *m_filter_1_1; device_t *m_filter_1_1;
device_t *m_filter_1_2; device_t *m_filter_1_2;
void filter_w( device_t *device, int data ); void filter_w( device_t *device, int data );
}; };

View File

@ -25,7 +25,7 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
private: private:
// internal state // internal state
int m_last_addr; int m_last_addr;

View File

@ -496,7 +496,7 @@ WRITE8_MEMBER( buggyboy_sound_device::ym2_b_w )
void buggyboy_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) void buggyboy_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{ {
/* This is admittedly a bit of a hack job... */ /* This is admittedly a bit of a hack job... */
UINT32 step_0, step_1; UINT32 step_0, step_1;
int n1_en, n2_en; int n1_en, n2_en;
double gain0, gain1_l, gain1_r; double gain0, gain1_l, gain1_r;
@ -572,4 +572,4 @@ void buggyboy_sound_device::sound_stream_update(sound_stream &stream, stream_sam
m_step0 += step_0; m_step0 += step_0;
m_step1 += step_1; m_step1 += step_1;
} }
} }

View File

@ -20,7 +20,7 @@ public:
~wiping_sound_device() {} ~wiping_sound_device() {}
DECLARE_WRITE8_MEMBER( sound_w ); DECLARE_WRITE8_MEMBER( sound_w );
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
@ -49,7 +49,7 @@ private:
short *m_mixer_buffer_2; short *m_mixer_buffer_2;
UINT8 m_soundregs[0x4000]; UINT8 m_soundregs[0x4000];
void make_mixer_table(int voices, int gain); void make_mixer_table(int voices, int gain);
}; };

View File

@ -530,7 +530,7 @@ MACHINE_CONFIG_END
ROM_REGION( 0x600, "gals", 0 ) \ ROM_REGION( 0x600, "gals", 0 ) \
ROM_LOAD( "a562837.u36", 0x000000, 0x000157, CRC(1f269234) SHA1(29940dd50fb55c632935f62ff44ca724379c7a43) ) \ ROM_LOAD( "a562837.u36", 0x000000, 0x000157, CRC(1f269234) SHA1(29940dd50fb55c632935f62ff44ca724379c7a43) ) \
ROM_LOAD( "a562838.u65", 0x000200, 0x000157, CRC(f2f3c40a) SHA1(b795dfa5cc4e8127c3f3a0906664910d1325ec92) ) \ ROM_LOAD( "a562838.u65", 0x000200, 0x000157, CRC(f2f3c40a) SHA1(b795dfa5cc4e8127c3f3a0906664910d1325ec92) ) \
ROM_LOAD( "a562840.u22", 0x000400, 0x000157, CRC(941d4cdb) SHA1(1ca091fba69e92f262dbb3d40f515703c8981793) ) ROM_LOAD( "a562840.u22", 0x000400, 0x000157, CRC(941d4cdb) SHA1(1ca091fba69e92f262dbb3d40f515703c8981793) )
ROM_START( aristmk5 ) ROM_START( aristmk5 )
ARISTOCRAT_MK5_BIOS ARISTOCRAT_MK5_BIOS

View File

@ -53,7 +53,7 @@ PCB Layout
Note an original Taito Arkanoid PCB is approximately 10" square and is Note an original Taito Arkanoid PCB is approximately 10" square and is
painted white. The copper traces are not visible. The part type and painted white. The copper traces are not visible. The part type and
location of each component is printed in green on the PCB on top of the location of each component is printed in green on the PCB on top of the
white paint. white paint.
The following MCU images were tested on an original Arkanoid PCB using sets The following MCU images were tested on an original Arkanoid PCB using sets
@ -61,13 +61,13 @@ The following MCU images were tested on an original Arkanoid PCB using sets
(1) MCU image with CRC 0x389a8cfb (1) MCU image with CRC 0x389a8cfb
(2) MCU image with CRC 0x515d77b6 (2) MCU image with CRC 0x515d77b6
An MCU found on a Tournament Arkanoid PCB was an unprotected type MC68705P3 An MCU found on a Tournament Arkanoid PCB was an unprotected type MC68705P3
and when read the CRC matched (1). So we can assume the MCUs for Arkanoid and and when read the CRC matched (1). So we can assume the MCUs for Arkanoid and
Tournament Arkanoid are the same.... or are at least interchangeable and work. Tournament Arkanoid are the same.... or are at least interchangeable and work.
"Tetris (D.R. Korea)" in MAME is a hack on an original Arkanoid PCB. "Tetris (D.R. Korea)" in MAME is a hack on an original Arkanoid PCB.
The hack can be undone and returned to Arkanoid simply by removing the mod The hack can be undone and returned to Arkanoid simply by removing the mod
wires on the YM2149, replacing the ROMs with Arkanoid ROMs and replacing wires on the YM2149, replacing the ROMs with Arkanoid ROMs and replacing
the PC030CM which was removed. A working Arkanoid 68705 MCU is also required. the PC030CM which was removed. A working Arkanoid 68705 MCU is also required.
The above 'tested' images can be used. The above 'tested' images can be used.
@ -110,7 +110,7 @@ K1100181A (ROMSTAR version added sticker)
Notes: Notes:
Z80 - Zilog Z0840006 CPU. Clock input 6.000MHz (12/2) Z80 - Zilog Z0840006 CPU. Clock input 6.000MHz (12/2)
YM2149F - Yamaha YM2149F software-controlled sound generator (SSG). Clock input 1.5MHz (12/8) YM2149F - Yamaha YM2149F software-controlled sound generator (SSG). Clock input 1.5MHz (12/8)
A75_06.IC14 - Motorola MC68705P5 micro-controller. Clock input 3.000MHz (12/4). Labelled 'A75 06' for A75_06.IC14 - Motorola MC68705P5 micro-controller. Clock input 3.000MHz (12/4). Labelled 'A75 06' for
ROMSTAR version. Note original Taito version 68705 and Tournament Arkanoid MCUs work fine. ROMSTAR version. Note original Taito version 68705 and Tournament Arkanoid MCUs work fine.
A75_* - 27C256 EPROMs labelled 'A75 xx'. xx = 01, 03, 04, 05 etc. See ROM loading in the src for exact ROM usage. A75_* - 27C256 EPROMs labelled 'A75 xx'. xx = 01, 03, 04, 05 etc. See ROM loading in the src for exact ROM usage.
A75-0* - MMI 63S241 bipolar PROMs. Compatible with MB7116, 7621, DM74S571N etc A75-0* - MMI 63S241 bipolar PROMs. Compatible with MB7116, 7621, DM74S571N etc
@ -126,8 +126,8 @@ Notes:
Note the G connector is the 22-way edge connector. Note the G connector is the 22-way edge connector.
The Japanese manual states (translated to English)..... The Japanese manual states (translated to English).....
******** ********
The coin-SW of this Main PC Board does not work without wiring coin meter to The coin-SW of this Main PC Board does not work without wiring coin meter to
coin meter pins of the G-connector. coin meter pins of the G-connector.
You need to modify as follows in case coin meter is not connected to Main PC Board. You need to modify as follows in case coin meter is not connected to Main PC Board.
Coin System A ..... Wire jumper JP4 on Main PC Board. Coin meter not used. Coin System A ..... Wire jumper JP4 on Main PC Board. Coin meter not used.
Coin System B ..... Wire jumper JP3 on Main PC Board. Coin meter used. Coin System B ..... Wire jumper JP3 on Main PC Board. Coin meter used.
@ -137,8 +137,8 @@ Notes:
-------------- --------------
HSync - 15.625kHz HSync - 15.625kHz
VSync - 59.185Hz VSync - 59.185Hz
POWER connector H POWER connector H
----------------- -----------------
1 Ground 1 Ground
@ -153,8 +153,8 @@ Notes:
10 Post 10 Post
11 NC 11 NC
12 NC 12 NC
22-way edge connector G 22-way edge connector G
----------------------- -----------------------
@ -188,9 +188,9 @@ COIN LOCKOUT (A) |10 L | COIN LOCKOUT (B)
Note about spinner controller Note about spinner controller
----------------------------- -----------------------------
This game requires a geared spinner to operate correctly. A trackball or other optical This game requires a geared spinner to operate correctly. A trackball or other optical
controller or home-made spinner built from a PC mouse will work but the player moves too controller or home-made spinner built from a PC mouse will work but the player moves too
slowly and the game is unplayable. The Taito geared spinner moves the optical wheel *very* slowly and the game is unplayable. The Taito geared spinner moves the optical wheel *very*
fast to ensure the player moves fast enough to follow and return the ball easily. The ratio of fast to ensure the player moves fast enough to follow and return the ball easily. The ratio of
the control knob rotation to the optical wheel rotation is 1:20 so for one rotation of the the control knob rotation to the optical wheel rotation is 1:20 so for one rotation of the
control knob the optical wheel rotates 20 times. control knob the optical wheel rotates 20 times.
@ -202,14 +202,14 @@ Pin 2 - +5V
Pin 3 - Ground Pin 3 - Ground
Pin 4 - Right Pin 4 - Right
These pins are listed from the Japanese Taito manual and have been tested to be correct with These pins are listed from the Japanese Taito manual and have been tested to be correct with
the real Taito Arkanoid spinner. the real Taito Arkanoid spinner.
The US ROMSTAR manual lists pin 4 as left and pin 1 as right. This information is probably The US ROMSTAR manual lists pin 4 as left and pin 1 as right. This information is probably
incorrect. Pins 2 and 3 are the same. incorrect. Pins 2 and 3 are the same.
Spinner PCB Layout Spinner PCB Layout
------------------ ------------------
J9000024A J9000024A
K9000060A K9000060A
|-----------| |-----------|
| OPTO | | OPTO |
@ -224,7 +224,7 @@ Notes:
POWER - Power input connector. Pin 1 is on the right. POWER - Power input connector. Pin 1 is on the right.
S - Screw positions to show orientation of the PCB with reference to the power connector pin 1 S - Screw positions to show orientation of the PCB with reference to the power connector pin 1
DIP Switches DIP Switches
+-----------------------------+--------------------------------+ +-----------------------------+--------------------------------+
|FACTORY DEFAULT = * | 1 2 3 4 5 6 7 8 | |FACTORY DEFAULT = * | 1 2 3 4 5 6 7 8 |

View File

@ -251,8 +251,8 @@ static INPUT_PORTS_START( hydra )
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(16) PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(16)
// todo: // todo:
// PORT_MODIFY( "jsa:JSAII" ) // PORT_MODIFY( "jsa:JSAII" )
// PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
@ -296,8 +296,8 @@ static INPUT_PORTS_START( pitfight )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
// todo: // todo:
// PORT_MODIFY( "jsa:JSAII" ) // PORT_MODIFY( "jsa:JSAII" )
// PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
@ -334,8 +334,8 @@ static INPUT_PORTS_START( pitfightj )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
// todo: // todo:
// PORT_MODIFY( "jsa:JSAII" ) // PORT_MODIFY( "jsa:JSAII" )
// PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
@ -466,7 +466,7 @@ static MACHINE_CONFIG_START( atarig1, atarig1_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_ATARI_JSA_II_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line)) MCFG_ATARI_JSA_II_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("IN0", 14) MCFG_ATARI_JSA_TEST_PORT("IN0", 14)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)

View File

@ -571,7 +571,7 @@ static MACHINE_CONFIG_START( atarig42, atarig42_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line)) MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("IN2", 6) MCFG_ATARI_JSA_TEST_PORT("IN2", 6)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)

View File

@ -1435,7 +1435,7 @@ static MACHINE_CONFIG_START( atarigx2, atarigx2_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_ATARI_JSA_IIIS_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line)) MCFG_ATARI_JSA_IIIS_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("SERVICE", 6) MCFG_ATARI_JSA_TEST_PORT("SERVICE", 6)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)

View File

@ -222,7 +222,7 @@ static MACHINE_CONFIG_START( batman, batman_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line)) MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("260010", 6) MCFG_ATARI_JSA_TEST_PORT("260010", 6)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)

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