mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
Cleanups and version bump.
This commit is contained in:
parent
1855238186
commit
5a162da3d4
@ -7876,7 +7876,7 @@ static int select_search_region_menu(running_machine *machine, cheat_menu_stack
|
||||
else
|
||||
{
|
||||
|
||||
/* in case of no search region */
|
||||
/* in case of no search region */
|
||||
menu_item[total] = "No Search Region";
|
||||
menu_sub_item[total++] = NULL;
|
||||
}
|
||||
@ -11128,7 +11128,7 @@ static UINT32 read_region_data(search_region *region, UINT32 offset, UINT8 size,
|
||||
UINT8 *buf = (UINT8 *)region->cached_pointer;
|
||||
|
||||
if(buf)
|
||||
// return do_memory_read(region->cached_pointer, address, size, swap, &raw_cpu_info);
|
||||
// return do_memory_read(region->cached_pointer, address, size, swap, &raw_cpu_info);
|
||||
return do_memory_read(buf, address, size, cpu_needs_swap(region->target_idx) ^ swap, get_cpu_info(region->target_idx));
|
||||
else
|
||||
return 0;
|
||||
|
@ -14,8 +14,8 @@
|
||||
TODO:
|
||||
|
||||
- when is the microbus int cleared?
|
||||
- CKO sync input
|
||||
- save internal RAM when CKO is RAM power supply pin
|
||||
- CKO sync input
|
||||
- save internal RAM when CKO is RAM power supply pin
|
||||
- run interrupt test suite
|
||||
- run production test suite
|
||||
- run microbus test suite
|
||||
|
@ -436,7 +436,7 @@ static void drcbec_generate(drcbe_state *drcbe, drcuml_block *block, const drcum
|
||||
dst->inst = (drcbec_instruction *)drclabel_get_codeptr(drcbe->labels, inst->param[0].value, fixup_label, dst);
|
||||
dst++;
|
||||
break;
|
||||
|
||||
|
||||
/* generically handle everything else */
|
||||
default:
|
||||
|
||||
|
@ -19,11 +19,11 @@
|
||||
* Identify common pairs and optimize output
|
||||
|
||||
* Convert AND 0xff/0xffff to movzx
|
||||
|
||||
|
||||
* Convert SUB a,0,b to NEG
|
||||
|
||||
|
||||
* Optimize, e.g., and [r5],i0,$FF to use rbx as temporary register
|
||||
(avoid initial move) if i0 is not needed going forward
|
||||
(avoid initial move) if i0 is not needed going forward
|
||||
|
||||
****************************************************************************
|
||||
|
||||
@ -1240,7 +1240,7 @@ static void emit_mov_r32_p32(drcbe_state *drcbe, x86code **dst, UINT8 reg, const
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
emit_mov_r32_p32_keepflags - move a 32-bit
|
||||
emit_mov_r32_p32_keepflags - move a 32-bit
|
||||
parameter into a register without affecting
|
||||
any flags
|
||||
-------------------------------------------------*/
|
||||
@ -1995,7 +1995,7 @@ static void emit_mov_r64_p64(drcbe_state *drcbe, x86code **dst, UINT8 reg, const
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
emit_mov_r64_p64_keepflags - move a 64-bit
|
||||
emit_mov_r64_p64_keepflags - move a 64-bit
|
||||
parameter into a register without affecting
|
||||
any flags
|
||||
-------------------------------------------------*/
|
||||
@ -2978,7 +2978,7 @@ static x86code *op_handle(drcbe_state *drcbe, x86code *dst, const drcuml_instruc
|
||||
assert_no_flags(inst);
|
||||
assert(inst->numparams == 1);
|
||||
assert(inst->param[0].type == DRCUML_PTYPE_MEMORY);
|
||||
|
||||
|
||||
/* emit a jump around the stack adjust in case code falls through here */
|
||||
emit_jmp_short_link(&dst, &skip); // jmp skip
|
||||
|
||||
@ -3539,7 +3539,7 @@ static x86code *op_getflgs(drcbe_state *drcbe, x86code *dst, const drcuml_instru
|
||||
|
||||
/* pick a target register for the general case */
|
||||
dstreg = param_select_register(REG_EAX, &dstp, NULL);
|
||||
|
||||
|
||||
/* compute mask for flags */
|
||||
if (maskp.value & DRCUML_FLAG_C) flagmask |= 0x001;
|
||||
if (maskp.value & DRCUML_FLAG_V) flagmask |= 0x800;
|
||||
@ -6079,7 +6079,7 @@ static x86code *op_fstore(drcbe_state *drcbe, x86code *dst, const drcuml_instruc
|
||||
assert(inst->size == 4 || inst->size == 8);
|
||||
assert_no_condition(inst);
|
||||
assert_no_flags(inst);
|
||||
|
||||
|
||||
/* normalize parameters */
|
||||
param_normalize_3(drcbe, inst, &basep, PTYPE_M, &indp, PTYPE_MRI, &srcp, PTYPE_MF);
|
||||
|
||||
|
@ -19,11 +19,11 @@
|
||||
* Identify common pairs and optimize output
|
||||
|
||||
* Convert AND 0xff/0xffff to movzx
|
||||
|
||||
|
||||
* Convert SUB a,0,b to NEG
|
||||
|
||||
|
||||
* Optimize, e.g., and [r5],i0,$FF to use ebx as temporary register
|
||||
(avoid initial move) if i0 is not needed going forward
|
||||
(avoid initial move) if i0 is not needed going forward
|
||||
|
||||
****************************************************************************
|
||||
|
||||
@ -1044,7 +1044,7 @@ static void emit_mov_r32_p32(drcbe_state *drcbe, x86code **dst, UINT8 reg, const
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
emit_mov_r32_p32_keepflags - move a 32-bit
|
||||
emit_mov_r32_p32_keepflags - move a 32-bit
|
||||
parameter into a register without affecting
|
||||
any flags
|
||||
-------------------------------------------------*/
|
||||
@ -1845,7 +1845,7 @@ static void emit_mov_r64_p64(drcbe_state *drcbe, x86code **dst, UINT8 reglo, UIN
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
emit_mov_r64_p64_keepflags - move a 64-bit
|
||||
emit_mov_r64_p64_keepflags - move a 64-bit
|
||||
parameter into a pair of registers without
|
||||
affecting any flags
|
||||
-------------------------------------------------*/
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
Future improvements/changes:
|
||||
|
||||
* more aggressive handling of needed registers for conditional
|
||||
intrablock branches
|
||||
* more aggressive handling of needed registers for conditional
|
||||
intrablock branches
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -485,23 +485,23 @@ static void accumulate_required_backwards(opcode_desc *desc, UINT32 *reqmask)
|
||||
/* recursively handle delay slots */
|
||||
if (desc->delay != NULL)
|
||||
accumulate_required_backwards(desc->delay, reqmask);
|
||||
|
||||
|
||||
/* if this is a branch, we have to reset our requests */
|
||||
if (desc->flags & OPFLAG_IS_BRANCH)
|
||||
reqmask[0] = reqmask[1] = reqmask[2] = reqmask[3] = 0xffffffff;
|
||||
|
||||
|
||||
/* determine the required registers */
|
||||
desc->regreq[0] = desc->regout[0] & reqmask[0];
|
||||
desc->regreq[1] = desc->regout[1] & reqmask[1];
|
||||
desc->regreq[2] = desc->regout[2] & reqmask[2];
|
||||
desc->regreq[3] = desc->regout[3] & reqmask[3];
|
||||
|
||||
|
||||
/* any registers modified by this instruction aren't required upstream until referenced */
|
||||
reqmask[0] &= ~desc->regout[0];
|
||||
reqmask[1] &= ~desc->regout[1];
|
||||
reqmask[2] &= ~desc->regout[2];
|
||||
reqmask[3] &= ~desc->regout[3];
|
||||
|
||||
|
||||
/* any registers required by this instruction now get marked required */
|
||||
reqmask[0] |= desc->regin[0];
|
||||
reqmask[1] |= desc->regin[1];
|
||||
|
@ -475,7 +475,7 @@ INLINE void convert_to_nop(drcuml_instruction *inst)
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
convert_to_mov_immediate - convert an
|
||||
convert_to_mov_immediate - convert an
|
||||
instruction inline to a MOV immediate
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -490,7 +490,7 @@ INLINE void convert_to_mov_immediate(drcuml_instruction *inst, UINT64 immediate)
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
convert_to_mov_param - convert an
|
||||
convert_to_mov_param - convert an
|
||||
instruction inline to a MOV with a source
|
||||
parameter given by the existing parameter
|
||||
index pnum
|
||||
@ -588,15 +588,15 @@ void drcuml_reset(drcuml_state *drcuml)
|
||||
(*drcuml->beintf->be_reset)(drcuml->bestate);
|
||||
|
||||
/* do a one-time validation if requested */
|
||||
/* if (VALIDATE_BACKEND)
|
||||
{
|
||||
static int validated = FALSE;
|
||||
if (!validated)
|
||||
{
|
||||
validated = TRUE;
|
||||
validate_backend(drcuml);
|
||||
}
|
||||
}*/
|
||||
/* if (VALIDATE_BACKEND)
|
||||
{
|
||||
static int validated = FALSE;
|
||||
if (!validated)
|
||||
{
|
||||
validated = TRUE;
|
||||
validate_backend(drcuml);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
@ -624,7 +624,7 @@ void drcuml_free(drcuml_state *drcuml)
|
||||
free(block->inst);
|
||||
free(block);
|
||||
}
|
||||
|
||||
|
||||
/* free all the symbols */
|
||||
while (drcuml->symlist != NULL)
|
||||
{
|
||||
@ -853,7 +853,7 @@ void drcuml_block_end(drcuml_block *block)
|
||||
drcuml_state *drcuml = block->drcuml;
|
||||
|
||||
assert(block->inuse);
|
||||
|
||||
|
||||
/* optimize the resulting code first */
|
||||
optimize_block(block);
|
||||
|
||||
@ -1003,7 +1003,7 @@ const char *drcuml_handle_name(const drcuml_codehandle *handle)
|
||||
***************************************************************************/
|
||||
|
||||
/*-------------------------------------------------
|
||||
drcuml_symbol_add - add a symbol to the
|
||||
drcuml_symbol_add - add a symbol to the
|
||||
internal symbol table
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -1015,13 +1015,13 @@ void drcuml_symbol_add(drcuml_state *drcuml, void *base, UINT32 length, const ch
|
||||
symbol = malloc(sizeof(*symbol) + strlen(name));
|
||||
if (symbol == NULL)
|
||||
fatalerror("Out of memory allocating symbol in drcuml_symbol_add");
|
||||
|
||||
|
||||
/* fill in the structure */
|
||||
symbol->next = NULL;
|
||||
symbol->base = (drccodeptr)base;
|
||||
symbol->length = length;
|
||||
strcpy(symbol->symname, name);
|
||||
|
||||
|
||||
/* add to the tail of the list */
|
||||
*drcuml->symtailptr = symbol;
|
||||
drcuml->symtailptr = &symbol->next;
|
||||
@ -1029,8 +1029,8 @@ void drcuml_symbol_add(drcuml_state *drcuml, void *base, UINT32 length, const ch
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
drcuml_symbol_find - look up a symbol from the
|
||||
internal symbol table or return NULL if not
|
||||
drcuml_symbol_find - look up a symbol from the
|
||||
internal symbol table or return NULL if not
|
||||
found
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -1038,7 +1038,7 @@ const char *drcuml_symbol_find(drcuml_state *drcuml, void *base, UINT32 *offset)
|
||||
{
|
||||
drccodeptr search = base;
|
||||
drcuml_symbol *symbol;
|
||||
|
||||
|
||||
/* simple linear search */
|
||||
for (symbol = drcuml->symlist; symbol != NULL; symbol = symbol->next)
|
||||
if (search >= symbol->base && search < symbol->base + symbol->length)
|
||||
@ -1046,13 +1046,13 @@ const char *drcuml_symbol_find(drcuml_state *drcuml, void *base, UINT32 *offset)
|
||||
/* if no offset pointer, only match perfectly */
|
||||
if (offset == NULL && search != symbol->base)
|
||||
continue;
|
||||
|
||||
|
||||
/* return the offset and name */
|
||||
if (offset != NULL)
|
||||
*offset = search - symbol->base;
|
||||
return symbol->symname;
|
||||
}
|
||||
|
||||
|
||||
/* not found; return NULL */
|
||||
return NULL;
|
||||
}
|
||||
@ -1125,7 +1125,7 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
int pnum;
|
||||
|
||||
assert(inst->opcode != DRCUML_OP_INVALID && inst->opcode < DRCUML_OP_MAX);
|
||||
|
||||
|
||||
/* start with the raw mnemonic and substitute sizes */
|
||||
for (opsrc = opinfo->mnemonic; *opsrc != 0; opsrc++)
|
||||
if (*opsrc == '!')
|
||||
@ -1134,11 +1134,11 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
dest += sprintf(dest, "%s", pound_size[inst->size]);
|
||||
else
|
||||
*dest++ = *opsrc;
|
||||
|
||||
|
||||
/* pad to 8 spaces */
|
||||
while (dest < &buffer[8])
|
||||
*dest++ = ' ';
|
||||
|
||||
|
||||
/* iterate through parameters */
|
||||
for (pnum = 0; pnum < inst->numparams; pnum++)
|
||||
{
|
||||
@ -1150,35 +1150,35 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
/* start with a comma for all except the first parameter */
|
||||
if (pnum != 0)
|
||||
*dest++ = ',';
|
||||
|
||||
|
||||
/* ouput based on type */
|
||||
switch (param->type)
|
||||
{
|
||||
/* immediates have several special cases */
|
||||
case DRCUML_PTYPE_IMMEDIATE:
|
||||
|
||||
|
||||
/* size immediate */
|
||||
if (typemask == PTYPES_SIZE)
|
||||
dest += sprintf(dest, "%s", sizes[param->value]);
|
||||
|
||||
|
||||
/* address space immediate */
|
||||
else if (typemask == PTYPES_SPACE)
|
||||
dest += sprintf(dest, "%s", address_space_names[param->value]);
|
||||
|
||||
|
||||
/* size + address space immediate */
|
||||
else if (typemask == PTYPES_SPSZ)
|
||||
dest += sprintf(dest, "%s_%s", address_space_names[param->value / 16], sizes[param->value % 16]);
|
||||
|
||||
|
||||
/* fmod immediate */
|
||||
else if (typemask == PTYPES_FMOD)
|
||||
dest += sprintf(dest, "%s", fmods[param->value]);
|
||||
|
||||
|
||||
/* general immediate */
|
||||
else
|
||||
{
|
||||
int size = effective_psize(inst, opinfo, pnum);
|
||||
UINT64 value = param->value;
|
||||
|
||||
|
||||
/* truncate to size */
|
||||
if (size == 1) value = (UINT8)value;
|
||||
if (size == 2) value = (UINT16)value;
|
||||
@ -1189,7 +1189,7 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
dest += sprintf(dest, "$%X%08X", (UINT32)(value >> 32), (UINT32)value);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* integer registers */
|
||||
case DRCUML_PTYPE_INT_REGISTER:
|
||||
if (param->value >= DRCUML_REG_I0 && param->value < DRCUML_REG_I_END)
|
||||
@ -1216,15 +1216,15 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
|
||||
/* memory */
|
||||
case DRCUML_PTYPE_MEMORY:
|
||||
|
||||
|
||||
/* handle pointer */
|
||||
if (typemask == PTYPES_HAND)
|
||||
dest += sprintf(dest, "%s", drcuml_handle_name((const drcuml_codehandle *)(FPTR)param->value));
|
||||
|
||||
|
||||
/* string pointer */
|
||||
else if (typemask == PTYPES_STR)
|
||||
dest += sprintf(dest, "%s", (const char *)(FPTR)param->value);
|
||||
|
||||
|
||||
/* symbol */
|
||||
else if (drcuml != NULL && (symbol = drcuml_symbol_find(drcuml, (drccodeptr)(FPTR)param->value, &symoffset)) != NULL)
|
||||
{
|
||||
@ -1233,26 +1233,26 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
else
|
||||
dest += sprintf(dest, "[%s+$%X]", symbol, symoffset);
|
||||
}
|
||||
|
||||
|
||||
/* cache memory */
|
||||
else if (drcuml != NULL && drccache_contains_pointer(drcuml->cache, (void *)(FPTR)param->value))
|
||||
dest += sprintf(dest, "[+$%X]", (UINT32)(FPTR)((drccodeptr)(FPTR)param->value - drccache_near(drcuml->cache)));
|
||||
|
||||
|
||||
/* general memory */
|
||||
else
|
||||
dest += sprintf(dest, "[[$%p]]", (void *)(FPTR)param->value);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
dest += sprintf(dest, "???");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* if there's a condition, append it */
|
||||
if (inst->condition != DRCUML_COND_ALWAYS)
|
||||
dest += sprintf(dest, ",%s", conditions[inst->condition & 0x0f]);
|
||||
|
||||
|
||||
/* if there are flags, append them */
|
||||
if (inst->flags != 0)
|
||||
{
|
||||
@ -1268,7 +1268,7 @@ void drcuml_disasm(const drcuml_instruction *inst, char *buffer, drcuml_state *d
|
||||
if (inst->flags & DRCUML_FLAG_C)
|
||||
*dest++ = 'C';
|
||||
}
|
||||
|
||||
|
||||
/* ensure we are NULL-terminated */
|
||||
*dest = 0;
|
||||
}
|
||||
@ -1296,29 +1296,29 @@ static void optimize_block(drcuml_block *block)
|
||||
const drcuml_opcode_info *opinfo = opcode_info_table[inst->opcode];
|
||||
UINT8 remainingflags;
|
||||
int scannum, pnum;
|
||||
|
||||
|
||||
/* first compute what flags we need */
|
||||
inst->flags = 0;
|
||||
remainingflags = effective_outflags(inst, opinfo);
|
||||
|
||||
|
||||
/* scan ahead until we run out of possible remaining flags */
|
||||
for (scannum = instnum + 1; remainingflags != 0 && scannum < block->nextinst; scannum++)
|
||||
{
|
||||
const drcuml_instruction *scan = &block->inst[scannum];
|
||||
const drcuml_opcode_info *scaninfo = opcode_info_table[scan->opcode];
|
||||
|
||||
|
||||
/* any input flags are required */
|
||||
inst->flags |= effective_inflags(scan, scaninfo);
|
||||
|
||||
|
||||
/* if the scanahead instruction is unconditional, assume his flags are modified */
|
||||
if (scan->condition == DRCUML_COND_ALWAYS)
|
||||
remainingflags &= ~scaninfo->modflags;
|
||||
}
|
||||
|
||||
|
||||
/* track mapvars */
|
||||
if (inst->opcode == DRCUML_OP_MAPVAR)
|
||||
mapvar[inst->param[0].value - DRCUML_MAPVAR_M0] = inst->param[1].value;
|
||||
|
||||
|
||||
/* convert all mapvar parameters to immediates */
|
||||
else if (inst->opcode != DRCUML_OP_RECOVER)
|
||||
for (pnum = 0; pnum < inst->numparams; pnum++)
|
||||
@ -1327,7 +1327,7 @@ static void optimize_block(drcuml_block *block)
|
||||
inst->param[pnum].type = DRCUML_PTYPE_IMMEDIATE;
|
||||
inst->param[pnum].value = mapvar[inst->param[pnum].value - DRCUML_MAPVAR_M0];
|
||||
}
|
||||
|
||||
|
||||
/* if we don't need any flags, then we can eliminate a lot of dumb operations */
|
||||
if (inst->flags == 0)
|
||||
simplify_instruction_with_no_flags(block, inst);
|
||||
@ -1371,19 +1371,19 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
inst->param[2] = inst->param[3];
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* SET: convert to MOV if constant condition */
|
||||
case DRCUML_OP_SET:
|
||||
if (inst->condition == DRCUML_COND_ALWAYS)
|
||||
convert_to_mov_immediate(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* MOV: convert to NOP if move-to-self */
|
||||
case DRCUML_OP_MOV:
|
||||
if (param_equal(inst, 0, 1))
|
||||
convert_to_nop(inst);
|
||||
break;
|
||||
|
||||
|
||||
/* SEXT: convert immediates to MOV */
|
||||
case DRCUML_OP_SEXT:
|
||||
if (param_is_immediate(inst, 1))
|
||||
@ -1395,7 +1395,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
case DRCUML_SIZE_QWORD: convert_to_mov_immediate(inst, (INT64)inst->param[1].value); break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* ROLAND: convert to MOV if all immediate, or to ROL or AND if one is not needed, or to SHL/SHR if the mask is right */
|
||||
case DRCUML_OP_ROLAND:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2) && param_is_immediate(inst, 3))
|
||||
@ -1428,13 +1428,13 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
inst->param[2].value = 8 * inst->size - inst->param[2].value;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* ROLINS: convert to ROLAND if the mask is full */
|
||||
case DRCUML_OP_ROLINS:
|
||||
if (param_is_immediate_value(inst, 3, instsizemask[inst->size]))
|
||||
inst->opcode = DRCUML_OP_ROLAND;
|
||||
break;
|
||||
|
||||
|
||||
/* ADD: convert to MOV if immediate, or if adding 0 */
|
||||
case DRCUML_OP_ADD:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1444,7 +1444,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* SUB: convert to MOV if immediate, or if subtracting 0 */
|
||||
case DRCUML_OP_SUB:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1452,7 +1452,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* CMP: no-op if no flags needed, compare i0 to i0 if the parameters are equal */
|
||||
case DRCUML_OP_CMP:
|
||||
if (inst->flags == 0)
|
||||
@ -1463,7 +1463,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
inst->param[1].value = inst->param[2].value = DRCUML_REG_I0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* MULU: convert simple form to MOV if immediate, or if multiplying by 0 */
|
||||
case DRCUML_OP_MULU:
|
||||
if (param_equal(inst, 0, 1))
|
||||
@ -1479,7 +1479,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* MULS: convert simple form to MOV if immediate, or if multiplying by 0 */
|
||||
case DRCUML_OP_MULS:
|
||||
if (param_equal(inst, 0, 1))
|
||||
@ -1545,7 +1545,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
if (inst->flags == 0)
|
||||
convert_to_nop(inst);
|
||||
break;
|
||||
|
||||
|
||||
/* OR: convert to MOV if immediate, or if oring against 0 or 0xffffffff */
|
||||
case DRCUML_OP_OR:
|
||||
if (param_is_immediate_value(inst, 1, instsizemask[inst->size]) || param_is_immediate_value(inst, 2, instsizemask[inst->size]))
|
||||
@ -1557,7 +1557,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* XOR: convert to MOV if immediate, or if xoring against 0 */
|
||||
case DRCUML_OP_XOR:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1567,7 +1567,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* LZCNT: convert to MOV if immediate */
|
||||
case DRCUML_OP_LZCNT:
|
||||
if (param_is_immediate(inst, 1))
|
||||
@ -1583,7 +1583,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* BSWAP: convert to MOV if immediate */
|
||||
case DRCUML_OP_BSWAP:
|
||||
if (param_is_immediate(inst, 1))
|
||||
@ -1594,7 +1594,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
convert_to_mov_immediate(inst, FLIPENDIAN_INT64(inst->param[1].value));
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* SHL: convert to MOV if immediate or shifting by 0 */
|
||||
case DRCUML_OP_SHL:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1602,7 +1602,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* SHR: convert to MOV if immediate or shifting by 0 */
|
||||
case DRCUML_OP_SHR:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1615,7 +1615,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* SAR: convert to MOV if immediate or shifting by 0 */
|
||||
case DRCUML_OP_SAR:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1628,7 +1628,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* ROL: convert to NOP if immediate or rotating by 0 */
|
||||
case DRCUML_OP_ROL:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1641,7 +1641,7 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
else if (param_is_immediate_value(inst, 2, 0))
|
||||
convert_to_mov_param(inst, 1);
|
||||
break;
|
||||
|
||||
|
||||
/* ROR: convert to NOP if immediate or rotating by 0 */
|
||||
case DRCUML_OP_ROR:
|
||||
if (param_is_immediate(inst, 1) && param_is_immediate(inst, 2))
|
||||
@ -1660,11 +1660,11 @@ static void simplify_instruction_with_no_flags(drcuml_block *block, drcuml_instr
|
||||
if (param_equal(inst, 0, 1))
|
||||
convert_to_nop(inst);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
#if LOG_SIMPLIFICATIONS
|
||||
if (memcmp(&orig, inst, sizeof(orig)) != 0)
|
||||
{
|
||||
@ -1704,14 +1704,14 @@ static void disassemble_block(drcuml_block *block)
|
||||
{
|
||||
const drcuml_instruction *inst = &block->inst[instnum];
|
||||
int flushcomments = FALSE;
|
||||
|
||||
|
||||
/* remember comments and mapvars for later */
|
||||
if (inst->opcode == DRCUML_OP_COMMENT || inst->opcode == DRCUML_OP_MAPVAR)
|
||||
{
|
||||
if (firstcomment == -1)
|
||||
firstcomment = instnum;
|
||||
}
|
||||
|
||||
|
||||
/* print labels, handles, and hashes left justified */
|
||||
else if (inst->opcode == DRCUML_OP_LABEL)
|
||||
drcuml_log_printf(block->drcuml, "$%X:\n", (UINT32)inst->param[0].value);
|
||||
@ -1725,7 +1725,7 @@ static void disassemble_block(drcuml_block *block)
|
||||
{
|
||||
char dasm[256];
|
||||
drcuml_disasm(&block->inst[instnum], dasm, block->drcuml);
|
||||
|
||||
|
||||
/* include the first accumulated comment with this line */
|
||||
if (firstcomment != -1)
|
||||
{
|
||||
@ -1736,7 +1736,7 @@ static void disassemble_block(drcuml_block *block)
|
||||
else
|
||||
drcuml_log_printf(block->drcuml, "\t%s\n", dasm);
|
||||
}
|
||||
|
||||
|
||||
/* flush any comments pending */
|
||||
if (firstcomment != -1 && (flushcomments || instnum == block->nextinst - 1))
|
||||
{
|
||||
@ -1762,18 +1762,18 @@ static void disassemble_block(drcuml_block *block)
|
||||
static const char *get_comment_text(const drcuml_instruction *inst)
|
||||
{
|
||||
static char tempbuf[100];
|
||||
|
||||
|
||||
/* comments return their strings */
|
||||
if (inst->opcode == DRCUML_OP_COMMENT)
|
||||
return (char *)(FPTR)inst->param[0].value;
|
||||
|
||||
|
||||
/* mapvars comment about their values */
|
||||
else if (inst->opcode == DRCUML_OP_MAPVAR)
|
||||
{
|
||||
sprintf(tempbuf, "m%d = $%X", (int)inst->param[0].value - DRCUML_MAPVAR_M0, (UINT32)inst->param[1].value);
|
||||
return tempbuf;
|
||||
}
|
||||
|
||||
|
||||
/* everything else is NULL */
|
||||
return NULL;
|
||||
}
|
||||
@ -1797,21 +1797,21 @@ static void validate_instruction(drcuml_block *block, const drcuml_instruction *
|
||||
/* validate raw information */
|
||||
assert(inst->opcode != DRCUML_OP_INVALID && inst->opcode < DRCUML_OP_MAX);
|
||||
assert(inst->size == 1 || inst->size == 2 || inst->size == 4 || inst->size == 8);
|
||||
|
||||
|
||||
/* validate against opcode limits */
|
||||
assert((opinfo->sizes & inst->size) != 0);
|
||||
assert(inst->condition == DRCUML_COND_ALWAYS || opinfo->condition);
|
||||
|
||||
|
||||
/* validate each parameter */
|
||||
for (pnum = 0; pnum < inst->numparams; pnum++)
|
||||
{
|
||||
const drcuml_parameter *param = &inst->param[pnum];
|
||||
UINT16 typemask = opinfo->param[pnum].typemask;
|
||||
|
||||
|
||||
/* ensure the type is correct */
|
||||
assert(param->type > DRCUML_PTYPE_NONE && param->type < DRCUML_PTYPE_MAX);
|
||||
assert((typemask >> param->type) & 1);
|
||||
|
||||
|
||||
/* validate various parameter types */
|
||||
switch (param->type)
|
||||
{
|
||||
@ -1820,7 +1820,7 @@ static void validate_instruction(drcuml_block *block, const drcuml_instruction *
|
||||
if (typemask != PTYPES_PTR && typemask != PTYPES_STATE && typemask != PTYPES_STR && typemask != PTYPES_CFUNC)
|
||||
assert_in_near_cache(block->drcuml->cache, (void *)(FPTR)param->value);
|
||||
break;
|
||||
|
||||
|
||||
case DRCUML_PTYPE_IMMEDIATE:
|
||||
/* many special parameter types are encoded as immediately; ensure they are in range */
|
||||
if (typemask == PTYPES_SIZE)
|
||||
@ -1835,19 +1835,19 @@ static void validate_instruction(drcuml_block *block, const drcuml_instruction *
|
||||
else if (typemask == PTYPES_FMOD)
|
||||
assert(param->value >= DRCUML_FMOD_TRUNC && param->value <= DRCUML_FMOD_DEFAULT);
|
||||
break;
|
||||
|
||||
|
||||
case DRCUML_PTYPE_MAPVAR:
|
||||
assert(param->value >= DRCUML_MAPVAR_M0 && param->value < DRCUML_MAPVAR_END);
|
||||
break;
|
||||
|
||||
|
||||
case DRCUML_PTYPE_INT_REGISTER:
|
||||
assert(param->value >= DRCUML_REG_I0 && param->value < DRCUML_REG_I_END);
|
||||
break;
|
||||
|
||||
|
||||
case DRCUML_PTYPE_FLOAT_REGISTER:
|
||||
assert(param->value >= DRCUML_REG_F0 && param->value < DRCUML_REG_F_END);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
assert(FALSE);
|
||||
break;
|
||||
|
@ -202,7 +202,7 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x03: i8085_ICount -= (I.cputype) ? 6 : 5; /* INX B */
|
||||
I.BC.w.l++;
|
||||
if( I.cputype )
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.BC.b.l == 0x00) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
@ -236,8 +236,8 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x0b: i8085_ICount -= (I.cputype) ? 6 : 5; /* DCX B */
|
||||
I.BC.w.l--;
|
||||
if( I.cputype )
|
||||
{
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.BC.b.l == 0xff) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
break;
|
||||
@ -271,8 +271,8 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x13: i8085_ICount -= (I.cputype) ? 6 : 5; /* INX D */
|
||||
I.DE.w.l++;
|
||||
if( I.cputype )
|
||||
{
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.DE.b.l == 0x00) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
break;
|
||||
@ -308,7 +308,7 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x1b: i8085_ICount -= (I.cputype) ? 6 : 5; /* DCX D */
|
||||
I.DE.w.l--;
|
||||
if( I.cputype )
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.DE.b.l == 0xff) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
@ -348,8 +348,8 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x23: i8085_ICount -= (I.cputype) ? 6 : 5; /* INX H */
|
||||
I.HL.w.l++;
|
||||
if( I.cputype )
|
||||
{
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.HL.b.l == 0x00) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
break;
|
||||
@ -368,7 +368,7 @@ INLINE void execute_one(int opcode)
|
||||
if (I.AF.b.l & HF) I.XX.d |= 0x200;
|
||||
if (I.AF.b.l & NF) I.XX.d |= 0x400;
|
||||
I.AF.w.l = DAA[I.XX.d];
|
||||
if( I.cputype==0 )
|
||||
if( I.cputype==0 )
|
||||
{
|
||||
I.AF.b.l &= 0xd5; // Ignore not used flags
|
||||
}
|
||||
@ -394,7 +394,7 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x2b: i8085_ICount -= (I.cputype) ? 6 : 5; /* DCX H */
|
||||
I.HL.w.l--;
|
||||
if( I.cputype )
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.HL.b.l == 0xff) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
@ -453,7 +453,7 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x33: i8085_ICount -= (I.cputype) ? 6 : 5; /* INX SP */
|
||||
I.SP.w.l++;
|
||||
if( I.cputype )
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.SP.b.l == 0x00) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
@ -494,8 +494,8 @@ INLINE void execute_one(int opcode)
|
||||
break;
|
||||
case 0x3b: i8085_ICount -= (I.cputype) ? 6 : 5; /* DCX SP */
|
||||
I.SP.w.l--;
|
||||
if( I.cputype )
|
||||
{
|
||||
if( I.cputype )
|
||||
{
|
||||
if (I.SP.b.l == 0xff) I.AF.b.l |= XF; else I.AF.b.l &= ~XF;
|
||||
}
|
||||
break;
|
||||
@ -508,7 +508,7 @@ INLINE void execute_one(int opcode)
|
||||
case 0x3e: i8085_ICount -= 7; /* MVI A,nn */
|
||||
M_MVI(I.AF.b.h);
|
||||
break;
|
||||
case 0x3f: i8085_ICount -= 4; /* CMC */
|
||||
case 0x3f: i8085_ICount -= 4; /* CMC */
|
||||
I.AF.b.l = (I.AF.b.l & 0xfe) | ((I.AF.b.l & CF)==1 ? 0 : 1);
|
||||
break;
|
||||
|
||||
|
@ -36,8 +36,8 @@
|
||||
#define ADDR_RST75 0x003c
|
||||
#define ADDR_INTR 0x0038
|
||||
|
||||
#define M_INR(R) {UINT8 hc = ((R & 0x0f) == 0x0f) ? HF : 0; ++R; I.AF.b.l= (I.AF.b.l & CF ) | ZSP[R] | hc; }
|
||||
#define M_DCR(R) {UINT8 hc = ((R & 0x0f) == 0x00) ? HF : 0; --R; I.AF.b.l= (I.AF.b.l & CF ) | ZSP[R] | hc | NF; }
|
||||
#define M_INR(R) {UINT8 hc = ((R & 0x0f) == 0x0f) ? HF : 0; ++R; I.AF.b.l= (I.AF.b.l & CF ) | ZSP[R] | hc; }
|
||||
#define M_DCR(R) {UINT8 hc = ((R & 0x0f) == 0x00) ? HF : 0; --R; I.AF.b.l= (I.AF.b.l & CF ) | ZSP[R] | hc | NF; }
|
||||
#define M_MVI(R) R=ARG()
|
||||
|
||||
#define M_ANA(R) { int i = ((I.AF.b.h | R)>>3)&1 * HF; I.AF.b.h&=R; I.AF.b.l=ZSP[I.AF.b.h]; if( I.cputype ) { I.AF.b.l |= HF; } else {I.AF.b.l |= i; } }
|
||||
|
@ -314,7 +314,7 @@ static const int insnminx_cycles[256] = {
|
||||
8, 8, 8, 8, 12, 16, 8, 8, 8, 8, 8, 8, 12, 16, 8, 8,
|
||||
8, 8, 8, 8, 12, 16, 8, 8, 8, 8, 8, 8, 12, 16, 8, 8,
|
||||
8, 8, 8, 8, 12, 16, 8, 8, 8, 8, 8, 8, 12, 16, 8, 8,
|
||||
|
||||
|
||||
4, 4, 4, 4, 12, 8, 8, 8, 4, 4, 4, 4, 12, 8, 8, 8,
|
||||
4, 4, 4, 4, 12, 8, 8, 8, 4, 4, 4, 4, 12, 8, 8, 8,
|
||||
8, 8, 8, 8, 16, 12, 12, 12, 8, 8, 8, 8, 16, 12, 12, 12,
|
||||
|
@ -1,8 +1,8 @@
|
||||
/***************************************************************************
|
||||
|
||||
mips3.h
|
||||
|
||||
Interface file for the universal machine language-based
|
||||
|
||||
Interface file for the universal machine language-based
|
||||
MIPS III/IV emulator.
|
||||
|
||||
Copyright Aaron Giles
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
ppc.h
|
||||
|
||||
Interface file for the universal machine language-based
|
||||
Interface file for the universal machine language-based
|
||||
PowerPC emulator.
|
||||
|
||||
Copyright Aaron Giles
|
||||
|
@ -476,18 +476,18 @@ void ppccom_tlb_fill(powerpc_state *ppc)
|
||||
int transtype = ppc->param1;
|
||||
offs_t transaddr = address;
|
||||
UINT32 entryval;
|
||||
|
||||
|
||||
/* 4xx case: "TLB" really just caches writes and checks compare registers */
|
||||
if (ppc->cap & PPCCAP_4XX)
|
||||
{
|
||||
/* assume success and direct translation */
|
||||
ppc->param0 = 1;
|
||||
transaddr = address & 0x7fffffff;
|
||||
|
||||
|
||||
/* we don't support the MMU of the 403GCX */
|
||||
if (ppc->flavor == PPC_MODEL_403GCX && (ppc->msr & MSROEA_DR))
|
||||
fatalerror("MMU enabled but not supported!");
|
||||
|
||||
|
||||
/* only check if PE is enabled */
|
||||
if (transtype == TRANSLATE_WRITE && (ppc->msr & MSR4XX_PE))
|
||||
{
|
||||
@ -500,11 +500,11 @@ void ppccom_tlb_fill(powerpc_state *ppc)
|
||||
ppc->param0 = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* OEA case: perform an address translation */
|
||||
else
|
||||
ppc->param0 = ppccom_translate_address_internal(ppc, transtype | transuser, &transaddr);
|
||||
|
||||
|
||||
/* log information and return upon failure */
|
||||
if (PRINTF_TLB_FILL)
|
||||
printf("tlb_fill: %08X (%s%s) -> ", address, (transtype == TRANSLATE_READ) ? "R" : (transtype == TRANSLATE_WRITE) ? "W" : "F", transuser ? "U" : "S");
|
||||
@ -1386,7 +1386,7 @@ static int ppc4xx_dma_decrement_count(powerpc_state *ppc, int dmachan)
|
||||
|
||||
/* set the complete bit and handle interrupts */
|
||||
ppc->dcr[DCR4XX_DMASR] |= 1 << (31 - dmachan);
|
||||
// ppc->dcr[DCR4XX_DMASR] |= 1 << (27 - dmachan);
|
||||
// ppc->dcr[DCR4XX_DMASR] |= 1 << (27 - dmachan);
|
||||
ppc4xx_dma_update_irq_states(ppc);
|
||||
return TRUE;
|
||||
}
|
||||
@ -1644,7 +1644,7 @@ static void ppc4xx_spu_rx_data(powerpc_state *ppc, UINT8 data)
|
||||
new_rxin = (ppc->spu.rxin + 1) % ARRAY_LENGTH(ppc->spu.rxbuffer);
|
||||
if (new_rxin == ppc->spu.rxout)
|
||||
fatalerror("ppc4xx_spu_rx_data: buffer overrun!");
|
||||
|
||||
|
||||
/* store the data and accept the new in index */
|
||||
ppc->spu.rxbuffer[ppc->spu.rxin] = data;
|
||||
ppc->spu.rxin = new_rxin;
|
||||
@ -1719,7 +1719,7 @@ static TIMER_CALLBACK( ppc4xx_spu_callback )
|
||||
{
|
||||
int operation = (ppc->spu.regs[SPU4XX_RX_COMMAND] >> 5) & 3;
|
||||
UINT8 rxbyte;
|
||||
|
||||
|
||||
/* consume the byte and advance the out pointer */
|
||||
rxbyte = ppc->spu.rxbuffer[ppc->spu.rxout];
|
||||
ppc->spu.rxout = (ppc->spu.rxout + 1) % ARRAY_LENGTH(ppc->spu.rxbuffer);
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
Future improvements/changes:
|
||||
|
||||
* crxor a,a,a / creqv a,a,a / cror a,a,a
|
||||
* crxor a,a,a / creqv a,a,a / cror a,a,a
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -582,7 +582,7 @@ static void ppcdrc_init(powerpc_flavor flavor, UINT8 cap, int tb_divisor, int cl
|
||||
ppc->impstate->drcuml = drcuml_alloc(cache, flags, 8, 32, 2);
|
||||
if (ppc->impstate->drcuml == NULL)
|
||||
fatalerror("Error initializing the UML");
|
||||
|
||||
|
||||
/* add symbols for our stuff */
|
||||
drcuml_symbol_add(ppc->impstate->drcuml, &ppc->pc, sizeof(ppc->pc), "pc");
|
||||
drcuml_symbol_add(ppc->impstate->drcuml, &ppc->icount, sizeof(ppc->icount), "icount");
|
||||
@ -1798,14 +1798,14 @@ static void static_generate_memory_accessor(drcuml_state *drcuml, int mode, int
|
||||
UML_LOAD(block, IREG(3), ppc->tlb_table, IREG(3), DWORD); // load i3,[tlb_table],i3,dword
|
||||
UML_JMP(block, tlbreturn); // jmp tlbreturn
|
||||
UML_LABEL(block, dsi); // dsi:
|
||||
|
||||
|
||||
/* 4XX case: protection exception */
|
||||
if (ppc->cap & PPCCAP_4XX)
|
||||
{
|
||||
UML_MOV(block, SPR32(SPR4XX_DEAR), IREG(0)); // mov [dear],i0
|
||||
UML_EXH(block, ppc->impstate->exception[EXCEPTION_DSI], IREG(0)); // exh dsi,i0
|
||||
}
|
||||
|
||||
|
||||
/* 603 case: TLBMISS exception */
|
||||
else if (ppc->cap & PPCCAP_603_MMU)
|
||||
{
|
||||
@ -1818,7 +1818,7 @@ static void static_generate_memory_accessor(drcuml_state *drcuml, int mode, int
|
||||
else
|
||||
UML_EXH(block, ppc->impstate->exception[EXCEPTION_DTLBMISSL], IREG(0)); // exh dtlbmissl,i0
|
||||
}
|
||||
|
||||
|
||||
/* general case: DSI exception */
|
||||
else
|
||||
{
|
||||
@ -1887,7 +1887,7 @@ static void static_generate_lsw_entries(drcuml_state *drcuml, int mode)
|
||||
for (regnum = 0; regnum < 32; regnum++)
|
||||
{
|
||||
char temp[20];
|
||||
|
||||
|
||||
/* allocate a handle */
|
||||
sprintf(temp, "lsw%d", regnum);
|
||||
alloc_handle(drcuml, &ppc->impstate->lsw[mode][regnum], temp);
|
||||
@ -1947,7 +1947,7 @@ static void static_generate_stsw_entries(drcuml_state *drcuml, int mode)
|
||||
for (regnum = 0; regnum < 32; regnum++)
|
||||
{
|
||||
char temp[20];
|
||||
|
||||
|
||||
/* allocate a handle */
|
||||
sprintf(temp, "stsw%d", regnum);
|
||||
alloc_handle(drcuml, &ppc->impstate->stsw[mode][regnum], temp);
|
||||
@ -1994,7 +1994,7 @@ static void generate_update_mode(drcuml_block *block)
|
||||
{
|
||||
/* LE in bit 0 of mode */
|
||||
UML_AND(block, IREG(0), MSR32, IMM(MSR_LE)); // and i0,msr,MSR_LE
|
||||
|
||||
|
||||
/* DR (OEA and 403GCX) in bit 1 of mode */
|
||||
if ((ppc->cap & PPCCAP_OEA) || ppc->flavor == PPC_MODEL_403GCX)
|
||||
{
|
||||
@ -2008,7 +2008,7 @@ static void generate_update_mode(drcuml_block *block)
|
||||
UML_ROLAND(block, IREG(1), MSR32, IMM(30), IMM(0x02)); // roland i1,[msr],30,0x02
|
||||
UML_OR(block, IREG(0), IREG(0), IREG(1)); // or i0,i0,i1
|
||||
}
|
||||
|
||||
|
||||
/* PR in bit 2 of mode */
|
||||
UML_ROLAND(block, IREG(1), MSR32, IMM(20), IMM(0x04)); // roland i1,[msr],20,0x04
|
||||
UML_OR(block, MEM(&ppc->impstate->mode), IREG(0), IREG(1)); // or [mode],i0,i1
|
||||
|
@ -655,7 +655,7 @@ static int describe_instruction_1f(powerpc_state *ppc, UINT32 op, opcode_desc *d
|
||||
if (op & M_RC)
|
||||
CR_MODIFIED(desc, 0);
|
||||
return TRUE;
|
||||
|
||||
|
||||
case 0x2c8: /* SUBFZEOx */
|
||||
case 0x2ca: /* ADDZEOx */
|
||||
case 0x2e8: /* SUBFMEOx */
|
||||
@ -1066,7 +1066,7 @@ static int describe_instruction_1f(powerpc_state *ppc, UINT32 op, opcode_desc *d
|
||||
GPR_USED(desc, regnum);
|
||||
desc->flags |= OPFLAG_WRITES_MEMORY;
|
||||
return TRUE;
|
||||
|
||||
|
||||
case 0x2d5: /* STSWI */
|
||||
GPR_USED_OR_ZERO(desc, G_RA(op));
|
||||
for (regnum = 0; regnum < ((G_NB(op) - 1) & 0x1f) + 1; regnum += 4)
|
||||
|
@ -12,12 +12,12 @@
|
||||
|
||||
const char* duart68681_reg_read_names[0x10] =
|
||||
{
|
||||
"MRA", "SRA", "BRG Test", "RHRA", "IPCR", "ISR", "CTU", "CTL", "MRB", "SRB", "1X/16X Test", "RHRB", "IVR", "Input Ports", "Start Counter", "Stop Counter"
|
||||
"MRA", "SRA", "BRG Test", "RHRA", "IPCR", "ISR", "CTU", "CTL", "MRB", "SRB", "1X/16X Test", "RHRB", "IVR", "Input Ports", "Start Counter", "Stop Counter"
|
||||
};
|
||||
|
||||
const char* duart68681_reg_write_names[0x10] =
|
||||
{
|
||||
"MRA", "CSRA", "CRA", "THRA", "ACR", "IMR", "CRUR", "CTLR", "MRB", "CSRB", "CRB", "THRB", "IVR", "OPCR", "Set OP Bits", "Reset OP Bits"
|
||||
"MRA", "CSRA", "CRA", "THRA", "ACR", "IMR", "CRUR", "CTLR", "MRB", "CSRB", "CRB", "THRB", "IVR", "OPCR", "Set OP Bits", "Reset OP Bits"
|
||||
};
|
||||
|
||||
#define INT_INPUT_PORT_CHANGE 0x80
|
||||
|
@ -105,7 +105,7 @@ static UINT32 cosine_table[2049];
|
||||
***************************************************************************/
|
||||
|
||||
/*-------------------------------------------------
|
||||
round_nearest - round to nearest in a
|
||||
round_nearest - round to nearest in a
|
||||
predictable way
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -166,7 +166,7 @@ INLINE UINT32 ycc_to_rgb(UINT32 ycc)
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_palette16_nearest - return the
|
||||
get_texel_palette16_nearest - return the
|
||||
nearest neighbor texel from a palettized
|
||||
16bpp source
|
||||
-------------------------------------------------*/
|
||||
@ -178,7 +178,7 @@ INLINE UINT32 get_texel_palette16_nearest(const UINT16 *texbase, INT32 texrp, IN
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_palette16_bilinear - return a
|
||||
get_texel_palette16_bilinear - return a
|
||||
bilinear filtered texel from a palettized
|
||||
16bpp source
|
||||
-------------------------------------------------*/
|
||||
@ -196,7 +196,7 @@ INLINE UINT32 get_texel_palette16_bilinear(const UINT16 *texbase, INT32 texrp, I
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_rgb15_nearest - return the
|
||||
get_texel_rgb15_nearest - return the
|
||||
nearest neighbor texel from a 15bpp RGB source
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -207,8 +207,8 @@ INLINE UINT32 get_texel_rgb15_nearest(const UINT16 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_rgb15_bilinear - return the
|
||||
bilinear filtered texel from a 15bpp RGB
|
||||
get_texel_rgb15_bilinear - return the
|
||||
bilinear filtered texel from a 15bpp RGB
|
||||
source
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -230,7 +230,7 @@ INLINE UINT32 get_texel_rgb15_bilinear(const UINT16 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_yuy16_nearest - return the
|
||||
get_texel_yuy16_nearest - return the
|
||||
nearest neighbor texel from a 16bpp YCbCr
|
||||
source (pixel is returned as Cr-Cb-Y
|
||||
-------------------------------------------------*/
|
||||
@ -243,7 +243,7 @@ INLINE UINT32 get_texel_yuy16_nearest(const UINT16 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_yuy16_bilinear - return the
|
||||
get_texel_yuy16_bilinear - return the
|
||||
nearest neighbor texel from a 16bpp YCbCr
|
||||
source (pixel is returned as Cr-Cb-Y
|
||||
-------------------------------------------------*/
|
||||
@ -277,7 +277,7 @@ INLINE UINT32 get_texel_yuy16_bilinear(const UINT16 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_rgb32_nearest - return the
|
||||
get_texel_rgb32_nearest - return the
|
||||
nearest neighbor texel from a 32bpp RGB source
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -288,8 +288,8 @@ INLINE UINT32 get_texel_rgb32_nearest(const UINT32 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_rgb32_bilinear - return the
|
||||
bilinear filtered texel from a 32bpp RGB
|
||||
get_texel_rgb32_bilinear - return the
|
||||
bilinear filtered texel from a 32bpp RGB
|
||||
source
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -306,8 +306,8 @@ INLINE UINT32 get_texel_rgb32_bilinear(const UINT32 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_argb32_nearest - return the
|
||||
nearest neighbor texel from a 32bpp ARGB
|
||||
get_texel_argb32_nearest - return the
|
||||
nearest neighbor texel from a 32bpp ARGB
|
||||
source
|
||||
-------------------------------------------------*/
|
||||
|
||||
@ -318,8 +318,8 @@ INLINE UINT32 get_texel_argb32_nearest(const UINT32 *texbase, INT32 texrp, INT32
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get_texel_argb32_bilinear - return the
|
||||
bilinear filtered texel from a 32bpp ARGB
|
||||
get_texel_argb32_bilinear - return the
|
||||
bilinear filtered texel from a 32bpp ARGB
|
||||
source
|
||||
-------------------------------------------------*/
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
the function is similar than update with 0x80 set to 1
|
||||
|
||||
23/04/2007 : Lord Nightmare
|
||||
Major update, implement all three different noise generation algorithms and a
|
||||
Major update, implement all three different noise generation algorithms and a
|
||||
set_variant call to discern among them.
|
||||
|
||||
TODO: Implement a function for setting stereo regs for the game gear.
|
||||
|
@ -316,7 +316,7 @@ int ui_display_startup_screens(running_machine *machine, int first_time, int sho
|
||||
int state;
|
||||
|
||||
/* disable everything if we are using -str for 300 or fewer seconds, or if we're the empty driver,
|
||||
or if we are debugging */
|
||||
or if we are debugging */
|
||||
if (!first_time || (str > 0 && str < 60*5) || machine->gamedrv == &driver_empty || machine->debug_mode)
|
||||
show_gameinfo = show_warnings = show_disclaimer = FALSE;
|
||||
|
||||
|
@ -279,7 +279,7 @@
|
||||
|
||||
[2008-06-09]
|
||||
- Added Videomat (polish bootleg).
|
||||
|
||||
|
||||
|
||||
[2008-06-02]
|
||||
|
||||
|
@ -779,8 +779,8 @@ ROM_END
|
||||
|
||||
Squash (Itisa)
|
||||
|
||||
Anno 1984
|
||||
Produttore Itisa-Valadon-gecas
|
||||
Anno 1984
|
||||
Produttore Itisa-Valadon-gecas
|
||||
|
||||
CPU
|
||||
|
||||
|
@ -292,7 +292,7 @@ static READ16_HANDLER( mechatt_gun_r )
|
||||
{
|
||||
int baseport=0,x,y;
|
||||
static const char *port[] = { "IN2", "IN3", "IN4", "IN5" };
|
||||
|
||||
|
||||
if (offset) baseport=2; /* Player 2 */
|
||||
|
||||
x=input_port_read(machine, port[baseport]);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
|
||||
Black Touch '96
|
||||
Black Touch '96
|
||||
|
||||
|
||||
Black Touch 96
|
||||
@ -493,7 +493,7 @@ static MACHINE_DRIVER_START( blackt96 )
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(64*16, 64*8)
|
||||
// MDRV_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
|
||||
// MDRV_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 8*32-1, 2*8, 8*30-1)
|
||||
|
||||
MDRV_PALETTE_LENGTH(0x800)
|
||||
|
@ -160,7 +160,7 @@ static INPUT_PORTS_START( blockade )
|
||||
PORT_DIPSETTING( 0x70, "6" )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2)
|
||||
@ -202,7 +202,7 @@ static INPUT_PORTS_START( comotion )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1)
|
||||
@ -247,7 +247,7 @@ static INPUT_PORTS_START( blasto )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
@ -290,7 +290,7 @@ static INPUT_PORTS_START( hustle )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2)
|
||||
@ -333,7 +333,7 @@ static INPUT_PORTS_START( mineswpr )
|
||||
PORT_DIPSETTING( 0x70, "6" )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1)
|
||||
@ -375,7 +375,7 @@ static INPUT_PORTS_START( minesw4p )
|
||||
PORT_DIPSETTING( 0x70, "6" )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
/* this is really used for the coin latch, */
|
||||
/* see blockade_interrupt() */
|
||||
/* see blockade_interrupt() */
|
||||
|
||||
PORT_START_TAG("IN1") /* IN1 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1)
|
||||
|
@ -72,7 +72,7 @@ static MACHINE_RESET( blstroid )
|
||||
|
||||
static READ16_HANDLER( inputs_r )
|
||||
{
|
||||
static const char *iptnames[] = { "IN0", "IN1" };
|
||||
static const char *iptnames[] = { "IN0", "IN1" };
|
||||
int temp = input_port_read(machine, iptnames[offset & 1]);
|
||||
|
||||
if (atarigen_cpu_to_sound_ready) temp ^= 0x0040;
|
||||
|
@ -511,7 +511,7 @@ INLINE int read_trackball(running_machine *machine, int idx, int switch_port)
|
||||
UINT8 newpos;
|
||||
static const char *portnames[] = { "IN0", "IN1", "IN2" };
|
||||
static const char *tracknames[] = { "TRACK0_X", "TRACK0_Y", "TRACK1_X", "TRACK1_Y" };
|
||||
|
||||
|
||||
/* adjust idx if we're cocktail flipped */
|
||||
if (centiped_flipscreen)
|
||||
idx += 2;
|
||||
@ -1510,7 +1510,7 @@ static INPUT_PORTS_START( bullsdrt )
|
||||
/* 2008-06 FP: was bullsdrt available as cocktail? If not, these can be removed */
|
||||
PORT_START_TAG("TRACK1_X")
|
||||
|
||||
PORT_START_TAG("TRACK1_Y")
|
||||
PORT_START_TAG("TRACK1_Y")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
@ -163,7 +163,7 @@ static WRITE8_HANDLER( cliff_port_bank_w )
|
||||
static READ8_HANDLER( cliff_port_r )
|
||||
{
|
||||
static const char *banknames[] = { "BANK0", "BANK1", "BANK2", "BANK3", "BANK4", "BANK5", "BANK6" };
|
||||
|
||||
|
||||
if ( port_bank < 7 )
|
||||
{
|
||||
return input_port_read(machine, banknames[port_bank]);
|
||||
|
@ -164,7 +164,7 @@ static READ8_HANDLER( trackball_r )
|
||||
{
|
||||
int i,dir[4];
|
||||
static const char *tracknames[] = { "TRACK0_Y", "TRACK0_X", "TRACK1_Y", "TRACK1_X" };
|
||||
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
UINT8 curr;
|
||||
|
@ -4,16 +4,16 @@
|
||||
Kick Boy (c) 1983 Nichibutsu
|
||||
|
||||
Driver by Pierpaolo Prazzoli
|
||||
|
||||
|
||||
TODO:
|
||||
- Add colors when proms are dumped
|
||||
|
||||
|
||||
Mods by Tomasz Slanina (2008.06.12):
|
||||
|
||||
- fixed sound cpu interrupts (mode 2 (two vectors)+ nmi)
|
||||
- added sound and music.
|
||||
- ay/msm clocks are arbitrary
|
||||
- just a guess - upper nibble of byte from port 3 _probably_
|
||||
- added sound and music.
|
||||
- ay/msm clocks are arbitrary
|
||||
- just a guess - upper nibble of byte from port 3 _probably_
|
||||
contains sound command (sound cpu writes it to port c)
|
||||
|
||||
******************************************************************************/
|
||||
@ -55,7 +55,7 @@ static WRITE8_HANDLER( bg_bank_w )
|
||||
}
|
||||
|
||||
flip_screen_set(data & 0xc); // probably one bit for flipx and one for flipy
|
||||
|
||||
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( coins_w )
|
||||
@ -427,13 +427,13 @@ static MACHINE_DRIVER_START( dacholer )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
||||
MDRV_SOUND_ADD(AY8910, 1500000)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
|
||||
|
||||
|
||||
MDRV_SOUND_ADD(AY8910, 1500000)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
|
||||
|
||||
|
||||
MDRV_SOUND_ADD(AY8910, 1500000)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
|
||||
|
||||
|
@ -260,7 +260,7 @@ static READ32_HANDLER( v_rom_r )
|
||||
|
||||
static READ32_HANDLER( inp1_r )
|
||||
{
|
||||
UINT32 result = (input_port_read(machine, "DSW3")<<24) | (input_port_read(machine, "IN2")<<16) | (input_port_read(machine, "IN1")<<8) | input_port_read(machine, "IN0");
|
||||
UINT32 result = (input_port_read(machine, "DSW3")<<24) | (input_port_read(machine, "IN2")<<16) | (input_port_read(machine, "IN1")<<8) | input_port_read(machine, "IN0");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -119,7 +119,7 @@ static READ8_HANDLER( dragrace_input_r )
|
||||
{
|
||||
int val = input_port_read(machine, "IN2");
|
||||
static const char *portnames[] = { "IN0", "IN1" };
|
||||
|
||||
|
||||
UINT8 maskA = 1 << (offset % 8);
|
||||
UINT8 maskB = 1 << (offset / 8);
|
||||
|
||||
|
@ -1369,8 +1369,8 @@ REF: 950510-1
|
||||
|
||||
Notes
|
||||
-----
|
||||
Gaelco's PROMs IC70 and IC69 has DIP42 package (many wires are routed to GAE1 506, so I guess that they are a gfx rom)
|
||||
Gaelco's PROM IC68 has DIP32 package (may be a sound rom)
|
||||
Gaelco's PROMs IC70 and IC69 has DIP42 package (many wires are routed to GAE1 506, so I guess that they are a gfx rom)
|
||||
Gaelco's PROM IC68 has DIP32 package (may be a sound rom)
|
||||
TI F20L8 is a Texas Ins. DIP24 (may be a PAL). Is marked as F 406 XF 21869 F20L8-25CNT
|
||||
TLC569 (IC2 and IC7) is a 8-bit serial ADC
|
||||
|
||||
|
@ -2202,7 +2202,7 @@ static INPUT_PORTS_START( moonwar_common )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
|
||||
|
||||
PORT_START_TAG("IN1")
|
||||
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
|
||||
PORT_DIPSETTING( 0x00, "3" )
|
||||
@ -2216,7 +2216,7 @@ static INPUT_PORTS_START( moonwar_common )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( moonwar )
|
||||
PORT_INCLUDE( moonwar_common )
|
||||
|
@ -281,10 +281,10 @@ static READ8_HANDLER( sysreg_r )
|
||||
case 1:
|
||||
case 3:
|
||||
return input_port_read_indexed(machine, offset);
|
||||
|
||||
|
||||
case 2:
|
||||
return adc1038_sars_r(machine) << 7;
|
||||
|
||||
|
||||
case 4:
|
||||
{
|
||||
// 7 0
|
||||
@ -297,7 +297,7 @@ static READ8_HANDLER( sysreg_r )
|
||||
UINT32 adc_bit = (adc1038_do_r() << 2);
|
||||
return (eeprom_bit | adc_bit);
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
mame_printf_debug("sysreg_r %d\n", offset);
|
||||
break;
|
||||
@ -312,7 +312,7 @@ static WRITE8_HANDLER( sysreg_w )
|
||||
case 0:
|
||||
gticlub_led_reg0 = data;
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
gticlub_led_reg1 = data;
|
||||
break;
|
||||
@ -322,7 +322,7 @@ static WRITE8_HANDLER( sysreg_w )
|
||||
eeprom_set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
|
||||
eeprom_set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
|
||||
case 4:
|
||||
if (data & 0x80) /* CG Board 1 IRQ Ack */
|
||||
cpunum_set_input_line(machine, 0, INPUT_LINE_IRQ1, CLEAR_LINE);
|
||||
@ -378,8 +378,8 @@ WRITE8_HANDLER( K056230_w )
|
||||
timer_set(ATTOTIME_IN_USEC(1), NULL, 0, network_irq_clear);
|
||||
}
|
||||
}
|
||||
// else
|
||||
// cpunum_set_input_line(Machine, 0, INPUT_LINE_IRQ2, CLEAR_LINE);
|
||||
// else
|
||||
// cpunum_set_input_line(Machine, 0, INPUT_LINE_IRQ2, CLEAR_LINE);
|
||||
break;
|
||||
}
|
||||
case 2: // Sub ID register
|
||||
|
@ -202,7 +202,7 @@ MACHINE_DRIVER_END
|
||||
*************************/
|
||||
|
||||
/* Euro Jolly X5
|
||||
|
||||
|
||||
CPU:
|
||||
|
||||
1x M30624FGAFP-03001A4 (u1)(main)
|
||||
@ -213,7 +213,7 @@ It has 256 KB of internal flash ROM + 20 KB of RAM.
|
||||
1x OKI M6295 (u22)(sound)
|
||||
1x TDA2003 (u25)(sound)
|
||||
1x LM358M (u23)(sound)
|
||||
1x oscillator 16.000MHz (u20)
|
||||
1x oscillator 16.000MHz (u20)
|
||||
|
||||
|
||||
ROMs:
|
||||
@ -259,7 +259,7 @@ ROM_END
|
||||
|
||||
|
||||
/* Grand Prix
|
||||
|
||||
|
||||
CPU:
|
||||
|
||||
1x M30624FGAFP-251G108 (u21)(main)
|
||||
@ -270,7 +270,7 @@ It has 256 KB of internal flash ROM + 20 KB of RAM.
|
||||
1x OKI M6295 (u2)(sound)
|
||||
1x TDA2003 (u1)(sound)
|
||||
1x LM358M (u23)(sound)
|
||||
1x oscillator 16.000MHz (u9)
|
||||
1x oscillator 16.000MHz (u9)
|
||||
|
||||
|
||||
ROMs:
|
||||
@ -297,7 +297,7 @@ Note:
|
||||
1x red led (d1)
|
||||
1x pushbutton (test mode) (RDP2)
|
||||
|
||||
PCB N° KGS0243-DF070283/03 made in Italy
|
||||
PCB N? KGS0243-DF070283/03 made in Italy
|
||||
|
||||
*/
|
||||
|
||||
|
@ -511,8 +511,8 @@ ROM_END
|
||||
/********** DIFFERENT HARDWARE **********/
|
||||
|
||||
|
||||
/* Mystery Number
|
||||
|
||||
/* Mystery Number
|
||||
|
||||
CPU:
|
||||
|
||||
1x HD64F3048F16 (main)(u2)
|
||||
|
@ -87,7 +87,7 @@ static WRITE16_HANDLER( quizf1_bankswitch_w )
|
||||
/*
|
||||
static WRITE16_HANDLER( unknown_w )
|
||||
{
|
||||
printf("%04x ",data);
|
||||
printf("%04x ",data);
|
||||
}
|
||||
*/
|
||||
|
||||
@ -136,11 +136,11 @@ static ADDRESS_MAP_START( dynablsb_cpu_io, ADDRESS_SPACE_IO, 16 )
|
||||
AM_RANGE(0x00, 0x01) AM_READ(input_port_0_word_r) /* Player 1 & Player 2 */
|
||||
AM_RANGE(0x02, 0x03) AM_WRITE(m90_coincounter_w)
|
||||
AM_RANGE(0x02, 0x03) AM_READ(input_port_1_word_r) /* Coins */
|
||||
// AM_RANGE(0x04, 0x05) AM_WRITE(unknown_w) /* dynablsb: write continuosly 0x6000 */
|
||||
// AM_RANGE(0x04, 0x05) AM_WRITE(unknown_w) /* dynablsb: write continuosly 0x6000 */
|
||||
AM_RANGE(0x04, 0x05) AM_READ(input_port_2_word_r) /* Dip 1 & Dip 2 */
|
||||
AM_RANGE(0x06, 0x07) AM_READ(input_port_3_word_r) /* Player 3 & Player 4 */
|
||||
AM_RANGE(0x80, 0x8f) AM_WRITE(m90_video_control_w)
|
||||
// AM_RANGE(0x90, 0x91) AM_WRITE(unknown_w)
|
||||
// AM_RANGE(0x90, 0x91) AM_WRITE(unknown_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -404,169 +404,169 @@ INPUT_PORTS_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Neo-Geo game pcb infos:
|
||||
=======================
|
||||
Neo-Geo game pcb infos:
|
||||
=======================
|
||||
|
||||
The Neo-Geo games for AES (home) and MVS (arcade) systems are cartridge based.
|
||||
The Neo-Geo games for AES (home) and MVS (arcade) systems are cartridge based.
|
||||
|
||||
Each cartridge consists of two pcb's: CHA and PROG.
|
||||
Each cartridge consists of two pcb's: CHA and PROG.
|
||||
|
||||
CHA pcb contains gfx data ('C' - rom), text layer data ('S' - rom) and sound driver ('M' - rom).
|
||||
PROG pcb contains sample data ('V' - rom) and program code ('P' - rom).
|
||||
CHA pcb contains gfx data ('C' - rom), text layer data ('S' - rom) and sound driver ('M' - rom).
|
||||
PROG pcb contains sample data ('V' - rom) and program code ('P' - rom).
|
||||
|
||||
On most pcb's various custom/protection chips can also be found:
|
||||
On most pcb's various custom/protection chips can also be found:
|
||||
|
||||
CHA:
|
||||
. NEO-273
|
||||
. NEO-CMC
|
||||
. NEO-ZMC
|
||||
. NEO-ZMC2
|
||||
. PRO-CT0
|
||||
. SNK-9201
|
||||
CHA:
|
||||
. NEO-273
|
||||
. NEO-CMC
|
||||
. NEO-ZMC
|
||||
. NEO-ZMC2
|
||||
. PRO-CT0
|
||||
. SNK-9201
|
||||
|
||||
PROG:
|
||||
. ALTERA
|
||||
. NEO-COMA
|
||||
. NEO-PCM2 (SNK 1999)
|
||||
. NEO-PCM2 (PLAYMORE 2002)
|
||||
. NEO-PVC
|
||||
. NEO-SMA
|
||||
. PCM
|
||||
. PRO-CT0
|
||||
. SNK-9201
|
||||
PROG:
|
||||
. ALTERA
|
||||
. NEO-COMA
|
||||
. NEO-PCM2 (SNK 1999)
|
||||
. NEO-PCM2 (PLAYMORE 2002)
|
||||
. NEO-PVC
|
||||
. NEO-SMA
|
||||
. PCM
|
||||
. PRO-CT0
|
||||
. SNK-9201
|
||||
|
||||
|
||||
Known pcb's:
|
||||
============
|
||||
Known pcb's:
|
||||
============
|
||||
|
||||
MVS CHA:
|
||||
-- SNK --
|
||||
. NEO-MVS CHA-32
|
||||
. NEO-MVS CHA-8M
|
||||
. NEO-MVS CHA42G
|
||||
. NEO-MVS CHA42G-1
|
||||
. NEO-MVS CHA 42G-2
|
||||
. NEO-MVS CHA 42G-3
|
||||
. NEO-MVS CHA42G-3B
|
||||
. NEO-MVS CHA256
|
||||
. NEO-MVS CHA256B
|
||||
. NEO-MVS PSTM CHA136
|
||||
. NEO-MVS CHA512Y
|
||||
. NEO-MVS CHAFIO (1999.6.14)
|
||||
. MVS CHAFIO REV1.0 (KOF-2001)
|
||||
. NEO-MVS CHAFIO (SNK 2002) - MADE IN KOREA
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-MVS CHAFIO (2003.7.24)
|
||||
MVS CHA:
|
||||
-- SNK --
|
||||
. NEO-MVS CHA-32
|
||||
. NEO-MVS CHA-8M
|
||||
. NEO-MVS CHA42G
|
||||
. NEO-MVS CHA42G-1
|
||||
. NEO-MVS CHA 42G-2
|
||||
. NEO-MVS CHA 42G-3
|
||||
. NEO-MVS CHA42G-3B
|
||||
. NEO-MVS CHA256
|
||||
. NEO-MVS CHA256B
|
||||
. NEO-MVS PSTM CHA136
|
||||
. NEO-MVS CHA512Y
|
||||
. NEO-MVS CHAFIO (1999.6.14)
|
||||
. MVS CHAFIO REV1.0 (KOF-2001)
|
||||
. NEO-MVS CHAFIO (SNK 2002) - MADE IN KOREA
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-MVS CHAFIO (2003.7.24)
|
||||
|
||||
MVS PROG:
|
||||
-- SNK --
|
||||
. NEO-MVS PROG-HERO
|
||||
. NEO-MVS PROG-EP
|
||||
. NEO-MVS PROG8M42
|
||||
. NEO-MVS PROG16
|
||||
. NEO-MVS PROG42G
|
||||
. NEO-MVS PROG42G-1
|
||||
. NEO-MVS PROG-G2
|
||||
. NEO-MVS PROG 4096
|
||||
. NEO-MVS PROG 4096 B
|
||||
. NEO-MVS PROGGSC
|
||||
. NEO-MVS PROGGS3
|
||||
. NEO-MVS PROGTOP
|
||||
. NEO-MVS PROGSF1 (1998.6.17)
|
||||
. NEO-MVS PROGEOP (1999.2.2)
|
||||
. NEO-MVS PROGLBA (1999.4.12) - LBA-SUB (2000.2.24)
|
||||
. NEO-MVS PROGBK1
|
||||
. NEO-MVS PROGBK2 (2000.3.21)
|
||||
. MVS PROGBK2 REV1.0 (KOF-2001)
|
||||
. NEO-MVS PROGBK2 (SNK 2002) - MADE IN KOREA
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-MVS PROGBK2R (2003.8.26) - NEO-HYCS (2003.9.29)
|
||||
. NEO-MVS PROGBK3R (2003.9.2) - NEO-HYCS (2003.9.29)
|
||||
. NEO-MVS PROGBK3S (2003.10.1)
|
||||
. NEO-MVS PROGBK2S (2003.10.xx)
|
||||
MVS PROG:
|
||||
-- SNK --
|
||||
. NEO-MVS PROG-HERO
|
||||
. NEO-MVS PROG-EP
|
||||
. NEO-MVS PROG8M42
|
||||
. NEO-MVS PROG16
|
||||
. NEO-MVS PROG42G
|
||||
. NEO-MVS PROG42G-1
|
||||
. NEO-MVS PROG-G2
|
||||
. NEO-MVS PROG 4096
|
||||
. NEO-MVS PROG 4096 B
|
||||
. NEO-MVS PROGGSC
|
||||
. NEO-MVS PROGGS3
|
||||
. NEO-MVS PROGTOP
|
||||
. NEO-MVS PROGSF1 (1998.6.17)
|
||||
. NEO-MVS PROGEOP (1999.2.2)
|
||||
. NEO-MVS PROGLBA (1999.4.12) - LBA-SUB (2000.2.24)
|
||||
. NEO-MVS PROGBK1
|
||||
. NEO-MVS PROGBK2 (2000.3.21)
|
||||
. MVS PROGBK2 REV1.0 (KOF-2001)
|
||||
. NEO-MVS PROGBK2 (SNK 2002) - MADE IN KOREA
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-MVS PROGBK2R (2003.8.26) - NEO-HYCS (2003.9.29)
|
||||
. NEO-MVS PROGBK3R (2003.9.2) - NEO-HYCS (2003.9.29)
|
||||
. NEO-MVS PROGBK3S (2003.10.1)
|
||||
. NEO-MVS PROGBK2S (2003.10.xx)
|
||||
|
||||
|
||||
AES CHA:
|
||||
-- SNK --
|
||||
. NEO-AEG CHA-32
|
||||
. NEO-AEG CHA-8M
|
||||
. NEO-AEG CHA42G
|
||||
. NEO-AEG CHA42G-1
|
||||
. NEO-AEG CHA42G-2B
|
||||
. NEO-AEG CHA42G-3
|
||||
. NEO-AEG CHA42G-4
|
||||
. NEO-AEG CHA256
|
||||
. NEO-AEG CHA256[B]
|
||||
. NEO-AEG CHA256RY
|
||||
. NEO-AEG CHA512Y
|
||||
. NEO-AEG CHAFIO (1999.8.10)
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-AEG CHAFIO (2003.7.24)
|
||||
AES CHA:
|
||||
-- SNK --
|
||||
. NEO-AEG CHA-32
|
||||
. NEO-AEG CHA-8M
|
||||
. NEO-AEG CHA42G
|
||||
. NEO-AEG CHA42G-1
|
||||
. NEO-AEG CHA42G-2B
|
||||
. NEO-AEG CHA42G-3
|
||||
. NEO-AEG CHA42G-4
|
||||
. NEO-AEG CHA256
|
||||
. NEO-AEG CHA256[B]
|
||||
. NEO-AEG CHA256RY
|
||||
. NEO-AEG CHA512Y
|
||||
. NEO-AEG CHAFIO (1999.8.10)
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-AEG CHAFIO (2003.7.24)
|
||||
|
||||
AES PROG:
|
||||
-- SNK --
|
||||
. NEO-AEG PROG-NAM
|
||||
. NEO-AEG PROG-HERO
|
||||
. NEO-AEG PROG-4A
|
||||
. NEO-AEG PROG-4B
|
||||
. NEO-AEG PROG 8M42
|
||||
. NEO-AEG PROG B
|
||||
. NEO-AEG PROG16
|
||||
. NEO-AEG PROG42G
|
||||
. NEO-AEG PROG42G-COM
|
||||
. NEO-AEG PROG42G-1
|
||||
. NEO-AEG PROG-G2
|
||||
. NEO-AEG PROG4096 B
|
||||
. NEO-AEG PROGGS
|
||||
. NEO-AEG PROGTOP2
|
||||
. NEO-AEG PROGLBA (1999.7.6)
|
||||
. NEO-AEG PROGRK
|
||||
. NEO-AEG PROGRKB
|
||||
. NEO-AEG PROGBK1Y
|
||||
. NEO-AEG PROGBK1F
|
||||
-- PLAYMORE --
|
||||
. NEO-AEG PROGBK2 (2002.4.1)
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-AEG PROGBK3R (2003.8.29) - NEO-HYCS (2003.9.29)
|
||||
AES PROG:
|
||||
-- SNK --
|
||||
. NEO-AEG PROG-NAM
|
||||
. NEO-AEG PROG-HERO
|
||||
. NEO-AEG PROG-4A
|
||||
. NEO-AEG PROG-4B
|
||||
. NEO-AEG PROG 8M42
|
||||
. NEO-AEG PROG B
|
||||
. NEO-AEG PROG16
|
||||
. NEO-AEG PROG42G
|
||||
. NEO-AEG PROG42G-COM
|
||||
. NEO-AEG PROG42G-1
|
||||
. NEO-AEG PROG-G2
|
||||
. NEO-AEG PROG4096 B
|
||||
. NEO-AEG PROGGS
|
||||
. NEO-AEG PROGTOP2
|
||||
. NEO-AEG PROGLBA (1999.7.6)
|
||||
. NEO-AEG PROGRK
|
||||
. NEO-AEG PROGRKB
|
||||
. NEO-AEG PROGBK1Y
|
||||
. NEO-AEG PROGBK1F
|
||||
-- PLAYMORE --
|
||||
. NEO-AEG PROGBK2 (2002.4.1)
|
||||
-- SNKPLAYMORE --
|
||||
. NEO-AEG PROGBK3R (2003.8.29) - NEO-HYCS (2003.9.29)
|
||||
|
||||
|
||||
Cartridge colours:
|
||||
==================
|
||||
Cartridge colours:
|
||||
==================
|
||||
|
||||
MVS cartridges were produced in different colours.
|
||||
|
||||
Known cartridge colours:
|
||||
. Black
|
||||
. Green
|
||||
. Grey
|
||||
. Transparent
|
||||
. Transparent Blue
|
||||
. Transparent Green
|
||||
. White
|
||||
. Yellow
|
||||
MVS cartridges were produced in different colours.
|
||||
|
||||
The above listed only covers SNK / PLAYMORE / SNKPLAYMORE pcb's. There also exists a
|
||||
wide range of 'bootleg' pcb's.
|
||||
Known cartridge colours:
|
||||
. Black
|
||||
. Green
|
||||
. Grey
|
||||
. Transparent
|
||||
. Transparent Blue
|
||||
. Transparent Green
|
||||
. White
|
||||
. Yellow
|
||||
|
||||
Neo-Geo game pcb infos by Johnboy
|
||||
The above listed only covers SNK / PLAYMORE / SNKPLAYMORE pcb's. There also exists a
|
||||
wide range of 'bootleg' pcb's.
|
||||
|
||||
Neo-Geo game pcb infos by Johnboy
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
General set notes:
|
||||
==================
|
||||
General set notes:
|
||||
==================
|
||||
|
||||
NOTES BELOW APPLY TO OEM SETS ONLY!
|
||||
NOTES BELOW APPLY TO OEM SETS ONLY!
|
||||
|
||||
Many 'M1' roms contain mirrored data (64k mirrored or 128k mirrored).
|
||||
Found on several early sets (ID 0001 ~ 0045) and on the last sets (ID 0267 ~ 0272).
|
||||
This caused some confusion and incorrect rom sizes.
|
||||
Minimum 'M1' size is 1mbit, maximum size 4mbit.
|
||||
The remaining 64k 'M1' are marked BAD_DUMP.
|
||||
Many 'M1' roms contain mirrored data (64k mirrored or 128k mirrored).
|
||||
Found on several early sets (ID 0001 ~ 0045) and on the last sets (ID 0267 ~ 0272).
|
||||
This caused some confusion and incorrect rom sizes.
|
||||
Minimum 'M1' size is 1mbit, maximum size 4mbit.
|
||||
The remaining 64k 'M1' are marked BAD_DUMP.
|
||||
|
||||
All 'S1' roms found on prom are 1mbit.
|
||||
The remainig 64k 'S1' are marked BAD_DUMP.
|
||||
All 'S1' roms found on prom are 1mbit.
|
||||
The remainig 64k 'S1' are marked BAD_DUMP.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -2689,8 +2689,8 @@ ROM_END
|
||||
|
||||
ROM_START( pbobblen ) /* MVS VERSION */
|
||||
/* This set uses CHA and PROG board from Power Spikes II. Six Power Spikes II prom's are replaced with
|
||||
Puzzle Bobble prom's. Confirmed on two original carts. Do other layouts also exist? Later production run set? */
|
||||
|
||||
Puzzle Bobble prom's. Confirmed on two original carts. Do other layouts also exist? Later production run set? */
|
||||
|
||||
ROM_REGION( 0x100000, NEOGEO_REGION_MAIN_CPU_CARTRIDGE, 0 )
|
||||
ROM_LOAD16_WORD_SWAP( "d96-07.ep1", 0x000000, 0x080000, CRC(6102ca14) SHA1(328429d11de5b327a0654ae0548da4d0025a2ae6) )
|
||||
|
||||
|
@ -35,7 +35,7 @@ static WRITE8_HANDLER( subsino_tiles_offset_w )
|
||||
{
|
||||
tiles_offset = (data & 1) ? 0x1000: 0;
|
||||
tilemap_mark_tile_dirty(tmap, offset);
|
||||
// popmessage("gfx %02x",data);
|
||||
// popmessage("gfx %02x",data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( subsino_videoram_w )
|
||||
@ -94,12 +94,12 @@ static PALETTE_INIT( subsino_depth4 )
|
||||
static WRITE8_HANDLER( subsino_out_a_w )
|
||||
{
|
||||
coin_counter_w( 0, data & 0x02 );
|
||||
// popmessage("Out A %02x",data);
|
||||
// popmessage("Out A %02x",data);
|
||||
}
|
||||
static WRITE8_HANDLER( subsino_out_b_w )
|
||||
{
|
||||
// leds
|
||||
// popmessage("Out B %02x",data);
|
||||
// popmessage("Out B %02x",data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( srider_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -278,7 +278,7 @@ static MACHINE_DRIVER_START( victor5 )
|
||||
MDRV_GFXDECODE(subsino_depth3)
|
||||
MDRV_PALETTE_LENGTH(0x100)
|
||||
|
||||
// MDRV_PALETTE_INIT(subsino_depth3) // no proms?
|
||||
// MDRV_PALETTE_INIT(subsino_depth3) // no proms?
|
||||
MDRV_VIDEO_START(subsino)
|
||||
MDRV_VIDEO_UPDATE(subsino)
|
||||
|
||||
@ -421,7 +421,7 @@ Sticker on PCB reads V12040
|
||||
Info by f205v, Corrado Tomaselli (20/04/2008)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
ROM_START( victor21 )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 )
|
||||
ROM_LOAD( "1.u1", 0x00000, 0x10000, CRC(43999b2d) SHA1(7ce26fd332ffe35fd826a1a6166b228d4bc370b8) )
|
||||
|
@ -1,12 +1,12 @@
|
||||
/*
|
||||
|
||||
TODO:
|
||||
TODO:
|
||||
|
||||
- LDV1000 mode
|
||||
- PR7820 INT/_EXT line
|
||||
- coin counter
|
||||
- convert SSI-263 to a sound device
|
||||
- dump laserdisc
|
||||
- LDV1000 mode
|
||||
- PR7820 INT/_EXT line
|
||||
- coin counter
|
||||
- convert SSI-263 to a sound device
|
||||
- dump laserdisc
|
||||
|
||||
*/
|
||||
|
||||
@ -82,18 +82,18 @@ static READ8_HANDLER( irqstate_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0
|
||||
1
|
||||
2 SSI263 A/_R
|
||||
3 tied to +5V
|
||||
4 _TIMER INT
|
||||
5 _DATA RDY INT
|
||||
6 _CART PRES
|
||||
7
|
||||
0
|
||||
1
|
||||
2 SSI263 A/_R
|
||||
3 tied to +5V
|
||||
4 _TIMER INT
|
||||
5 _DATA RDY INT
|
||||
6 _CART PRES
|
||||
7
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
return (data_rdy_int << 5) | (timer_int << 4) | 0x08 | (ssi_data_request << 2);
|
||||
}
|
||||
@ -116,14 +116,14 @@ static WRITE8_HANDLER( cop_d_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
D0 _TIMER INT
|
||||
D1 _DATA RDY INT
|
||||
D2
|
||||
D3
|
||||
D0 _TIMER INT
|
||||
D1 _DATA RDY INT
|
||||
D2
|
||||
D3
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
if (!BIT(data, 0))
|
||||
{
|
||||
@ -178,14 +178,14 @@ static READ8_HANDLER( cop_g_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
G0 U16 Q0
|
||||
G1 U16 Q1
|
||||
G2 U16 Q2
|
||||
G3
|
||||
G0 U16 Q0
|
||||
G1 U16 Q1
|
||||
G2 U16 Q2
|
||||
G3
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
return cop_cmd_latch;
|
||||
}
|
||||
@ -194,18 +194,18 @@ static WRITE8_HANDLER( control_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0
|
||||
1 _CS128A
|
||||
2 _BANKSEL1
|
||||
3
|
||||
4
|
||||
5 COP G0
|
||||
6 COP G1
|
||||
7 COP G2
|
||||
0
|
||||
1 _CS128A
|
||||
2 _BANKSEL1
|
||||
3
|
||||
4
|
||||
5 COP G0
|
||||
6 COP G1
|
||||
7 COP G2
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
cop_cmd_latch = (data >> 5) & 0x07;
|
||||
}
|
||||
@ -214,14 +214,14 @@ static WRITE8_HANDLER( cop_g_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
G0
|
||||
G1
|
||||
G2
|
||||
G3 U17 enable
|
||||
G0
|
||||
G1
|
||||
G2
|
||||
G3 U17 enable
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
cop_data_latch_enable = BIT(data, 3);
|
||||
}
|
||||
@ -234,11 +234,11 @@ static READ8_HANDLER(cop_si_r)
|
||||
|
||||
/*
|
||||
|
||||
Serial communications format
|
||||
Serial communications format
|
||||
|
||||
1, 1, 0, 1, Q8, P0, P1, P2, P3, 0
|
||||
1, 1, 0, 1, Q8, P0, P1, P2, P3, 0
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
switch (rx_bit)
|
||||
{
|
||||
@ -298,18 +298,18 @@ static WRITE8_HANDLER( control2_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0
|
||||
1 _RESOI (?)
|
||||
2 _ENCARTDET
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
0
|
||||
1 _RESOI (?)
|
||||
2 _ENCARTDET
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
if (!BIT(data, 2) & cart_present)
|
||||
{
|
||||
@ -336,18 +336,18 @@ static WRITE8_HANDLER( laserdsc_control_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4 coin counter
|
||||
5 U16 output enable
|
||||
6 ENTER if switch B5 closed
|
||||
7 INT/_EXT
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4 coin counter
|
||||
5 U16 output enable
|
||||
6 ENTER if switch B5 closed
|
||||
7 INT/_EXT
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
coin_counter_w(0, BIT(data, 4));
|
||||
|
||||
@ -376,18 +376,18 @@ static WRITE8_HANDLER( den1_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0 DD0
|
||||
1 DD1
|
||||
2 DD2
|
||||
3 DD3
|
||||
4 DA0
|
||||
5 DA1
|
||||
6 DA2
|
||||
7 DA3
|
||||
0 DD0
|
||||
1 DD1
|
||||
2 DD2
|
||||
3 DD3
|
||||
4 DA0
|
||||
5 DA1
|
||||
6 DA2
|
||||
7 DA3
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
output_set_digit_value(data >> 4, led_map[data & 0x0f]);
|
||||
}
|
||||
@ -396,29 +396,29 @@ static WRITE8_HANDLER( den2_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
bit description
|
||||
|
||||
0 DD0
|
||||
1 DD1
|
||||
2 DD2
|
||||
3 DD3
|
||||
4 DA0
|
||||
5 DA1
|
||||
6 DA2
|
||||
7 DA3
|
||||
0 DD0
|
||||
1 DD1
|
||||
2 DD2
|
||||
3 DD3
|
||||
4 DA0
|
||||
5 DA1
|
||||
6 DA2
|
||||
7 DA3
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
output_set_digit_value(8 + (data >> 4), led_map[data & 0x0f]);
|
||||
}
|
||||
|
||||
/* SSI-263 */
|
||||
|
||||
/*
|
||||
/*
|
||||
|
||||
The following information is from the SSI-263A data sheet.
|
||||
The following information is from the SSI-263A data sheet.
|
||||
|
||||
Thayer's Quest uses an SSI-263, so this might be inaccurate, but it works for now
|
||||
Thayer's Quest uses an SSI-263, so this might be inaccurate, but it works for now
|
||||
|
||||
*/
|
||||
|
||||
@ -426,7 +426,7 @@ static WRITE8_HANDLER( den2_w )
|
||||
|
||||
static const char SSI263_PHONEMES[0x40][5] =
|
||||
{
|
||||
"PA", "E", "E1", "Y", "YI", "AY", "IE", "I", "A", "AI", "EH", "EH1", "AE", "AE1", "AH", "AH1", "W", "O", "OU", "OO", "IU", "IU1", "U", "U1", "UH", "UH1", "UH2", "UH3", "ER", "R", "R1", "R2",
|
||||
"PA", "E", "E1", "Y", "YI", "AY", "IE", "I", "A", "AI", "EH", "EH1", "AE", "AE1", "AH", "AH1", "W", "O", "OU", "OO", "IU", "IU1", "U", "U1", "UH", "UH1", "UH2", "UH3", "ER", "R", "R1", "R2",
|
||||
"L", "L1", "LF", "W", "B", "D", "KV", "P", "T", "K", "HV", "HVC", "HF", "HFC", "HN", "Z", "S", "J", "SCH", "V", "F", "THV", "TH", "M", "N", "NG", ":A", ":OH", ":U", ":UH", "E2", "LB"
|
||||
};
|
||||
|
||||
@ -570,7 +570,7 @@ static ADDRESS_MAP_START( thayers_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x00, 0x07) AM_READWRITE(ssi263_register_r, ssi263_register_w)
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(control_w)
|
||||
AM_RANGE(0x40, 0x40) AM_READWRITE(irqstate_r, control2_w)
|
||||
AM_RANGE(0x80, 0x80) AM_READWRITE(cop_data_r, cop_data_w)
|
||||
AM_RANGE(0x80, 0x80) AM_READWRITE(cop_data_r, cop_data_w)
|
||||
AM_RANGE(0xa0, 0xa0) AM_WRITE(timer_int_ack_w)
|
||||
AM_RANGE(0xc0, 0xc0) AM_WRITE(data_rdy_int_ack_w)
|
||||
AM_RANGE(0xf0, 0xf0) AM_READ(laserdsc_data_r)
|
||||
@ -578,7 +578,7 @@ static ADDRESS_MAP_START( thayers_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0xf2, 0xf2) AM_READ_PORT("DSWA")
|
||||
AM_RANGE(0xf3, 0xf3) AM_WRITE(intrq_w)
|
||||
AM_RANGE(0xf4, 0xf4) AM_WRITE(laserdsc_data_w)
|
||||
AM_RANGE(0xf5, 0xf5) AM_WRITE(laserdsc_control_w)
|
||||
AM_RANGE(0xf5, 0xf5) AM_WRITE(laserdsc_control_w)
|
||||
AM_RANGE(0xf6, 0xf6) AM_WRITE(den1_w)
|
||||
AM_RANGE(0xf7, 0xf7) AM_WRITE(den2_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -824,6 +824,6 @@ ROM_END
|
||||
|
||||
/* Game Drivers */
|
||||
|
||||
/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS LAYOUT */
|
||||
/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS LAYOUT */
|
||||
GAMEL( 1984, thayers, 0, thayers, thayers, 0, ROT0, "RDI Video Systems", "Thayer's Quest", GAME_NOT_WORKING | GAME_NO_SOUND, layout_dlair)
|
||||
GAMEL( 1984, thayersa, thayers, thayers, thayers, 0, ROT0, "RDI Video Systems", "Thayer's Quest (Alternate Set)", GAME_NOT_WORKING | GAME_NO_SOUND, layout_dlair)
|
||||
|
@ -37,7 +37,7 @@ void deco16_tilemap_4_draw(bitmap_t *bitmap, const rectangle *cliprect, int flag
|
||||
void deco16_tilemap_34_combine_draw(bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority);
|
||||
|
||||
void deco16_clear_sprite_priority_bitmap(void);
|
||||
void deco16_pdrawgfx(running_machine *machine,
|
||||
void deco16_pdrawgfx(running_machine *machine,
|
||||
bitmap_t *dest,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
const rectangle *clip,int transparency,int transparent_color,UINT32 pri_mask,UINT32 sprite_mask,UINT8 write_pri);
|
||||
|
@ -346,7 +346,7 @@ static WRITE8_HANDLER( combascb_sh_irqtrigger_w )
|
||||
static READ8_HANDLER( combascb_io_r )
|
||||
{
|
||||
static const char *portnames[] = { "IN0", "IN1", "DSW1", "DSW2" };
|
||||
|
||||
|
||||
return input_port_read(machine, portnames[offset]);
|
||||
}
|
||||
|
||||
|
@ -1362,7 +1362,7 @@ void mshuttle_extend_sprite_info(const UINT8 *base, UINT8 *sx, UINT8 *sy, UINT8
|
||||
void calipso_extend_sprite_info(const UINT8 *base, UINT8 *sx, UINT8 *sy, UINT8 *flipx, UINT8 *flipy, UINT16 *code, UINT8 *color)
|
||||
{
|
||||
/* same as the others, but no sprite flipping, but instead the bits are used
|
||||
as extra sprite code bits, giving 256 sprite images */
|
||||
as extra sprite code bits, giving 256 sprite images */
|
||||
/* No flips */
|
||||
*code = base[1];
|
||||
*flipx = 0;
|
||||
|
@ -242,7 +242,7 @@ INLINE void get_crosshair_xy(running_machine *machine, int player, int *x, int *
|
||||
int width = visarea->max_x + 1 - visarea->min_x;
|
||||
int height = visarea->max_y + 1 - visarea->min_y;
|
||||
/* only 2 lightguns are connected */
|
||||
*x = visarea->min_x + (((input_port_read(machine, player ? "FAKE2_X" : "FAKE1_X") & 0xff) * width) >> 8);
|
||||
*x = visarea->min_x + (((input_port_read(machine, player ? "FAKE2_X" : "FAKE1_X") & 0xff) * width) >> 8);
|
||||
*y = visarea->min_y + (((input_port_read(machine, player ? "FAKE2_Y" : "FAKE1_Y") & 0xff) * height) >> 8);
|
||||
}
|
||||
|
||||
|
@ -262,7 +262,7 @@ static void dynablsb_draw_sprites(running_machine *machine, bitmap_t *bitmap,con
|
||||
WRITE16_HANDLER( m90_video_control_w )
|
||||
{
|
||||
COMBINE_DATA(&m90_video_control_data[offset]);
|
||||
// printf("%04x-%04x ",offset,m90_video_control_data[offset]);
|
||||
// printf("%04x-%04x ",offset,m90_video_control_data[offset]);
|
||||
}
|
||||
|
||||
static void markdirty(tilemap *tmap,int page,offs_t offset)
|
||||
|
@ -29,7 +29,7 @@ static bitmap_t *tilemap_bitmapflags_higher;
|
||||
/* draws ROZ with linescroll OR columnscroll to 16-bit indexed bitmap */
|
||||
static void suprnova_draw_roz(bitmap_t* bitmap, bitmap_t* bitmapflags, const rectangle *cliprect, tilemap *tmap, UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, UINT32* scrollram)
|
||||
{
|
||||
// const pen_t *clut = &Machine->pens[0];
|
||||
// const pen_t *clut = &Machine->pens[0];
|
||||
//bitmap_t *destbitmap = bitmap;
|
||||
bitmap_t *srcbitmap = tilemap_get_pixmap(tmap);
|
||||
bitmap_t *srcbitmapflags = tilemap_get_flagsmap(tmap);
|
||||
@ -46,7 +46,7 @@ static void suprnova_draw_roz(bitmap_t* bitmap, bitmap_t* bitmapflags, const rec
|
||||
int ey;
|
||||
UINT16 *dest;
|
||||
UINT8* destflags;
|
||||
// UINT8 *pri;
|
||||
// UINT8 *pri;
|
||||
//const UINT16 *src;
|
||||
//const UINT8 *maskptr;
|
||||
//int destadvance = destbitmap->bpp / 8;
|
||||
@ -98,7 +98,7 @@ static void suprnova_draw_roz(bitmap_t* bitmap, bitmap_t* bitmapflags, const rec
|
||||
x++;
|
||||
dest++;
|
||||
destflags++;
|
||||
// pri++;
|
||||
// pri++;
|
||||
}
|
||||
|
||||
/* advance in Y */
|
||||
@ -1075,7 +1075,7 @@ VIDEO_UPDATE(skns)
|
||||
UINT16 pri, pri2, pri3;
|
||||
UINT16 bgpri;
|
||||
const pen_t *clut = &Machine->pens[0];
|
||||
// int drawpri;
|
||||
// int drawpri;
|
||||
|
||||
|
||||
for (y=0;y<240;y++)
|
||||
@ -1225,5 +1225,5 @@ VIDEO_UPDATE(skns)
|
||||
|
||||
VIDEO_EOF(skns)
|
||||
{
|
||||
// buffer_spriteram32_w(machine,0,0,0xffffffff);
|
||||
// buffer_spriteram32_w(machine,0,0,0xffffffff);
|
||||
}
|
||||
|
@ -630,7 +630,7 @@ extent_x=extent_y=0;
|
||||
|
||||
for (w=0; w<x_width; w++) {
|
||||
if (rotate)
|
||||
roundupt_drawgfxzoomrotate(machine,
|
||||
roundupt_drawgfxzoomrotate(machine,
|
||||
temp_bitmap,machine->gfx[0],
|
||||
base,
|
||||
color,fx,0,x_pos,render_y,
|
||||
|
@ -9,4 +9,4 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
const char build_version[] = "0.125u4 ("__DATE__")";
|
||||
const char build_version[] = "0.125u5 ("__DATE__")";
|
||||
|
Loading…
Reference in New Issue
Block a user