mirror of
https://github.com/holub/mame
synced 2025-05-18 19:49:35 +03:00
Cleanups and version bump.
This commit is contained in:
parent
55480e3ce9
commit
e3f1f454f8
@ -3,7 +3,7 @@
|
||||
* 4004dasm.c
|
||||
*
|
||||
* Intel 4004 CPU Disassembly
|
||||
*
|
||||
*
|
||||
* Initial version by Miodrag Milanovic
|
||||
*
|
||||
*****************************************************************************/
|
||||
@ -18,7 +18,7 @@ CPU_DISASSEMBLE( i4004 )
|
||||
UINT32 flags = 0;
|
||||
UINT8 op;
|
||||
unsigned PC = pc;
|
||||
UINT16 page = PC & 0x0f00;
|
||||
UINT16 page = PC & 0x0f00;
|
||||
switch (op = OP(pc++))
|
||||
{
|
||||
case 0x00: sprintf (buffer,"nop"); break;
|
||||
@ -26,75 +26,75 @@ CPU_DISASSEMBLE( i4004 )
|
||||
case 0x12: sprintf (buffer,"jc $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x14: sprintf (buffer,"jz $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x19: sprintf (buffer,"jt $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x1a: sprintf (buffer,"jnc $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x1c: sprintf (buffer,"jnz $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x10: case 0x13: case 0x15: case 0x16:
|
||||
case 0x17: case 0x18: case 0x1b: case 0x1d:
|
||||
case 0x1e: case 0x1f:
|
||||
case 0x1a: sprintf (buffer,"jnc $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x1c: sprintf (buffer,"jnz $%03x",page | ARG(pc)); pc++; break;
|
||||
case 0x10: case 0x13: case 0x15: case 0x16:
|
||||
case 0x17: case 0x18: case 0x1b: case 0x1d:
|
||||
case 0x1e: case 0x1f:
|
||||
sprintf (buffer,"jcn $%01x,$%03x",op & 0x0f,page | ARG(pc)); pc++; break;
|
||||
case 0x20: case 0x22: case 0x24: case 0x26:
|
||||
case 0x28: case 0x2a: case 0x2c: case 0x2e:
|
||||
case 0x20: case 0x22: case 0x24: case 0x26:
|
||||
case 0x28: case 0x2a: case 0x2c: case 0x2e:
|
||||
sprintf (buffer,"fim $%01x,$%02x",op & 0x0f,OP(pc)); pc++; break;
|
||||
case 0x21: case 0x23: case 0x25: case 0x27:
|
||||
case 0x29: case 0x2b: case 0x2d: case 0x2f:
|
||||
case 0x21: case 0x23: case 0x25: case 0x27:
|
||||
case 0x29: case 0x2b: case 0x2d: case 0x2f:
|
||||
sprintf (buffer,"src $%01x",(op & 0x0f)-1); break;
|
||||
case 0x30: case 0x32: case 0x34: case 0x36:
|
||||
case 0x38: case 0x3a: case 0x3c: case 0x3e:
|
||||
case 0x30: case 0x32: case 0x34: case 0x36:
|
||||
case 0x38: case 0x3a: case 0x3c: case 0x3e:
|
||||
sprintf (buffer,"fin $%01x",op & 0x0f); break;
|
||||
case 0x31: case 0x33: case 0x35: case 0x37:
|
||||
case 0x39: case 0x3b: case 0x3d: case 0x3f:
|
||||
case 0x31: case 0x33: case 0x35: case 0x37:
|
||||
case 0x39: case 0x3b: case 0x3d: case 0x3f:
|
||||
sprintf (buffer,"jin $%01x",(op & 0x0f)-1); break;
|
||||
case 0x40: case 0x41: case 0x42: case 0x43:
|
||||
case 0x44: case 0x45: case 0x46: case 0x47:
|
||||
case 0x48: case 0x49: case 0x4a: case 0x4b:
|
||||
case 0x4c: case 0x4d: case 0x4e: case 0x4f:
|
||||
case 0x40: case 0x41: case 0x42: case 0x43:
|
||||
case 0x44: case 0x45: case 0x46: case 0x47:
|
||||
case 0x48: case 0x49: case 0x4a: case 0x4b:
|
||||
case 0x4c: case 0x4d: case 0x4e: case 0x4f:
|
||||
sprintf (buffer,"jun $%01x%02x",op & 0x0f,ARG(pc)); pc++; break;
|
||||
case 0x50: case 0x51: case 0x52: case 0x53:
|
||||
case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b:
|
||||
case 0x5c: case 0x5d: case 0x5e: case 0x5f:
|
||||
case 0x50: case 0x51: case 0x52: case 0x53:
|
||||
case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b:
|
||||
case 0x5c: case 0x5d: case 0x5e: case 0x5f:
|
||||
sprintf (buffer,"jms $%01x%02x",op & 0x0f,ARG(pc)); pc++; break;
|
||||
case 0x60: case 0x61: case 0x62: case 0x63:
|
||||
case 0x64: case 0x65: case 0x66: case 0x67:
|
||||
case 0x68: case 0x69: case 0x6a: case 0x6b:
|
||||
case 0x6c: case 0x6d: case 0x6e: case 0x6f:
|
||||
case 0x60: case 0x61: case 0x62: case 0x63:
|
||||
case 0x64: case 0x65: case 0x66: case 0x67:
|
||||
case 0x68: case 0x69: case 0x6a: case 0x6b:
|
||||
case 0x6c: case 0x6d: case 0x6e: case 0x6f:
|
||||
sprintf (buffer,"inc $%01x",op & 0x0f); break;
|
||||
case 0x70: case 0x71: case 0x72: case 0x73:
|
||||
case 0x74: case 0x75: case 0x76: case 0x77:
|
||||
case 0x78: case 0x79: case 0x7a: case 0x7b:
|
||||
case 0x7c: case 0x7d: case 0x7e: case 0x7f:
|
||||
case 0x70: case 0x71: case 0x72: case 0x73:
|
||||
case 0x74: case 0x75: case 0x76: case 0x77:
|
||||
case 0x78: case 0x79: case 0x7a: case 0x7b:
|
||||
case 0x7c: case 0x7d: case 0x7e: case 0x7f:
|
||||
sprintf (buffer,"isz $%01x,%03x",op & 0x0f,page | ARG(pc)); pc++; break;
|
||||
case 0x80: case 0x81: case 0x82: case 0x83:
|
||||
case 0x84: case 0x85: case 0x86: case 0x87:
|
||||
case 0x88: case 0x89: case 0x8a: case 0x8b:
|
||||
case 0x8c: case 0x8d: case 0x8e: case 0x8f:
|
||||
case 0x80: case 0x81: case 0x82: case 0x83:
|
||||
case 0x84: case 0x85: case 0x86: case 0x87:
|
||||
case 0x88: case 0x89: case 0x8a: case 0x8b:
|
||||
case 0x8c: case 0x8d: case 0x8e: case 0x8f:
|
||||
sprintf (buffer,"add $%01x",op & 0x0f); break;
|
||||
case 0x90: case 0x91: case 0x92: case 0x93:
|
||||
case 0x94: case 0x95: case 0x96: case 0x97:
|
||||
case 0x98: case 0x99: case 0x9a: case 0x9b:
|
||||
case 0x9c: case 0x9d: case 0x9e: case 0x9f:
|
||||
case 0x90: case 0x91: case 0x92: case 0x93:
|
||||
case 0x94: case 0x95: case 0x96: case 0x97:
|
||||
case 0x98: case 0x99: case 0x9a: case 0x9b:
|
||||
case 0x9c: case 0x9d: case 0x9e: case 0x9f:
|
||||
sprintf (buffer,"sub $%01x",op & 0x0f); break;
|
||||
case 0xa0: case 0xa1: case 0xa2: case 0xa3:
|
||||
case 0xa4: case 0xa5: case 0xa6: case 0xa7:
|
||||
case 0xa8: case 0xa9: case 0xaa: case 0xab:
|
||||
case 0xac: case 0xad: case 0xae: case 0xaf:
|
||||
case 0xa0: case 0xa1: case 0xa2: case 0xa3:
|
||||
case 0xa4: case 0xa5: case 0xa6: case 0xa7:
|
||||
case 0xa8: case 0xa9: case 0xaa: case 0xab:
|
||||
case 0xac: case 0xad: case 0xae: case 0xaf:
|
||||
sprintf (buffer,"ld $%01x",op & 0x0f); break;
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||
case 0xb4: case 0xb5: case 0xb6: case 0xb7:
|
||||
case 0xb8: case 0xb9: case 0xba: case 0xbb:
|
||||
case 0xbc: case 0xbd: case 0xbe: case 0xbf:
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||
case 0xb4: case 0xb5: case 0xb6: case 0xb7:
|
||||
case 0xb8: case 0xb9: case 0xba: case 0xbb:
|
||||
case 0xbc: case 0xbd: case 0xbe: case 0xbf:
|
||||
sprintf (buffer,"xch $%01x",op & 0x0f); break;
|
||||
case 0xc0: case 0xc1: case 0xc2: case 0xc3:
|
||||
case 0xc4: case 0xc5: case 0xc6: case 0xc7:
|
||||
case 0xc8: case 0xc9: case 0xca: case 0xcb:
|
||||
case 0xcc: case 0xcd: case 0xce: case 0xcf:
|
||||
case 0xc0: case 0xc1: case 0xc2: case 0xc3:
|
||||
case 0xc4: case 0xc5: case 0xc6: case 0xc7:
|
||||
case 0xc8: case 0xc9: case 0xca: case 0xcb:
|
||||
case 0xcc: case 0xcd: case 0xce: case 0xcf:
|
||||
sprintf (buffer,"bbl $%01x",op & 0x0f); break;
|
||||
case 0xd0: case 0xd1: case 0xd2: case 0xd3:
|
||||
case 0xd4: case 0xd5: case 0xd6: case 0xd7:
|
||||
case 0xd8: case 0xd9: case 0xda: case 0xdb:
|
||||
case 0xdc: case 0xdd: case 0xde: case 0xdf:
|
||||
case 0xd0: case 0xd1: case 0xd2: case 0xd3:
|
||||
case 0xd4: case 0xd5: case 0xd6: case 0xd7:
|
||||
case 0xd8: case 0xd9: case 0xda: case 0xdb:
|
||||
case 0xdc: case 0xdd: case 0xde: case 0xdf:
|
||||
sprintf (buffer,"ldm $%01x",op & 0x0f); break;
|
||||
|
||||
|
||||
case 0xe0: sprintf (buffer,"wrm"); break;
|
||||
case 0xe1: sprintf (buffer,"wmp"); break;
|
||||
case 0xe2: sprintf (buffer,"wrr"); break;
|
||||
@ -111,7 +111,7 @@ CPU_DISASSEMBLE( i4004 )
|
||||
case 0xed: sprintf (buffer,"rd1"); break;
|
||||
case 0xee: sprintf (buffer,"rd2"); break;
|
||||
case 0xef: sprintf (buffer,"rd3"); break;
|
||||
|
||||
|
||||
case 0xf0: sprintf (buffer,"clb"); break;
|
||||
case 0xf1: sprintf (buffer,"clc"); break;
|
||||
case 0xf2: sprintf (buffer,"iac"); break;
|
||||
|
@ -2,8 +2,8 @@
|
||||
*
|
||||
* i4004.c
|
||||
*
|
||||
* Intel 4004 CPU
|
||||
*
|
||||
* Intel 4004 CPU
|
||||
*
|
||||
* Initial version by Miodrag Milanovic
|
||||
*
|
||||
*****************************************************************************/
|
||||
@ -57,7 +57,7 @@ static const cpu_state_entry state_array[] =
|
||||
{
|
||||
I4004_STATE_ENTRY(PC, "%03X", PC.w.l, 0x0fff, 0)
|
||||
I4004_STATE_ENTRY(GENPC,"%03X", PC.w.l, 0x0fff, CPUSTATE_NOSHOW)
|
||||
I4004_STATE_ENTRY(A, "%01X", A, 0x0f, 0)
|
||||
I4004_STATE_ENTRY(A, "%01X", A, 0x0f, 0)
|
||||
I4004_STATE_ENTRY(R01, "%02X", R[0], 0xff, 0)
|
||||
I4004_STATE_ENTRY(R23, "%02X", R[1], 0xff, 0)
|
||||
I4004_STATE_ENTRY(R45, "%02X", R[2], 0xff, 0)
|
||||
@ -164,7 +164,7 @@ INLINE UINT8 GET_REG(i4004_state *cpustate, UINT8 num)
|
||||
{
|
||||
UINT8 r = cpustate->R[num>>1];
|
||||
if (num & 1) {
|
||||
return r & 0x0f;
|
||||
return r & 0x0f;
|
||||
} else {
|
||||
return (r >> 4) & 0x0f;
|
||||
}
|
||||
@ -187,7 +187,7 @@ INLINE void PUSH_STACK(i4004_state *cpustate)
|
||||
INLINE void POP_STACK(i4004_state *cpustate)
|
||||
{
|
||||
cpustate->ADDR[cpustate->pc_pos].d = 0;
|
||||
cpustate->pc_pos = (cpustate->pc_pos - 1) & cpustate->addr_mask;
|
||||
cpustate->pc_pos = (cpustate->pc_pos - 1) & cpustate->addr_mask;
|
||||
}
|
||||
|
||||
void i4004_set_test(const device_config *device, UINT8 val)
|
||||
@ -202,91 +202,91 @@ static void execute_one(i4004_state *cpustate, int opcode)
|
||||
switch (opcode)
|
||||
{
|
||||
case 0x00: /* NOP */
|
||||
/* no op */
|
||||
/* no op */
|
||||
break;
|
||||
case 0x10: case 0x11: case 0x12: case 0x13:
|
||||
case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x18: case 0x19: case 0x1a: case 0x1b:
|
||||
case 0x10: case 0x11: case 0x12: case 0x13:
|
||||
case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x18: case 0x19: case 0x1a: case 0x1b:
|
||||
case 0x1c: case 0x1d: case 0x1e: case 0x1f: /* JCN */
|
||||
{
|
||||
UINT8 arg = ARG(cpustate);
|
||||
|
||||
|
||||
UINT8 C1 = BIT(opcode,3);
|
||||
UINT8 C2 = BIT(opcode,2);
|
||||
UINT8 C3 = BIT(opcode,1);
|
||||
UINT8 C4 = BIT(opcode,0);
|
||||
UINT8 JUMP = (((cpustate->A == 0) ? 1 : 0) & C2) | ((cpustate->C) & C3) | ((cpustate->TEST ^ 1) & C4);
|
||||
cpustate->icount -= 8;
|
||||
|
||||
|
||||
if(((C1 ^ 1) & JUMP) | (C1 & (JUMP ^ 1))) {
|
||||
GET_PC.w.l = (GET_PC.w.l & 0x0f00) | arg;
|
||||
cpustate->PC = GET_PC;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x20: case 0x22: case 0x24: case 0x26:
|
||||
case 0x20: case 0x22: case 0x24: case 0x26:
|
||||
case 0x28: case 0x2a: case 0x2c: case 0x2e: /* FIM */
|
||||
cpustate->icount -= 8;
|
||||
cpustate->R[(opcode & 0x0f)>>1] = ROP(cpustate);
|
||||
break;
|
||||
case 0x21: case 0x23: case 0x25: case 0x27:
|
||||
case 0x21: case 0x23: case 0x25: case 0x27:
|
||||
case 0x29: case 0x2b: case 0x2d: case 0x2f: /* SRC */
|
||||
cpustate->RAM.b.l = cpustate->R[(opcode & 0x0f)>>1];
|
||||
cpustate->RAM.b.l = cpustate->R[(opcode & 0x0f)>>1];
|
||||
break;
|
||||
case 0x30: case 0x32: case 0x34: case 0x36:
|
||||
case 0x30: case 0x32: case 0x34: case 0x36:
|
||||
case 0x38: case 0x3a: case 0x3c: case 0x3e: /* FIN */
|
||||
cpustate->icount -= 8;
|
||||
cpustate->R[(opcode & 0x0f)>>1] = READ_ROM(cpustate);
|
||||
break;
|
||||
case 0x31: case 0x33: case 0x35: case 0x37:
|
||||
case 0x31: case 0x33: case 0x35: case 0x37:
|
||||
case 0x39: case 0x3b: case 0x3d: case 0x3f: /* JIN */
|
||||
GET_PC.w.l = (GET_PC.w.l & 0x0f00) | cpustate->R[(opcode & 0x0f)>>1];
|
||||
cpustate->PC = GET_PC;
|
||||
break;
|
||||
case 0x40: case 0x41: case 0x42: case 0x43:
|
||||
case 0x44: case 0x45: case 0x46: case 0x47:
|
||||
case 0x48: case 0x49: case 0x4a: case 0x4b:
|
||||
case 0x40: case 0x41: case 0x42: case 0x43:
|
||||
case 0x44: case 0x45: case 0x46: case 0x47:
|
||||
case 0x48: case 0x49: case 0x4a: case 0x4b:
|
||||
case 0x4c: case 0x4d: case 0x4e: case 0x4f: /* JUN */
|
||||
cpustate->icount -= 8;
|
||||
GET_PC.w.l = ((opcode & 0x0f) << 8) | ARG(cpustate);
|
||||
cpustate->PC = GET_PC;
|
||||
break;
|
||||
case 0x50: case 0x51: case 0x52: case 0x53:
|
||||
case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b:
|
||||
case 0x50: case 0x51: case 0x52: case 0x53:
|
||||
case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b:
|
||||
case 0x5c: case 0x5d: case 0x5e: case 0x5f: /* JMS */
|
||||
{
|
||||
UINT16 newPC = ((opcode & 0x0f) << 8) | ARG(cpustate);
|
||||
cpustate->icount -= 8;
|
||||
cpustate->icount -= 8;
|
||||
PUSH_STACK(cpustate);
|
||||
GET_PC.w.l = newPC;
|
||||
cpustate->PC = GET_PC;
|
||||
}
|
||||
break;
|
||||
case 0x60: case 0x61: case 0x62: case 0x63:
|
||||
case 0x64: case 0x65: case 0x66: case 0x67:
|
||||
case 0x68: case 0x69: case 0x6a: case 0x6b:
|
||||
case 0x60: case 0x61: case 0x62: case 0x63:
|
||||
case 0x64: case 0x65: case 0x66: case 0x67:
|
||||
case 0x68: case 0x69: case 0x6a: case 0x6b:
|
||||
case 0x6c: case 0x6d: case 0x6e: case 0x6f: /* INC */
|
||||
SET_REG(cpustate, opcode & 0x0f, GET_REG(cpustate, opcode & 0x0f) + 1);
|
||||
break;
|
||||
case 0x70: case 0x71: case 0x72: case 0x73:
|
||||
case 0x74: case 0x75: case 0x76: case 0x77:
|
||||
case 0x78: case 0x79: case 0x7a: case 0x7b:
|
||||
case 0x70: case 0x71: case 0x72: case 0x73:
|
||||
case 0x74: case 0x75: case 0x76: case 0x77:
|
||||
case 0x78: case 0x79: case 0x7a: case 0x7b:
|
||||
case 0x7c: case 0x7d: case 0x7e: case 0x7f: /* ISZ */
|
||||
{
|
||||
{
|
||||
UINT8 val = (GET_REG(cpustate, opcode & 0x0f) + 1) & 0xf;
|
||||
UINT16 addr = ARG(cpustate);
|
||||
cpustate->icount -= 8;
|
||||
SET_REG(cpustate, opcode & 0x0f, val);
|
||||
SET_REG(cpustate, opcode & 0x0f, val);
|
||||
if (val!=0) {
|
||||
GET_PC.w.l = (GET_PC.w.l & 0x0f00) | addr;
|
||||
}
|
||||
cpustate->PC = GET_PC;
|
||||
GET_PC.w.l = (GET_PC.w.l & 0x0f00) | addr;
|
||||
}
|
||||
cpustate->PC = GET_PC;
|
||||
}
|
||||
break;
|
||||
case 0x80: case 0x81: case 0x82: case 0x83:
|
||||
case 0x84: case 0x85: case 0x86: case 0x87:
|
||||
case 0x88: case 0x89: case 0x8a: case 0x8b:
|
||||
case 0x80: case 0x81: case 0x82: case 0x83:
|
||||
case 0x84: case 0x85: case 0x86: case 0x87:
|
||||
case 0x88: case 0x89: case 0x8a: case 0x8b:
|
||||
case 0x8c: case 0x8d: case 0x8e: case 0x8f: /* ADD */
|
||||
{
|
||||
UINT8 acc = cpustate->A + GET_REG(cpustate, opcode & 0x0f) + cpustate->C;
|
||||
@ -294,47 +294,47 @@ static void execute_one(i4004_state *cpustate, int opcode)
|
||||
cpustate->C = (acc >> 4) & 1;
|
||||
}
|
||||
break;
|
||||
case 0x90: case 0x91: case 0x92: case 0x93:
|
||||
case 0x94: case 0x95: case 0x96: case 0x97:
|
||||
case 0x98: case 0x99: case 0x9a: case 0x9b:
|
||||
case 0x90: case 0x91: case 0x92: case 0x93:
|
||||
case 0x94: case 0x95: case 0x96: case 0x97:
|
||||
case 0x98: case 0x99: case 0x9a: case 0x9b:
|
||||
case 0x9c: case 0x9d: case 0x9e: case 0x9f: /* SUB */
|
||||
{
|
||||
UINT8 acc = cpustate->A + (GET_REG(cpustate, opcode & 0x0f) ^ 0x0f) + (cpustate->C ^ 1);
|
||||
cpustate->A = acc & 0x0f;
|
||||
cpustate->A = acc & 0x0f;
|
||||
cpustate->C = (acc >> 4) & 1;
|
||||
}
|
||||
break;
|
||||
case 0xa0: case 0xa1: case 0xa2: case 0xa3:
|
||||
case 0xa4: case 0xa5: case 0xa6: case 0xa7:
|
||||
case 0xa8: case 0xa9: case 0xaa: case 0xab:
|
||||
case 0xa0: case 0xa1: case 0xa2: case 0xa3:
|
||||
case 0xa4: case 0xa5: case 0xa6: case 0xa7:
|
||||
case 0xa8: case 0xa9: case 0xaa: case 0xab:
|
||||
case 0xac: case 0xad: case 0xae: case 0xaf: /* LD */
|
||||
cpustate->A = GET_REG(cpustate, opcode & 0x0f);
|
||||
break;
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||
case 0xb4: case 0xb5: case 0xb6: case 0xb7:
|
||||
case 0xb8: case 0xb9: case 0xba: case 0xbb:
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3:
|
||||
case 0xb4: case 0xb5: case 0xb6: case 0xb7:
|
||||
case 0xb8: case 0xb9: case 0xba: case 0xbb:
|
||||
case 0xbc: case 0xbd: case 0xbe: case 0xbf: /* XCH */
|
||||
{
|
||||
UINT8 temp = cpustate->A;
|
||||
cpustate->A = GET_REG(cpustate, opcode & 0x0f);
|
||||
SET_REG(cpustate, opcode & 0x0f, temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0xc0: case 0xc1: case 0xc2: case 0xc3:
|
||||
case 0xc4: case 0xc5: case 0xc6: case 0xc7:
|
||||
case 0xc8: case 0xc9: case 0xca: case 0xcb:
|
||||
case 0xcc: case 0xcd: case 0xce: case 0xcf: /* BBL */
|
||||
case 0xc0: case 0xc1: case 0xc2: case 0xc3:
|
||||
case 0xc4: case 0xc5: case 0xc6: case 0xc7:
|
||||
case 0xc8: case 0xc9: case 0xca: case 0xcb:
|
||||
case 0xcc: case 0xcd: case 0xce: case 0xcf: /* BBL */
|
||||
POP_STACK(cpustate);
|
||||
cpustate->A = opcode & 0x0f;
|
||||
cpustate->PC = GET_PC;
|
||||
break;
|
||||
case 0xd0: case 0xd1: case 0xd2: case 0xd3:
|
||||
case 0xd4: case 0xd5: case 0xd6: case 0xd7:
|
||||
case 0xd8: case 0xd9: case 0xda: case 0xdb:
|
||||
case 0xd0: case 0xd1: case 0xd2: case 0xd3:
|
||||
case 0xd4: case 0xd5: case 0xd6: case 0xd7:
|
||||
case 0xd8: case 0xd9: case 0xda: case 0xdb:
|
||||
case 0xdc: case 0xdd: case 0xde: case 0xdf: /* LDM */
|
||||
cpustate->A = opcode & 0x0f;
|
||||
break;
|
||||
case 0xe0: /* WRM */
|
||||
case 0xe0: /* WRM */
|
||||
WM(cpustate,cpustate->A);
|
||||
break;
|
||||
case 0xe1: /* WMP */
|
||||
@ -366,14 +366,14 @@ static void execute_one(i4004_state *cpustate, int opcode)
|
||||
case 0xe9: /* RDM */
|
||||
cpustate->A = RM(cpustate);
|
||||
break;
|
||||
case 0xea: /* RDR */
|
||||
case 0xea: /* RDR */
|
||||
cpustate->A = RIO(cpustate);
|
||||
break;
|
||||
case 0xeb: /* ADM */
|
||||
cpustate->A += RM(cpustate) + cpustate->C;
|
||||
cpustate->C = cpustate->A >> 4;
|
||||
cpustate->A &= 0x0f;
|
||||
break;
|
||||
break;
|
||||
case 0xec: /* RD0 */
|
||||
cpustate->A = RMS(cpustate,0);
|
||||
break;
|
||||
@ -386,16 +386,16 @@ static void execute_one(i4004_state *cpustate, int opcode)
|
||||
case 0xef: /* RD3 */
|
||||
cpustate->A = RMS(cpustate,3);
|
||||
break;
|
||||
|
||||
|
||||
case 0xf0: /* CLB */
|
||||
cpustate->A = 0;
|
||||
cpustate->C = 0;
|
||||
break;
|
||||
break;
|
||||
case 0xf1: /* CLC */
|
||||
cpustate->C = 0;
|
||||
break;
|
||||
case 0xf2: /* IAC */
|
||||
cpustate->A = cpustate->A++;
|
||||
cpustate->A = cpustate->A++;
|
||||
cpustate->C = cpustate->A >> 4;
|
||||
cpustate->A &= 0x0f;
|
||||
break;
|
||||
@ -424,7 +424,7 @@ static void execute_one(i4004_state *cpustate, int opcode)
|
||||
case 0xf8: /* DAC */
|
||||
cpustate->A = cpustate->A + 0x0f;
|
||||
cpustate->C = cpustate->A >> 4;
|
||||
cpustate->A &= 0x0f;
|
||||
cpustate->A &= 0x0f;
|
||||
break;
|
||||
case 0xf9: /* TCS */
|
||||
cpustate->A = cpustate->C ? 10 : 9;
|
||||
@ -481,20 +481,20 @@ static CPU_EXECUTE( i4004 )
|
||||
static CPU_INIT( i4004 )
|
||||
{
|
||||
i4004_state *cpustate = get_safe_token(device);
|
||||
|
||||
|
||||
/* set up the state table */
|
||||
cpustate->state = state_table_template;
|
||||
cpustate->state.baseptr = cpustate;
|
||||
cpustate->state.subtypemask = 1;
|
||||
|
||||
|
||||
cpustate->device = device;
|
||||
|
||||
cpustate->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
|
||||
cpustate->data = memory_find_address_space(device, ADDRESS_SPACE_DATA);
|
||||
cpustate->io = memory_find_address_space(device, ADDRESS_SPACE_IO);
|
||||
|
||||
|
||||
state_save_register_device_item(device, 0, cpustate->PC);
|
||||
state_save_register_device_item(device, 0, cpustate->A);
|
||||
state_save_register_device_item(device, 0, cpustate->A);
|
||||
state_save_register_device_item(device, 0, cpustate->C);
|
||||
state_save_register_device_item(device, 0, cpustate->TEST);
|
||||
state_save_register_device_item(device, 0, cpustate->pc_pos);
|
||||
@ -509,8 +509,8 @@ static CPU_INIT( i4004 )
|
||||
state_save_register_device_item(device, 0, cpustate->R[4]);
|
||||
state_save_register_device_item(device, 0, cpustate->R[5]);
|
||||
state_save_register_device_item(device, 0, cpustate->R[6]);
|
||||
state_save_register_device_item(device, 0, cpustate->R[7]);
|
||||
state_save_register_device_item(device, 0, cpustate->RAM);
|
||||
state_save_register_device_item(device, 0, cpustate->R[7]);
|
||||
state_save_register_device_item(device, 0, cpustate->RAM);
|
||||
}
|
||||
|
||||
|
||||
@ -531,7 +531,7 @@ static CPU_RESET( i4004 )
|
||||
memset(cpustate->ADDR,0,sizeof(cpustate->ADDR));
|
||||
cpustate->RAM.d = 0;
|
||||
cpustate->PC = GET_PC;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -10,13 +10,13 @@
|
||||
|
||||
enum
|
||||
{
|
||||
I4004_PC,
|
||||
I4004_PC,
|
||||
I4004_A,
|
||||
I4004_R01, I4004_R23, I4004_R45, I4004_R67, I4004_R89, I4004_RAB, I4004_RCD, I4004_REF,
|
||||
I4004_R01, I4004_R23, I4004_R45, I4004_R67, I4004_R89, I4004_RAB, I4004_RCD, I4004_REF,
|
||||
I4004_ADDR1,I4004_ADDR2,I4004_ADDR3,I4004_ADDR4,I4004_RAM,
|
||||
I4004_GENPC = REG_GENPC,
|
||||
I4004_GENSP = REG_GENSP,
|
||||
I4004_GENPCBASE = REG_GENPCBASE
|
||||
I4004_GENPCBASE = REG_GENPCBASE
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -652,10 +652,10 @@ static void execute_one(i8085_state *cpustate, int opcode)
|
||||
if ((cpustate->AF.b.l&HF) | ((cpustate->AF.b.h&0xf)>9)) cpustate->XX.b.h+=6;
|
||||
if ((cpustate->AF.b.l&CF) | (cpustate->AF.b.h>0x99)) cpustate->XX.b.h+=0x60;
|
||||
}
|
||||
|
||||
|
||||
cpustate->AF.b.l=(cpustate->AF.b.l&3) | (cpustate->AF.b.h&0x28) | (cpustate->AF.b.h>0x99) | ((cpustate->AF.b.h^cpustate->XX.b.h)&0x10) | ZSP[cpustate->XX.b.h];
|
||||
cpustate->AF.b.h=cpustate->XX.b.h;
|
||||
|
||||
|
||||
if (IS_8080(cpustate))
|
||||
{
|
||||
cpustate->AF.b.l &= 0xd5; // Ignore not used flags
|
||||
|
@ -142,10 +142,10 @@ static int8 apu_square(nesapu_state *info, square_t *chan)
|
||||
int8 output;
|
||||
|
||||
/* reg0: 0-3=volume, 4=envelope, 5=hold, 6-7=duty cycle
|
||||
** reg1: 0-2=sweep shifts, 3=sweep inc/dec, 4-6=sweep length, 7=sweep on
|
||||
** reg2: 8 bits of freq
|
||||
** reg3: 0-2=high freq, 7-4=vbl length counter
|
||||
*/
|
||||
** reg1: 0-2=sweep shifts, 3=sweep inc/dec, 4-6=sweep length, 7=sweep on
|
||||
** reg2: 8 bits of freq
|
||||
** reg3: 0-2=high freq, 7-4=vbl length counter
|
||||
*/
|
||||
|
||||
if (FALSE == chan->enabled)
|
||||
return 0;
|
||||
@ -215,9 +215,9 @@ static int8 apu_triangle(nesapu_state *info, triangle_t *chan)
|
||||
int freq;
|
||||
int8 output;
|
||||
/* reg0: 7=holdnote, 6-0=linear length counter
|
||||
** reg2: low 8 bits of frequency
|
||||
** reg3: 7-3=length counter, 2-0=high 3 bits of frequency
|
||||
*/
|
||||
** reg2: low 8 bits of frequency
|
||||
** reg3: 7-3=length counter, 2-0=high 3 bits of frequency
|
||||
*/
|
||||
|
||||
if (FALSE == chan->enabled)
|
||||
return 0;
|
||||
@ -275,9 +275,9 @@ static int8 apu_noise(nesapu_state *info, noise_t *chan)
|
||||
uint8 output;
|
||||
|
||||
/* reg0: 0-3=volume, 4=envelope, 5=hold
|
||||
** reg2: 7=small(93 byte) sample,3-0=freq lookup
|
||||
** reg3: 7-4=vbl length counter
|
||||
*/
|
||||
** reg2: 7=small(93 byte) sample,3-0=freq lookup
|
||||
** reg3: 7-4=vbl length counter
|
||||
*/
|
||||
|
||||
if (FALSE == chan->enabled)
|
||||
return 0;
|
||||
@ -352,10 +352,10 @@ static int8 apu_dpcm(nesapu_state *info, dpcm_t *chan)
|
||||
int freq, bit_pos;
|
||||
|
||||
/* reg0: 7=irq gen, 6=looping, 3-0=pointer to clock table
|
||||
** reg1: output dc level, 7 bits unsigned
|
||||
** reg2: 8 bits of 64-byte aligned address offset : $C000 + (value * 64)
|
||||
** reg3: length, (value * 16) + 1
|
||||
*/
|
||||
** reg1: output dc level, 7 bits unsigned
|
||||
** reg2: 8 bits of 64-byte aligned address offset : $C000 + (value * 64)
|
||||
** reg3: length, (value * 16) + 1
|
||||
*/
|
||||
|
||||
if (chan->enabled)
|
||||
{
|
||||
@ -394,10 +394,10 @@ static int8 apu_dpcm(nesapu_state *info, dpcm_t *chan)
|
||||
}
|
||||
|
||||
if (chan->cur_byte & (1 << bit_pos))
|
||||
// chan->regs[1]++;
|
||||
// chan->regs[1]++;
|
||||
chan->vol+=2; /* FIXED * DPCM channel only uses the upper 6 bits of the DAC */
|
||||
else
|
||||
// chan->regs[1]--;
|
||||
// chan->regs[1]--;
|
||||
chan->vol-=2;
|
||||
}
|
||||
}
|
||||
@ -473,19 +473,19 @@ INLINE void apu_regwrite(nesapu_state *info,int address, uint8 value)
|
||||
info->APU.tri.regs[3] = value;
|
||||
|
||||
/* this is somewhat of a hack. there is some latency on the Real
|
||||
** Thing between when trireg0 is written to and when the linear
|
||||
** length counter actually begins its countdown. we want to prevent
|
||||
** the case where the program writes to the freq regs first, then
|
||||
** to reg 0, and the counter accidentally starts running because of
|
||||
** the sound queue's timestamp processing.
|
||||
**
|
||||
** set to a few NES sample -- should be sufficient
|
||||
**
|
||||
** 3 * (1789772.727 / 44100) = ~122 cycles, just around one scanline
|
||||
**
|
||||
** should be plenty of time for the 6502 code to do a couple of table
|
||||
** dereferences and load up the other triregs
|
||||
*/
|
||||
** Thing between when trireg0 is written to and when the linear
|
||||
** length counter actually begins its countdown. we want to prevent
|
||||
** the case where the program writes to the freq regs first, then
|
||||
** to reg 0, and the counter accidentally starts running because of
|
||||
** the sound queue's timestamp processing.
|
||||
**
|
||||
** set to a few NES sample -- should be sufficient
|
||||
**
|
||||
** 3 * (1789772.727 / 44100) = ~122 cycles, just around one scanline
|
||||
**
|
||||
** should be plenty of time for the 6502 code to do a couple of table
|
||||
** dereferences and load up the other triregs
|
||||
*/
|
||||
|
||||
/* used to be 3, but now we run the clock faster, so base it on samples/sync */
|
||||
info->APU.tri.write_latency = (info->samps_per_sync + 239) / 240;
|
||||
@ -548,7 +548,7 @@ INLINE void apu_regwrite(nesapu_state *info,int address, uint8 value)
|
||||
case APU_IRQCTRL:
|
||||
if(value & 0x80)
|
||||
info->APU.step_mode = 5;
|
||||
else
|
||||
else
|
||||
info->APU.step_mode = 4;
|
||||
break;
|
||||
|
||||
|
@ -6,16 +6,16 @@
|
||||
driven by one or more output bits
|
||||
|
||||
Original author: (unsigned)
|
||||
Filtering: Anders Hallström
|
||||
Filtering: Anders Hallstr?m
|
||||
****************************************************************************/
|
||||
|
||||
/* Discussion of oversampling and anti-alias filtering: (Anders Hallström)
|
||||
/* Discussion of oversampling and anti-alias filtering: (Anders Hallstr?m)
|
||||
*
|
||||
* This driver is for machines that directly control
|
||||
* one or more simple digital-to-analog converters (DAC)
|
||||
* connected to one or more audio outputs (such as analog amp + speaker).
|
||||
* Currently only 1-bit DAC is supported via the interface to this module.
|
||||
*
|
||||
*
|
||||
* Frequently such machines would oversample the DAC
|
||||
* in order to overcome the limited DAC resolution.
|
||||
* For faithful reproduction of the sound, this must be carefully handled
|
||||
@ -94,9 +94,9 @@ struct _speaker_state
|
||||
int level;
|
||||
|
||||
/* The volume of a composed sample grows incrementally each time the speaker is over-sampled.
|
||||
* That is in effect a basic average filter.
|
||||
* Another filter can and will be applied to the array of composed samples.
|
||||
*/
|
||||
* That is in effect a basic average filter.
|
||||
* Another filter can and will be applied to the array of composed samples.
|
||||
*/
|
||||
double composed_volume[FILTER_LENGTH]; /* integrator(s) */
|
||||
int composed_sample_index; /* array index for composed_volume */
|
||||
attoseconds_t channel_sample_period; /* in as */
|
||||
@ -159,25 +159,25 @@ static DEVICE_START( speaker )
|
||||
sp->next_interm_sample_time = attotime_add_attoseconds(sp->channel_last_sample_time, sp->interm_sample_period);
|
||||
sp->interm_sample_index = 0;
|
||||
/* Note: To avoid time drift due to floating point inaccuracies,
|
||||
* it is good if the speaker time synchronizes itself with the stream timing regularly.
|
||||
*/
|
||||
* it is good if the speaker time synchronizes itself with the stream timing regularly.
|
||||
*/
|
||||
|
||||
/* Compute filter kernel; */
|
||||
/* (Done for each device though the data is shared...
|
||||
* No problem really, but should be done as part of system init if I knew how)
|
||||
*/
|
||||
* No problem really, but should be done as part of system init if I knew how)
|
||||
*/
|
||||
#if 1
|
||||
/* This is an approximated sinc (a perfect sinc makes an ideal low-pass filter).
|
||||
* FILTER_STEP determines the cutoff frequency,
|
||||
* which should be below the Nyquist freq, i.e. half the sample rate.
|
||||
* Smaller step => kernel extends in time domain => lower cutoff freq
|
||||
* In this case, with sinc, filter step PI corresponds to the Nyq. freq.
|
||||
* Since we do not get a perfect filter => must lower the cutoff freq some more.
|
||||
* For example, step PI/(2*RATE_MULTIPLIER) corresponds to cutoff freq = sample rate / 4;
|
||||
* With -samplerate 48000, cutoff freq is ca 12kHz while the Nyq. freq is 24kHz.
|
||||
* With -samplerate 96000, cutoff freq is ca 24kHz while the Nyq. freq is 48kHz.
|
||||
* For a steeper, more efficient filter, increase FILTER_LENGTH at the expense of CPU usage.
|
||||
*/
|
||||
* FILTER_STEP determines the cutoff frequency,
|
||||
* which should be below the Nyquist freq, i.e. half the sample rate.
|
||||
* Smaller step => kernel extends in time domain => lower cutoff freq
|
||||
* In this case, with sinc, filter step PI corresponds to the Nyq. freq.
|
||||
* Since we do not get a perfect filter => must lower the cutoff freq some more.
|
||||
* For example, step PI/(2*RATE_MULTIPLIER) corresponds to cutoff freq = sample rate / 4;
|
||||
* With -samplerate 48000, cutoff freq is ca 12kHz while the Nyq. freq is 24kHz.
|
||||
* With -samplerate 96000, cutoff freq is ca 24kHz while the Nyq. freq is 48kHz.
|
||||
* For a steeper, more efficient filter, increase FILTER_LENGTH at the expense of CPU usage.
|
||||
*/
|
||||
#define FILTER_STEP (M_PI / 2 / RATE_MULTIPLIER)
|
||||
/* Distribute symmetrically on x axis; center has x=0 if length is odd */
|
||||
for (i = 0, x = (0.5 - FILTER_LENGTH / 2.) * FILTER_STEP;
|
||||
@ -191,9 +191,9 @@ static DEVICE_START( speaker )
|
||||
}
|
||||
#else
|
||||
/* Trivial average filter with poor frequency cutoff properties;
|
||||
* First zero (frequency where amplification=0) = sample rate / filter length
|
||||
* Cutoff frequency approx <= first zero / 2
|
||||
*/
|
||||
* First zero (frequency where amplification=0) = sample rate / filter length
|
||||
* Cutoff frequency approx <= first zero / 2
|
||||
*/
|
||||
for (i = 0, i < FILTER_LENGTH; i++)
|
||||
ampl[i] = 1;
|
||||
#endif
|
||||
@ -219,9 +219,9 @@ static STREAM_UPDATE( speaker_sound_update )
|
||||
sampled_time = attotime_mul(sampled_time, samples);
|
||||
|
||||
/* Note: since the stream is in the process of being updated,
|
||||
* stream_get_time() will return the time before the update! (MAME 0.130)
|
||||
* Avoid using it here in order to avoid a subtle dependence on the stream implementation.
|
||||
*/
|
||||
* stream_get_time() will return the time before the update! (MAME 0.130)
|
||||
* Avoid using it here in order to avoid a subtle dependence on the stream implementation.
|
||||
*/
|
||||
}
|
||||
|
||||
if (samples-- > 0)
|
||||
@ -277,16 +277,16 @@ void speaker_level_w(const device_config *device, int new_level)
|
||||
return;
|
||||
}
|
||||
/* Reaching here means such time has passed since last stream update
|
||||
* that we can add at least one complete sample to the stream.
|
||||
* The details have to be handled by speaker_sound_update()
|
||||
*/
|
||||
* that we can add at least one complete sample to the stream.
|
||||
* The details have to be handled by speaker_sound_update()
|
||||
*/
|
||||
|
||||
/* Force streams.c to update sound until this point in time now */
|
||||
stream_update(sp->channel);
|
||||
|
||||
/* This is redundant because time update has to be done within speaker_sound_update() anyway,
|
||||
* however this ensures synchronization between the speaker and stream timing:
|
||||
*/
|
||||
* however this ensures synchronization between the speaker and stream timing:
|
||||
*/
|
||||
sp->channel_last_sample_time = stream_get_time(sp->channel);
|
||||
sp->channel_next_sample_time = attotime_add_attoseconds(sp->channel_last_sample_time, sp->channel_sample_period);
|
||||
sp->next_interm_sample_time = attotime_add_attoseconds(sp->channel_last_sample_time, sp->interm_sample_period);
|
||||
@ -316,9 +316,9 @@ static void update_interm_samples(speaker_state *sp, attotime time, int volume)
|
||||
init_next_interm_sample(sp);
|
||||
}
|
||||
/* Depending on status above:
|
||||
* a) Add latest fraction to unfinished composed sample
|
||||
* b) The overshooting fraction of time will start a new composed sample
|
||||
*/
|
||||
* a) Add latest fraction to unfinished composed sample
|
||||
* b) The overshooting fraction of time will start a new composed sample
|
||||
*/
|
||||
fraction = make_fraction(time, sp->last_update_time, sp->interm_sample_period_secfrac);
|
||||
sp->composed_volume[sp->composed_sample_index] += volume * fraction;
|
||||
sp->last_update_time = time;
|
||||
@ -357,8 +357,8 @@ static void finalize_interm_sample(speaker_state *sp, int volume)
|
||||
double fraction;
|
||||
|
||||
/* Fill the composed sample up if it was incomplete */
|
||||
fraction = make_fraction(sp->next_interm_sample_time,
|
||||
sp->last_update_time,
|
||||
fraction = make_fraction(sp->next_interm_sample_time,
|
||||
sp->last_update_time,
|
||||
sp->interm_sample_period_secfrac);
|
||||
sp->composed_volume[sp->composed_sample_index] += volume * fraction;
|
||||
/* Update time state */
|
||||
@ -395,7 +395,7 @@ static double get_filtered_volume(speaker_state *sp)
|
||||
double filtered_volume = 0;
|
||||
double ampsum = 0;
|
||||
int i, c;
|
||||
|
||||
|
||||
/* Filter over composed samples (each composed sample is already average filtered) */
|
||||
for (i = sp->composed_sample_index + 1, c = 0; c < FILTER_LENGTH; i++, c++)
|
||||
{
|
||||
|
@ -592,7 +592,7 @@ MACHINE_DRIVER_END
|
||||
#define GAL_INP_FS2 NODE_21 /* FS2 9L Q1 */
|
||||
#define GAL_INP_FS3 NODE_22 /* FS3 9L Q2 */
|
||||
#define GAL_INP_HIT NODE_23 /* HIT 9L Q3 */
|
||||
//#define GAL_9L_Q4 NODE_24
|
||||
//#define GAL_9L_Q4 NODE_24
|
||||
#define GAL_INP_FIRE NODE_25 /* FIRE 9L Q5 */
|
||||
#define GAL_INP_VOL1 NODE_26 /* VOL1 9L Q6 */
|
||||
#define GAL_INP_VOL2 NODE_27 /* VOL2 9L Q7 */
|
||||
@ -640,7 +640,7 @@ MACHINE_DRIVER_END
|
||||
/* The hit sound is too low compared with recordings
|
||||
* There may be an issue with the op-amp band filter
|
||||
*/
|
||||
#define GAL_R40 (RES_K(2.2)*0.6) /* Volume adjust */
|
||||
#define GAL_R40 (RES_K(2.2)*0.6) /* Volume adjust */
|
||||
#define GAL_R41 RES_K(100)
|
||||
#define GAL_R43 RES_K(2.2)
|
||||
#define GAL_R44 RES_K(10)
|
||||
@ -678,7 +678,7 @@ MACHINE_DRIVER_END
|
||||
static const discrete_dac_r1_ladder galaxian_bck_dac =
|
||||
{
|
||||
4, // size of ladder
|
||||
{GAL_R18, GAL_R17, GAL_R16, GAL_R15, 0,0,0,0},
|
||||
{GAL_R18, GAL_R17, GAL_R16, GAL_R15, 0,0,0,0},
|
||||
4.4, // 5V - diode junction (0.6V)
|
||||
GAL_R20, // rBIAS
|
||||
GAL_R19, // rGnd
|
||||
@ -706,7 +706,7 @@ static const discrete_555_desc galaxian_555_fire_vco_desc =
|
||||
DISC_555_OUT_DC,
|
||||
5.0,
|
||||
DEFAULT_555_CHARGE,
|
||||
1.0 // Logic output
|
||||
1.0 // Logic output
|
||||
};
|
||||
|
||||
static const discrete_mixer_desc galaxian_bck_mixer_desc =
|
||||
@ -742,7 +742,7 @@ static const discrete_mixer_desc galaxian_mixerpre_desc =
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
{GAL_R51, 0, GAL_R50, 0, GAL_R34}, /* A, C, C, D */
|
||||
{0, GAL_INP_VOL1, 0, GAL_INP_VOL2, 0},
|
||||
{0,0,0,0,0},
|
||||
{0,0,0,0,0},
|
||||
0, 0,
|
||||
0,
|
||||
0,
|
||||
@ -753,7 +753,7 @@ static const discrete_mixer_desc galaxian_mixer_desc =
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
{GAL_R34, GAL_R40, GAL_R43}, /* A, C, C, D */
|
||||
{0, 0, 0},
|
||||
{0,0,GAL_C26},
|
||||
{0,0,GAL_C26},
|
||||
0, GAL_R91,
|
||||
0,
|
||||
GAL_C46,
|
||||
@ -765,7 +765,7 @@ static const discrete_mixer_desc galaxian_mixer_desc =
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
{GAL_R51, 0, GAL_R50, 0, GAL_R34, GAL_R40, GAL_R43}, /* A, C, C, D */
|
||||
{0, GAL_INP_VOL1, 0, GAL_INP_VOL2, 0, 0, 0},
|
||||
{0,0,0,0,0,0,GAL_C26},
|
||||
{0,0,0,0,0,0,GAL_C26},
|
||||
0, 0*GAL_R91,
|
||||
0,
|
||||
GAL_C46,
|
||||
@ -775,9 +775,9 @@ static const discrete_mixer_desc galaxian_mixer_desc =
|
||||
static const discrete_op_amp_filt_info galaxian_bandpass_desc =
|
||||
{
|
||||
GAL_R35, GAL_R36, 0, 0,
|
||||
GAL_R37,
|
||||
GAL_C22, GAL_C23, 0,
|
||||
5.0*GAL_R39/(GAL_R38+GAL_R39),
|
||||
GAL_R37,
|
||||
GAL_C22, GAL_C23, 0,
|
||||
5.0*GAL_R39/(GAL_R38+GAL_R39),
|
||||
5, 0
|
||||
};
|
||||
|
||||
@ -787,7 +787,7 @@ static DISCRETE_SOUND_START(galaxian)
|
||||
/* Input register mapping for galaxian */
|
||||
/************************************************/
|
||||
DISCRETE_INPUT_DATA(GAL_INP_BG_DAC)
|
||||
|
||||
|
||||
/* FS1 to FS3 */
|
||||
DISCRETE_INPUT_LOGIC(GAL_INP_FS1)
|
||||
DISCRETE_INPUT_LOGIC(GAL_INP_FS2)
|
||||
@ -795,21 +795,21 @@ static DISCRETE_SOUND_START(galaxian)
|
||||
|
||||
/* HIT */
|
||||
DISCRETE_INPUTX_DATA(GAL_INP_HIT, TTL_OUT, 0, 0)
|
||||
|
||||
|
||||
/* FIRE */
|
||||
DISCRETE_INPUT_LOGIC(GAL_INP_FIRE)
|
||||
|
||||
|
||||
/* Turns on / off resistors in mixer */
|
||||
DISCRETE_INPUTX_DATA(GAL_INP_VOL1, GAL_R49, 0, 0)
|
||||
DISCRETE_INPUTX_DATA(GAL_INP_VOL2, GAL_R52, 0, 0)
|
||||
|
||||
/* Pitch */
|
||||
DISCRETE_INPUT_DATA(GAL_INP_PITCH_HIGH)
|
||||
|
||||
|
||||
/************************************************/
|
||||
/* Background */
|
||||
/************************************************/
|
||||
|
||||
|
||||
DISCRETE_DAC_R1(NODE_100, 1, GAL_INP_BG_DAC, TTL_OUT, &galaxian_bck_dac)
|
||||
DISCRETE_555_CC(NODE_105, 1, NODE_100, GAL_R21, GAL_C15, 0, 0, 0, &galaxian_bck_vco)
|
||||
// Next is mult/add opamp circuit
|
||||
@ -828,9 +828,9 @@ static DISCRETE_SOUND_START(galaxian)
|
||||
/************************************************/
|
||||
|
||||
/* Needs to be replaced by timer ... */
|
||||
DISCRETE_BITSET(NODE_133, GAL_INP_PITCH_HIGH, 1, TTL_OUT) /* QA 74393 */
|
||||
DISCRETE_BITSET(NODE_134, GAL_INP_PITCH_HIGH, 3, TTL_OUT) /* QC 74393 */
|
||||
DISCRETE_BITSET(NODE_135, GAL_INP_PITCH_HIGH, 4, TTL_OUT) /* QD 74393 */
|
||||
DISCRETE_BITSET(NODE_133, GAL_INP_PITCH_HIGH, 1, TTL_OUT) /* QA 74393 */
|
||||
DISCRETE_BITSET(NODE_134, GAL_INP_PITCH_HIGH, 3, TTL_OUT) /* QC 74393 */
|
||||
DISCRETE_BITSET(NODE_135, GAL_INP_PITCH_HIGH, 4, TTL_OUT) /* QD 74393 */
|
||||
|
||||
/************************************************/
|
||||
/* HIT */
|
||||
@ -850,22 +850,22 @@ static DISCRETE_SOUND_START(galaxian)
|
||||
DISCRETE_MULTIPLY(NODE_156, 1, NODE_152, NODE_155)
|
||||
DISCRETE_OP_AMP_FILTER(NODE_157, 1, NODE_156, 0, DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &galaxian_bandpass_desc)
|
||||
|
||||
/************************************************/
|
||||
/************************************************/
|
||||
/* FIRE */
|
||||
/************************************************/
|
||||
DISCRETE_LOGIC_INVERT(NODE_160, 1, GAL_INP_FIRE)
|
||||
DISCRETE_MULTIPLY(NODE_161, 1, TTL_OUT, GAL_INP_FIRE)
|
||||
DISCRETE_MULTIPLY(NODE_161, 1, TTL_OUT, GAL_INP_FIRE)
|
||||
DISCRETE_MULTIPLY(NODE_162, 1, TTL_OUT, NODE_160) // inverted
|
||||
DISCRETE_RCFILTER(NODE_163, 1, NODE_162, GAL_R47, GAL_C28)
|
||||
/* Mix noise and 163 */
|
||||
DISCRETE_TRANSFORM5(NODE_167, NODE_152, TTL_OUT, 1.0/GAL_R46, NODE_163, 1.0/GAL_R48,
|
||||
"01*2*34*+" )
|
||||
//DISCRETE_MULTIPLY(NODE_164, 1, TTL_OUT, NODE_152)
|
||||
//DISCRETE_MULTIPLY(NODE_165, 1, 1.0/GAL_R46, NODE_164)
|
||||
//DISCRETE_MULTIPLY(NODE_166, 1, 1.0/GAL_R48, NODE_163)
|
||||
//DISCRETE_ADDER2(NODE_167, 1, NODE_165, NODE_166)
|
||||
//DISCRETE_MULTIPLY(NODE_164, 1, TTL_OUT, NODE_152)
|
||||
//DISCRETE_MULTIPLY(NODE_165, 1, 1.0/GAL_R46, NODE_164)
|
||||
//DISCRETE_MULTIPLY(NODE_166, 1, 1.0/GAL_R48, NODE_163)
|
||||
//DISCRETE_ADDER2(NODE_167, 1, NODE_165, NODE_166)
|
||||
DISCRETE_MULTIPLY(NODE_168, 1, RES_2_PARALLEL(GAL_R46, GAL_R48), NODE_167)
|
||||
|
||||
|
||||
DISCRETE_RCDISC5(NODE_170, 1, NODE_161, (GAL_R41)*2, GAL_C25)
|
||||
|
||||
DISCRETE_555_ASTABLE_CV(NODE_171, 1, GAL_R44, GAL_R45, GAL_C27, NODE_168, &galaxian_555_fire_vco_desc)
|
||||
@ -900,7 +900,7 @@ static TIMER_CALLBACK( pitch_callback )
|
||||
if (pitch_l < 255)
|
||||
{
|
||||
/* performance tweak: The counter is always running, but
|
||||
* most of the time with a very (unaudible) frequency */
|
||||
* most of the time with a very (unaudible) frequency */
|
||||
discrete_sound_w(device, GAL_INP_PITCH_HIGH, pitch_h );
|
||||
timer_adjust_oneshot(pitch_timer, ATTOTIME_IN_HZ(SOUND_CLOCK / (256 - pitch_l)), 0);
|
||||
}
|
||||
@ -919,7 +919,7 @@ static SOUND_START(galaxian)
|
||||
WRITE8_DEVICE_HANDLER( galaxian_pitch_w )
|
||||
{
|
||||
UINT8 old_data;
|
||||
|
||||
|
||||
old_data = pitch_l;
|
||||
pitch_l = data;
|
||||
if (pitch_l < 255 && old_data == 255) /* turn the timer on again */
|
||||
@ -929,7 +929,7 @@ WRITE8_DEVICE_HANDLER( galaxian_pitch_w )
|
||||
WRITE8_DEVICE_HANDLER( galaxian_lfo_freq_w )
|
||||
{
|
||||
UINT8 lfo_val_new = (lfo_val & ~(1<<offset)) | ((data & 0x01) << offset);
|
||||
|
||||
|
||||
if (lfo_val != lfo_val_new)
|
||||
{
|
||||
lfo_val = lfo_val_new;
|
||||
@ -991,10 +991,10 @@ WRITE8_DEVICE_HANDLER( galaxian_sound_w )
|
||||
MACHINE_DRIVER_START( galaxian_audio )
|
||||
|
||||
MDRV_SOUND_START(galaxian)
|
||||
|
||||
|
||||
MDRV_SOUND_ADD(GAL_AUDIO, DISCRETE, 0)
|
||||
MDRV_SOUND_CONFIG_DISCRETE(galaxian)
|
||||
|
||||
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
@ -129,19 +129,19 @@ static READ32_HANDLER( pxa255_i2s_r )
|
||||
static WRITE32_HANDLER( pxa255_i2s_w )
|
||||
{
|
||||
/*
|
||||
if(!audio_dump)
|
||||
{
|
||||
int count = 0;
|
||||
char filename[256];
|
||||
do
|
||||
{
|
||||
sprintf(filename, "39in1_%04d.raw", count++);
|
||||
audio_dump = fopen(filename, "rb");
|
||||
}while(audio_dump != NULL);
|
||||
count--;
|
||||
sprintf(filename, "39in1_%04d.raw", count);
|
||||
audio_dump = fopen(filename, "wb");
|
||||
}*/
|
||||
if(!audio_dump)
|
||||
{
|
||||
int count = 0;
|
||||
char filename[256];
|
||||
do
|
||||
{
|
||||
sprintf(filename, "39in1_%04d.raw", count++);
|
||||
audio_dump = fopen(filename, "rb");
|
||||
}while(audio_dump != NULL);
|
||||
count--;
|
||||
sprintf(filename, "39in1_%04d.raw", count);
|
||||
audio_dump = fopen(filename, "wb");
|
||||
}*/
|
||||
switch(PXA255_I2S_BASE_ADDR | (offset << 2))
|
||||
{
|
||||
case PXA255_SACR0:
|
||||
@ -183,9 +183,9 @@ static WRITE32_HANDLER( pxa255_i2s_w )
|
||||
verboselog( space->machine, 4, "pxa255_i2s_w: Serial Audio Data Register: %08x & %08x\n", data, mem_mask );
|
||||
i2s_regs.sadr = data;
|
||||
/*if(audio_dump)
|
||||
{
|
||||
fwrite(&data, 4, 1, audio_dump);
|
||||
}*/
|
||||
{
|
||||
fwrite(&data, 4, 1, audio_dump);
|
||||
}*/
|
||||
break;
|
||||
default:
|
||||
verboselog( space->machine, 0, "pxa255_i2s_w: Unknown address: %08x = %08x & %08x\n", PXA255_I2S_BASE_ADDR | (offset << 2), data, mem_mask);
|
||||
@ -1274,7 +1274,7 @@ static UINT32 seed, magic;
|
||||
static UINT32 state = 0;
|
||||
static READ32_HANDLER( cpld_r )
|
||||
{
|
||||
// if (cpu_get_pc(space->cpu) != 0xe3af4) printf("CPLD read @ %x (PC %x state %d)\n", offset, cpu_get_pc(space->cpu), state);
|
||||
// if (cpu_get_pc(space->cpu) != 0xe3af4) printf("CPLD read @ %x (PC %x state %d)\n", offset, cpu_get_pc(space->cpu), state);
|
||||
|
||||
if (cpu_get_pc(space->cpu) == 0x3f04)
|
||||
{
|
||||
|
@ -1767,7 +1767,7 @@ static INPUT_PORTS_START( skylove )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_VBLANK )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1)
|
||||
|
@ -928,16 +928,16 @@ ROM_END
|
||||
// all checksums correctly match sum16 printed on rom labels
|
||||
ROM_START( 9ballshtc )
|
||||
ROM_REGION16_LE( 0x80000, "user1", 0 ) /* 34010 code */
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 3990.u112", 0x00000, 0x40000, CRC(7ba2749a) SHA1(e2ddc2600234dbebbb423f201cc4061fd0b9911a) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 b72f.u113", 0x00001, 0x40000, CRC(1e0f3c62) SHA1(3c24a38dcb553fd84b0b44a5a8d93a14435e22b0) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 3990.u112", 0x00000, 0x40000, CRC(7ba2749a) SHA1(e2ddc2600234dbebbb423f201cc4061fd0b9911a) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 b72f.u113", 0x00001, 0x40000, CRC(1e0f3c62) SHA1(3c24a38dcb553fd84b0b44a5a8d93a14435e22b0) )
|
||||
|
||||
ROM_REGION16_LE( 0x100000, "gfx1", 0 ) /* gfx data read by main CPU */
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 c316.u110", 0x00000, 0x80000, CRC(890ed5c0) SHA1(eaf06ee5b6c5ed0103b535396b4517012818a416) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 13f2.u111", 0x00001, 0x80000, CRC(1a9f1145) SHA1(ba52a6d1aca26484c320518f69c66ce3ceb4adcf) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 c316.u110", 0x00000, 0x80000, CRC(890ed5c0) SHA1(eaf06ee5b6c5ed0103b535396b4517012818a416) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 13f2.u111", 0x00001, 0x80000, CRC(1a9f1145) SHA1(ba52a6d1aca26484c320518f69c66ce3ceb4adcf) )
|
||||
|
||||
ROM_REGION( 0x40000, "dsp", 0 ) /* TMS320C26 */
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 89bc.u34", 0x00000, 0x08000, CRC(dc1df70b) SHA1(e42fa7e34e50e0bd2aaeea5c55d750ed3286610d) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 af4a.u35", 0x00001, 0x08000, CRC(ac999431) SHA1(7e4c2dcaedcb7e7c67072a179e4b8488d2bbdac7) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 89bc.u34", 0x00000, 0x08000, CRC(dc1df70b) SHA1(e42fa7e34e50e0bd2aaeea5c55d750ed3286610d) )
|
||||
ROM_LOAD16_BYTE( "e-scape (c)1994 af4a.u35", 0x00001, 0x08000, CRC(ac999431) SHA1(7e4c2dcaedcb7e7c67072a179e4b8488d2bbdac7) )
|
||||
|
||||
ROM_REGION( 0x100000, "user2", 0 ) /* TMS32026 data */
|
||||
ROM_LOAD( "e-scape (c)1994 0000.u54", 0x00000, 0x80000, CRC(04b509a0) SHA1(093343741a3d8d0786fd443e68dd85b414c6cf9e) )
|
||||
|
@ -1903,7 +1903,7 @@ ROM_START( popn2 )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 ) /* MC68EC020FG25 MPU */
|
||||
ROM_LOAD16_BYTE( "831jaa01.8a", 0x000000, 0x80000, CRC(D6214CAC) SHA1(18e74c81710228c91ab9eb554b63d9bd69b93ec8) )
|
||||
ROM_LOAD16_BYTE( "831jaa02.6a", 0x000001, 0x80000, CRC(AABE8689) SHA1(d51d277e9b5d0233d1c6bdfec40c32587f84b31a) )
|
||||
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0) /* SPRITE */
|
||||
ROM_LOAD16_BYTE( "831jaa03.19a", 0x000000, 0x80000, CRC(A07AEB72) SHA1(4d957c15d1b989e955249c34b0aa5679fb3e4fbf) )
|
||||
ROM_LOAD16_BYTE( "831jaa04.20a", 0x000001, 0x80000, CRC(9277D1D2) SHA1(6946845973f0ce15db383032343f6852873698eb) )
|
||||
|
@ -1218,20 +1218,20 @@ static ADDRESS_MAP_START( mooncrst_map_base, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x07ff) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xa000, 0xa002) AM_MIRROR(0x07f8) AM_WRITE(galaxian_gfxbank_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w)
|
||||
// AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
|
||||
// AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
|
||||
AM_RANGE(0xa800, 0xa800) AM_MIRROR(0x07ff) AM_READ_PORT("IN1")
|
||||
// AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
|
||||
// AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0xb004, 0xb004) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w)
|
||||
AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_x_w)
|
||||
AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_y_w)
|
||||
// AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
|
||||
// AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mooncrst_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_IMPORT_FROM(mooncrst_map_base)
|
||||
AM_IMPORT_FROM(mooncrst_map_base)
|
||||
AM_IMPORT_FROM(mooncrst_map_discrete)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1838,7 +1838,7 @@ static MACHINE_DRIVER_START( zigzag )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SOUND_ADD("ay", AY8910, 1789750)
|
||||
|
||||
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
@ -2300,14 +2300,14 @@ static INPUT_PORTS_START( tdpgal )
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
|
||||
|
@ -185,38 +185,38 @@ ROM usage - CRC (from ROM test
|
||||
Game Sega Part No. ROM Type Byte Word
|
||||
--------------------------------------------------------------
|
||||
Star Wars Racer Arcade
|
||||
MPR-23086.IC37 64M SOP44 MASKROM 7993 8E18
|
||||
MPR-23087.IC38 " 4D44 D239
|
||||
MPR-23088.IC39 " 4135 BEAB
|
||||
MPR-23089.IC40 " F0C8 04E2
|
||||
MPR-23090.IC41 " 9532 4C1C
|
||||
MPR-23091.IC42 " 925D 02FB
|
||||
MPR-23092.IC43 " 0809 7050
|
||||
MPR-23093.IC44 " 72BC 9311
|
||||
MPR-23094.IC45 " DE84 9D8A
|
||||
MPR-23095.IC46 " 7A5C E7FC
|
||||
MPR-23096.IC47 " 6806 1392
|
||||
MPR-23097.IC48 " EDF1 7BD1
|
||||
MPR-23098.IC49 " B82D E114
|
||||
MPR-23099.IC50 " 5792 E5E5
|
||||
MPR-23100.IC51 " 3AF3 A97C
|
||||
MPR-23101.IC52 " A8CC 721D
|
||||
MPR-23102.IC53 " CED7 D3CF
|
||||
MPR-23103.IC54 " 6B67 FC76
|
||||
MPR-23104.IC55 " 586C 6954
|
||||
MPR-23105.IC56 " 13A0 DB38
|
||||
MPR-23106.IC57 " 4F03 42BF
|
||||
MPR-23107.IC58 " 8EA6 ADB6
|
||||
MPR-23108.IC59 " 8645 FC30
|
||||
MPR-23109.IC60 " 3847 CA6B
|
||||
MPR-23110.IC61 " 4140 01C4
|
||||
MPR-23111.IC62 " EBE6 8085
|
||||
MPR-23112.IC63 " B68B 7467
|
||||
MPR-23113.IC64 " 4715 4787
|
||||
MPR-23114.IC65 " 3CD6 144A
|
||||
MPR-23115.IC66 " E5D3 BA35
|
||||
MPR-23116.IC67 " E668 08ED
|
||||
MPR-23117.IC68 " 1FE8 C4A1
|
||||
MPR-23086.IC37 64M SOP44 MASKROM 7993 8E18
|
||||
MPR-23087.IC38 " 4D44 D239
|
||||
MPR-23088.IC39 " 4135 BEAB
|
||||
MPR-23089.IC40 " F0C8 04E2
|
||||
MPR-23090.IC41 " 9532 4C1C
|
||||
MPR-23091.IC42 " 925D 02FB
|
||||
MPR-23092.IC43 " 0809 7050
|
||||
MPR-23093.IC44 " 72BC 9311
|
||||
MPR-23094.IC45 " DE84 9D8A
|
||||
MPR-23095.IC46 " 7A5C E7FC
|
||||
MPR-23096.IC47 " 6806 1392
|
||||
MPR-23097.IC48 " EDF1 7BD1
|
||||
MPR-23098.IC49 " B82D E114
|
||||
MPR-23099.IC50 " 5792 E5E5
|
||||
MPR-23100.IC51 " 3AF3 A97C
|
||||
MPR-23101.IC52 " A8CC 721D
|
||||
MPR-23102.IC53 " CED7 D3CF
|
||||
MPR-23103.IC54 " 6B67 FC76
|
||||
MPR-23104.IC55 " 586C 6954
|
||||
MPR-23105.IC56 " 13A0 DB38
|
||||
MPR-23106.IC57 " 4F03 42BF
|
||||
MPR-23107.IC58 " 8EA6 ADB6
|
||||
MPR-23108.IC59 " 8645 FC30
|
||||
MPR-23109.IC60 " 3847 CA6B
|
||||
MPR-23110.IC61 " 4140 01C4
|
||||
MPR-23111.IC62 " EBE6 8085
|
||||
MPR-23112.IC63 " B68B 7467
|
||||
MPR-23113.IC64 " 4715 4787
|
||||
MPR-23114.IC65 " 3CD6 144A
|
||||
MPR-23115.IC66 " E5D3 BA35
|
||||
MPR-23116.IC67 " E668 08ED
|
||||
MPR-23117.IC68 " 1FE8 C4A1
|
||||
|
||||
EPR-23174.IC29 27C322 EPROM 3B2E
|
||||
EPR-23175.IC30 " F377
|
||||
|
@ -32,7 +32,7 @@ To do:
|
||||
- lhb: in the copyright screen the '5' in '1995' is drawn by the cpu on layer 5,
|
||||
but with wrong colors (since the top nibble of the affected pixels is left to 0xf)
|
||||
(drgnwrld is like this too, maybe hacked, or a cheap year replacement by IGS)
|
||||
|
||||
|
||||
- dbc: in the title screen the '5' in '1995' is drawn by the cpu with wrong colors.
|
||||
(see above comment)
|
||||
Also the background palette is wrong since the fade routine is called with wrong
|
||||
@ -2668,7 +2668,7 @@ static DRIVER_INIT( drgnwrldv21 )
|
||||
rom[0x25556/2] = 0x6000; // 025556: 6700 E584 beq 23adc (ASIC12 CHECK PORT ERROR 1)
|
||||
rom[0x269de/2] = 0x606c; // ??
|
||||
rom[0x2766a/2] = 0x606c; // ??
|
||||
rom[0x2a830/2] = 0x606c; // ??
|
||||
rom[0x2a830/2] = 0x606c; // ??
|
||||
}
|
||||
|
||||
|
||||
|
@ -890,7 +890,7 @@ static MACHINE_DRIVER_START( prosport )
|
||||
MDRV_CPU_PROGRAM_MAP(liberate_sound_map)
|
||||
MDRV_CPU_PERIODIC_INT(nmi_line_pulse,16*60) /* ??? */
|
||||
|
||||
// MDRV_QUANTUM_TIME(HZ(12000))
|
||||
// MDRV_QUANTUM_TIME(HZ(12000))
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -736,10 +736,10 @@ ROM_START( looping )
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
|
||||
/*
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
*/
|
||||
ROM_LOAD( "cop.bin", 0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
|
||||
ROM_CONTINUE( 0x0000, 0x00c2)
|
||||
@ -773,10 +773,10 @@ ROM_START( loopinga )
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
|
||||
/*
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
*/
|
||||
ROM_LOAD( "cop.bin", 0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
|
||||
ROM_CONTINUE( 0x0000, 0x00c2)
|
||||
@ -809,10 +809,10 @@ ROM_START( skybump )
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
|
||||
/*
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_LOAD( "cop.bin", 0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
ROM_CONTINUE( 0x0000, 0x0400)
|
||||
*/
|
||||
ROM_LOAD( "cop.bin", 0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
|
||||
ROM_CONTINUE( 0x0000, 0x00c2)
|
||||
|
@ -629,107 +629,107 @@ Notes:
|
||||
|
||||
ROM_START( spacefev )
|
||||
ROM_REGION( 0x8000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-ro-.bin", 0x0000, 0x0400, CRC(35f295bd) SHA1(34d1df25fcdea598ca1191cecc2125e6f63dbce3) ) // "F1ロ"
|
||||
ROM_LOAD( "f2-ro-.bin", 0x0400, 0x0400, CRC(0c633f4c) SHA1(a551ddbf21670fb1f000404b92da87a97f7ba157) ) // "F2ロ"
|
||||
ROM_LOAD( "g1-ro-.bin", 0x0800, 0x0400, CRC(f3d851cb) SHA1(535c52a56e54a064aa3d1c48a129f714234a1007) ) // "G1ロ"
|
||||
ROM_LOAD( "g2-ro-.bin", 0x0c00, 0x0400, CRC(1faef63a) SHA1(68e1bfc45587bfb1ee2eb477b60efd4f69dffd2c) ) // "G2ロ"
|
||||
ROM_LOAD( "h1-ro-.bin", 0x1000, 0x0400, CRC(b365389d) SHA1(e681f2c5e37cc07912915ef74184ff9336309de3) ) // "H1ロ"
|
||||
ROM_LOAD( "h2-ro-.bin", 0x1400, 0x0400, CRC(a163e800) SHA1(e8817f3e17f099a0dc66213d2d3d3fdeb117b10e) ) // "H2ロ"
|
||||
ROM_LOAD( "i1-ro-p.bin", 0x1800, 0x0400, CRC(756b5582) SHA1(b7f3d218b7f4267ce6128624306396bcacb9b44e) ) // "I1ロP"
|
||||
ROM_LOAD( "f1-ro-.bin", 0x0000, 0x0400, CRC(35f295bd) SHA1(34d1df25fcdea598ca1191cecc2125e6f63dbce3) ) // "F1??"
|
||||
ROM_LOAD( "f2-ro-.bin", 0x0400, 0x0400, CRC(0c633f4c) SHA1(a551ddbf21670fb1f000404b92da87a97f7ba157) ) // "F2??"
|
||||
ROM_LOAD( "g1-ro-.bin", 0x0800, 0x0400, CRC(f3d851cb) SHA1(535c52a56e54a064aa3d1c48a129f714234a1007) ) // "G1??"
|
||||
ROM_LOAD( "g2-ro-.bin", 0x0c00, 0x0400, CRC(1faef63a) SHA1(68e1bfc45587bfb1ee2eb477b60efd4f69dffd2c) ) // "G2??"
|
||||
ROM_LOAD( "h1-ro-.bin", 0x1000, 0x0400, CRC(b365389d) SHA1(e681f2c5e37cc07912915ef74184ff9336309de3) ) // "H1??"
|
||||
ROM_LOAD( "h2-ro-.bin", 0x1400, 0x0400, CRC(a163e800) SHA1(e8817f3e17f099a0dc66213d2d3d3fdeb117b10e) ) // "H2??"
|
||||
ROM_LOAD( "i1-ro-p.bin", 0x1800, 0x0400, CRC(756b5582) SHA1(b7f3d218b7f4267ce6128624306396bcacb9b44e) ) // "I1??P"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss3.ic2", 0x0000, 0x0400, CRC(95c2c1ee) SHA1(42a3a382fc7d2782052372d71f6d0e8a153e74d0) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( spacefevo )
|
||||
ROM_REGION( 0x8000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-ro-.bin", 0x0000, 0x0400, CRC(35f295bd) SHA1(34d1df25fcdea598ca1191cecc2125e6f63dbce3) ) // "F1ロ"
|
||||
ROM_LOAD( "f2-ro-.bin", 0x0400, 0x0400, CRC(0c633f4c) SHA1(a551ddbf21670fb1f000404b92da87a97f7ba157) ) // "F2ロ"
|
||||
ROM_LOAD( "g1-ro-.bin", 0x0800, 0x0400, CRC(f3d851cb) SHA1(535c52a56e54a064aa3d1c48a129f714234a1007) ) // "G1ロ"
|
||||
ROM_LOAD( "g2-ro-.bin", 0x0c00, 0x0400, CRC(1faef63a) SHA1(68e1bfc45587bfb1ee2eb477b60efd4f69dffd2c) ) // "G2ロ"
|
||||
ROM_LOAD( "h1-ro-.bin", 0x1000, 0x0400, CRC(b365389d) SHA1(e681f2c5e37cc07912915ef74184ff9336309de3) ) // "H1ロ"
|
||||
ROM_LOAD( "h2-ro-.bin", 0x1400, 0x0400, CRC(a163e800) SHA1(e8817f3e17f099a0dc66213d2d3d3fdeb117b10e) ) // "H2ロ"
|
||||
ROM_LOAD( "i1-ro-.bin", 0x1800, 0x0400, CRC(00027be2) SHA1(551a779a2e5a6455b7a348d246731c094e0ec709) ) // "I1ロ"
|
||||
ROM_LOAD( "f1-ro-.bin", 0x0000, 0x0400, CRC(35f295bd) SHA1(34d1df25fcdea598ca1191cecc2125e6f63dbce3) ) // "F1??"
|
||||
ROM_LOAD( "f2-ro-.bin", 0x0400, 0x0400, CRC(0c633f4c) SHA1(a551ddbf21670fb1f000404b92da87a97f7ba157) ) // "F2??"
|
||||
ROM_LOAD( "g1-ro-.bin", 0x0800, 0x0400, CRC(f3d851cb) SHA1(535c52a56e54a064aa3d1c48a129f714234a1007) ) // "G1??"
|
||||
ROM_LOAD( "g2-ro-.bin", 0x0c00, 0x0400, CRC(1faef63a) SHA1(68e1bfc45587bfb1ee2eb477b60efd4f69dffd2c) ) // "G2??"
|
||||
ROM_LOAD( "h1-ro-.bin", 0x1000, 0x0400, CRC(b365389d) SHA1(e681f2c5e37cc07912915ef74184ff9336309de3) ) // "H1??"
|
||||
ROM_LOAD( "h2-ro-.bin", 0x1400, 0x0400, CRC(a163e800) SHA1(e8817f3e17f099a0dc66213d2d3d3fdeb117b10e) ) // "H2??"
|
||||
ROM_LOAD( "i1-ro-.bin", 0x1800, 0x0400, CRC(00027be2) SHA1(551a779a2e5a6455b7a348d246731c094e0ec709) ) // "I1??"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss3.ic2", 0x0000, 0x0400, CRC(95c2c1ee) SHA1(42a3a382fc7d2782052372d71f6d0e8a153e74d0) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( spacefevo2 )
|
||||
ROM_REGION( 0x8000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-i-.bin", 0x0000, 0x0400, CRC(7fa305e8) SHA1(cda9fc9c76f57800de25ddf65f69fef19fd28481) ) // "F1イ"
|
||||
ROM_LOAD( "f2-i-.bin", 0x0400, 0x0400, CRC(7c1429aa) SHA1(8d8e0a4fc09fb1ecbfb86c67c20000ef30ab3fac) ) // "F2イ"
|
||||
ROM_LOAD( "g1-i-.bin", 0x0800, 0x0400, CRC(75f6efc1) SHA1(286bc75e35e8ad6277e9db7377e90731b9c2ec97) ) // "G1イ"
|
||||
ROM_LOAD( "g2-i-.bin", 0x0c00, 0x0400, CRC(fb6bcf4a) SHA1(3edea04d67c2f3b1a6a73adadea83ddda0be3842) ) // "G2イ"
|
||||
ROM_LOAD( "h1-i-.bin", 0x1000, 0x0400, CRC(3beef037) SHA1(4bcc157e7d721b3a9e16e7a2efa807303d4be8ac) ) // "H1イ"
|
||||
ROM_LOAD( "h2-i-.bin", 0x1400, 0x0400, CRC(bddbc94f) SHA1(f90cbc3cd0f695cbb9ae03b608f4bf5a4a000c64) ) // "H2イ"
|
||||
ROM_LOAD( "i1-i-.bin", 0x1800, 0x0400, CRC(437786c5) SHA1(2ccdb0d48dbbfe47ae82e970ca37970602405cf6) ) // "I1イ"
|
||||
ROM_LOAD( "f1-i-.bin", 0x0000, 0x0400, CRC(7fa305e8) SHA1(cda9fc9c76f57800de25ddf65f69fef19fd28481) ) // "F1?C"
|
||||
ROM_LOAD( "f2-i-.bin", 0x0400, 0x0400, CRC(7c1429aa) SHA1(8d8e0a4fc09fb1ecbfb86c67c20000ef30ab3fac) ) // "F2?C"
|
||||
ROM_LOAD( "g1-i-.bin", 0x0800, 0x0400, CRC(75f6efc1) SHA1(286bc75e35e8ad6277e9db7377e90731b9c2ec97) ) // "G1?C"
|
||||
ROM_LOAD( "g2-i-.bin", 0x0c00, 0x0400, CRC(fb6bcf4a) SHA1(3edea04d67c2f3b1a6a73adadea83ddda0be3842) ) // "G2?C"
|
||||
ROM_LOAD( "h1-i-.bin", 0x1000, 0x0400, CRC(3beef037) SHA1(4bcc157e7d721b3a9e16e7a2efa807303d4be8ac) ) // "H1?C"
|
||||
ROM_LOAD( "h2-i-.bin", 0x1400, 0x0400, CRC(bddbc94f) SHA1(f90cbc3cd0f695cbb9ae03b608f4bf5a4a000c64) ) // "H2?C"
|
||||
ROM_LOAD( "i1-i-.bin", 0x1800, 0x0400, CRC(437786c5) SHA1(2ccdb0d48dbbfe47ae82e970ca37970602405cf6) ) // "I1?C"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss3.ic2", 0x0000, 0x0400, CRC(95c2c1ee) SHA1(42a3a382fc7d2782052372d71f6d0e8a153e74d0) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( highsplt )
|
||||
ROM_REGION( 0x8000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1ハ"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2ハ"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1ハ"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2ハ"
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1?n"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2?n"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1?n"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2?n"
|
||||
ROM_LOAD( "hs.h1", 0x1000, 0x0400, CRC(eefb4273) SHA1(853a62976a406516f10ac68dc2859399b8b7aae8) )
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2ハ"
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2?n"
|
||||
ROM_LOAD( "hs.i1", 0x1800, 0x0400, CRC(41e18df9) SHA1(2212c836313775e7c507a875672c0b3635825e02) )
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2ハ"
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2?n"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss4.bin", 0x0000, 0x0400, CRC(939e01d4) SHA1(7c9ccd24e5da03831cd0aa821da17e3b81cd8381) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( highsplta )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1ハ"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2ハ"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1ハ"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2ハ"
|
||||
ROM_LOAD( "h1-ha-.bin", 0x1000, 0x0400, CRC(b0505da3) SHA1(f7b1f3a6dd06ff0cdeb6b13c948b7a262592514a) ) // "H1ハ"
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2ハ"
|
||||
ROM_LOAD( "i1-ha-.bin", 0x1800, 0x0400, CRC(aa36b25d) SHA1(28f555aab27b206a8c6f550b6caa938cece6e204) ) // "I1ハ"
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2ハ"
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1?n"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2?n"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1?n"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2?n"
|
||||
ROM_LOAD( "h1-ha-.bin", 0x1000, 0x0400, CRC(b0505da3) SHA1(f7b1f3a6dd06ff0cdeb6b13c948b7a262592514a) ) // "H1?n"
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2?n"
|
||||
ROM_LOAD( "i1-ha-.bin", 0x1800, 0x0400, CRC(aa36b25d) SHA1(28f555aab27b206a8c6f550b6caa938cece6e204) ) // "I1?n"
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2?n"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss4.bin", 0x0000, 0x0400, CRC(939e01d4) SHA1(7c9ccd24e5da03831cd0aa821da17e3b81cd8381) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( highspltb )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1ハ"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2ハ"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1ハ"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2ハ"
|
||||
ROM_LOAD( "h1-ha-.bin", 0x1000, 0x0400, CRC(b0505da3) SHA1(f7b1f3a6dd06ff0cdeb6b13c948b7a262592514a) ) // "H1ハ"
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2ハ"
|
||||
ROM_LOAD( "i1-ha-.bin", 0x1800, 0x0400, CRC(aa36b25d) SHA1(28f555aab27b206a8c6f550b6caa938cece6e204) ) // "I1ハ"
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2ハ"
|
||||
ROM_LOAD( "f1-ha-.bin", 0x0000, 0x0400, CRC(b8887351) SHA1(ccd49937f1cbd7a157b3715474ccc3e8fdcea2b2) ) // "F1?n"
|
||||
ROM_LOAD( "f2-ha-.bin", 0x0400, 0x0400, CRC(cda933a7) SHA1(a0447c8c98e24674081c9bf4b1ef07dc186c6e2b) ) // "F2?n"
|
||||
ROM_LOAD( "g1-ha-.bin", 0x0800, 0x0400, CRC(de17578a) SHA1(d9d5dbf38331f212d2a566c60756a788e169104d) ) // "G1?n"
|
||||
ROM_LOAD( "g2-ha-.bin", 0x0c00, 0x0400, CRC(f1a90948) SHA1(850f27b42ca12bcba4aa95a1ad3e66206fa63554) ) // "G2?n"
|
||||
ROM_LOAD( "h1-ha-.bin", 0x1000, 0x0400, CRC(b0505da3) SHA1(f7b1f3a6dd06ff0cdeb6b13c948b7a262592514a) ) // "H1?n"
|
||||
ROM_LOAD( "h2-ha-.bin", 0x1400, 0x0400, CRC(e91703e8) SHA1(f58606b0c7d945e94c3fccc7ebe17ca25675e6a0) ) // "H2?n"
|
||||
ROM_LOAD( "i1-ha-.bin", 0x1800, 0x0400, CRC(aa36b25d) SHA1(28f555aab27b206a8c6f550b6caa938cece6e204) ) // "I1?n"
|
||||
ROM_LOAD( "i2-ha-.bin", 0x1c00, 0x0400, CRC(eff9f82d) SHA1(5004e52dfa652ceefca9ed4210c0fa8f0591dc08) ) // "I2?n"
|
||||
|
||||
ROM_REGION( 0x0400, "audiocpu", 0 )
|
||||
ROM_LOAD( "ss4.ic2", 0x0000, 0x0400, CRC(ce95dc5f) SHA1(20f7b8c565c408439dcfae240b7d1aa42c29651b) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5イ"
|
||||
ROM_LOAD( "f5-i-.bin", 0x0000, 0x0020, CRC(c5914ec1) SHA1(198875fcab36d09c8726bb21e2fdff9882f6721a) ) // "F5?C"
|
||||
ROM_END
|
||||
|
||||
ROM_START( spacelnc )
|
||||
|
@ -5675,7 +5675,7 @@ static DRIVER_INIT( aquajet )
|
||||
GAME( 1995, cybrcomm, 0, namcos22, cybrcomm, cybrcomm, ROT0, "Namco", "Cyber Commando (Rev. CY1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING )
|
||||
GAME( 1995, raveracw, 0, namcos22, raveracw, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV2, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, raveracj, raveracw, namcos22, raveracw, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, raveracja, raveracw, namcos22, raveracw, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, raveracja, raveracw, namcos22, raveracw, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1993, ridgerac, 0, namcos22, ridgera, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) /* 1994-01-17 */
|
||||
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) /* 1993-10-07 */
|
||||
GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) /* 1993-10-07 */
|
||||
|
@ -244,9 +244,9 @@ ROM_END
|
||||
Dump was made using custom adaptor, hence it is marked as bad dump.
|
||||
The real machine has following roms:
|
||||
|
||||
0000...07FFh - ROM1 (D41)
|
||||
0800...0FFFh - ROM2 (D42)
|
||||
1000...17FFh - ROM3 (D43)
|
||||
0000...07FFh - ROM1 (D41)
|
||||
0800...0FFFh - ROM2 (D42)
|
||||
1000...17FFh - ROM3 (D43)
|
||||
*/
|
||||
ROM_START( phpython )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
|
@ -668,7 +668,7 @@ ROM_START( qixa )
|
||||
ROM_LOAD( "u17_", 0xe800, 0x0800, CRC(bc091f21) SHA1(f3db149a794640e0826def688ab19a26750d9f1e) )
|
||||
ROM_LOAD( "u18_", 0xf000, 0x0800, CRC(610b19ce) SHA1(6d3d6012a4d0cd3ea82f4ab07582fa262feaaf97) )
|
||||
ROM_LOAD( "u19_", 0xf800, 0x0800, CRC(11f957f4) SHA1(5700603b2d50eef6ab32316f59d70782a8ef4a6d) )
|
||||
|
||||
|
||||
ROM_REGION( 0x10000, "videocpu", 0 )
|
||||
ROM_LOAD( "u3_", 0xc000, 0x0800, CRC(79cf997c) SHA1(853cb88d371cd2d47caf60baa795caef9461815c) )
|
||||
ROM_LOAD( "u4_", 0xc800, 0x0800, CRC(e5ee74cd) SHA1(10fd95385d0d8667f739fe43a9fb26d2780840f9) )
|
||||
|
@ -26,7 +26,7 @@ Notes on version letters:
|
||||
|
||||
E = Export (It displays a "Outside USA use only" message)
|
||||
R = ?? (In some games, it displays value of winning combinations, see e.g. fb4 Ver. R vs. Ver. LT)
|
||||
LT = ?? (It displays a "PT/TKT" message, so maybe it has a minimum amount of poits
|
||||
LT = ?? (It displays a "PT/TKT" message, so maybe it has a minimum amount of poits
|
||||
needed to get a ticket)
|
||||
XT = Texas XT / Arkansas / Iowa
|
||||
N = ??
|
||||
@ -304,10 +304,10 @@ static INPUT_PORTS_START( amcoecommon )
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1)
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* Games use 2 types of inputs: type 1 and type 2 (which is type 1 with reversed bits).
|
||||
Both come in 3 flavors (depending on the games):
|
||||
- fruit machines with 3 reels: Stop All, Stop 1, Stop 2, Stop 3, Bet;
|
||||
- fruit machines with 4 reels: Stop 1, Stop 2, Stop 3, Stop 4, Bet;
|
||||
/* Games use 2 types of inputs: type 1 and type 2 (which is type 1 with reversed bits).
|
||||
Both come in 3 flavors (depending on the games):
|
||||
- fruit machines with 3 reels: Stop All, Stop 1, Stop 2, Stop 3, Bet;
|
||||
- fruit machines with 4 reels: Stop 1, Stop 2, Stop 3, Stop 4, Bet;
|
||||
- poker: Hold 1, Hold 2, Hold 3, Hold 4, Hold 5 */
|
||||
|
||||
static INPUT_PORTS_START( amcoe1_reels3 )
|
||||
@ -796,7 +796,7 @@ static VIDEO_UPDATE(sfbonus)
|
||||
sfbonus_1800_regs[7]);
|
||||
*/
|
||||
|
||||
if ((screen->machine->gamedrv->ipt == ipt_amcoe2_reels3) || (screen->machine->gamedrv->ipt == ipt_amcoe2_reels4)
|
||||
if ((screen->machine->gamedrv->ipt == ipt_amcoe2_reels3) || (screen->machine->gamedrv->ipt == ipt_amcoe2_reels4)
|
||||
|| (screen->machine->gamedrv->ipt == ipt_amcoe2_poker))
|
||||
{
|
||||
// based on pirpok2
|
||||
@ -807,7 +807,7 @@ static VIDEO_UPDATE(sfbonus)
|
||||
output_set_lamp_value(4, (sfbonus_1800_regs[4] & 0x4) >> 2);
|
||||
output_set_lamp_value(5, (sfbonus_1800_regs[4] & 0x1) >> 0);
|
||||
}
|
||||
else if ((screen->machine->gamedrv->ipt == ipt_amcoe1_reels3) || (screen->machine->gamedrv->ipt == ipt_amcoe1_reels4)
|
||||
else if ((screen->machine->gamedrv->ipt == ipt_amcoe1_reels3) || (screen->machine->gamedrv->ipt == ipt_amcoe1_reels4)
|
||||
|| (screen->machine->gamedrv->ipt == ipt_amcoe1_poker))
|
||||
{
|
||||
output_set_lamp_value(0, (sfbonus_1800_regs[0] & 0x2) >> 1);
|
||||
@ -5193,7 +5193,7 @@ static DRIVER_INIT( sfbonus_common)
|
||||
|
||||
// hack, because the debugger is broken
|
||||
sfbonus_videoram = memory_region(machine, "debugram");
|
||||
if (!sfbonus_videoram)
|
||||
if (!sfbonus_videoram)
|
||||
sfbonus_videoram = auto_alloc_array(machine, UINT8, 0x10000);
|
||||
|
||||
memset(sfbonus_videoram, 0xff, 0x10000);
|
||||
|
@ -10,32 +10,32 @@ OSC. : 3.579545MHz 18432.00KHz
|
||||
Main processors are a pair of 68000 CPUs
|
||||
Sounds are generated by a Z80, a Yamaha 2151 and 3012, a Konami custom IC and a uPD7759C
|
||||
|
||||
Dark Adventure / Devil World / Majuu no Ohkoku
|
||||
Vulcan Venture / Gradius II
|
||||
Cuebrick
|
||||
MIA (Japan)
|
||||
Final Round / Hard Puncher (Japan)
|
||||
Dark Adventure / Devil World / Majuu no Ohkoku
|
||||
Vulcan Venture / Gradius II
|
||||
Cuebrick
|
||||
MIA (Japan)
|
||||
Final Round / Hard Puncher (Japan)
|
||||
|
||||
68000 Memory Map for Konami Twin System
|
||||
|
||||
CPUA CPUB
|
||||
0x000000..0x03ffff ROM 0x000000..0x03ffff
|
||||
0x040000..0x043fff communication RAM 0x040000..0x043fff (shared)
|
||||
0x060000..0x063fff work RAM 0x060000..0x063fff
|
||||
0x080000..0x080fff palette
|
||||
0x080000..0x09ffff ROM (extra tile data)
|
||||
0x0a0000..0x0a0001 IRQ control 0x0a0000..0x0a0001
|
||||
0x0a0008..0x0a0009 sound command
|
||||
0x0a0010..0xa00011 watchdog
|
||||
0x0c0000..0x0c0001 screenflip
|
||||
0x0c0002..0x0c000f scroll registers
|
||||
CPUA CPUB
|
||||
0x000000..0x03ffff ROM 0x000000..0x03ffff
|
||||
0x040000..0x043fff communication RAM 0x040000..0x043fff (shared)
|
||||
0x060000..0x063fff work RAM 0x060000..0x063fff
|
||||
0x080000..0x080fff palette
|
||||
0x080000..0x09ffff ROM (extra tile data)
|
||||
0x0a0000..0x0a0001 IRQ control 0x0a0000..0x0a0001
|
||||
0x0a0008..0x0a0009 sound command
|
||||
0x0a0010..0xa00011 watchdog
|
||||
0x0c0000..0x0c0001 screenflip
|
||||
0x0c0002..0x0c000f scroll registers
|
||||
|
||||
0x100000..0x103fff FIXRAM (text layer)
|
||||
0x120000..0x123fff VIDRAM (tilemaps) 0x480000..0x483fff (shared)
|
||||
0x140000..0x143fff OBJRAM (sprites) 0x400000..0x403fff (shared)
|
||||
ZIP RAM (tiles) 0x500000..0x53ffff
|
||||
gfx ROM (banked) 0x600000..0x77ffff
|
||||
sprite gfx RAM 0x780000..0x79ffff
|
||||
0x100000..0x103fff FIXRAM (text layer)
|
||||
0x120000..0x123fff VIDRAM (tilemaps) 0x480000..0x483fff (shared)
|
||||
0x140000..0x143fff OBJRAM (sprites) 0x400000..0x403fff (shared)
|
||||
ZIP RAM (tiles) 0x500000..0x53ffff
|
||||
gfx ROM (banked) 0x600000..0x77ffff
|
||||
sprite gfx RAM 0x780000..0x79ffff
|
||||
|
||||
Known Issues:
|
||||
- repeated uPD7759C samples in fround, disconnecting reset helps but doesn't fix it
|
||||
@ -115,13 +115,13 @@ static WRITE16_HANDLER( sound_command_w )
|
||||
static WRITE16_HANDLER( twin16_CPUA_register_w )
|
||||
{
|
||||
/*
|
||||
7 6 5 4 3 2 1 0
|
||||
X sprite processing disable
|
||||
X IRQ5 enable (CPUA)
|
||||
X 0->1 trigger IRQ6 on CPUB
|
||||
X 0->1 trigger IRQ on sound CPU
|
||||
x x x coin counters
|
||||
*/
|
||||
7 6 5 4 3 2 1 0
|
||||
X sprite processing disable
|
||||
X IRQ5 enable (CPUA)
|
||||
X 0->1 trigger IRQ6 on CPUB
|
||||
X 0->1 trigger IRQ on sound CPU
|
||||
x x x coin counters
|
||||
*/
|
||||
UINT16 old = twin16_CPUA_register;
|
||||
COMBINE_DATA(&twin16_CPUA_register);
|
||||
if (twin16_CPUA_register != old)
|
||||
@ -144,11 +144,11 @@ static WRITE16_HANDLER( twin16_CPUA_register_w )
|
||||
static WRITE16_HANDLER( twin16_CPUB_register_w )
|
||||
{
|
||||
/*
|
||||
7 6 5 4 3 2 1 0
|
||||
X gfx bank select
|
||||
X IRQ5 enable
|
||||
X 0->1 trigger IRQ6 on CPUA
|
||||
*/
|
||||
7 6 5 4 3 2 1 0
|
||||
X gfx bank select
|
||||
X IRQ5 enable
|
||||
X 0->1 trigger IRQ6 on CPUA
|
||||
*/
|
||||
UINT16 old = twin16_CPUB_register;
|
||||
COMBINE_DATA(&twin16_CPUB_register);
|
||||
if( twin16_CPUB_register!=old )
|
||||
@ -161,17 +161,17 @@ static WRITE16_HANDLER( twin16_CPUB_register_w )
|
||||
static WRITE16_HANDLER( fround_CPU_register_w )
|
||||
{
|
||||
/*
|
||||
7 6 5 4 3 2 1 0
|
||||
X 0->1 trigger IRQ on sound CPU
|
||||
x x coin counters
|
||||
*/
|
||||
7 6 5 4 3 2 1 0
|
||||
X 0->1 trigger IRQ on sound CPU
|
||||
x x coin counters
|
||||
*/
|
||||
UINT16 old = twin16_CPUA_register;
|
||||
COMBINE_DATA(&twin16_CPUA_register);
|
||||
if (twin16_CPUA_register != old)
|
||||
{
|
||||
if ((old & 0x08) == 0 && (twin16_CPUA_register & 0x08))
|
||||
cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff);
|
||||
|
||||
|
||||
coin_counter_w(0, twin16_CPUA_register & 0x01);
|
||||
coin_counter_w(1, twin16_CPUA_register & 0x02);
|
||||
}
|
||||
@ -240,7 +240,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x040000, 0x043fff) AM_READWRITE(COMRAM_r, COMRAM_w)
|
||||
// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
|
||||
// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
|
||||
AM_RANGE(0x060000, 0x063fff) AM_RAM
|
||||
AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(twin16_paletteram_word_w) AM_BASE(&paletteram16)
|
||||
AM_RANGE(0x081000, 0x081fff) AM_WRITENOP
|
||||
@ -253,7 +253,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x0c0000, 0x0c000f) AM_WRITE(twin16_video_register_w)
|
||||
AM_RANGE(0x0c000e, 0x0c000f) AM_READ(twin16_sprite_status_r)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(twin16_text_ram_w) AM_BASE(&twin16_text_ram)
|
||||
// AM_RANGE(0x104000, 0x105fff) AM_NOP // miaj
|
||||
// AM_RANGE(0x104000, 0x105fff) AM_NOP // miaj
|
||||
AM_RANGE(0x120000, 0x123fff) AM_RAM AM_BASE(&videoram16)
|
||||
AM_RANGE(0x140000, 0x143fff) AM_RAM AM_SHARE(1) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
|
||||
ADDRESS_MAP_END
|
||||
@ -261,7 +261,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x040000, 0x043fff) AM_READWRITE(COMRAM_r, COMRAM_w)
|
||||
// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
|
||||
// AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj
|
||||
AM_RANGE(0x060000, 0x063fff) AM_RAM
|
||||
AM_RANGE(0x080000, 0x09ffff) AM_READ(extra_rom_r)
|
||||
AM_RANGE(0x0a0000, 0x0a0001) AM_WRITE(twin16_CPUB_register_w)
|
||||
@ -704,11 +704,11 @@ static MACHINE_START( twin16 )
|
||||
{
|
||||
twin16_CPUA_register=0;
|
||||
twin16_CPUB_register=0;
|
||||
|
||||
|
||||
/* register for savestates */
|
||||
state_save_register_global(machine, twin16_CPUA_register);
|
||||
state_save_register_global(machine, twin16_CPUB_register);
|
||||
|
||||
|
||||
state_save_register_global(machine, twin16_sound_command);
|
||||
state_save_register_global(machine, cuebrickj_nvram_bank);
|
||||
state_save_register_global_array(machine, cuebrickj_nvram);
|
||||
@ -728,10 +728,10 @@ static MACHINE_DRIVER_START( twin16 )
|
||||
MDRV_CPU_PROGRAM_MAP(sound_map)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(6000))
|
||||
|
||||
|
||||
MDRV_MACHINE_START(twin16)
|
||||
MDRV_MACHINE_RESET(twin16)
|
||||
|
||||
|
||||
// video hardware
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_BUFFERS_SPRITERAM)
|
||||
|
||||
@ -783,10 +783,10 @@ static MACHINE_DRIVER_START( fround )
|
||||
MDRV_CPU_PROGRAM_MAP(sound_map)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(6000))
|
||||
|
||||
|
||||
MDRV_MACHINE_START(twin16)
|
||||
MDRV_MACHINE_RESET(twin16)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_BUFFERS_SPRITERAM)
|
||||
|
||||
|
@ -1851,11 +1851,11 @@ MACHINE_DRIVER_END
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/* correct label format. revision number is stamped(red), other letters are printed(black)
|
||||
game code in line 1, ROM position in line 2
|
||||
i.e.
|
||||
MDS-DH3
|
||||
1B or 6B e
|
||||
/* correct label format. revision number is stamped(red), other letters are printed(black)
|
||||
game code in line 1, ROM position in line 2
|
||||
i.e.
|
||||
MDS-DH3
|
||||
1B or 6B e
|
||||
*/
|
||||
|
||||
|
||||
@ -2508,7 +2508,7 @@ ROM_START( iceclmrj )
|
||||
ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */
|
||||
ROM_LOAD( "mds-ic4-4_8b a.bin", 0x0000, 0x2000, CRC(331460b4) SHA1(4cf94d711cdb5715d14f1ab3cadec245e0adfb1e) )
|
||||
ROM_LOAD( "mds-ic4-4_8a a.bin", 0x2000, 0x2000, CRC(4ec44fb3) SHA1(676e0ab574dec08df562c6f278e8a9cc7c8afa41) )
|
||||
ROM_END
|
||||
ROM_END
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -493,7 +493,7 @@ struct SNES_PPU_STRUCT /* once all the regs are saved in this structure, it woul
|
||||
UINT8 bg3_priority_bit;
|
||||
UINT8 direct_color;
|
||||
UINT8 ppu_last_scroll; /* as per Anomie's doc and Theme Park, all scroll regs shares (but mode 7 ones) the same
|
||||
'previous' scroll value */
|
||||
'previous' scroll value */
|
||||
UINT8 mode7_last_scroll; /* as per Anomie's doc mode 7 scroll regs use a different value, shared with mode 7 matrix! */
|
||||
|
||||
UINT8 main_bg_enabled[5]; // these would probably better fit the layer struct, but it would make worse the code in snes_update_mode_X()
|
||||
|
@ -950,7 +950,7 @@ WRITE64_HANDLER( dc_g1_ctrl_w )
|
||||
mame_printf_verbose("G1CTRL: unsupported transfer\n");
|
||||
return;
|
||||
}
|
||||
// printf("ROM board DMA to %x (PC %x)\n", g1bus_regs[SB_GDSTAR], cpu_get_pc(space->cpu));
|
||||
// printf("ROM board DMA to %x (PC %x)\n", g1bus_regs[SB_GDSTAR], cpu_get_pc(space->cpu));
|
||||
ROM = (UINT8 *)devtag_get_info_ptr(space->machine, "rom_board", DEVINFO_PTR_MEMORY);
|
||||
dmaoffset = (UINT32)devtag_get_info_int(space->machine, "rom_board", DEVINFO_INT_DMAOFFSET);
|
||||
ddtdata.destination=g1bus_regs[SB_GDSTAR]; // destination address
|
||||
|
@ -330,7 +330,7 @@ static void init_save_state(const device_config *device)
|
||||
state_save_register_device_item(device, 0, v->aw_offset);
|
||||
state_save_register_device_item(device, 0, v->aw_file_base);
|
||||
state_save_register_device_item(device, 0, v->aw_file_offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -555,18 +555,18 @@ static WRITE8_HANDLER( mmc1_rom_switch_w )
|
||||
break;
|
||||
|
||||
case 1: /* video rom banking - bank 0 - 4k or 8k */
|
||||
if (vram)
|
||||
if (vram)
|
||||
set_videoram_bank(space->machine, 0, (vrom4k) ? 4 : 8, (mmc1_shiftreg & 0x1f), 4);
|
||||
else
|
||||
else
|
||||
pc10_set_videorom_bank(space->machine, 0, (vrom4k) ? 4 : 8, (mmc1_shiftreg & 0x1f), 4);
|
||||
break;
|
||||
|
||||
case 2: /* video rom banking - bank 1 - 4k only */
|
||||
if (vrom4k)
|
||||
if (vrom4k)
|
||||
{
|
||||
if (vram)
|
||||
if (vram)
|
||||
set_videoram_bank(space->machine, 0, (vrom4k) ? 4 : 8, (mmc1_shiftreg & 0x1f), 4);
|
||||
else
|
||||
else
|
||||
pc10_set_videorom_bank(space->machine, 4, 4, (mmc1_shiftreg & 0x1f), 4);
|
||||
}
|
||||
break;
|
||||
|
@ -72,7 +72,7 @@ static void snes_latch_counters(running_machine *machine)
|
||||
snes_ppu.beam.latch_vert = video_screen_get_vpos(machine->primary_screen);
|
||||
snes_ppu.beam.latch_horz = snes_ppu.beam.current_horz;
|
||||
snes_ram[STAT78] |= 0x40; // indicate we latched
|
||||
// read_ophct = read_opvct = 0; // clear read flags - 2009-08: I think we must clear these when STAT78 is read...
|
||||
// read_ophct = read_opvct = 0; // clear read flags - 2009-08: I think we must clear these when STAT78 is read...
|
||||
|
||||
// printf("latched @ H %d V %d\n", snes_ppu.beam.latch_horz, snes_ppu.beam.latch_vert);
|
||||
}
|
||||
@ -359,12 +359,12 @@ READ8_HANDLER( snes_r_io )
|
||||
return snes_ppu.ppu1_open_bus;
|
||||
|
||||
// According to BSNES, these should return snes_open_bus_r!
|
||||
// case OAMADDL:
|
||||
// case OAMADDH:
|
||||
// case VMADDH:
|
||||
// case CGADD:
|
||||
// case CGDATA:
|
||||
// return snes_ram[offset];
|
||||
// case OAMADDL:
|
||||
// case OAMADDH:
|
||||
// case VMADDH:
|
||||
// case CGADD:
|
||||
// case CGDATA:
|
||||
// return snes_ram[offset];
|
||||
case MPYL: /* Multiplication result (low) */
|
||||
{
|
||||
/* Perform 16bit * 8bit multiply */
|
||||
@ -560,7 +560,7 @@ READ8_HANDLER( snes_r_io )
|
||||
value = ((joypad[1].low | (joypad[1].high << 8) | 0x10000) >> (15 - (joypad[1].oldrol++ % 16))) & 0x1;
|
||||
if( !(joypad[1].oldrol % 17) )
|
||||
value = 0x1;
|
||||
//value |= 0x1c; // bits 4, 3, and 2 are always set
|
||||
//value |= 0x1c; // bits 4, 3, and 2 are always set
|
||||
return value | 0x1c | (snes_open_bus_r(space,0) & 0xe0); //correct?
|
||||
}
|
||||
case HTIMEL:
|
||||
@ -649,7 +649,7 @@ READ8_HANDLER( snes_r_io )
|
||||
}
|
||||
|
||||
/* Unsupported reads returns open bus */
|
||||
// printf("%02x %02x\n",offset,snes_open_bus_r(space,0));
|
||||
// printf("%02x %02x\n",offset,snes_open_bus_r(space,0));
|
||||
return snes_open_bus_r(space,0);
|
||||
}
|
||||
|
||||
|
@ -783,7 +783,7 @@ static WRITE8_HANDLER( drmario_rom_banking )
|
||||
break;
|
||||
|
||||
case 1: /* video rom banking - bank 0 - 4k or 8k */
|
||||
if (!vram)
|
||||
if (!vram)
|
||||
v_set_videorom_bank(space->machine, 0, (vrom4k) ? 4 : 8, drmario_shiftreg, (vrom4k) ? 4 : 8);
|
||||
break;
|
||||
|
||||
|
@ -237,7 +237,7 @@ const game_driver * const drivers[] =
|
||||
DRIVER( kkgalax ) /* 1981 bootleg */
|
||||
DRIVER( porter ) /* 1982 bootleg (Arcade TV Game List - P.98, Left, 15 from bottom) */
|
||||
DRIVER( tdpgal ) /* 1983 Design Labs / Thomas Automatics */
|
||||
|
||||
|
||||
/* Has some similarities with Moon Cresta but Board is very different */
|
||||
DRIVER( rockclim ) /* (c)1981 Taito */
|
||||
|
||||
@ -9200,7 +9200,7 @@ Other Sun games
|
||||
DRIVER( kgbirda ) /* (c) 1996 */
|
||||
DRIVER( phantomp ) /* (c) 1998 */
|
||||
DRIVER( swtht2nz ) /* (c) 1998 */
|
||||
DRIVER( topgear ) /* (c) 1996 */
|
||||
DRIVER( topgear ) /* (c) 1996 */
|
||||
|
||||
/* Aristocrat Mk5 hardware */
|
||||
DRIVER( swthrt2v ) /* (c) 1995 */
|
||||
@ -9475,8 +9475,8 @@ Other Sun games
|
||||
DRIVER( moneymacv1 )/* (c) 200? Amcoe */
|
||||
DRIVER( moneymacd2 )/* (c) 200? Amcoe */
|
||||
DRIVER( moneymacv2 )/* (c) 200? Amcoe */
|
||||
//DRIVER( atworld ) /* (c) 2007 Amcoe - Around The World (year listed on Amcoe web site) */
|
||||
//DRIVER( atworldd1 ) /* (c) 2007 Amcoe (year listed on Amcoe web site) */
|
||||
//DRIVER( atworld ) /* (c) 2007 Amcoe - Around The World (year listed on Amcoe web site) */
|
||||
//DRIVER( atworldd1 ) /* (c) 2007 Amcoe (year listed on Amcoe web site) */
|
||||
|
||||
|
||||
DRIVER( chsuper3 ) /* unknown */
|
||||
|
@ -83,10 +83,10 @@ static TILE_GET_INFO( prosport_get_back_tile_info )
|
||||
int tile;
|
||||
|
||||
/*
|
||||
robiza notes:
|
||||
- flip y (handled with a +0x10 tile banking) depends only by position of the tile in the screen
|
||||
- bits 0-3 are not used by gfx hardware; the value is the color of the pixel in the map (golf)
|
||||
*/
|
||||
robiza notes:
|
||||
- flip y (handled with a +0x10 tile banking) depends only by position of the tile in the screen
|
||||
- bits 0-3 are not used by gfx hardware; the value is the color of the pixel in the map (golf)
|
||||
*/
|
||||
|
||||
tile = (prosport_bg_vram[tile_index] & 0xf0)>>4;
|
||||
|
||||
|
@ -1018,7 +1018,7 @@ READ8_HANDLER( ppu2c0x_palette_read )
|
||||
if (this_ppu->regs[PPU_CONTROL1] & PPU_CONTROL1_DISPLAY_MONO)
|
||||
return (this_ppu->palette_ram[offset & 0x1f] & 0x30);
|
||||
|
||||
else
|
||||
else
|
||||
return (this_ppu->palette_ram[offset & 0x1f] & 0x3f);
|
||||
}
|
||||
}
|
||||
|
@ -404,8 +404,8 @@ INLINE void snes_update_line( UINT8 screen, UINT8 color_depth, UINT8 hires, UINT
|
||||
/* scrolling */
|
||||
UINT32 basevmap;
|
||||
UINT16 vscroll, hscroll, vtilescroll;
|
||||
// UINT16 offset_per_tile_valid;
|
||||
// UINT8 offset_per_tile_mode;
|
||||
// UINT16 offset_per_tile_valid;
|
||||
// UINT8 offset_per_tile_mode;
|
||||
UINT8 vshift, hshift, tile_size;
|
||||
/* variables depending on color_depth */
|
||||
UINT8 color_shift = 0;
|
||||
@ -491,7 +491,7 @@ INLINE void snes_update_line( UINT8 screen, UINT8 color_depth, UINT8 hires, UINT
|
||||
wrap_around_x = 0; /* Make sure we don't do this again */
|
||||
}
|
||||
//if (tmap > 0x10000) //<- causes corrupt tiles in places, needed?
|
||||
// tmap %= 0x10000;
|
||||
// tmap %= 0x10000;
|
||||
|
||||
vflip = snes_vram[tmap + ii + 1] & 0x80;
|
||||
hflip = snes_vram[tmap + ii + 1] & 0x40;
|
||||
|
@ -77,7 +77,7 @@ WRITE16_HANDLER( twin16_video_register_w )
|
||||
|
||||
flip_screen_x_set(space->machine, video_register & TWIN16_SCREEN_FLIPX);
|
||||
flip_screen_y_set(space->machine, video_register & TWIN16_SCREEN_FLIPY);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 1: COMBINE_DATA( &scrollx[0] ); break;
|
||||
@ -130,9 +130,9 @@ WRITE16_HANDLER( twin16_video_register_w )
|
||||
* 2 | -------xxxxxxxxx | xpos
|
||||
* -----+------------------+
|
||||
* 3 | x--------------- | enable
|
||||
* 3 | -x-------------- | priority ?
|
||||
* 3 | -----x---------- | no shadow ?
|
||||
* 3 | ------x--------- | yflip ?
|
||||
* 3 | -x-------------- | priority ?
|
||||
* 3 | -----x---------- | no shadow ?
|
||||
* 3 | ------x--------- | yflip ?
|
||||
* 3 | -------x-------- | xflip
|
||||
* 3 | --------xx------ | height
|
||||
* 3 | ----------xx---- | width
|
||||
@ -153,11 +153,11 @@ static TIMER_CALLBACK( twin16_sprite_tick )
|
||||
static int twin16_set_sprite_timer( running_machine *machine )
|
||||
{
|
||||
if (twin16_sprite_busy) return 1;
|
||||
|
||||
|
||||
// sprite system busy, maybe a dma? time is guessed, assume 4 scanlines
|
||||
twin16_sprite_busy = 1;
|
||||
timer_adjust_oneshot(twin16_sprite_timer, attotime_make(0,(((screen_config *)(machine->primary_screen)->inline_config)->refresh) / video_screen_get_height(machine->primary_screen) * 4), 0);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -165,13 +165,13 @@ void twin16_spriteram_process( running_machine *machine )
|
||||
{
|
||||
UINT16 dx = scrollx[0];
|
||||
UINT16 dy = scrolly[0];
|
||||
|
||||
|
||||
const UINT16 *source = &spriteram16[0x0000];
|
||||
const UINT16 *finish = &spriteram16[0x1800];
|
||||
|
||||
|
||||
twin16_set_sprite_timer(machine);
|
||||
memset(&spriteram16[0x1800],0xff,0x800*sizeof(UINT16));
|
||||
|
||||
|
||||
while( source<finish )
|
||||
{
|
||||
UINT16 priority = source[0];
|
||||
@ -181,36 +181,36 @@ void twin16_spriteram_process( running_machine *machine )
|
||||
|
||||
UINT32 xpos = (0x10000*source[4])|source[5];
|
||||
UINT32 ypos = (0x10000*source[6])|source[7];
|
||||
|
||||
|
||||
/* notes on uncertain attributes:
|
||||
shadows: pen $F only (like other Konami hw), used in devilw, fround,
|
||||
miaj? (shadows are solid in tmnt hw version),
|
||||
gradius2? (ship exhaust)
|
||||
|
||||
sprite-background priority: in devilw, most sprites look best at high priority,
|
||||
in gradius2, most sprites look best at low priority. exceptions:
|
||||
- devilw prologue: sprites behind crowd (maybe more, haven't completed the game)
|
||||
- gradius2 intro showing earlier games: sprites above layers
|
||||
|
||||
currently using (priority&0x200), broken:
|
||||
- devilw prologue: sprites should be behind crowd
|
||||
- gradius2 level 7: bosses should be behind portal (ok except brain boss and mouth boss)
|
||||
- gradius2 ending: sun should be behind planet
|
||||
|
||||
does TWIN16_PLANE_ORDER affect it?
|
||||
|
||||
more?
|
||||
devilw monster dens exploding monochrome, players fading to white in prologue, and trees in
|
||||
the 1st level shrinking with a solid green color look odd, maybe alpha blended?
|
||||
|
||||
fround, hpuncher, miaj, cuebrickj, don't use the preprocessor. all sprites are expected
|
||||
to be high priority, and shadows are enabled
|
||||
*/
|
||||
shadows: pen $F only (like other Konami hw), used in devilw, fround,
|
||||
miaj? (shadows are solid in tmnt hw version),
|
||||
gradius2? (ship exhaust)
|
||||
|
||||
sprite-background priority: in devilw, most sprites look best at high priority,
|
||||
in gradius2, most sprites look best at low priority. exceptions:
|
||||
- devilw prologue: sprites behind crowd (maybe more, haven't completed the game)
|
||||
- gradius2 intro showing earlier games: sprites above layers
|
||||
|
||||
currently using (priority&0x200), broken:
|
||||
- devilw prologue: sprites should be behind crowd
|
||||
- gradius2 level 7: bosses should be behind portal (ok except brain boss and mouth boss)
|
||||
- gradius2 ending: sun should be behind planet
|
||||
|
||||
does TWIN16_PLANE_ORDER affect it?
|
||||
|
||||
more?
|
||||
devilw monster dens exploding monochrome, players fading to white in prologue, and trees in
|
||||
the 1st level shrinking with a solid green color look odd, maybe alpha blended?
|
||||
|
||||
fround, hpuncher, miaj, cuebrickj, don't use the preprocessor. all sprites are expected
|
||||
to be high priority, and shadows are enabled
|
||||
*/
|
||||
UINT16 attributes = 0x8000| // enabled
|
||||
(source[2]&0x03ff)| // scale,size,color
|
||||
(source[2]&0x4000)>>4| // no-shadow? (gradius2 level 7 boss sets this bit and appears to expect pen $F to be solid)
|
||||
(priority&0x200)<<5; // sprite-background priority?
|
||||
|
||||
|
||||
dest[0] = source[3]; /* gfx data */
|
||||
dest[1] = ((xpos>>8) - dx)&0xffff;
|
||||
dest[2] = ((ypos>>8) - dy)&0xffff;
|
||||
@ -236,7 +236,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
int xpos = source[1];
|
||||
int ypos = source[2];
|
||||
int x,y;
|
||||
|
||||
|
||||
int pal_base = ((attributes&0xf)+0x10)*16;
|
||||
int height = 16<<((attributes>>6)&0x3);
|
||||
int width = 16<<((attributes>>4)&0x3);
|
||||
@ -244,7 +244,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
int flipy = attributes&0x0200;
|
||||
int flipx = attributes&0x0100;
|
||||
int priority = (attributes&0x4000)?TWIN16_SPRITE_PRI_L1:TWIN16_SPRITE_PRI_L2;
|
||||
|
||||
|
||||
if( twin16_custom_video ) {
|
||||
/* fround board */
|
||||
pen_data = twin16_gfx_rom + 0x80000;
|
||||
@ -278,7 +278,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
if ((height&width) == 64) code &= ~8; // gradius2 ending sequence 64*64
|
||||
else if ((height&width) == 32) code &= ~3; // devilw 32*32
|
||||
else if ((height|width) == 48) code &= ~1; // devilw 32*16 / 16*32
|
||||
|
||||
|
||||
pen_data += code*0x40;
|
||||
|
||||
if( video_register&TWIN16_SCREEN_FLIPY )
|
||||
@ -295,7 +295,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
}
|
||||
if( xpos>=320 ) xpos -= 65536;
|
||||
if( ypos>=256 ) ypos -= 65536;
|
||||
|
||||
|
||||
/* slow slow slow, but it's ok for now */
|
||||
for( y=0; y<height; y++, pen_data += width/4 )
|
||||
{
|
||||
@ -304,18 +304,18 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
{
|
||||
UINT16 *dest = BITMAP_ADDR16(bitmap, sy, 0);
|
||||
UINT8 *pdest = BITMAP_ADDR8(machine->priority_bitmap, sy, 0);
|
||||
|
||||
|
||||
for( x=0; x<width; x++ )
|
||||
{
|
||||
int sx = (flipx)?(xpos+width-1-x):(xpos+x);
|
||||
if( sx>=0 && sx<320 )
|
||||
{
|
||||
UINT16 pen = pen_data[x>>2]>>((~x&3)<<2)&0xf;
|
||||
|
||||
|
||||
if( pen )
|
||||
{
|
||||
int shadow = (pen==0xf) & ((attributes&0x400)==0);
|
||||
|
||||
|
||||
if (pdest[sx]<priority) {
|
||||
if (shadow) {
|
||||
dest[sx] = machine->shadow_table[dest[sx]];
|
||||
@ -330,7 +330,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap )
|
||||
dest[sx] = machine->shadow_table[pal_base + pen];
|
||||
pdest[sx]^=TWIN16_SPRITE_CAST_SHADOW;
|
||||
}
|
||||
|
||||
|
||||
pdest[sx]|=TWIN16_SPRITE_OCCUPIED;
|
||||
}
|
||||
}
|
||||
@ -352,7 +352,7 @@ static void draw_layer( running_machine *machine, bitmap_t *bitmap, int opaque )
|
||||
int dx, dy, palette;
|
||||
int tile_flipx = video_register&TWIN16_TILE_FLIPX;
|
||||
int tile_flipy = video_register&TWIN16_TILE_FLIPY;
|
||||
|
||||
|
||||
if( ((video_register&TWIN16_PLANE_ORDER)?1:0) != opaque ) {
|
||||
source += 0x1000;
|
||||
dx = scrollx[2];
|
||||
@ -421,10 +421,10 @@ static void draw_layer( running_machine *machine, bitmap_t *bitmap, int opaque )
|
||||
{
|
||||
int code = source[i];
|
||||
/* fedcba9876543210
|
||||
xxx------------- color
|
||||
---xx----------- tile bank
|
||||
-----xxxxxxxxxxx tile number
|
||||
*/
|
||||
xxx------------- color
|
||||
---xx----------- tile bank
|
||||
-----xxxxxxxxxxx tile number
|
||||
*/
|
||||
const UINT16 *gfx_data = gfx_base + (code&0x7ff)*16 + bank_table[(code>>11)&0x3]*0x8000;
|
||||
int color = (code>>13);
|
||||
int pal_base = 16*(0x20+color+8*palette);
|
||||
@ -477,18 +477,18 @@ static TILE_GET_INFO( get_text_tile_info )
|
||||
const UINT16 *source = twin16_text_ram;
|
||||
int attr = source[tile_index];
|
||||
/* fedcba9876543210
|
||||
-x-------------- yflip
|
||||
--x------------- xflip
|
||||
---xxxx--------- color
|
||||
-------xxxxxxxxx tile number
|
||||
*/
|
||||
-x-------------- yflip
|
||||
--x------------- xflip
|
||||
---xxxx--------- color
|
||||
-------xxxxxxxxx tile number
|
||||
*/
|
||||
int code = attr & 0x1ff;
|
||||
int color = (attr >> 9) & 0x0f;
|
||||
int flags=0;
|
||||
|
||||
|
||||
if (attr&0x2000) flags|=TILE_FLIPX;
|
||||
if (attr&0x4000) flags|=TILE_FLIPY;
|
||||
|
||||
|
||||
SET_TILE_INFO(0, code, color, flags);
|
||||
}
|
||||
|
||||
@ -496,17 +496,17 @@ VIDEO_START( twin16 )
|
||||
{
|
||||
text_tilemap = tilemap_create(machine, get_text_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
tilemap_set_transparent_pen(text_tilemap, 0);
|
||||
|
||||
|
||||
memset(twin16_sprite_buffer,0xff,0x800*sizeof(UINT16));
|
||||
twin16_sprite_busy = 0;
|
||||
twin16_sprite_timer = timer_alloc(machine, twin16_sprite_tick, NULL);
|
||||
timer_adjust_oneshot(twin16_sprite_timer, attotime_never, 0);
|
||||
|
||||
|
||||
/* register for savestates */
|
||||
state_save_register_global_array(machine, twin16_sprite_buffer);
|
||||
state_save_register_global_array(machine, scrollx);
|
||||
state_save_register_global_array(machine, scrolly);
|
||||
|
||||
|
||||
state_save_register_global(machine, need_process_spriteram);
|
||||
state_save_register_global(machine, gfx_bank);
|
||||
state_save_register_global(machine, video_register);
|
||||
@ -518,12 +518,12 @@ VIDEO_UPDATE( twin16 )
|
||||
int text_flip=0;
|
||||
if (video_register&TWIN16_SCREEN_FLIPX) text_flip|=TILEMAP_FLIPX;
|
||||
if (video_register&TWIN16_SCREEN_FLIPY) text_flip|=TILEMAP_FLIPY;
|
||||
|
||||
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
draw_layer( screen->machine, bitmap, 1 );
|
||||
draw_layer( screen->machine, bitmap, 0 );
|
||||
draw_sprites( screen->machine, bitmap );
|
||||
|
||||
|
||||
if (text_flip) tilemap_set_flip(text_tilemap, text_flip);
|
||||
tilemap_draw(bitmap, cliprect, text_tilemap, 0, 0);
|
||||
return 0;
|
||||
@ -532,14 +532,14 @@ VIDEO_UPDATE( twin16 )
|
||||
VIDEO_EOF( twin16 )
|
||||
{
|
||||
twin16_set_sprite_timer(machine);
|
||||
|
||||
|
||||
if (twin16_spriteram_process_enable()) {
|
||||
if (need_process_spriteram) twin16_spriteram_process(machine);
|
||||
need_process_spriteram = 1;
|
||||
|
||||
|
||||
/* if the sprite preprocessor is used, sprite ram is copied to an external buffer first,
|
||||
as evidenced by 1-frame sprite lag in gradius2 and devilw otherwise, though there's probably
|
||||
more to it than that */
|
||||
as evidenced by 1-frame sprite lag in gradius2 and devilw otherwise, though there's probably
|
||||
more to it than that */
|
||||
memcpy(&buffered_spriteram16[0x1800],twin16_sprite_buffer,0x800*sizeof(UINT16));
|
||||
memcpy(twin16_sprite_buffer,&spriteram16[0x1800],0x800*sizeof(UINT16));
|
||||
}
|
||||
|
@ -10,4 +10,4 @@
|
||||
***************************************************************************/
|
||||
|
||||
extern const char build_version[];
|
||||
const char build_version[] = "0.133u1 ("__DATE__")";
|
||||
const char build_version[] = "0.133u2 ("__DATE__")";
|
||||
|
Loading…
Reference in New Issue
Block a user