mirror of
https://github.com/holub/mame
synced 2025-05-25 23:35:26 +03:00
Merged i8x41 (UPI-41) core into MCS-48 core:
* all code now lives in mcs48.c * rewrote disassembler as unified MCS-48/UPI-41 disassembler * changed UPI-41 interfaces to match MCS-48 * added new master read/write interfaces for external access * unified interface to 8243 expander chip * converted tnzs and decocass to the new interfaces DECO Cassette fixes/cleanups: * converted tape handling to a device * changed tape handling to use a timer callback * updated to work with new UPI-41 core * corrected clock speeds for all chips (esp. the 8041) * fixed very wrong CRC implementation (how did it ever work?) * corrected sound IRQ rate * corrected video timing Burger Time hardware fixes: * corrected sound IRQ rate and handling * removed lnc audio reset hack * full audio memory maps based on schematics * corrected video timing
This commit is contained in:
parent
33e828c111
commit
528d5b6528
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -166,10 +166,6 @@ src/emu/cpu/i86/table86.h svneol=native#text/plain
|
||||
src/emu/cpu/i860/i860.c svneol=native#text/plain
|
||||
src/emu/cpu/i860/i860.h svneol=native#text/plain
|
||||
src/emu/cpu/i860/i860dasm.c svneol=native#text/plain
|
||||
src/emu/cpu/i8x41/8x41dasm.c svneol=native#text/plain
|
||||
src/emu/cpu/i8x41/i8x41.c svneol=native#text/plain
|
||||
src/emu/cpu/i8x41/i8x41.h svneol=native#text/plain
|
||||
src/emu/cpu/i8x41/i8x41ops.c svneol=native#text/plain
|
||||
src/emu/cpu/i960/i960.c svneol=native#text/plain
|
||||
src/emu/cpu/i960/i960.h svneol=native#text/plain
|
||||
src/emu/cpu/i960/i960dis.c svneol=native#text/plain
|
||||
|
@ -671,27 +671,6 @@ $(CPUOBJ)/mcs48/mcs48.o: $(CPUSRC)/mcs48/mcs48.c \
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
# Intel 8x41
|
||||
#-------------------------------------------------
|
||||
|
||||
CPUDEFS += -DHAS_I8041=$(if $(filter I8041,$(CPUS)),1,0)
|
||||
CPUDEFS += -DHAS_I8741=$(if $(filter I8741,$(CPUS)),1,0)
|
||||
CPUDEFS += -DHAS_I8042=$(if $(filter I8042,$(CPUS)),1,0)
|
||||
CPUDEFS += -DHAS_I8242=$(if $(filter I8242,$(CPUS)),1,0)
|
||||
CPUDEFS += -DHAS_I8742=$(if $(filter I8742,$(CPUS)),1,0)
|
||||
|
||||
ifneq ($(filter I8041 I8741 I8042 I8242 I8742 ,$(CPUS)),)
|
||||
OBJDIRS += $(CPUOBJ)/i8x41
|
||||
CPUOBJS += $(CPUOBJ)/i8x41/i8x41.o
|
||||
DBGOBJS += $(CPUOBJ)/i8x41/8x41dasm.o
|
||||
endif
|
||||
|
||||
$(CPUOBJ)/i8x41/i8x41.o: $(CPUSRC)/i8x41/i8x41.c \
|
||||
$(CPUSRC)/i8x41/i8x41.h
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
# Intel 8051 and derivatives
|
||||
#-------------------------------------------------
|
||||
|
@ -1,523 +0,0 @@
|
||||
#include "debugger.h"
|
||||
#include "i8x41.h"
|
||||
|
||||
CPU_DISASSEMBLE( i8x41 )
|
||||
{
|
||||
UINT32 flags = 0;
|
||||
unsigned PC = pc;
|
||||
UINT8 op;
|
||||
UINT8 arg;
|
||||
|
||||
op = oprom[PC++ - pc];
|
||||
switch( op )
|
||||
{
|
||||
case 0x00: /* 1: 0000 0000 */
|
||||
sprintf(buffer, "nop");
|
||||
break;
|
||||
case 0x01: /* 1: 0000 0001 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x02: /* 1: 0000 0010 */
|
||||
sprintf(buffer, "out dbb,a");
|
||||
break;
|
||||
case 0x03: /* 2: 0000 0011 */
|
||||
sprintf(buffer, "add a,#$%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x04: /* 2: aaa0 0100 */
|
||||
case 0x24: /* 2: aaa0 0100 */
|
||||
case 0x44: /* 2: aaa0 0100 */
|
||||
case 0x64: /* 2: aaa0 0100 */
|
||||
case 0x84: /* 2: aaa0 0100 */
|
||||
case 0xa4: /* 2: aaa0 0100 */
|
||||
case 0xc4: /* 2: aaa0 0100 */
|
||||
case 0xe4: /* 2: aaa0 0100 */
|
||||
sprintf(buffer, "jmp $%04X", ((op<<3) & 0x700) | opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x05: /* 1: 0000 0101 */
|
||||
sprintf(buffer, "en i");
|
||||
break;
|
||||
case 0x06: /* 1: 0000 0110 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x07: /* 1: 0000 0111 */
|
||||
sprintf(buffer, "dec a");
|
||||
break;
|
||||
case 0x08: /* 2: 0000 10pp */
|
||||
case 0x09: /* 2: 0000 10pp */
|
||||
case 0x0a: /* 2: 0000 10pp */
|
||||
case 0x0b: /* 2: 0000 10pp */
|
||||
sprintf(buffer, "in a,p%d", op&3);
|
||||
break;
|
||||
case 0x0c: /* 2: 0000 11pp */
|
||||
case 0x0d: /* 2: 0000 11pp */
|
||||
case 0x0e: /* 2: 0000 11pp */
|
||||
case 0x0f: /* 2: 0000 11pp */
|
||||
sprintf(buffer, "movd a,p%d", op&3);
|
||||
break;
|
||||
case 0x10: /* 1: 0001 000r */
|
||||
case 0x11: /* 1: 0001 000r */
|
||||
sprintf(buffer, "inc @r%d", op&1);
|
||||
break;
|
||||
case 0x12: /* 2: bbb1 0010 */
|
||||
case 0x32: /* 2: bbb1 0010 */
|
||||
case 0x52: /* 2: bbb1 0010 */
|
||||
case 0x72: /* 2: bbb1 0010 */
|
||||
case 0x92: /* 2: bbb1 0010 */
|
||||
case 0xb2: /* 2: bbb1 0010 */
|
||||
case 0xd2: /* 2: bbb1 0010 */
|
||||
case 0xf2: /* 2: bbb1 0010 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jb%d $%04X", op >> 5, (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x13: /* 2: 0001 0011 */
|
||||
sprintf(buffer, "addc $%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x14: /* 2: aaa1 0100 */
|
||||
case 0x34: /* 2: aaa1 0100 */
|
||||
case 0x54: /* 2: aaa1 0100 */
|
||||
case 0x74: /* 2: aaa1 0100 */
|
||||
case 0x94: /* 2: aaa1 0100 */
|
||||
case 0xb4: /* 2: aaa1 0100 */
|
||||
case 0xd4: /* 2: aaa1 0100 */
|
||||
case 0xf4: /* 2: aaa1 0100 */
|
||||
sprintf(buffer, "call $%04X", ((op<<3) & 0x700) | opram[PC++ - pc]);
|
||||
flags = DASMFLAG_STEP_OVER;
|
||||
break;
|
||||
case 0x15: /* 1: 0001 0101 */
|
||||
sprintf(buffer, "dis i");
|
||||
break;
|
||||
case 0x16: /* 2: 0001 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jtf $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x17: /* 1: 0001 0111 */
|
||||
sprintf(buffer, "inc a");
|
||||
break;
|
||||
case 0x18: /* 1: 0001 1rrr */
|
||||
case 0x19: /* 1: 0001 1rrr */
|
||||
case 0x1a: /* 1: 0001 1rrr */
|
||||
case 0x1b: /* 1: 0001 1rrr */
|
||||
case 0x1c: /* 1: 0001 1rrr */
|
||||
case 0x1d: /* 1: 0001 1rrr */
|
||||
case 0x1e: /* 1: 0001 1rrr */
|
||||
case 0x1f: /* 1: 0001 1rrr */
|
||||
sprintf(buffer, "inc r%d", op&7);
|
||||
break;
|
||||
case 0x20: /* 1: 0010 000r */
|
||||
case 0x21: /* 1: 0010 000r */
|
||||
sprintf(buffer, "xch a,@r%d", op&1);
|
||||
break;
|
||||
case 0x22: /* 1: 0010 0010 */
|
||||
sprintf(buffer, "in a,ddb");
|
||||
break;
|
||||
case 0x23: /* 2: 0010 0011 */
|
||||
sprintf(buffer, "mov a,#$%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x25: /* 1: 0010 0101 */
|
||||
sprintf(buffer, "en tcnti");
|
||||
break;
|
||||
case 0x26: /* 2: 0010 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jnt0 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x27: /* 1: 0010 0111 */
|
||||
sprintf(buffer, "clr a");
|
||||
break;
|
||||
case 0x28: /* 1: 0010 1rrr */
|
||||
case 0x29: /* 1: 0010 1rrr */
|
||||
case 0x2a: /* 1: 0010 1rrr */
|
||||
case 0x2b: /* 1: 0010 1rrr */
|
||||
case 0x2c: /* 1: 0010 1rrr */
|
||||
case 0x2d: /* 1: 0010 1rrr */
|
||||
case 0x2e: /* 1: 0010 1rrr */
|
||||
case 0x2f: /* 1: 0010 1rrr */
|
||||
sprintf(buffer, "xch a,r%d", op&7);
|
||||
break;
|
||||
case 0x30: /* 1: 0011 000r */
|
||||
case 0x31: /* 1: 0011 000r */
|
||||
sprintf(buffer, "xchd a,@r%d", op&1);
|
||||
break;
|
||||
case 0x33: /* 1: 0011 0101 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x35: /* 1: 0000 0101 */
|
||||
sprintf(buffer, "dis tcnti");
|
||||
break;
|
||||
case 0x36: /* 2: 0011 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jt0 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x37: /* 1: 0011 0111 */
|
||||
sprintf(buffer, "cpl a");
|
||||
break;
|
||||
case 0x38: /* 2: 0011 10pp */
|
||||
case 0x39: /* 2: 0011 10pp */
|
||||
case 0x3a: /* 2: 0011 10pp */
|
||||
case 0x3b: /* 2: 0011 10pp */
|
||||
sprintf(buffer, "out p%d,a", op&3);
|
||||
break;
|
||||
case 0x3c: /* 2: 0011 11pp */
|
||||
case 0x3d: /* 2: 0011 11pp */
|
||||
case 0x3e: /* 2: 0011 11pp */
|
||||
case 0x3f: /* 2: 0011 11pp */
|
||||
sprintf(buffer, "movd p%d,a", op&7);
|
||||
break;
|
||||
case 0x40: /* 1: 0100 000r */
|
||||
case 0x41: /* 1: 0100 000r */
|
||||
sprintf(buffer, "orl a,@r%d", op&1);
|
||||
break;
|
||||
case 0x42: /* 1: 0100 0010 */
|
||||
sprintf(buffer, "mov a,t");
|
||||
break;
|
||||
case 0x43: /* 2: 0100 0011 */
|
||||
sprintf(buffer, "orl a,#$%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x45: /* 1: 0100 0101 */
|
||||
sprintf(buffer, "strt cnt");
|
||||
break;
|
||||
case 0x46: /* 2: 0100 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jnt1 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x47: /* 1: 0100 0111 */
|
||||
sprintf(buffer, "swap a");
|
||||
break;
|
||||
case 0x48: /* 1: 0100 1rrr */
|
||||
case 0x49: /* 1: 0100 1rrr */
|
||||
case 0x4a: /* 1: 0100 1rrr */
|
||||
case 0x4b: /* 1: 0100 1rrr */
|
||||
case 0x4c: /* 1: 0100 1rrr */
|
||||
case 0x4d: /* 1: 0100 1rrr */
|
||||
case 0x4e: /* 1: 0100 1rrr */
|
||||
case 0x4f: /* 1: 0100 1rrr */
|
||||
sprintf(buffer, "orl a,r%d", op&7);
|
||||
break;
|
||||
case 0x50: /* 1: 0101 000r */
|
||||
case 0x51: /* 1: 0101 000r */
|
||||
sprintf(buffer, "anl a,@r%d", op&1);
|
||||
break;
|
||||
case 0x53: /* 2: 0101 0011 */
|
||||
sprintf(buffer, "anl a,#$%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x55: /* 1: 0101 0101 */
|
||||
sprintf(buffer, "strt t");
|
||||
break;
|
||||
case 0x56: /* 2: 0101 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jt1 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x57: /* 1: 0101 0111 */
|
||||
sprintf(buffer, "da a");
|
||||
break;
|
||||
case 0x58: /* 1: 0101 1rrr */
|
||||
case 0x59: /* 1: 0101 1rrr */
|
||||
case 0x5a: /* 1: 0101 1rrr */
|
||||
case 0x5b: /* 1: 0101 1rrr */
|
||||
case 0x5c: /* 1: 0101 1rrr */
|
||||
case 0x5d: /* 1: 0101 1rrr */
|
||||
case 0x5e: /* 1: 0101 1rrr */
|
||||
case 0x5f: /* 1: 0101 1rrr */
|
||||
sprintf(buffer, "anl a,r%d", op&7);
|
||||
break;
|
||||
case 0x60: /* 1: 0110 000r */
|
||||
case 0x61: /* 1: 0110 000r */
|
||||
sprintf(buffer, "add a,@r%d", op&1);
|
||||
break;
|
||||
case 0x62: /* 1: 0110 0010 */
|
||||
sprintf(buffer, "mov t,a");
|
||||
break;
|
||||
case 0x63: /* 1: 0110 0011 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x65: /* 1: 0110 0101 */
|
||||
sprintf(buffer, "stop tcnt");
|
||||
break;
|
||||
case 0x66: /* 1: 0110 0110 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x67: /* 1: 0110 0111 */
|
||||
sprintf(buffer, "rrc a");
|
||||
break;
|
||||
case 0x68: /* 1: 0110 1rrr */
|
||||
case 0x69: /* 1: 0110 1rrr */
|
||||
case 0x6a: /* 1: 0110 1rrr */
|
||||
case 0x6b: /* 1: 0110 1rrr */
|
||||
case 0x6c: /* 1: 0110 1rrr */
|
||||
case 0x6d: /* 1: 0110 1rrr */
|
||||
case 0x6e: /* 1: 0110 1rrr */
|
||||
case 0x6f: /* 1: 0110 1rrr */
|
||||
sprintf(buffer, "add a,r%d", op&7);
|
||||
break;
|
||||
case 0x70: /* 1: 0111 000r */
|
||||
case 0x71: /* 1: 0111 000r */
|
||||
sprintf(buffer, "addc a,@r%d", op&1);
|
||||
break;
|
||||
case 0x73: /* 1: 0111 0011 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x75: /* 1: 0111 0101 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x76: /* 2: 0111 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jf1 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x77: /* 1: 0111 0111 */
|
||||
sprintf(buffer, "rl a");
|
||||
break;
|
||||
case 0x78: /* 1: 0111 1rrr */
|
||||
case 0x79: /* 1: 0111 1rrr */
|
||||
case 0x7a: /* 1: 0111 1rrr */
|
||||
case 0x7b: /* 1: 0111 1rrr */
|
||||
case 0x7c: /* 1: 0111 1rrr */
|
||||
case 0x7d: /* 1: 0111 1rrr */
|
||||
case 0x7e: /* 1: 0111 1rrr */
|
||||
case 0x7f: /* 1: 0111 1rrr */
|
||||
sprintf(buffer, "addc a,r%d", op&7);
|
||||
break;
|
||||
case 0x80: /* 1: 1000 0000 */
|
||||
sprintf(buffer, "ill ");
|
||||
break;
|
||||
case 0x81: /* 1: 1000 0001 */
|
||||
sprintf(buffer, "ill ");
|
||||
break;
|
||||
case 0x82: /* 1: 1000 0010 */
|
||||
sprintf(buffer, "ill ");
|
||||
break;
|
||||
case 0x83: /* 2: 1000 0011 */
|
||||
sprintf(buffer, "ret");
|
||||
flags = DASMFLAG_STEP_OUT;
|
||||
break;
|
||||
case 0x85: /* 1: 1000 0101 */
|
||||
sprintf(buffer, "clr f0");
|
||||
break;
|
||||
case 0x86: /* 2: 1000 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jobf $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x87: /* 1: 1000 0111 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x88: /* 2: 1000 10pp */
|
||||
case 0x89: /* 2: 1000 10pp */
|
||||
case 0x8a: /* 2: 1000 10pp */
|
||||
case 0x8b: /* 2: 1000 10pp */
|
||||
sprintf(buffer, "orl p%d,#$%02X", op&3, opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x8c: /* 2: 1000 11pp */
|
||||
case 0x8d: /* 2: 1000 11pp */
|
||||
case 0x8e: /* 2: 1000 11pp */
|
||||
case 0x8f: /* 2: 1000 11pp */
|
||||
sprintf(buffer, "orld p%d,a", op&7);
|
||||
break;
|
||||
case 0x90: /* 1: 1001 0000 */
|
||||
sprintf(buffer, "mov sts,a");
|
||||
break;
|
||||
case 0x91: /* 1: 1001 0001 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0x93: /* 2: 1001 0011 */
|
||||
sprintf(buffer, "retr");
|
||||
flags = DASMFLAG_STEP_OVER;
|
||||
break;
|
||||
case 0x95: /* 1: 1001 0101 */
|
||||
sprintf(buffer, "cpl f0");
|
||||
break;
|
||||
case 0x96: /* 2: 1001 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jnz $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0x97: /* 1: 1001 0111 */
|
||||
sprintf(buffer, "clr c");
|
||||
break;
|
||||
case 0x98: /* 2: 1001 10pp */
|
||||
case 0x99: /* 2: 1001 10pp */
|
||||
case 0x9a: /* 2: 1001 10pp */
|
||||
case 0x9b: /* 2: 1001 10pp */
|
||||
sprintf(buffer, "anl p%d,#$%02X", op&3, opram[PC++ - pc]);
|
||||
break;
|
||||
case 0x9c: /* 2: 1001 11pp */
|
||||
case 0x9d: /* 2: 1001 11pp */
|
||||
case 0x9e: /* 2: 1001 11pp */
|
||||
case 0x9f: /* 2: 1001 11pp */
|
||||
sprintf(buffer, "anld p%d,a", op&7);
|
||||
break;
|
||||
case 0xa0: /* 1: 1010 000r */
|
||||
case 0xa1: /* 1: 1010 000r */
|
||||
sprintf(buffer, "mov @r%d,a", op&1);
|
||||
break;
|
||||
case 0xa2: /* 1: 1010 0010 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xa3: /* 2: 1010 0011 */
|
||||
sprintf(buffer, "movp a,@a");
|
||||
break;
|
||||
case 0xa5: /* 1: 1010 0101 */
|
||||
sprintf(buffer, "clr f1");
|
||||
break;
|
||||
case 0xa6: /* 1: 1010 0110 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xa7: /* 1: 1010 0111 */
|
||||
sprintf(buffer, "cpl c");
|
||||
break;
|
||||
case 0xa8: /* 1: 1010 1rrr */
|
||||
case 0xa9: /* 1: 1010 1rrr */
|
||||
case 0xaa: /* 1: 1010 1rrr */
|
||||
case 0xab: /* 1: 1010 1rrr */
|
||||
case 0xac: /* 1: 1010 1rrr */
|
||||
case 0xad: /* 1: 1010 1rrr */
|
||||
case 0xae: /* 1: 1010 1rrr */
|
||||
case 0xaf: /* 1: 1010 1rrr */
|
||||
sprintf(buffer, "mov r%d,a", op&7);
|
||||
break;
|
||||
case 0xb0: /* 2: 1011 000r */
|
||||
case 0xb1: /* 2: 1011 000r */
|
||||
sprintf(buffer, "mov @r%d,#$%02X", op&1, opram[PC++ - pc]);
|
||||
break;
|
||||
case 0xb3: /* 2: 1011 0011 */
|
||||
sprintf(buffer, "jmpp @a");
|
||||
break;
|
||||
case 0xb5: /* 1: 1011 0101 */
|
||||
sprintf(buffer, "cpl f1");
|
||||
break;
|
||||
case 0xb6: /* 2: 1011 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jf0 $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0xb7: /* 1: 1011 0111 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xb8: /* 1: 1011 1rrr */
|
||||
case 0xb9: /* 1: 1011 1rrr */
|
||||
case 0xba: /* 1: 1011 1rrr */
|
||||
case 0xbb: /* 1: 1011 1rrr */
|
||||
case 0xbc: /* 1: 1011 1rrr */
|
||||
case 0xbd: /* 1: 1011 1rrr */
|
||||
case 0xbe: /* 1: 1011 1rrr */
|
||||
case 0xbf: /* 1: 1011 1rrr */
|
||||
sprintf(buffer, "mov r%d,#$%02X", op&7, opram[PC++ - pc]);
|
||||
break;
|
||||
case 0xc0: /* 1: 1100 0000 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xc1: /* 1: 1100 0001 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xc2: /* 1: 1100 0010 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xc3: /* 1: 1100 0011 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xc5: /* 1: 1100 0101 */
|
||||
sprintf(buffer, "sel rb0");
|
||||
break;
|
||||
case 0xc6: /* 2: 1100 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jz $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0xc7: /* 1: 1100 0111 */
|
||||
sprintf(buffer, "mov a,psw");
|
||||
break;
|
||||
case 0xc8: /* 1: 1100 1rrr */
|
||||
case 0xc9: /* 1: 1100 1rrr */
|
||||
case 0xca: /* 1: 1100 1rrr */
|
||||
case 0xcb: /* 1: 1100 1rrr */
|
||||
case 0xcc: /* 1: 1100 1rrr */
|
||||
case 0xcd: /* 1: 1100 1rrr */
|
||||
case 0xce: /* 1: 1100 1rrr */
|
||||
case 0xcf: /* 1: 1100 1rrr */
|
||||
sprintf(buffer, "dec r%d", op&7);
|
||||
break;
|
||||
case 0xd0: /* 1: 1101 000r */
|
||||
case 0xd1: /* 1: 1101 000r */
|
||||
sprintf(buffer, "xrl a,@r%d", op&1);
|
||||
break;
|
||||
case 0xd3: /* 1: 1101 0011 */
|
||||
sprintf(buffer, "xrl a,#$%02X", opram[PC++ - pc]);
|
||||
break;
|
||||
case 0xd5: /* 1: 1101 0101 */
|
||||
sprintf(buffer, "sel rb1");
|
||||
break;
|
||||
case 0xd6: /* 2: 1101 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jnibf $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0xd7: /* 1: 1101 0111 */
|
||||
sprintf(buffer, "mov psw,a");
|
||||
break;
|
||||
case 0xd8: /* 1: 1101 1rrr */
|
||||
case 0xd9: /* 1: 1101 1rrr */
|
||||
case 0xda: /* 1: 1101 1rrr */
|
||||
case 0xdb: /* 1: 1101 1rrr */
|
||||
case 0xdc: /* 1: 1101 1rrr */
|
||||
case 0xdd: /* 1: 1101 1rrr */
|
||||
case 0xde: /* 1: 1101 1rrr */
|
||||
case 0xdf: /* 1: 1101 1rrr */
|
||||
sprintf(buffer, "xrl a,r%d", op&7);
|
||||
break;
|
||||
case 0xe0: /* 1: 1110 0000 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xe1: /* 1: 1110 0001 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xe2: /* 1: 1110 0010 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xe3: /* 2: 1110 0011 */
|
||||
sprintf(buffer, "movp3 a,@a");
|
||||
break;
|
||||
case 0xe5: /* 1: 1110 0101 */
|
||||
sprintf(buffer, "en dma");
|
||||
break;
|
||||
case 0xe6: /* 2: 1110 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jnc $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0xe7: /* 1: 1110 0111 */
|
||||
sprintf(buffer, "rl a");
|
||||
break;
|
||||
case 0xe8: /* 2: 1110 1rrr */
|
||||
case 0xe9: /* 2: 1110 1rrr */
|
||||
case 0xea: /* 2: 1110 1rrr */
|
||||
case 0xeb: /* 2: 1110 1rrr */
|
||||
case 0xec: /* 2: 1110 1rrr */
|
||||
case 0xed: /* 2: 1110 1rrr */
|
||||
case 0xee: /* 2: 1110 1rrr */
|
||||
case 0xef: /* 2: 1110 1rrr */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "djnz r%d,$%04X", op&7, (PC & 0x700) | arg);
|
||||
flags = DASMFLAG_STEP_OVER;
|
||||
break;
|
||||
case 0xf0: /* 1: 1111 000r */
|
||||
case 0xf1: /* 1: 1111 000r */
|
||||
sprintf(buffer, "mov a,@r%d", op&1);
|
||||
break;
|
||||
case 0xf3: /* 1: 1111 0011 */
|
||||
sprintf(buffer, "ill");
|
||||
break;
|
||||
case 0xf5: /* 1: 1111 0101 */
|
||||
sprintf(buffer, "en flags");
|
||||
break;
|
||||
case 0xf6: /* 2: 1111 0110 */
|
||||
arg = opram[PC++ - pc];
|
||||
sprintf(buffer, "jc $%04X", (PC & 0x700) | arg);
|
||||
break;
|
||||
case 0xf7: /* 1: 1111 0111 */
|
||||
sprintf(buffer, "rlc a");
|
||||
break;
|
||||
case 0xf8: /* 1: 1111 1rrr */
|
||||
case 0xf9: /* 1: 1111 1rrr */
|
||||
case 0xfa: /* 1: 1111 1rrr */
|
||||
case 0xfb: /* 1: 1111 1rrr */
|
||||
case 0xfc: /* 1: 1111 1rrr */
|
||||
case 0xfd: /* 1: 1111 1rrr */
|
||||
case 0xfe: /* 1: 1111 1rrr */
|
||||
case 0xff: /* 1: 1111 1rrr */
|
||||
sprintf(buffer, "mov a,r%d", op&7);
|
||||
break;
|
||||
}
|
||||
return (PC - pc) | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,100 +0,0 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* i8x41.h
|
||||
* Portable UPI-41/8041/8741/8042/8742 emulator interface
|
||||
*
|
||||
* Copyright Juergen Buchmueller, all rights reserved.
|
||||
*
|
||||
* - This source code is released as freeware for non-commercial purposes.
|
||||
* - You are free to use and redistribute this code in modified or
|
||||
* unmodified form, provided you list me in the credits.
|
||||
* - If you modify this source code, you must add a notice to each modified
|
||||
* source file that it has been changed. If you're a nice person, you
|
||||
* will clearly mark each change too. :)
|
||||
* - If you wish to use this for commercial purposes, please contact me at
|
||||
* pullmoll@t-online.de
|
||||
* - The author of this copywritten work reserves the right to change the
|
||||
* terms of its usage and license at any time, including retroactively
|
||||
* - This entire notice must remain in the source code.
|
||||
*
|
||||
* TLP (10-Jan-2003)
|
||||
* Added output ports registers to the debug viewer
|
||||
* Added the Clock Divider
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __I8X41_H__
|
||||
#define __I8X41_H__
|
||||
|
||||
#include "cpuintrf.h"
|
||||
|
||||
|
||||
/* The i8x41/i8x42 input clock is divided by 15 */
|
||||
#define I8X41_CLOCK_DIVIDER 15
|
||||
|
||||
/* Note:
|
||||
* I8X41_DATA is A0 = 0 and R/W
|
||||
* I8X41_CMND is A0 = 1 and W only
|
||||
* I8X41_STAT is A0 = 1 and R only
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* Interrupt constants
|
||||
*/
|
||||
|
||||
#define I8X41_INT_IBF 0 /* input buffer full interrupt */
|
||||
#define I8X41_INT_TEST1 1 /* test1 line (also counter interrupt; taken on cntr overflow) */
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Use these in the I/O port fields of your driver for the test lines - i.e,
|
||||
* { I8X41_t0, I8X41_t0, i8041_test0_r },
|
||||
* { I8X41_t1, I8X41_t1, i8041_test1_r },
|
||||
* { I8X41_ps, I8X41_ps, i8041_port_strobe_w },
|
||||
*/
|
||||
|
||||
#define I8X41_p1 0x01
|
||||
#define I8X41_p2 0x02
|
||||
#define I8X41_t0 0x80 /* TEST0 input port handle */
|
||||
#define I8X41_t1 0x81 /* TEST1 input port handle */
|
||||
#define I8X41_ps 0x82 /* Prog pin strobe for expanded port sync */
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* The i8x41/i8x42 have 128/256 bytes of internal memory respectively
|
||||
*/
|
||||
|
||||
#define I8X41_intRAM_MASK 0x7f
|
||||
#define I8X42_intRAM_MASK 0xff
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
I8X41_PC=1, I8X41_SP, I8X41_PSW, I8X41_T, I8X41_DATA, I8X41_DATA_DASM,
|
||||
I8X41_CMND, I8X41_CMND_DASM, I8X41_STAT, I8X41_P1, I8X41_P2,I8X41_A,
|
||||
I8X41_R0, I8X41_R1, I8X41_R2, I8X41_R3, I8X41_R4, I8X41_R5, I8X41_R6, I8X41_R7
|
||||
};
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
*/
|
||||
|
||||
extern CPU_GET_INFO( i8041 );
|
||||
extern CPU_GET_INFO( i8741 );
|
||||
extern CPU_GET_INFO( i8042 );
|
||||
extern CPU_GET_INFO( i8242 );
|
||||
extern CPU_GET_INFO( i8742 );
|
||||
|
||||
#define CPU_I8041 CPU_GET_INFO_NAME( i8041 )
|
||||
#define CPU_I8741 CPU_GET_INFO_NAME( i8741 )
|
||||
#define CPU_I8042 CPU_GET_INFO_NAME( i8042 )
|
||||
#define CPU_I8242 CPU_GET_INFO_NAME( i8242 )
|
||||
#define CPU_I8742 CPU_GET_INFO_NAME( i8742 )
|
||||
|
||||
extern CPU_DISASSEMBLE( i8x41 );
|
||||
|
||||
#endif /* __I8X41_H__ */
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
||||
|
||||
mcs48.c
|
||||
|
||||
Intel MCS-48 Portable Emulator
|
||||
Intel MCS-48/UPI-41 Portable Emulator
|
||||
|
||||
Copyright Mirko Buffoni
|
||||
Based on the original work Copyright Dan Boris, an 8048 emulator
|
||||
@ -12,11 +12,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __I8039_H__
|
||||
#define __I8039_H__
|
||||
#ifndef __MCS48_H__
|
||||
#define __MCS48_H__
|
||||
|
||||
#include "cpuintrf.h"
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
CONSTANTS
|
||||
***************************************************************************/
|
||||
@ -24,10 +25,11 @@
|
||||
/* register access indexes */
|
||||
enum
|
||||
{
|
||||
MCS48_PC = 1,
|
||||
MCS48_PC,
|
||||
MCS48_PSW,
|
||||
MCS48_A,
|
||||
MCS48_TC,
|
||||
MCS48_TPRE,
|
||||
MCS48_P1,
|
||||
MCS48_P2,
|
||||
MCS48_R0,
|
||||
@ -38,7 +40,14 @@ enum
|
||||
MCS48_R5,
|
||||
MCS48_R6,
|
||||
MCS48_R7,
|
||||
MCS48_EA
|
||||
MCS48_EA,
|
||||
MCS48_STS, /* UPI-41 systems only */
|
||||
MCS48_DBBO, /* UPI-41 systems only */
|
||||
MCS48_DBBI, /* UPI-41 systems only */
|
||||
|
||||
MCS48_GENPC = REG_GENPC,
|
||||
MCS48_GENSP = REG_GENSP,
|
||||
MCS48_GENPCBASE = REG_GENPCBASE
|
||||
};
|
||||
|
||||
|
||||
@ -46,6 +55,7 @@ enum
|
||||
enum
|
||||
{
|
||||
MCS48_INPUT_IRQ = 0,
|
||||
UPI41_INPUT_IBF = 0,
|
||||
MCS48_INPUT_EA
|
||||
};
|
||||
|
||||
@ -62,7 +72,18 @@ enum
|
||||
MCS48_PORT_P7 = 0x107,
|
||||
MCS48_PORT_T0 = 0x110,
|
||||
MCS48_PORT_T1 = 0x111,
|
||||
MCS48_PORT_BUS = 0x120
|
||||
MCS48_PORT_BUS = 0x120,
|
||||
MCS48_PORT_PROG = 0x121 /* PROG line to 8243 expander */
|
||||
};
|
||||
|
||||
|
||||
/* 8243 expander operations */
|
||||
enum
|
||||
{
|
||||
MCS48_EXPANDER_OP_READ = 0,
|
||||
MCS48_EXPANDER_OP_WRITE = 1,
|
||||
MCS48_EXPANDER_OP_OR = 2,
|
||||
MCS48_EXPANDER_OP_AND = 3
|
||||
};
|
||||
|
||||
|
||||
@ -71,7 +92,7 @@ enum
|
||||
FUNCTION PROTOTYPES
|
||||
***************************************************************************/
|
||||
|
||||
/* variants with 64 bytes of internal RAM and up to 1k of internal ROM */
|
||||
/* MCS-48 variants with 64 bytes of internal RAM and up to 1k of internal ROM */
|
||||
CPU_GET_INFO( i8035 );
|
||||
CPU_GET_INFO( i8048 );
|
||||
CPU_GET_INFO( i8648 );
|
||||
@ -86,7 +107,7 @@ CPU_GET_INFO( n7751 );
|
||||
#define CPU_MB8884 CPU_GET_INFO_NAME( mb8884 )
|
||||
#define CPU_N7751 CPU_GET_INFO_NAME( n7751 )
|
||||
|
||||
/* variants with 128 bytes of internal RAM and up to 2k of internal ROM */
|
||||
/* MCS-48 variants with 128 bytes of internal RAM and up to 2k of internal ROM */
|
||||
CPU_GET_INFO( i8039 );
|
||||
CPU_GET_INFO( i8049 );
|
||||
CPU_GET_INFO( i8749 );
|
||||
@ -97,7 +118,32 @@ CPU_GET_INFO( m58715 );
|
||||
#define CPU_I8749 CPU_GET_INFO_NAME( i8749 )
|
||||
#define CPU_M58715 CPU_GET_INFO_NAME( m58715 )
|
||||
|
||||
/* disassembler */
|
||||
CPU_DISASSEMBLE( mcs48 );
|
||||
|
||||
#endif /* __I8039_H__ */
|
||||
/* UPI-41 variants with 128 bytes of internal RAM and up to 1k of internal ROM */
|
||||
CPU_GET_INFO( i8041 );
|
||||
CPU_GET_INFO( i8741 );
|
||||
|
||||
#define CPU_I8041 CPU_GET_INFO_NAME( i8041 )
|
||||
#define CPU_I8741 CPU_GET_INFO_NAME( i8741 )
|
||||
|
||||
/* UPI-41 variants with 256 bytes of internal RAM and up to 2k of internal ROM */
|
||||
CPU_GET_INFO( i8042 );
|
||||
CPU_GET_INFO( i8242 );
|
||||
CPU_GET_INFO( i8742 );
|
||||
|
||||
#define CPU_I8042 CPU_GET_INFO_NAME( i8042 )
|
||||
#define CPU_I8242 CPU_GET_INFO_NAME( i8242 )
|
||||
#define CPU_I8742 CPU_GET_INFO_NAME( i8742 )
|
||||
|
||||
|
||||
/* functions for talking to the input/output buffers on the UPI41-class chips */
|
||||
UINT8 upi41_master_r(const device_config *device, UINT8 a0);
|
||||
void upi41_master_w(const device_config *device, UINT8 a0, UINT8 data);
|
||||
|
||||
|
||||
/* disassemblers */
|
||||
CPU_DISASSEMBLE( mcs48 );
|
||||
CPU_DISASSEMBLE( upi41 );
|
||||
|
||||
|
||||
#endif /* __MCS48_H__ */
|
||||
|
@ -1,303 +1,310 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* mcs48 disassembler
|
||||
*
|
||||
* This file is Copyright Michael Cuddy, Fen's Ende Sofware.
|
||||
* Redistribution is allowed in source and binary form as long as both
|
||||
* forms are distributed together with the file 'README'. This copyright
|
||||
* notice must also accompany the files.
|
||||
*
|
||||
* This software should be considered a small token to all of the
|
||||
* emulator authors for thier dilligence in preserving our Arcade and
|
||||
* Computer history.
|
||||
*
|
||||
* Michael Cuddy, Fen's Ende Software.
|
||||
* 11/25/1996
|
||||
*
|
||||
* Adapted by Andrea Mazzoleni for use with MAME
|
||||
*
|
||||
***************************************************************************/
|
||||
/***************************************************************************
|
||||
|
||||
#include <ctype.h>
|
||||
mcs48dsm.c
|
||||
|
||||
Simple MCS-48/UPI-41 disassembler.
|
||||
Written by Aaron Giles
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "cpuintrf.h"
|
||||
|
||||
#define mame_printf_debug printf
|
||||
|
||||
typedef unsigned char byte;
|
||||
|
||||
#define FMT(a,b) a, b
|
||||
#define PTRS_PER_FORMAT 2
|
||||
|
||||
static const char *const Formats[] = {
|
||||
FMT("00000011dddddddd", "add a,#$%X"),
|
||||
FMT("01101rrr", "add a,%R"),
|
||||
FMT("0110000r", "add a,@%R"),
|
||||
FMT("00010011dddddddd", "adc a,#$%X"),
|
||||
FMT("01111rrr", "adc a,%R"),
|
||||
FMT("0111000r", "adc a,@%R"),
|
||||
FMT("01010011dddddddd", "anl a,#$%X"),
|
||||
FMT("01011rrr", "anl a,%R"),
|
||||
FMT("0101000r", "anl a,@%R"),
|
||||
FMT("10011000dddddddd", "anl bus,#$%X"),
|
||||
FMT("10011001dddddddd", "anl p1,#$%X"),
|
||||
FMT("10011010dddddddd", "anl p2,#$%X"),
|
||||
FMT("100111pp", "anld %P,a"),
|
||||
FMT("aaa10100aaaaaaaa", "!call %A"),
|
||||
FMT("00100111", "clr a"),
|
||||
FMT("10010111", "clr c"),
|
||||
FMT("10100101", "clr f1"),
|
||||
FMT("10000101", "clr f0"),
|
||||
FMT("00110111", "cpl a"),
|
||||
FMT("10100111", "cpl c"),
|
||||
FMT("10010101", "cpl f0"),
|
||||
FMT("10110101", "cpl f1"),
|
||||
FMT("01010111", "da a"),
|
||||
FMT("00000111", "dec a"),
|
||||
FMT("11001rrr", "dec %R"),
|
||||
FMT("00010101", "dis i"),
|
||||
FMT("00110101", "dis tcnti"),
|
||||
FMT("11101rrraaaaaaaa", "!djnz %R,%J"),
|
||||
FMT("00000101", "en i"),
|
||||
FMT("00100101", "en tcnti"),
|
||||
FMT("01110101", "ent0 clk"),
|
||||
FMT("00001001", "in a,p1"),
|
||||
FMT("00001010", "in a,p2"),
|
||||
FMT("00010111", "inc a"),
|
||||
FMT("00011rrr", "inc %R"),
|
||||
FMT("0001000r", "inc @%R"),
|
||||
FMT("00001000", "ins a,bus"),
|
||||
FMT("0001 0110aaaaaaaa", "jtf %J"),
|
||||
FMT("0010 0110aaaaaaaa", "jnt0 %J"),
|
||||
FMT("0011 0110aaaaaaaa", "jt0 %J"),
|
||||
FMT("0100 0110aaaaaaaa", "jnt1 %J"),
|
||||
FMT("0101 0110aaaaaaaa", "jt1 %J"),
|
||||
FMT("0111 0110aaaaaaaa", "jf1 %J"),
|
||||
FMT("1000 0110aaaaaaaa", "jni %J"),
|
||||
FMT("1001 0110aaaaaaaa", "jnz %J"),
|
||||
FMT("1011 0110aaaaaaaa", "jf0 %J"),
|
||||
FMT("1100 0110aaaaaaaa", "jz %J"),
|
||||
FMT("1110 0110aaaaaaaa", "jnc %J"),
|
||||
FMT("1111 0110aaaaaaaa", "jc %J"),
|
||||
FMT("bbb10010aaaaaaaa", "jb%B %J"),
|
||||
FMT("aaa00100aaaaaaaa", "jmp %A"),
|
||||
FMT("10110011", "jmpp @a"),
|
||||
FMT("00100011dddddddd", "mov a,#$%X"),
|
||||
FMT("11111rrr", "mov a,%R"),
|
||||
FMT("1111000r", "mov a,@%R"),
|
||||
FMT("11000111", "mov a,psw"),
|
||||
FMT("10111rrrdddddddd", "mov %R,#$%X"),
|
||||
FMT("10101rrr", "mov %R,a"),
|
||||
FMT("1010000r", "mov @%R,a"),
|
||||
FMT("1011000rdddddddd", "mov @%R,#$%X"),
|
||||
FMT("11010111", "mov psw,a"),
|
||||
FMT("000011pp", "movd a,%P"),
|
||||
FMT("001111pp", "movd %P,a"),
|
||||
FMT("01000010", "mov a,t"),
|
||||
FMT("01100010", "mov t,a"),
|
||||
FMT("11100011", "movp3 a,@a"),
|
||||
FMT("10100011", "movp a,@a"),
|
||||
FMT("1000000r", "movx a,@%R"),
|
||||
FMT("1001000r", "movx @%R,a"),
|
||||
FMT("0100 1rrr", "orl a,%R"),
|
||||
FMT("0100 000r", "orl a,@%R"),
|
||||
FMT("0100 0011dddddddd", "orl a,#$%X"),
|
||||
FMT("1000 1000dddddddd", "orl bus,#$%X"),
|
||||
FMT("1000 1001dddddddd", "orl p1,#$%X"),
|
||||
FMT("1000 1010dddddddd", "orl p2,#$%X"),
|
||||
FMT("1000 11pp", "orld %P,a"),
|
||||
FMT("00000010", "outl bus,a"),
|
||||
FMT("001110pp", "outl %P,a"),
|
||||
FMT("10000011", "^ret"),
|
||||
FMT("10010011", "^retr"),
|
||||
FMT("11100111", "rl a"),
|
||||
FMT("11110111", "rlc a"),
|
||||
FMT("01110111", "rr a"),
|
||||
FMT("01100111", "rrc a"),
|
||||
FMT("11100101", "sel mb0"),
|
||||
FMT("11110101", "sel mb1"),
|
||||
FMT("11000101", "sel rb0"),
|
||||
FMT("11010101", "sel rb1"),
|
||||
FMT("01100101", "stop tcnt"),
|
||||
FMT("01000101", "strt cnt"),
|
||||
FMT("01010101", "strt t"),
|
||||
FMT("01000111", "swap a"),
|
||||
FMT("00101rrr", "xch a,%R"),
|
||||
FMT("0010000r", "xch a,@%R"),
|
||||
FMT("0011000r", "xchd a,@%R"),
|
||||
FMT("1101 0011dddddddd", "xrl a,#$%X"),
|
||||
FMT("1101 1rrr", "xrl a,%R"),
|
||||
FMT("1101 000r", "xrl a,@%R"),
|
||||
FMT("00000000", "nop"),
|
||||
NULL
|
||||
};
|
||||
|
||||
#define MAX_OPS (((sizeof(Formats) / sizeof(Formats[0])) - 1) / PTRS_PER_FORMAT)
|
||||
|
||||
typedef struct opcode {
|
||||
byte mask; /* instruction mask */
|
||||
byte bits; /* constant bits */
|
||||
char extcode; /* value that gets extension code */
|
||||
const char *parse; /* how to parse bits */
|
||||
const char *fmt; /* instruction format */
|
||||
unsigned long flags;
|
||||
} M48Opcode;
|
||||
|
||||
static M48Opcode Op[MAX_OPS+1];
|
||||
static int OpInizialized = 0;
|
||||
|
||||
static void InitDasm8039(void)
|
||||
static UINT32 common_dasm(const device_config *device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, int upi41)
|
||||
{
|
||||
const char *p;
|
||||
const char *const *ops;
|
||||
byte mask, bits;
|
||||
int bit;
|
||||
int i;
|
||||
const UINT8 *startram = opram;
|
||||
UINT32 flags = 0;
|
||||
|
||||
ops = Formats; i = 0;
|
||||
while (*ops) {
|
||||
unsigned long flags = 0;
|
||||
p = *ops;
|
||||
mask = 0; bits = 0; bit = 7;
|
||||
while (*p && bit >= 0) {
|
||||
switch (*p++) {
|
||||
case '1': mask |= 1<<bit; bits |= 1<<bit; bit--; break;
|
||||
case '0': mask |= 1<<bit; bit--; break;
|
||||
case ' ': break;
|
||||
case 'b':
|
||||
case 'a': case 'r': case 'd': case 'p':
|
||||
bit --;
|
||||
break;
|
||||
default:
|
||||
fatalerror("Invalid instruction encoding '%s %s'\n", ops[0],ops[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bit != -1 ) {
|
||||
fatalerror("not enough bits in encoding '%s %s' %d\n", ops[0],ops[1],bit);
|
||||
break;
|
||||
}
|
||||
while (isspace(*p)) p++;
|
||||
if (*p) Op[i].extcode = *p;
|
||||
Op[i].bits = bits;
|
||||
Op[i].mask = mask;
|
||||
Op[i].fmt = ops[1];
|
||||
Op[i].parse = ops[0];
|
||||
|
||||
if (Op[i].fmt[0] == '!')
|
||||
opram++;
|
||||
switch (*oprom++)
|
||||
{
|
||||
flags |= DASMFLAG_STEP_OVER;
|
||||
Op[i].fmt++;
|
||||
}
|
||||
if (Op[i].fmt[0] == '^')
|
||||
{
|
||||
flags |= DASMFLAG_STEP_OUT;
|
||||
Op[i].fmt++;
|
||||
}
|
||||
Op[i].flags = flags;
|
||||
|
||||
ops += PTRS_PER_FORMAT;
|
||||
i++;
|
||||
case 0x00: sprintf(buffer, "nop"); break;
|
||||
case 0x02: if (!upi41)
|
||||
sprintf(buffer, "out bus,a");
|
||||
else
|
||||
sprintf(buffer, "out dbb,a"); break;
|
||||
case 0x03: sprintf(buffer, "add a,#$%02X", *opram++); break;
|
||||
case 0x04: sprintf(buffer, "jmp $0%02X", *opram++); break;
|
||||
case 0x05: sprintf(buffer, "en i"); break;
|
||||
case 0x07: sprintf(buffer, "dec a"); break;
|
||||
case 0x08: if (!upi41)
|
||||
sprintf(buffer, "in a,bus");
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x09: sprintf(buffer, "in a,p1"); break;
|
||||
case 0x0a: sprintf(buffer, "in a,p2"); break;
|
||||
case 0x0c: sprintf(buffer, "movd a,p4"); break;
|
||||
case 0x0d: sprintf(buffer, "movd a,p5"); break;
|
||||
case 0x0e: sprintf(buffer, "movd a,p6"); break;
|
||||
case 0x0f: sprintf(buffer, "movd a,p7"); break;
|
||||
case 0x10: sprintf(buffer, "inc @r0"); break;
|
||||
case 0x11: sprintf(buffer, "inc @r1"); break;
|
||||
case 0x12: sprintf(buffer, "jb0 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x13: sprintf(buffer, "addc a,#$%02X", *opram++); break;
|
||||
case 0x14: sprintf(buffer, "call $0%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x15: sprintf(buffer, "dis i"); break;
|
||||
case 0x16: sprintf(buffer, "jtf $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x17: sprintf(buffer, "inc a"); break;
|
||||
case 0x18: sprintf(buffer, "inc r0"); break;
|
||||
case 0x19: sprintf(buffer, "inc r1"); break;
|
||||
case 0x1a: sprintf(buffer, "inc r2"); break;
|
||||
case 0x1b: sprintf(buffer, "inc r3"); break;
|
||||
case 0x1c: sprintf(buffer, "inc r4"); break;
|
||||
case 0x1d: sprintf(buffer, "inc r5"); break;
|
||||
case 0x1e: sprintf(buffer, "inc r6"); break;
|
||||
case 0x1f: sprintf(buffer, "inc r7"); break;
|
||||
case 0x20: sprintf(buffer, "xch a,@r0"); break;
|
||||
case 0x21: sprintf(buffer, "xch a,@r1"); break;
|
||||
case 0x22: if (!upi41)
|
||||
sprintf(buffer, "illegal");
|
||||
else
|
||||
sprintf(buffer, "in a,dbb"); break;
|
||||
case 0x23: sprintf(buffer, "mov a,#$%02X", *opram++); break;
|
||||
case 0x24: sprintf(buffer, "jmp $1%02X", *opram++); break;
|
||||
case 0x25: sprintf(buffer, "en tcnti"); break;
|
||||
case 0x26: sprintf(buffer, "jnt0 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x27: sprintf(buffer, "clr a"); break;
|
||||
case 0x28: sprintf(buffer, "xch a,r0"); break;
|
||||
case 0x29: sprintf(buffer, "xch a,r1"); break;
|
||||
case 0x2a: sprintf(buffer, "xch a,r2"); break;
|
||||
case 0x2b: sprintf(buffer, "xch a,r3"); break;
|
||||
case 0x2c: sprintf(buffer, "xch a,r4"); break;
|
||||
case 0x2d: sprintf(buffer, "xch a,r5"); break;
|
||||
case 0x2e: sprintf(buffer, "xch a,r6"); break;
|
||||
case 0x2f: sprintf(buffer, "xch a,r7"); break;
|
||||
case 0x30: sprintf(buffer, "xchd a,@r0"); break;
|
||||
case 0x31: sprintf(buffer, "xchd a,@r1"); break;
|
||||
case 0x32: sprintf(buffer, "jb1 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x34: sprintf(buffer, "call $1%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x35: sprintf(buffer, "dis tcnti"); break;
|
||||
case 0x36: sprintf(buffer, "jt0 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x37: sprintf(buffer, "cpl a"); break;
|
||||
case 0x39: sprintf(buffer, "outl p1,a"); break;
|
||||
case 0x3a: sprintf(buffer, "outl p2,a"); break;
|
||||
case 0x3c: sprintf(buffer, "movd p4,a"); break;
|
||||
case 0x3d: sprintf(buffer, "movd p5,a"); break;
|
||||
case 0x3e: sprintf(buffer, "movd p6,a"); break;
|
||||
case 0x3f: sprintf(buffer, "movd p7,a"); break;
|
||||
case 0x40: sprintf(buffer, "orl a,@r0"); break;
|
||||
case 0x41: sprintf(buffer, "orl a,@r1"); break;
|
||||
case 0x42: sprintf(buffer, "mov a,t"); break;
|
||||
case 0x43: sprintf(buffer, "orl a,#$%02X", *opram++); break;
|
||||
case 0x44: sprintf(buffer, "jmp $2%02X", *opram++); break;
|
||||
case 0x45: sprintf(buffer, "strt cnt"); break;
|
||||
case 0x46: sprintf(buffer, "jnt1 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x47: sprintf(buffer, "swap a"); break;
|
||||
case 0x48: sprintf(buffer, "orl a,r0"); break;
|
||||
case 0x49: sprintf(buffer, "orl a,r1"); break;
|
||||
case 0x4a: sprintf(buffer, "orl a,r2"); break;
|
||||
case 0x4b: sprintf(buffer, "orl a,r3"); break;
|
||||
case 0x4c: sprintf(buffer, "orl a,r4"); break;
|
||||
case 0x4d: sprintf(buffer, "orl a,r5"); break;
|
||||
case 0x4e: sprintf(buffer, "orl a,r6"); break;
|
||||
case 0x4f: sprintf(buffer, "orl a,r7"); break;
|
||||
case 0x50: sprintf(buffer, "anl a,@r0"); break;
|
||||
case 0x51: sprintf(buffer, "anl a,@r1"); break;
|
||||
case 0x52: sprintf(buffer, "jb2 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x53: sprintf(buffer, "anl a,#$%02X", *opram++); break;
|
||||
case 0x54: sprintf(buffer, "call $2%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x55: sprintf(buffer, "strt t"); break;
|
||||
case 0x56: sprintf(buffer, "jt1 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x57: sprintf(buffer, "da a"); break;
|
||||
case 0x58: sprintf(buffer, "anl a,r0"); break;
|
||||
case 0x59: sprintf(buffer, "anl a,r1"); break;
|
||||
case 0x5a: sprintf(buffer, "anl a,r2"); break;
|
||||
case 0x5b: sprintf(buffer, "anl a,r3"); break;
|
||||
case 0x5c: sprintf(buffer, "anl a,r4"); break;
|
||||
case 0x5d: sprintf(buffer, "anl a,r5"); break;
|
||||
case 0x5e: sprintf(buffer, "anl a,r6"); break;
|
||||
case 0x5f: sprintf(buffer, "anl a,r7"); break;
|
||||
case 0x60: sprintf(buffer, "add a,@r0"); break;
|
||||
case 0x61: sprintf(buffer, "add a,@r1"); break;
|
||||
case 0x62: sprintf(buffer, "mov t,a"); break;
|
||||
case 0x64: sprintf(buffer, "jmp $3%02X", *opram++); break;
|
||||
case 0x65: sprintf(buffer, "stop tcnt"); break;
|
||||
case 0x67: sprintf(buffer, "rrc a"); break;
|
||||
case 0x68: sprintf(buffer, "add a,r0"); break;
|
||||
case 0x69: sprintf(buffer, "add a,r1"); break;
|
||||
case 0x6a: sprintf(buffer, "add a,r2"); break;
|
||||
case 0x6b: sprintf(buffer, "add a,r3"); break;
|
||||
case 0x6c: sprintf(buffer, "add a,r4"); break;
|
||||
case 0x6d: sprintf(buffer, "add a,r5"); break;
|
||||
case 0x6e: sprintf(buffer, "add a,r6"); break;
|
||||
case 0x6f: sprintf(buffer, "add a,r7"); break;
|
||||
case 0x70: sprintf(buffer, "addc a,@r0"); break;
|
||||
case 0x71: sprintf(buffer, "addc a,@r1"); break;
|
||||
case 0x72: sprintf(buffer, "jb3 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x74: sprintf(buffer, "call $3%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x75: if (!upi41)
|
||||
sprintf(buffer, "ent0 clk");
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x76: sprintf(buffer, "jf1 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x77: sprintf(buffer, "rr a"); break;
|
||||
case 0x78: sprintf(buffer, "addc a,r0"); break;
|
||||
case 0x79: sprintf(buffer, "addc a,r1"); break;
|
||||
case 0x7a: sprintf(buffer, "addc a,r2"); break;
|
||||
case 0x7b: sprintf(buffer, "addc a,r3"); break;
|
||||
case 0x7c: sprintf(buffer, "addc a,r4"); break;
|
||||
case 0x7d: sprintf(buffer, "addc a,r5"); break;
|
||||
case 0x7e: sprintf(buffer, "addc a,r6"); break;
|
||||
case 0x7f: sprintf(buffer, "addc a,r7"); break;
|
||||
case 0x80: if (!upi41)
|
||||
sprintf(buffer, "movx a,@r0");
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x81: if (!upi41)
|
||||
sprintf(buffer, "movx a,@r1");
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x83: sprintf(buffer, "ret"); flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x84: sprintf(buffer, "jmp $4%02X", *opram++); break;
|
||||
case 0x85: sprintf(buffer, "clr f0"); break;
|
||||
case 0x86: if (!upi41)
|
||||
sprintf(buffer, "jni $%03X", (pc & 0xf00) | *opram++);
|
||||
else
|
||||
sprintf(buffer, "jobf $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x88: if (!upi41)
|
||||
sprintf(buffer, "orl bus,#$%02X", *opram++);
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x89: sprintf(buffer, "orl p1,#$%02X", *opram++); break;
|
||||
case 0x8a: sprintf(buffer, "orl p2,#$%02X", *opram++); break;
|
||||
case 0x8c: sprintf(buffer, "orld p4,a"); break;
|
||||
case 0x8d: sprintf(buffer, "orld p5,a"); break;
|
||||
case 0x8e: sprintf(buffer, "orld p6,a"); break;
|
||||
case 0x8f: sprintf(buffer, "orld p7,a"); break;
|
||||
case 0x90: if (!upi41)
|
||||
sprintf(buffer, "movx @r0,a");
|
||||
else
|
||||
sprintf(buffer, "mov sts,a"); break;
|
||||
case 0x91: if (!upi41)
|
||||
sprintf(buffer, "movx @r1,a");
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x92: sprintf(buffer, "jb4 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x93: sprintf(buffer, "retr"); flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x94: sprintf(buffer, "call $4%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0x95: sprintf(buffer, "cpl f0"); break;
|
||||
case 0x96: sprintf(buffer, "jnz $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0x97: sprintf(buffer, "clr c"); break;
|
||||
case 0x98: if (!upi41)
|
||||
sprintf(buffer, "anl bus,#$%02X", *opram++);
|
||||
else
|
||||
sprintf(buffer, "illegal"); break;
|
||||
case 0x99: sprintf(buffer, "anl p1,#$%02X", *opram++); break;
|
||||
case 0x9a: sprintf(buffer, "anl p2,#$%02X", *opram++); break;
|
||||
case 0x9c: sprintf(buffer, "anld p4,a"); break;
|
||||
case 0x9d: sprintf(buffer, "anld p5,a"); break;
|
||||
case 0x9e: sprintf(buffer, "anld p6,a"); break;
|
||||
case 0x9f: sprintf(buffer, "anld p7,a"); break;
|
||||
case 0xa0: sprintf(buffer, "mov @r0,a"); break;
|
||||
case 0xa1: sprintf(buffer, "mov @r1,a"); break;
|
||||
case 0xa3: sprintf(buffer, "movp a,@a"); break;
|
||||
case 0xa4: sprintf(buffer, "jmp $5%02X", *opram++); break;
|
||||
case 0xa5: sprintf(buffer, "clr f1"); break;
|
||||
case 0xa7: sprintf(buffer, "cpl c"); break;
|
||||
case 0xa8: sprintf(buffer, "mov r0,a"); break;
|
||||
case 0xa9: sprintf(buffer, "mov r1,a"); break;
|
||||
case 0xaa: sprintf(buffer, "mov r2,a"); break;
|
||||
case 0xab: sprintf(buffer, "mov r3,a"); break;
|
||||
case 0xac: sprintf(buffer, "mov r4,a"); break;
|
||||
case 0xad: sprintf(buffer, "mov r5,a"); break;
|
||||
case 0xae: sprintf(buffer, "mov r6,a"); break;
|
||||
case 0xaf: sprintf(buffer, "mov r7,a"); break;
|
||||
case 0xb0: sprintf(buffer, "mov @r0,#$%02X", *opram++); break;
|
||||
case 0xb1: sprintf(buffer, "mov @r1,#$%02X", *opram++); break;
|
||||
case 0xb2: sprintf(buffer, "jb5 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xb3: sprintf(buffer, "jmpp @a"); break;
|
||||
case 0xb4: sprintf(buffer, "call $5%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xb5: sprintf(buffer, "cpl f1"); break;
|
||||
case 0xb6: sprintf(buffer, "jf0 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xb8: sprintf(buffer, "mov r0,#$%02X", *opram++); break;
|
||||
case 0xb9: sprintf(buffer, "mov r1,#$%02X", *opram++); break;
|
||||
case 0xba: sprintf(buffer, "mov r2,#$%02X", *opram++); break;
|
||||
case 0xbb: sprintf(buffer, "mov r3,#$%02X", *opram++); break;
|
||||
case 0xbc: sprintf(buffer, "mov r4,#$%02X", *opram++); break;
|
||||
case 0xbd: sprintf(buffer, "mov r5,#$%02X", *opram++); break;
|
||||
case 0xbe: sprintf(buffer, "mov r6,#$%02X", *opram++); break;
|
||||
case 0xbf: sprintf(buffer, "mov r7,#$%02X", *opram++); break;
|
||||
case 0xc4: sprintf(buffer, "jmp $6%02X", *opram++); break;
|
||||
case 0xc5: sprintf(buffer, "sel rb0"); break;
|
||||
case 0xc6: sprintf(buffer, "jz $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xc7: sprintf(buffer, "mov a,psw"); break;
|
||||
case 0xc8: sprintf(buffer, "dec r0"); break;
|
||||
case 0xc9: sprintf(buffer, "dec r1"); break;
|
||||
case 0xca: sprintf(buffer, "dec r2"); break;
|
||||
case 0xcb: sprintf(buffer, "dec r3"); break;
|
||||
case 0xcc: sprintf(buffer, "dec r4"); break;
|
||||
case 0xcd: sprintf(buffer, "dec r5"); break;
|
||||
case 0xce: sprintf(buffer, "dec r6"); break;
|
||||
case 0xcf: sprintf(buffer, "dec r7"); break;
|
||||
case 0xd0: sprintf(buffer, "xrl a,@r0"); break;
|
||||
case 0xd1: sprintf(buffer, "xrl a,@r1"); break;
|
||||
case 0xd2: sprintf(buffer, "jb6 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xd3: sprintf(buffer, "xrl a,#$%02X", *opram++); break;
|
||||
case 0xd4: sprintf(buffer, "call $6%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xd5: sprintf(buffer, "sel rb1"); break;
|
||||
case 0xd6: if (!upi41)
|
||||
sprintf(buffer, "illegal");
|
||||
else
|
||||
sprintf(buffer, "jnibf $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xd7: sprintf(buffer, "mov psw,a"); break;
|
||||
case 0xd8: sprintf(buffer, "xrl a,r0"); break;
|
||||
case 0xd9: sprintf(buffer, "xrl a,r1"); break;
|
||||
case 0xda: sprintf(buffer, "xrl a,r2"); break;
|
||||
case 0xdb: sprintf(buffer, "xrl a,r3"); break;
|
||||
case 0xdc: sprintf(buffer, "xrl a,r4"); break;
|
||||
case 0xdd: sprintf(buffer, "xrl a,r5"); break;
|
||||
case 0xde: sprintf(buffer, "xrl a,r6"); break;
|
||||
case 0xdf: sprintf(buffer, "xrl a,r7"); break;
|
||||
case 0xe3: sprintf(buffer, "movp3 a,@a"); break;
|
||||
case 0xe4: sprintf(buffer, "jmp $7%02X", *opram++); break;
|
||||
case 0xe5: if (!upi41)
|
||||
sprintf(buffer, "sel mb0");
|
||||
else
|
||||
sprintf(buffer, "en dma"); break;
|
||||
case 0xe6: sprintf(buffer, "jnc $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xe7: sprintf(buffer, "rl a"); break;
|
||||
case 0xe8: sprintf(buffer, "djnz r0,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xe9: sprintf(buffer, "djnz r1,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xea: sprintf(buffer, "djnz r2,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xeb: sprintf(buffer, "djnz r3,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xec: sprintf(buffer, "djnz r4,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xed: sprintf(buffer, "djnz r5,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xee: sprintf(buffer, "djnz r6,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xef: sprintf(buffer, "djnz r7,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xf0: sprintf(buffer, "mov a,@r0"); break;
|
||||
case 0xf1: sprintf(buffer, "mov a,@r1"); break;
|
||||
case 0xf2: sprintf(buffer, "jb7 $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xf4: sprintf(buffer, "call $7%02X", *opram++); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xf5: if (!upi41)
|
||||
sprintf(buffer, "sel mb1");
|
||||
else
|
||||
sprintf(buffer, "en flags"); break;
|
||||
case 0xf6: sprintf(buffer, "jc $%03X", (pc & 0xf00) | *opram++); break;
|
||||
case 0xf7: sprintf(buffer, "rlc a"); break;
|
||||
case 0xf8: sprintf(buffer, "mov a,r0"); break;
|
||||
case 0xf9: sprintf(buffer, "mov a,r1"); break;
|
||||
case 0xfa: sprintf(buffer, "mov a,r2"); break;
|
||||
case 0xfb: sprintf(buffer, "mov a,r3"); break;
|
||||
case 0xfc: sprintf(buffer, "mov a,r4"); break;
|
||||
case 0xfd: sprintf(buffer, "mov a,r5"); break;
|
||||
case 0xfe: sprintf(buffer, "mov a,r6"); break;
|
||||
case 0xff: sprintf(buffer, "mov a,r7"); break;
|
||||
}
|
||||
|
||||
OpInizialized = 1;
|
||||
return (opram - startram) | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE( mcs48 )
|
||||
{
|
||||
int b, a, d, r, p; /* these can all be filled in by parsing an instruction */
|
||||
int i;
|
||||
int op;
|
||||
int cnt = 1;
|
||||
int code, bit;
|
||||
const char *cp;
|
||||
|
||||
if (!OpInizialized) InitDasm8039();
|
||||
|
||||
code = oprom[0];
|
||||
op = -1; /* no matching opcode */
|
||||
for ( i = 0; i < MAX_OPS; i++)
|
||||
{
|
||||
if( (code & Op[i].mask) == Op[i].bits )
|
||||
{
|
||||
if (op != -1)
|
||||
{
|
||||
fprintf(stderr, "Error: opcode %02X matches %d (%s) and %d (%s)\n",
|
||||
code,i,Op[i].fmt,op,Op[op].fmt);
|
||||
}
|
||||
op = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (op == -1)
|
||||
{
|
||||
sprintf(buffer,"db %2.2x",code);
|
||||
return cnt | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
if (Op[op].extcode)
|
||||
{
|
||||
cnt++;
|
||||
code <<= 8;
|
||||
code |= opram[1];
|
||||
bit = 15;
|
||||
}
|
||||
else
|
||||
{
|
||||
bit = 7;
|
||||
}
|
||||
|
||||
/* shift out operands */
|
||||
cp = Op[op].parse;
|
||||
b = a = d = r = p = 0;
|
||||
|
||||
while (bit >= 0)
|
||||
{
|
||||
/* mame_printf_debug("{%c/%d}",*cp,bit); */
|
||||
switch(*cp)
|
||||
{
|
||||
case 'a': a <<=1; a |= ((code & (1<<bit)) ? 1 : 0); bit--; break;
|
||||
case 'b': b <<=1; b |= ((code & (1<<bit)) ? 1 : 0); bit--; break;
|
||||
case 'd': d <<=1; d |= ((code & (1<<bit)) ? 1 : 0); bit--; break;
|
||||
case 'r': r <<=1; r |= ((code & (1<<bit)) ? 1 : 0); bit--; break;
|
||||
case 'p': p <<=1; p |= ((code & (1<<bit)) ? 1 : 0); bit--; break;
|
||||
case ' ': break;
|
||||
case '1': case '0': bit--; break;
|
||||
case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d\n",code,bit); break;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
|
||||
/* now traverse format string */
|
||||
cp = Op[op].fmt;
|
||||
while (*cp)
|
||||
{
|
||||
if (*cp == '%')
|
||||
{
|
||||
char num[10], *q;
|
||||
cp++;
|
||||
switch (*cp++)
|
||||
{
|
||||
case 'A': sprintf(num,"$%03X",a); break;
|
||||
case 'J': sprintf(num,"$%03X",((pc+1) & 0xf00) | a); break;
|
||||
case 'B': sprintf(num,"%d",b); break;
|
||||
case 'D': sprintf(num,"%d",d); break;
|
||||
case 'X': sprintf(num,"%X",d); break;
|
||||
case 'R': sprintf(num,"r%d",r); break;
|
||||
case 'P': sprintf(num,"p%d",p); break;
|
||||
default:
|
||||
fatalerror("illegal escape character in format '%s'\n",Op[op].fmt);
|
||||
break;
|
||||
}
|
||||
q = num; while (*q) *buffer++ = *q++;
|
||||
*buffer = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
*buffer++ = *cp++;
|
||||
*buffer = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return cnt | Op[op].flags | DASMFLAG_SUPPORTED;
|
||||
return common_dasm(device, buffer, pc, oprom, opram, FALSE);
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE( upi41 )
|
||||
{
|
||||
return common_dasm(device, buffer, pc, oprom, opram, TRUE);
|
||||
}
|
||||
|
@ -62,19 +62,74 @@ A few notes:
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "deprecat.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "includes/btime.h"
|
||||
|
||||
#define MASTER_CLOCK (XTAL_12MHz)
|
||||
#define MASTER_CLOCK XTAL_12MHz
|
||||
#define HCLK (MASTER_CLOCK/2)
|
||||
#define HCLK1 (HCLK/2)
|
||||
#define HCLK2 (HCLK1/2)
|
||||
#define HCLK4 (HCLK2/2)
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
AUDIO_ENABLE_NONE,
|
||||
AUDIO_ENABLE_DIRECT, /* via direct address in memory map */
|
||||
AUDIO_ENABLE_AY8910 /* via ay-8910 port A */
|
||||
};
|
||||
|
||||
static WRITE8_HANDLER( audio_command_w );
|
||||
static READ8_HANDLER( audio_command_r );
|
||||
|
||||
static UINT8 *decrypted;
|
||||
static UINT8 *rambase;
|
||||
static UINT8 *audio_rambase;
|
||||
|
||||
static UINT8 audio_nmi_enable_type;
|
||||
static UINT8 audio_nmi_enabled;
|
||||
static UINT8 audio_nmi_state;
|
||||
|
||||
|
||||
|
||||
static MACHINE_START( btime )
|
||||
{
|
||||
/* by default, the audio NMI is disabled, except for bootlegs which don't use the enable */
|
||||
audio_nmi_enabled = (audio_nmi_enable_type == AUDIO_ENABLE_NONE);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( audio_nmi_enable_w )
|
||||
{
|
||||
/* for most games, this serves as the NMI enable for the audio CPU; however,
|
||||
lnc and disco use bit 0 of the first AY-8910's port A instead; many other
|
||||
games also write there in addition to this address */
|
||||
if (audio_nmi_enable_type == AUDIO_ENABLE_DIRECT)
|
||||
{
|
||||
audio_nmi_enabled = data & 1;
|
||||
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_NMI, (audio_nmi_enabled && audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( ay_audio_nmi_enable_w )
|
||||
{
|
||||
/* port A bit 0, when 1, inhibits the NMI */
|
||||
if (audio_nmi_enable_type == AUDIO_ENABLE_AY8910)
|
||||
{
|
||||
audio_nmi_enabled = ~data & 1;
|
||||
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_NMI, (audio_nmi_enabled && audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( audio_nmi_gen )
|
||||
{
|
||||
int scanline = param;
|
||||
audio_nmi_state = scanline & 8;
|
||||
cpu_set_input_line(timer->machine->cpu[1], INPUT_LINE_NMI, (audio_nmi_enabled && audio_nmi_state) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
INLINE UINT8 swap_bits_5_6(UINT8 data)
|
||||
@ -119,7 +174,7 @@ static WRITE8_HANDLER( lnc_w )
|
||||
else if (offset >= 0x3c00 && offset <= 0x3fff) { lnc_videoram_w(space,offset - 0x3c00,data); return; }
|
||||
else if (offset >= 0x7c00 && offset <= 0x7fff) { lnc_mirrorvideoram_w(space,offset - 0x7c00,data); return; }
|
||||
else if (offset == 0x8000) { return; } /* SMH_NOP */
|
||||
else if (offset == 0x8001) { lnc_video_control_w(space,0,data); return; }
|
||||
else if (offset == 0x8001) { bnj_video_control_w(space,0,data); return; }
|
||||
else if (offset == 0x8003) ;
|
||||
else if (offset == 0x9000) { return; } /* SMH_NOP */
|
||||
else if (offset == 0x9002) { audio_command_w(space,0,data); return; }
|
||||
@ -137,7 +192,7 @@ static WRITE8_HANDLER( mmonkey_w )
|
||||
if (offset <= 0x3bff) ;
|
||||
else if (offset >= 0x3c00 && offset <= 0x3fff) { lnc_videoram_w(space,offset - 0x3c00,data); return; }
|
||||
else if (offset >= 0x7c00 && offset <= 0x7fff) { lnc_mirrorvideoram_w(space,offset - 0x7c00,data); return; }
|
||||
else if (offset == 0x8001) { lnc_video_control_w(space,0,data); return; }
|
||||
else if (offset == 0x8001) { bnj_video_control_w(space,0,data); return; }
|
||||
else if (offset == 0x8003) ;
|
||||
else if (offset == 0x9000) { return; } /* SMH_NOP */
|
||||
else if (offset == 0x9002) { audio_command_w(space,0,data); return; }
|
||||
@ -303,7 +358,7 @@ static ADDRESS_MAP_START( lnc_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x7800, 0x7bff) AM_WRITE(SMH_RAM) AM_BASE(&btime_colorram) /* this is just here to initialize the pointer */
|
||||
AM_RANGE(0x7c00, 0x7fff) AM_READWRITE(btime_mirrorvideoram_r, lnc_mirrorvideoram_w)
|
||||
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW1") AM_WRITENOP /* ??? */
|
||||
AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(lnc_video_control_w)
|
||||
AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(bnj_video_control_w)
|
||||
AM_RANGE(0x8003, 0x8003) AM_WRITE(SMH_RAM) AM_BASE(&lnc_charbank)
|
||||
AM_RANGE(0x9000, 0x9000) AM_READ_PORT("P1") AM_WRITENOP /* IRQ ack??? */
|
||||
AM_RANGE(0x9001, 0x9001) AM_READ_PORT("P2")
|
||||
@ -320,7 +375,7 @@ static ADDRESS_MAP_START( mmonkey_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x7800, 0x7bff) AM_WRITE(SMH_RAM) AM_BASE(&btime_colorram) /* this is just here to initialize the pointer */
|
||||
AM_RANGE(0x7c00, 0x7fff) AM_READWRITE(btime_mirrorvideoram_r, lnc_mirrorvideoram_w)
|
||||
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(lnc_video_control_w)
|
||||
AM_RANGE(0x8001, 0x8001) AM_READ_PORT("DSW2") AM_WRITE(bnj_video_control_w)
|
||||
AM_RANGE(0x8003, 0x8003) AM_WRITE(SMH_RAM) AM_BASE(&lnc_charbank)
|
||||
AM_RANGE(0x9000, 0x9000) AM_READ_PORT("P1") AM_WRITENOP /* IRQ ack??? */
|
||||
AM_RANGE(0x9001, 0x9001) AM_READ_PORT("P2")
|
||||
@ -365,16 +420,16 @@ static ADDRESS_MAP_START( disco_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( audio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_BASE(&audio_rambase)
|
||||
AM_RANGE(0x0400, 0x0fff) AM_ROM AM_REGION("audio", 0xf400)
|
||||
AM_RANGE(0x2000, 0x2fff) AM_WRITE(ay8910_write_port_0_w)
|
||||
AM_RANGE(0x4000, 0x4fff) AM_WRITE(ay8910_control_port_0_w)
|
||||
AM_RANGE(0x6000, 0x6fff) AM_WRITE(ay8910_write_port_1_w)
|
||||
AM_RANGE(0x8000, 0x8fff) AM_WRITE(ay8910_control_port_1_w)
|
||||
AM_RANGE(0xa000, 0xafff) AM_READ(soundlatch_r)
|
||||
AM_RANGE(0xc000, 0xcfff) AM_WRITE(interrupt_enable_w)
|
||||
AM_RANGE(0xf000, 0xffff) AM_ROM
|
||||
AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x1c00) AM_RAM AM_BASE(&audio_rambase)
|
||||
AM_RANGE(0x2000, 0x3fff) AM_WRITE(ay8910_write_port_0_w)
|
||||
AM_RANGE(0x4000, 0x5fff) AM_WRITE(ay8910_control_port_0_w)
|
||||
AM_RANGE(0x6000, 0x7fff) AM_WRITE(ay8910_write_port_1_w)
|
||||
AM_RANGE(0x8000, 0x9fff) AM_WRITE(ay8910_control_port_1_w)
|
||||
AM_RANGE(0xa000, 0xbfff) AM_READ(audio_command_r)
|
||||
AM_RANGE(0xc000, 0xdfff) AM_WRITE(audio_nmi_enable_w)
|
||||
AM_RANGE(0xe000, 0xefff) AM_MIRROR(0x1000) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( disco_audio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -409,7 +464,13 @@ static INPUT_CHANGED( coin_inserted_nmi_lo )
|
||||
static WRITE8_HANDLER( audio_command_w )
|
||||
{
|
||||
soundlatch_w(space,offset,data);
|
||||
cpu_set_input_line(space->machine->cpu[1], 0, HOLD_LINE);
|
||||
cpu_set_input_line(space->machine->cpu[1], 0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( audio_command_r )
|
||||
{
|
||||
cpu_set_input_line(space->machine->cpu[1], 0, CLEAR_LINE);
|
||||
return soundlatch_r(space,offset);
|
||||
}
|
||||
|
||||
|
||||
@ -1085,12 +1146,12 @@ INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout tile8layout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
8,8,
|
||||
RGN_FRAC(1,3),
|
||||
3,
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8
|
||||
};
|
||||
|
||||
@ -1098,15 +1159,13 @@ static const gfx_layout tile8layout =
|
||||
|
||||
static const gfx_layout tile16layout =
|
||||
{
|
||||
16,16, /* 16*16 sprites */
|
||||
RGN_FRAC(1,3), /* 64 characters */
|
||||
3, /* 3 bits per pixel */
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, /* the bitplanes are separated */
|
||||
{ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
|
||||
0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||
32*8 /* every sprite takes 32 consecutive bytes */
|
||||
16,16,
|
||||
RGN_FRAC(1,3),
|
||||
3,
|
||||
{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
|
||||
{ STEP8(16*8,1), STEP8(0,1) },
|
||||
{ STEP16(0,8) },
|
||||
32*8
|
||||
};
|
||||
|
||||
|
||||
@ -1117,10 +1176,8 @@ static const gfx_layout bnj_tile16layout =
|
||||
RGN_FRAC(1,2),
|
||||
3,
|
||||
{ RGN_FRAC(1,2)+4, RGN_FRAC(0,2)+0, RGN_FRAC(0,2)+4 },
|
||||
{ 3*16*8+0, 3*16*8+1, 3*16*8+2, 3*16*8+3, 2*16*8+0, 2*16*8+1, 2*16*8+2, 2*16*8+3,
|
||||
16*8+0, 16*8+1, 16*8+2, 16*8+3, 0, 1, 2, 3 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||
{ STEP4(3*16*8,1), STEP4(2*16*8,1), STEP4(1*16*8,1), STEP4(0*16*8,1) },
|
||||
{ STEP16(0,8) },
|
||||
64*8
|
||||
};
|
||||
|
||||
@ -1160,23 +1217,29 @@ GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
static const ay8910_interface ay1_intf =
|
||||
{
|
||||
AY8910_LEGACY_OUTPUT,
|
||||
AY8910_DEFAULT_LOADS,
|
||||
NULL, NULL, ay_audio_nmi_enable_w, NULL
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( btime )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("main", M6502, 1500000)
|
||||
MDRV_CPU_ADD("main", M6502, HCLK2) /* seletable between H2/H4 via jumper */
|
||||
MDRV_CPU_PROGRAM_MAP(btime_map,0)
|
||||
|
||||
MDRV_CPU_ADD("audio", M6502, 500000)
|
||||
MDRV_CPU_ADD("audio", M6502, HCLK1/3/2)
|
||||
MDRV_CPU_PROGRAM_MAP(audio_map,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(nmi_line_pulse,16)
|
||||
MDRV_TIMER_ADD_SCANLINE("audionmi", audio_nmi_gen, "main", 0, 8)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(57)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3072))
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MDRV_SCREEN_RAW_PARAMS(HCLK, 384, 8, 248, 272, 8, 248)
|
||||
|
||||
MDRV_MACHINE_START(btime)
|
||||
|
||||
MDRV_GFXDECODE(btime)
|
||||
MDRV_PALETTE_LENGTH(16)
|
||||
@ -1188,10 +1251,11 @@ static MACHINE_DRIVER_START( btime )
|
||||
/* audio hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD("ay1", AY8910, 1500000)
|
||||
MDRV_SOUND_ADD("ay1", AY8910, HCLK2)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.23)
|
||||
MDRV_SOUND_CONFIG(ay1_intf)
|
||||
|
||||
MDRV_SOUND_ADD("ay2", AY8910, 1500000)
|
||||
MDRV_SOUND_ADD("ay2", AY8910, HCLK2)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.23)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
@ -1221,9 +1285,6 @@ static MACHINE_DRIVER_START( lnc )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(lnc_map,0)
|
||||
|
||||
MDRV_CPU_MODIFY("audio")
|
||||
MDRV_CPU_VBLANK_INT_HACK(lnc_sound_interrupt,16)
|
||||
|
||||
MDRV_MACHINE_RESET(lnc)
|
||||
|
||||
/* video hardware */
|
||||
@ -1239,8 +1300,6 @@ static MACHINE_DRIVER_START( wtennis )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(lnc)
|
||||
MDRV_CPU_MODIFY("audio")
|
||||
MDRV_CPU_VBLANK_INT_HACK(nmi_line_pulse,16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_UPDATE(eggs)
|
||||
@ -1260,7 +1319,7 @@ static MACHINE_DRIVER_START( bnj )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(btime)
|
||||
MDRV_CPU_REPLACE("main", M6502, 750000)
|
||||
MDRV_CPU_REPLACE("main", M6502, HCLK4)
|
||||
MDRV_CPU_PROGRAM_MAP(bnj_map,0)
|
||||
|
||||
/* video hardware */
|
||||
@ -1291,7 +1350,7 @@ static MACHINE_DRIVER_START( disco )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(btime)
|
||||
MDRV_CPU_REPLACE("main", M6502, 750000)
|
||||
MDRV_CPU_REPLACE("main", M6502, HCLK4)
|
||||
MDRV_CPU_PROGRAM_MAP(disco_map,0)
|
||||
|
||||
MDRV_CPU_MODIFY("audio")
|
||||
@ -1331,7 +1390,7 @@ ROM_START( btime )
|
||||
ROM_LOAD( "aa07.15b", 0xf000, 0x1000, CRC(086440ad) SHA1(4a32bc92f8ff5fbe112f56e62d2c03da8851a7b9) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "ab14.12h", 0xf000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "aa12.7k", 0x0000, 0x1000, CRC(c4617243) SHA1(24204d591aa2c264a852ee9ba8c4be63efd97728) ) /* charset #1 */
|
||||
@ -1359,7 +1418,7 @@ ROM_START( btime2 )
|
||||
ROM_LOAD( "aa07.15b", 0xf000, 0x1000, CRC(086440ad) SHA1(4a32bc92f8ff5fbe112f56e62d2c03da8851a7b9) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "ab14.12h", 0xf000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "aa12.7k", 0x0000, 0x1000, CRC(c4617243) SHA1(24204d591aa2c264a852ee9ba8c4be63efd97728) ) /* charset #1 */
|
||||
@ -1387,7 +1446,7 @@ ROM_START( btimem )
|
||||
ROM_LOAD( "ab07.15b", 0xf000, 0x1000, CRC(a142f862) SHA1(39d7ef172d18874885f1b1542e885cc4287dc344) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "ab14.12h", 0xf000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
ROM_LOAD( "ab14.12h", 0xe000, 0x1000, CRC(f55e5211) SHA1(27940026d0c6212d1138d2fd88880df697218627) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "ab12.7k", 0x0000, 0x1000, CRC(6c79f79f) SHA1(338009199b5889621693833d88c35abb8e9e38a2) ) /* charset #1 */
|
||||
@ -1414,7 +1473,7 @@ ROM_START( cookrace )
|
||||
ROM_LOAD( "2k", 0xffe0, 0x0020, CRC(e2553b3d) SHA1(0a38929cdb3f37c6e4bacc5c3f94c049b4352858) ) /* reset/interrupt vectors */
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "6f.6", 0xf000, 0x1000, CRC(6b8e0272) SHA1(372a891b7b357aea0297ba9bcae752c3c9d8c1be) ) /* starts at 0000, not f000; 0000-01ff is RAM */
|
||||
ROM_LOAD( "6f.6", 0xe000, 0x1000, CRC(6b8e0272) SHA1(372a891b7b357aea0297ba9bcae752c3c9d8c1be) ) /* starts at 0000, not f000; 0000-01ff is RAM */
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "m8.7", 0x0000, 0x2000, CRC(a1a0d5a6) SHA1(e9583320e9c303407abfe02988b95403e5209c52) ) /* charset #1 */
|
||||
@ -1447,7 +1506,7 @@ ROM_START( tisland )
|
||||
ROM_LOAD( "t-09.b14", 0xf000, 0x1000, CRC(5b26771a) SHA1(31d86acba4b6549fc08a3947d6d6d1a470fcb9da) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "t-0a.j11", 0xf000, 0x1000, CRC(807e1652) SHA1(ccfee616dc0e34d10a0e62b9864fd987291bf176) )
|
||||
ROM_LOAD( "t-0a.j11", 0xe000, 0x1000, CRC(807e1652) SHA1(ccfee616dc0e34d10a0e62b9864fd987291bf176) )
|
||||
|
||||
ROM_REGION( 0x3000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "t-13.k14", 0x0000, 0x1000, CRC(95bdec2f) SHA1(201b9c53ea53a25535b619231d0d14e08c206ecf) )
|
||||
@ -1483,7 +1542,7 @@ ROM_START( lnc )
|
||||
ROM_LOAD( "s0-3a", 0xf000, 0x1000, CRC(beb4b1fc) SHA1(166a96b5757946231f3619844366218065412935) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "sa-1h", 0xf000, 0x1000, CRC(379387ec) SHA1(29d37f04c64ed53a2573962dfa9c0623b89e0045) )
|
||||
ROM_LOAD( "sa-1h", 0xe000, 0x1000, CRC(379387ec) SHA1(29d37f04c64ed53a2573962dfa9c0623b89e0045) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "s4-11l", 0x0000, 0x1000, CRC(a2162a9e) SHA1(2729cef805c8e863af540424faa1aca82d3525e2) )
|
||||
@ -1527,7 +1586,7 @@ ROM_START( wtennis )
|
||||
ROM_LOAD( "t2", 0xf000, 0x1000, CRC(d2f9dd30) SHA1(1faa088806e8627b5e561d8b99054d295045dcfb) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "t1", 0xf000, 0x1000, CRC(40737ea7) SHA1(27e8474028385574035d3982f9c576bb9bb3facd) ) /* starts at 0000, not f000; 0000-01ff is RAM */
|
||||
ROM_LOAD( "t1", 0xe000, 0x1000, CRC(40737ea7) SHA1(27e8474028385574035d3982f9c576bb9bb3facd) ) /* starts at 0000, not f000; 0000-01ff is RAM */
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "t7", 0x0000, 0x1000, CRC(aa935169) SHA1(965f41a9fcf35ac7c899e79acd0a85ab588d5831) )
|
||||
@ -1550,7 +1609,7 @@ ROM_START( mmonkey )
|
||||
ROM_LOAD( "mmonkey.a4", 0xf000, 0x1000, CRC(f7d3d1e3) SHA1(ff650a833e5e8975fe5b4a644ce6c35de5e04740) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "mmonkey.h1", 0xf000, 0x1000, CRC(5bcb2e81) SHA1(60fb8fd83c83b278e3aaf96f0b6dbefbc1eef0f7) )
|
||||
ROM_LOAD( "mmonkey.h1", 0xe000, 0x1000, CRC(5bcb2e81) SHA1(60fb8fd83c83b278e3aaf96f0b6dbefbc1eef0f7) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "mmonkey.l11", 0x0000, 0x1000, CRC(b6aa8566) SHA1(bc90d4cfa9a221477d1989fea532621ce3e76439) )
|
||||
@ -1572,7 +1631,7 @@ ROM_START( brubber )
|
||||
ROM_LOAD( "brubber.12d", 0xe000, 0x2000, CRC(b2ce51f5) SHA1(5e38ea24bcafef1faba023def96532abd6f97d38) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "bnj6c.bin", 0xf000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
ROM_LOAD( "bnj6c.bin", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "bnj4e.bin", 0x0000, 0x2000, CRC(b864d082) SHA1(cacf71fa6c0f7121d077381a0ff6222f534295ab) )
|
||||
@ -1591,7 +1650,7 @@ ROM_START( bnj )
|
||||
ROM_LOAD( "bnj12d.bin", 0xe000, 0x2000, CRC(b88bc99e) SHA1(08a4ddea4037f9e14d0d9f4262a1746b0a3a140c) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "bnj6c.bin", 0xf000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
ROM_LOAD( "bnj6c.bin", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "bnj4e.bin", 0x0000, 0x2000, CRC(b864d082) SHA1(cacf71fa6c0f7121d077381a0ff6222f534295ab) )
|
||||
@ -1610,7 +1669,7 @@ ROM_START( caractn )
|
||||
ROM_LOAD( "c6.12d", 0xe000, 0x2000, CRC(1d6957c4) SHA1(bd30f00187e56eef9adcc167dd752a3bb616454c) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "c5.6c", 0xf000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
ROM_LOAD( "c5.6c", 0xe000, 0x1000, CRC(8c02f662) SHA1(1279d564e65fd3ccac25b1f9fbb40d910de2b544) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "c0.4e", 0x0000, 0x2000, CRC(bf3ea732) SHA1(d98970b2dda8c3435506656909e5e3aa70d45652) )
|
||||
@ -1632,12 +1691,12 @@ ROM_END
|
||||
|
||||
ROM_START( zoar )
|
||||
ROM_REGION( 0x10000, "main", 0 )
|
||||
ROM_LOAD( "zoar15", 0xd000, 0x1000, BAD_DUMP CRC(1f0cfdb7) SHA1(ce7e871f17c52b6eaf99cfb721e702e4f0e6bb25) )
|
||||
ROM_LOAD( "zoar15", 0xd000, 0x1000, CRC(1f0cfdb7) SHA1(ce7e871f17c52b6eaf99cfb721e702e4f0e6bb25) )
|
||||
ROM_LOAD( "zoar16", 0xe000, 0x1000, CRC(7685999c) SHA1(fabe38d71e797ae0b04b5d3aba228b4c85d96185) )
|
||||
ROM_LOAD( "zoar17", 0xf000, 0x1000, CRC(619ea867) SHA1(0a3735384f03a1052d54ab799b5e37038d8ece2a) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "zoar09", 0xf000, 0x1000, CRC(18d96ff1) SHA1(671d934a451e0b042450ea86d24c3751a39b38f8) )
|
||||
ROM_LOAD( "zoar09", 0xe000, 0x1000, CRC(18d96ff1) SHA1(671d934a451e0b042450ea86d24c3751a39b38f8) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "zoar00", 0x0000, 0x1000, CRC(fd2dcb64) SHA1(1a49a6ec6ffd354d872b1af83d55ec96e8215b2b) )
|
||||
@ -1710,7 +1769,7 @@ ROM_START( sdtennis )
|
||||
ROM_LOAD( "ao_06.12d", 0xe000, 0x2000, CRC(413c984c) SHA1(1431df4db52d621ba39fd47dbd49da103b5c0bcf) )
|
||||
|
||||
ROM_REGION( 0x10000, "audio", 0 )
|
||||
ROM_LOAD( "ao_05.6c", 0xf000, 0x1000, CRC(46833e38) SHA1(420831149a566199d6a3c74ef3df0687b4ddcbe4) )
|
||||
ROM_LOAD( "ao_05.6c", 0xe000, 0x1000, CRC(46833e38) SHA1(420831149a566199d6a3c74ef3df0687b4ddcbe4) )
|
||||
|
||||
ROM_REGION( 0x6000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "ao_00.4e", 0x0000, 0x2000, CRC(f4e0cbd6) SHA1(a2ede0ce4a26957a5d3b62872a42b8979f5000aa) )
|
||||
@ -1769,6 +1828,7 @@ static void init_rom1(running_machine *machine)
|
||||
static DRIVER_INIT( btime )
|
||||
{
|
||||
init_rom1(machine);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( zoar )
|
||||
@ -1782,6 +1842,7 @@ static DRIVER_INIT( zoar )
|
||||
memset(&rom[0xd50a],0xea,8);
|
||||
|
||||
init_rom1(machine);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_AY8910;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( tisland )
|
||||
@ -1795,46 +1856,74 @@ static DRIVER_INIT( tisland )
|
||||
memset(&rom[0xa2b6],0x24,1);
|
||||
|
||||
init_rom1(machine);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( lnc )
|
||||
{
|
||||
decrypt_C10707_cpu(machine, "main");
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_AY8910;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( bnj )
|
||||
{
|
||||
decrypt_C10707_cpu(machine, "main");
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( disco )
|
||||
{
|
||||
DRIVER_INIT_CALL(btime);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_AY8910;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( cookrace )
|
||||
{
|
||||
memcpy(&audio_rambase[0x200], memory_region(machine, "audio") + 0xf200, 0x200);
|
||||
decrypt_C10707_cpu(machine, "main");
|
||||
|
||||
memory_install_read8_handler(cpu_get_address_space(machine->cpu[1], ADDRESS_SPACE_PROGRAM), 0x0200, 0x0fff, 0, 0, SMH_BANK10);
|
||||
memory_set_bankptr(machine, 10, memory_region(machine, "audio") + 0xe200);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( protennb )
|
||||
{
|
||||
DRIVER_INIT_CALL(btime);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_AY8910;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( wtennis )
|
||||
{
|
||||
memcpy(&audio_rambase[0x200], memory_region(machine, "audio") + 0xf200, 0x200);
|
||||
memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xc15f, 0xc15f, 0, 0, wtennis_reset_hack_r);
|
||||
decrypt_C10707_cpu(machine, "main");
|
||||
|
||||
memory_install_read8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xc15f, 0xc15f, 0, 0, wtennis_reset_hack_r);
|
||||
|
||||
memory_install_read8_handler(cpu_get_address_space(machine->cpu[1], ADDRESS_SPACE_PROGRAM), 0x0200, 0x0fff, 0, 0, SMH_BANK10);
|
||||
memory_set_bankptr(machine, 10, memory_region(machine, "audio") + 0xe200);
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( sdtennis )
|
||||
{
|
||||
decrypt_C10707_cpu(machine, "main");
|
||||
decrypt_C10707_cpu(machine, "audio");
|
||||
audio_nmi_enable_type = AUDIO_ENABLE_DIRECT;
|
||||
}
|
||||
|
||||
|
||||
GAME( 1982, btime, 0, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 1)", 0 )
|
||||
GAME( 1982, btime2, btime, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 2)", 0 )
|
||||
GAME( 1982, btimem, btime, btime, btime, btime, ROT270, "Data East (Bally Midway license)", "Burger Time (Midway)", 0 )
|
||||
GAME( 1982, cookrace, btime, cookrace, cookrace, cookrace,ROT270, "bootleg", "Cook Race", 0 )
|
||||
GAME( 1981, tisland, 0, tisland, btime, tisland, ROT270, "Data East Corporation", "Treasure Island", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1981, lnc, 0, lnc, lnc, lnc, ROT270, "Data East Corporation", "Lock'n'Chase", 0 )
|
||||
GAME( 1982, protennb, 0, disco, disco, btime, ROT270, "bootleg", "Tennis (bootleg of Pro Tennis)", 0 )
|
||||
GAME( 1982, wtennis, 0, wtennis, wtennis, wtennis, ROT270, "bootleg", "World Tennis", 0 )
|
||||
GAME( 1982, mmonkey, 0, mmonkey, mmonkey, lnc, ROT270, "Technos + Roller Tron", "Minky Monkey", 0 )
|
||||
GAME( 1982, brubber, 0, bnj, bnj, lnc, ROT270, "Data East", "Burnin' Rubber", 0 )
|
||||
GAME( 1982, bnj, brubber, bnj, bnj, lnc, ROT270, "Data East USA (Bally Midway license)", "Bump 'n' Jump", 0 )
|
||||
GAME( 1982, caractn, brubber, bnj, bnj, lnc, ROT270, "bootleg", "Car Action", 0 )
|
||||
GAME( 1982, zoar, 0, zoar, zoar, zoar, ROT270, "Data East USA", "Zoar", 0 )
|
||||
GAME( 1982, disco, 0, disco, disco, btime, ROT270, "Data East", "Disco No.1", 0 )
|
||||
GAME( 1982, discof, disco, disco, disco, btime, ROT270, "Data East", "Disco No.1 (Rev.F)", 0 )
|
||||
GAME( 1983, sdtennis, 0, bnj, sdtennis, sdtennis,ROT270, "Data East Corporation", "Super Doubles Tennis", 0 )
|
||||
GAME( 1982, btime, 0, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 1)", 0 )
|
||||
GAME( 1982, btime2, btime, btime, btime, btime, ROT270, "Data East Corporation", "Burger Time (Data East set 2)", 0 )
|
||||
GAME( 1982, btimem, btime, btime, btime, btime, ROT270, "Data East (Bally Midway license)", "Burger Time (Midway)", 0 )
|
||||
GAME( 1982, cookrace, btime, cookrace, cookrace, cookrace, ROT270, "bootleg", "Cook Race", 0 )
|
||||
GAME( 1981, tisland, 0, tisland, btime, tisland, ROT270, "Data East Corporation", "Treasure Island", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1981, lnc, 0, lnc, lnc, lnc, ROT270, "Data East Corporation", "Lock'n'Chase", 0 )
|
||||
GAME( 1982, protennb, 0, disco, disco, protennb, ROT270, "bootleg", "Tennis (bootleg of Pro Tennis)", 0 )
|
||||
GAME( 1982, wtennis, 0, wtennis, wtennis, wtennis, ROT270, "bootleg", "World Tennis", 0 )
|
||||
GAME( 1982, mmonkey, 0, mmonkey, mmonkey, lnc, ROT270, "Technos + Roller Tron", "Minky Monkey", 0 )
|
||||
GAME( 1982, brubber, 0, bnj, bnj, bnj, ROT270, "Data East", "Burnin' Rubber", 0 )
|
||||
GAME( 1982, bnj, brubber, bnj, bnj, bnj, ROT270, "Data East USA (Bally Midway license)", "Bump 'n' Jump", 0 )
|
||||
GAME( 1982, caractn, brubber, bnj, bnj, bnj, ROT270, "bootleg", "Car Action", 0 )
|
||||
GAME( 1982, zoar, 0, zoar, zoar, zoar, ROT270, "Data East USA", "Zoar", 0 )
|
||||
GAME( 1982, disco, 0, disco, disco, disco, ROT270, "Data East", "Disco No.1", 0 )
|
||||
GAME( 1982, discof, disco, disco, disco, disco, ROT270, "Data East", "Disco No.1 (Rev.F)", 0 )
|
||||
GAME( 1983, sdtennis, 0, bnj, sdtennis, sdtennis, ROT270, "Data East Corporation", "Super Doubles Tennis", 0 )
|
||||
|
@ -54,10 +54,17 @@
|
||||
|
||||
#include "driver.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "cpu/i8x41/i8x41.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/decocass.h"
|
||||
#include "sound/ay8910.h"
|
||||
|
||||
#define MASTER_CLOCK XTAL_12MHz
|
||||
#define HCLK (MASTER_CLOCK/2)
|
||||
#define HCLK1 (HCLK/2)
|
||||
#define HCLK2 (HCLK1/2)
|
||||
#define HCLK4 (HCLK2/2)
|
||||
|
||||
|
||||
static UINT8 *decocass_rambase;
|
||||
|
||||
static UINT8 *decrypted;
|
||||
@ -142,8 +149,8 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( decocass_mcu_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(i8041_p1_r, i8041_p1_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(i8041_p2_r, i8041_p2_w)
|
||||
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(i8041_p1_r, i8041_p1_w)
|
||||
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(i8041_p2_r, i8041_p2_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( decocass )
|
||||
@ -268,65 +275,47 @@ INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
1024, /* 1024 characters */
|
||||
3, /* 3 bits per pixel */
|
||||
{ 2*1024*8*8, 1024*8*8, 0 }, /* the bitplanes are separated */
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8 /* every char takes 8 consecutive bytes */
|
||||
8,8,
|
||||
1024,
|
||||
3,
|
||||
{ 2*1024*8*8, 1*1024*8*8, 0*1024*8*8 },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8
|
||||
};
|
||||
|
||||
static const gfx_layout spritelayout =
|
||||
{
|
||||
16,16, /* 16*16 sprites */
|
||||
256, /* 256 sprites */
|
||||
3, /* 3 bits per pixel */
|
||||
{ 2*256*16*16, 256*16*16, 0 }, /* the bitplanes are separated */
|
||||
{ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
|
||||
0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||
32*8 /* every sprite takes 32 consecutive bytes */
|
||||
16,16,
|
||||
256,
|
||||
3,
|
||||
{ 2*256*16*16, 1*256*16*16, 0*256*16*16 },
|
||||
{ STEP8(16*8,1), STEP8(0*8,1) },
|
||||
{ STEP16(0,8) },
|
||||
32*8
|
||||
};
|
||||
|
||||
static const gfx_layout tilelayout =
|
||||
{
|
||||
16,16, /* 16*16 characters */
|
||||
16+1, /* 16 tiles (+1 empty tile used in the half-width bg tilemaps) */
|
||||
3, /* 3 bits per pixel */
|
||||
16,16,
|
||||
16+1, /* 16 tiles (+1 empty tile used in the half-width bg tilemaps) */
|
||||
3,
|
||||
{ 2*16*16*16+4, 2*16*16*16+0, 4 },
|
||||
{ 3*16*8+0, 3*16*8+1, 3*16*8+2, 3*16*8+3,
|
||||
2*16*8+0, 2*16*8+1, 2*16*8+2, 2*16*8+3,
|
||||
16*8+0, 16*8+1, 16*8+2, 16*8+3,
|
||||
0, 1, 2, 3 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
8*8, 9*8,10*8,11*8,12*8,13*8,14*8,15*8 },
|
||||
2*16*16 /* every tile takes 64 consecutive bytes */
|
||||
{ STEP4(3*16*8,1), STEP4(2*16*8,1), STEP4(1*16*8,1), STEP4(0*16*8,1) },
|
||||
{ STEP16(0,8) },
|
||||
2*16*16
|
||||
};
|
||||
|
||||
static const UINT32 objlayout_xoffset[64] =
|
||||
{
|
||||
7*8+0,7*8+1,7*8+2,7*8+3,7*8+4,7*8+5,7*8+6,7*8+7,
|
||||
6*8+0,6*8+1,6*8+2,6*8+3,6*8+4,6*8+5,6*8+6,6*8+7,
|
||||
5*8+0,5*8+1,5*8+2,5*8+3,5*8+4,5*8+5,5*8+6,5*8+7,
|
||||
4*8+0,4*8+1,4*8+2,4*8+3,4*8+4,4*8+5,4*8+6,4*8+7,
|
||||
3*8+0,3*8+1,3*8+2,3*8+3,3*8+4,3*8+5,3*8+6,3*8+7,
|
||||
2*8+0,2*8+1,2*8+2,2*8+3,2*8+4,2*8+5,2*8+6,2*8+7,
|
||||
1*8+0,1*8+1,1*8+2,1*8+3,1*8+4,1*8+5,1*8+6,1*8+7,
|
||||
0*8+0,0*8+1,0*8+2,0*8+3,0*8+4,0*8+5,0*8+6,0*8+7
|
||||
STEP8(7*8,1), STEP8(6*8,1), STEP8(5*8,1), STEP8(4*8,1),
|
||||
STEP8(3*8,1), STEP8(2*8,1), STEP8(1*8,1), STEP8(0*8,1)
|
||||
};
|
||||
|
||||
static const UINT32 objlayout_yoffset[64] =
|
||||
{
|
||||
63*2*64,62*2*64,61*2*64,60*2*64,59*2*64,58*2*64,57*2*64,56*2*64,
|
||||
55*2*64,54*2*64,53*2*64,52*2*64,51*2*64,50*2*64,49*2*64,48*2*64,
|
||||
47*2*64,46*2*64,45*2*64,44*2*64,43*2*64,42*2*64,41*2*64,40*2*64,
|
||||
39*2*64,38*2*64,37*2*64,36*2*64,35*2*64,34*2*64,33*2*64,32*2*64,
|
||||
31*2*64,30*2*64,29*2*64,28*2*64,27*2*64,26*2*64,25*2*64,24*2*64,
|
||||
23*2*64,22*2*64,21*2*64,20*2*64,19*2*64,18*2*64,17*2*64,16*2*64,
|
||||
15*2*64,14*2*64,13*2*64,12*2*64,11*2*64,10*2*64, 9*2*64, 8*2*64,
|
||||
7*2*64, 6*2*64, 5*2*64, 4*2*64, 3*2*64, 2*2*64, 1*2*64, 0*2*64
|
||||
STEP32(63*2*64, -1*2*64),
|
||||
STEP32(31*2*64, -1*2*64)
|
||||
};
|
||||
|
||||
static const gfx_layout objlayout =
|
||||
@ -381,26 +370,27 @@ static PALETTE_INIT( decocass )
|
||||
static MACHINE_DRIVER_START( decocass )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("main", M6502,750000)
|
||||
MDRV_CPU_ADD("main", M6502, HCLK4)
|
||||
MDRV_CPU_PROGRAM_MAP(decocass_map,0)
|
||||
|
||||
MDRV_CPU_ADD("audio", M6502,500000) /* 500 kHz */
|
||||
MDRV_CPU_ADD("audio", M6502, HCLK1/3/2)
|
||||
MDRV_CPU_PROGRAM_MAP(decocass_sound_map,0)
|
||||
MDRV_TIMER_ADD_SCANLINE("audionmi", decocass_audio_nmi_gen, "main", 0, 8)
|
||||
|
||||
MDRV_CPU_ADD("mcu", I8041,500000*15) /* 500 kHz ( I doubt it is 400kHz Al! )*/
|
||||
MDRV_CPU_ADD("mcu", I8041, HCLK)
|
||||
MDRV_CPU_IO_MAP(decocass_mcu_portmap,0)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(4200)) /* interleave CPUs */
|
||||
|
||||
MDRV_MACHINE_START(decocass)
|
||||
MDRV_MACHINE_RESET(decocass)
|
||||
|
||||
MDRV_DECOCASS_TAPE_ADD("cassette")
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(57)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3072) /* frames per second, vblank duration */)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 1*8, 31*8-1)
|
||||
MDRV_SCREEN_RAW_PARAMS(HCLK, 384, 8, 248, 272, 8, 248)
|
||||
|
||||
MDRV_GFXDECODE(decocass)
|
||||
MDRV_PALETTE_LENGTH(32+2*8+2*4)
|
||||
@ -412,10 +402,10 @@ static MACHINE_DRIVER_START( decocass )
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD("ay1", AY8910, 1500000)
|
||||
MDRV_SOUND_ADD("ay1", AY8910, HCLK2)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
|
||||
MDRV_SOUND_ADD("ay2", AY8910, 1500000)
|
||||
MDRV_SOUND_ADD("ay2", AY8910, HCLK2)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
@ -692,41 +682,41 @@ ROM_END
|
||||
ROM_START( ctsttape )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "testtape.cas", 0x0000, 0x2000, CRC(4f9d8efb) SHA1(5b77747dad1033e5703f06c0870441b54b4256c5) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( chwy )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
/* The dongle data is reverse engineered from manual decryption */
|
||||
ROM_LOAD( "chwy.pro", 0x0000, 0x0020, BAD_DUMP CRC(2fae678e) SHA1(4a7de851442d4c1d690de03262f0e136a52fca35) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "chwy.cas", 0x0000, 0x8000, CRC(68a48064) SHA1(7e389737972fd0c54f398d296159c561f5ec3a93) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( clocknch )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "clocknch.cas", 0x0000, 0x8000, CRC(c9d163a4) SHA1(3ef55a8d8f603059e263776c08eb81f2cf18b75c) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( ctisland )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "ctisland.cas", 0x0000, 0x8000, CRC(3f63b8f8) SHA1(2fd0679ef9750a228ebb098672ab6091fda75804) )
|
||||
|
||||
ROM_REGION( 0x4000, "user3", 0 ) /* roms from the overlay pcb */
|
||||
@ -739,10 +729,10 @@ ROM_END
|
||||
ROM_START( ctislnd2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "ctislnd2.cas", 0x0000, 0x8000, CRC(2854b4c0) SHA1(d3b4e0031dbb2340fbbe396a1ff9b8fbfd63663e) )
|
||||
|
||||
ROM_REGION( 0x4000, "user3", 0 ) /* roms from the overlay pcb */
|
||||
@ -755,10 +745,10 @@ ROM_END
|
||||
ROM_START( ctislnd3 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "ctislnd3.cas", 0x0000, 0x8000, CRC(45464e1e) SHA1(03275694d963c7ab0e0f5525e248e69da5f9b591) )
|
||||
|
||||
ROM_REGION( 0x4000, "user3", 0 ) /* roms from the overlay pcb */
|
||||
@ -771,51 +761,51 @@ ROM_END
|
||||
ROM_START( csuperas )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "csuperas.cas", 0x0000, 0x8000, CRC(fabcd07f) SHA1(4070c668ad6725f0710cf7fe6df0d5f80272a449) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( castfant )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "castfant.cas", 0x0000, 0x8000, CRC(6d77d1b5) SHA1(821bd65fbe887cbeac9281a2ad3f88595918f886) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cluckypo )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cluckypo.cas", 0x0000, 0x8000, CRC(2070c243) SHA1(cd3af309af8eb27937756c1fe6fd0504be5aaaf5) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cterrani )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cterrani.cas", 0x0000, 0x8000, CRC(eb71adbc) SHA1(67becfde39c034d4b8edc2eb100050de102773da) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cexplore )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
/* The dongle data is reverse engineered by table analysis */
|
||||
ROM_LOAD( "cexplore.pro", 0x0000, 0x0020, BAD_DUMP CRC(c7a9ac8f) SHA1(b0a566d948f71a4eddcde0dd5e9e69ca96f71c36) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cexplore.cas", 0x0000, 0x8000, CRC(fae49c66) SHA1(4ae69e2f706fdf30204f0aa1277619395cacc21b) )
|
||||
|
||||
ROM_REGION( 0x4000, "user3", 0 ) /* roms from the overlay pcb */
|
||||
@ -825,10 +815,10 @@ ROM_END
|
||||
ROM_START( cprogolf )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00020, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "de-0061.pro", 0x0000, 0x0020, CRC(e09ae5de) SHA1(7dec067d0739a6dad2607132641b66880a5b7751) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cprogolf.cas", 0x0000, 0x8000, CRC(02123cd1) SHA1(e4c630ed293725f23d539cb43beb97953558dabd) )
|
||||
ROM_END
|
||||
|
||||
@ -838,50 +828,50 @@ ROM_END
|
||||
ROM_START( cmissnx )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00800, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00800, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cmissnx.pro", 0x0000, 0x0800, CRC(8a41c071) SHA1(7b16d933707bf21d25dcd11db6a6c28834b11c5b) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cmissnx.cas", 0x0000, 0x8000, CRC(3a094e11) SHA1(c355fe14838187cbde19a799e5c60083c82615ac) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cdiscon1 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00800, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00800, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cdiscon1.pro", 0x0000, 0x0800, CRC(0f793fab) SHA1(331f1b1b482fcd10f42c388a503f9af62d705401) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cdiscon1.cas", 0x0000, 0x8000, CRC(1429a397) SHA1(12f9e03fcda31dc6161a39bf5c3315a1e9e94565) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( csweetht )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00800, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00800, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cdiscon1.pro", 0x0000, 0x0800, CRC(0f793fab) SHA1(331f1b1b482fcd10f42c388a503f9af62d705401) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "csweetht.cas", 0x0000, 0x8000, CRC(175ef706) SHA1(49b86233f69d0daf54a6e59b86e69b8159e8f6cc) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cptennis )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00800, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00800, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cptennis.pro", 0x0000, 0x0800, CRC(59b8cede) SHA1(514861a652b5256a11477fc357bc01dfd87f712b) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cptennis.cas", 0x0000, 0x8000, CRC(6bb257fe) SHA1(7554bf1996bc9e9c04a276aab050708d70103f54) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( ctornado )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x00800, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x00800, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "ctornado.pro", 0x0000, 0x0800, CRC(c9a91697) SHA1(3f7163291edbdf1a596e3cd2b7a16bbb140ffb36) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "ctornado.cas", 0x0000, 0x8000, CRC(e4e36ce0) SHA1(48a11823121fb2e3de31ae08e453c0124fc4f7f3) )
|
||||
ROM_END
|
||||
|
||||
@ -891,150 +881,150 @@ ROM_END
|
||||
ROM_START( cburnrub )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cburnrub.pro", 0x0000, 0x1000, CRC(9f396832) SHA1(0e302fd094474ac792882948a018c73ce76e0759) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cburnrub.cas", 0x0000, 0x8000, CRC(4528ac22) SHA1(dc0fcc5e5fd21c1c858a90f43c175e36a24b3c3d) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cburnrb2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cburnrub.pro", 0x0000, 0x1000, CRC(9f396832) SHA1(0e302fd094474ac792882948a018c73ce76e0759) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cburnrb2.cas", 0x0000, 0x8000, CRC(84a9ed66) SHA1(a9c536e46b89fc6b9c6271776292fed1241d2f3f) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cbnj )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cburnrub.pro", 0x0000, 0x1000, CRC(9f396832) SHA1(0e302fd094474ac792882948a018c73ce76e0759) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cbnj.cas", 0x0000, 0x8000, CRC(eed41560) SHA1(85d5df76efac33cd10427f659c4259afabb3daaf) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cbtime )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cbtime.pro", 0x0000, 0x1000, CRC(25bec0f0) SHA1(9fb1f9699f37937421e26d4fb8fdbcd21a5ddc5c) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cbtime.cas", 0x0000, 0x8000, CRC(56d7dc58) SHA1(34b2513c9ca7ab40f532b6d6d911aa3012113632) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cgraplop )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cgraplop.pro", 0x0000, 0x1000, CRC(ee93787d) SHA1(0c753d62fdce2fdbd5b329a5aa259a967d07a651) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cgraplop.cas", 0x0000, 0x8000, CRC(d2c1c1bb) SHA1(db67304caa11540363735e7d4bf03507ccbe9980) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cgraplp2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cgraplop.pro", 0x0000, 0x1000, CRC(ee93787d) SHA1(0c753d62fdce2fdbd5b329a5aa259a967d07a651) ) /* is this right for this set? */
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cgraplp2.cas", 0x0000, 0x8000, CRC(2e728981) SHA1(83ba90d95858d647315a1c311b8643672afea5f7) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( clapapa )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "clapapa.pro", 0x0000, 0x1000, CRC(e172819a) SHA1(3492775f4f0a0b31ce5a1a998076829b3f264e98) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "clapapa.cas", 0x0000, 0x8000, CRC(4ffbac24) SHA1(1ec0d7ac1886d4b430dc12be27f387e9d952d235) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( clapapa2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "clapapa.pro", 0x0000, 0x1000, CRC(e172819a) SHA1(3492775f4f0a0b31ce5a1a998076829b3f264e98) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "clapapa2.cas", 0x0000, 0x8000, CRC(069dd3c4) SHA1(5a19392c7ac5aea979187c96267e73bf5126307e) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cfghtice )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cfghtice.pro", 0x0000, 0x1000, CRC(5abd27b5) SHA1(2ab1c171adffd491759036d6ce2433706654aad2) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cfghtice.cas", 0x0000, 0x10000, CRC(906dd7fb) SHA1(894a7970d5476ed035edd15656e5cf10d6ddcf57) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cprobowl )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cprobowl.pro", 0x0000, 0x1000, CRC(e3a88e60) SHA1(e6e9a2e5ab26e0463c63201a15f7d5a429ec836e) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cprobowl.cas", 0x0000, 0x8000, CRC(cb86c5e1) SHA1(66c467418cff2ed6d7c121a8b1650ee97ae48fe9) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cnightst )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cnightst.pro", 0x0000, 0x1000, CRC(553b0fbc) SHA1(2cdf4560992b62e59b6de760d7996be4ed25f505) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cnightst.cas", 0x0000, 0x8000, CRC(c6f844cb) SHA1(5fc6154c20ee4e2f4049a78df6f3cacbb96b0dc0) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cnights2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cnightst.pro", 0x0000, 0x1000, CRC(553b0fbc) SHA1(2cdf4560992b62e59b6de760d7996be4ed25f505) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cnights2.cas", 0x0000, 0x8000, CRC(1a28128c) SHA1(4b620a1919d02814f734aba995115c09dc2db930) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cprosocc )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cprosocc.pro", 0x0000, 0x1000, CRC(919fabb2) SHA1(3d6a0676cea7b0be0fe69d06e04ca08c36b2851a) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cprosocc.cas", 0x0000, 0x10000, CRC(76b1ad2c) SHA1(6188667e5bc001dfdf83deaf7251eae794de4702) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cppicf )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cppicf.pro", 0x0000, 0x1000, CRC(0b1a1ecb) SHA1(2106da6837c78812c102b0eaaa1127fcc21ea780) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cppicf.cas", 0x0000, 0x8000, CRC(8c02f160) SHA1(03430dd8d4b2e6ca931986dac4d39be6965ffa6f) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cppicf2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cppicf.pro", 0x0000, 0x1000, CRC(0b1a1ecb) SHA1(2106da6837c78812c102b0eaaa1127fcc21ea780) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cppicf2.cas", 0x0000, 0x8000, CRC(78ffa1bc) SHA1(d15f2a240ae7b45885d32b5f507243f82e820d4b) )
|
||||
ROM_END
|
||||
|
||||
@ -1044,20 +1034,20 @@ ROM_END
|
||||
ROM_START( cscrtry )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x08000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x08000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cscrtry.pro", 0x0000, 0x8000, CRC(7bc3460b) SHA1(7c5668ff9a5073e27f4a83b02d79892eb4df6b92) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cscrtry.cas", 0x0000, 0x8000, CRC(5625f0ca) SHA1(f4b0a6f2ca908880386838f06b626479b4b74134) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cscrtry2 )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x08000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x08000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "cscrtry.pro", 0x0000, 0x8000, CRC(7bc3460b) SHA1(7c5668ff9a5073e27f4a83b02d79892eb4df6b92) )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cscrtry2.cas", 0x0000, 0x8000, CRC(04597842) SHA1(7f1fc3e06b61df880debe9056bdfbbb8600af739) )
|
||||
ROM_END
|
||||
|
||||
@ -1067,10 +1057,10 @@ ROM_END
|
||||
ROM_START( cbdash )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
/* ROM_REGION( 0x01000, "user1", 0 ) */ /* (max) 4k for dongle data */
|
||||
/* ROM_REGION( 0x01000, "dongle", 0 ) */ /* (max) 4k for dongle data */
|
||||
/* no proms */
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cbdash.cas", 0x0000, 0x8000, CRC(cba4c1af) SHA1(5d163d8e31c58b20679c6be06b1aa02df621822b) )
|
||||
ROM_END
|
||||
|
||||
@ -1081,7 +1071,7 @@ ROM_START( cflyball )
|
||||
|
||||
/* no dongle data */
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "cflyball.cas", 0x0000, 0x10000, CRC(cb40d043) SHA1(57698bac7e0d552167efa99d08116bf19a3b29c9) )
|
||||
ROM_END
|
||||
|
||||
@ -1091,10 +1081,10 @@ ROM_END
|
||||
ROM_START( czeroize )
|
||||
DECOCASS_COMMON_ROMS
|
||||
|
||||
ROM_REGION( 0x01000, "user1", 0 ) /* dongle data */
|
||||
ROM_REGION( 0x01000, "dongle", 0 ) /* dongle data */
|
||||
ROM_LOAD( "czeroize.pro", 0x0000, 0x1000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x10000, "user2", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */
|
||||
ROM_LOAD( "czeroize.cas", 0x0000, 0x10000, CRC(3ef0a406) SHA1(645b34cd477e0bb5539c8fe937a7a2dbd8369003) )
|
||||
ROM_END
|
||||
|
||||
@ -1185,4 +1175,4 @@ static DRIVER_INIT( decocrom )
|
||||
/* 39 */ GAME( 1984, cppicf2, cppicf, cppicf, decocass, decocass, ROT270, "Data East Corporation", "Peter Pepper's Ice Cream Factory (Cassette, set 2)", 0 )
|
||||
/* 40 */ GAME( 1984, cfghtice, decocass, cfghtice, decocass, decocass, ROT270, "Data East Corporation", "Fighting Ice Hockey (Cassette)", 0 )
|
||||
/* 44 */ GAME( 1985, cbdash, decocass, cbdash, decocass, decocass, ROT270, "Data East Corporation", "Boulder Dash (Cassette)", 0 )
|
||||
GAME( 1985, cflyball, decocass, cflyball, decocass, decocass, ROT270, "Data East Corporation", "Flying Ball (Cassette)", GAME_NO_SOUND )
|
||||
GAME( 1985, cflyball, decocass, cflyball, decocass, decocass, ROT270, "Data East Corporation", "Flying Ball (Cassette)", 0 )
|
||||
|
@ -622,7 +622,7 @@ Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/11/06
|
||||
#include "driver.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "taitoipt.h"
|
||||
#include "cpu/i8x41/i8x41.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "sound/2203intf.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/samples.h"
|
||||
@ -894,11 +894,10 @@ static ADDRESS_MAP_START( tnzsb_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( i8742_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(tnzs_port2_w)
|
||||
AM_RANGE(I8X41_p1, I8X41_p1) AM_READ(tnzs_port1_r)
|
||||
AM_RANGE(I8X41_p2, I8X41_p2) AM_READ(tnzs_port2_r)
|
||||
AM_RANGE(I8X41_t0, I8X41_t0) AM_READ_PORT("COIN1")
|
||||
AM_RANGE(I8X41_t1, I8X41_t1) AM_READ_PORT("COIN2")
|
||||
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(tnzs_port1_r)
|
||||
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(tnzs_port2_r, tnzs_port2_w)
|
||||
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ_PORT("COIN1")
|
||||
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_PORT("COIN2")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
@ -48,7 +48,4 @@ WRITE8_HANDLER( deco_charram_w );
|
||||
WRITE8_HANDLER( zoar_video_control_w );
|
||||
WRITE8_HANDLER( btime_video_control_w );
|
||||
WRITE8_HANDLER( bnj_video_control_w );
|
||||
WRITE8_HANDLER( lnc_video_control_w );
|
||||
WRITE8_HANDLER( disco_video_control_w );
|
||||
|
||||
INTERRUPT_GEN( lnc_sound_interrupt );
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,25 @@
|
||||
/* Set this to 1 to display current tape position */
|
||||
#define TAPE_UI_DISPLAY 0
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
#define LOGLEVEL 3
|
||||
#define LOGLEVEL 5
|
||||
#else
|
||||
#define LOGLEVEL 0
|
||||
#endif
|
||||
#define LOG(n,x) do { if (LOGLEVEL >= n) logerror x; } while (0)
|
||||
|
||||
|
||||
#define DECOCASS_TAPE DEVICE_GET_INFO_NAME(decocass_tape)
|
||||
DEVICE_GET_INFO( decocass_tape );
|
||||
|
||||
#define MDRV_DECOCASS_TAPE_ADD(_tag) \
|
||||
MDRV_DEVICE_ADD(_tag, DECOCASS_TAPE, 0)
|
||||
|
||||
|
||||
extern WRITE8_HANDLER( decocass_coin_counter_w );
|
||||
extern WRITE8_HANDLER( decocass_sound_command_w );
|
||||
extern READ8_HANDLER( decocass_sound_data_r );
|
||||
extern READ8_HANDLER( decocass_sound_ack_r );
|
||||
extern WRITE8_HANDLER( decocass_sound_data_w );
|
||||
extern READ8_HANDLER( decocass_sound_command_r );
|
||||
extern TIMER_DEVICE_CALLBACK( decocass_audio_nmi_gen );
|
||||
extern WRITE8_HANDLER( decocass_sound_nmi_enable_w );
|
||||
extern READ8_HANDLER( decocass_sound_nmi_enable_r );
|
||||
extern READ8_HANDLER( decocass_sound_data_ack_reset_r );
|
||||
@ -22,11 +28,6 @@ extern WRITE8_HANDLER( decocass_nmi_reset_w );
|
||||
extern WRITE8_HANDLER( decocass_quadrature_decoder_reset_w );
|
||||
extern WRITE8_HANDLER( decocass_adc_w );
|
||||
extern READ8_HANDLER( decocass_input_r );
|
||||
extern int tape_dir;
|
||||
extern int tape_speed;
|
||||
extern attotime tape_time0;
|
||||
extern emu_timer *tape_timer;
|
||||
attotime decocass_adjust_tape_time(attotime tape_time);
|
||||
|
||||
extern WRITE8_HANDLER( decocass_reset_w );
|
||||
|
||||
@ -35,6 +36,7 @@ extern WRITE8_HANDLER( decocass_e5xx_w );
|
||||
extern WRITE8_HANDLER( decocass_de0091_w );
|
||||
extern WRITE8_HANDLER( decocass_e900_w );
|
||||
|
||||
extern MACHINE_START( decocass );
|
||||
extern MACHINE_RESET( decocass );
|
||||
extern MACHINE_RESET( ctsttape );
|
||||
extern MACHINE_RESET( chwy );
|
||||
|
@ -13,7 +13,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "cpu/i8x41/i8x41.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "includes/tnzs.h"
|
||||
|
||||
static int mcu_type;
|
||||
@ -44,16 +44,8 @@ static READ8_HANDLER( mcu_tnzs_r )
|
||||
{
|
||||
UINT8 data;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
data = cpu_get_reg(space->machine->cpu[2], I8X41_DATA);
|
||||
cpu_yield(space->cpu);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = cpu_get_reg(space->machine->cpu[2], I8X41_STAT);
|
||||
cpu_yield(space->cpu);
|
||||
}
|
||||
data = upi41_master_r(space->machine->cpu[2], offset & 1);
|
||||
cpu_yield(space->cpu);
|
||||
|
||||
// logerror("PC %04x: read %02x from mcu $c00%01x\n", cpu_get_previouspc(space->cpu), data, offset);
|
||||
|
||||
@ -64,10 +56,7 @@ static WRITE8_HANDLER( mcu_tnzs_w )
|
||||
{
|
||||
// logerror("PC %04x: write %02x to mcu $c00%01x\n", cpu_get_previouspc(space->cpu), data, offset);
|
||||
|
||||
if (offset == 0)
|
||||
cpu_set_reg(space->machine->cpu[2], I8X41_DATA, data);
|
||||
else
|
||||
cpu_set_reg(space->machine->cpu[2], I8X41_CMND, data);
|
||||
upi41_master_w(space->machine->cpu[2], offset & 1, data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -67,11 +67,6 @@ CPUS += V35
|
||||
CPUS += V60
|
||||
CPUS += V70
|
||||
CPUS += MCS48
|
||||
CPUS += I8041
|
||||
CPUS += I8741
|
||||
CPUS += I8042
|
||||
CPUS += I8242
|
||||
CPUS += I8742
|
||||
CPUS += I8031
|
||||
CPUS += I8032
|
||||
CPUS += I8051
|
||||
|
@ -21,14 +21,12 @@ UINT8 *zoar_scrollram;
|
||||
UINT8 *deco_charram;
|
||||
size_t bnj_backgroundram_size;
|
||||
|
||||
static int sprite_dirty[256];
|
||||
static int char_dirty[1024];
|
||||
|
||||
static UINT8 btime_palette = 0;
|
||||
static UINT8 bnj_scroll1 = 0;
|
||||
static UINT8 bnj_scroll2 = 0;
|
||||
static bitmap_t *background_bitmap;
|
||||
static UINT8 lnc_sound_interrupt_enabled = 0;
|
||||
|
||||
static UINT8 *sprite_dirty, *char_dirty;
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -142,14 +140,20 @@ VIDEO_START( btime )
|
||||
bnj_scroll1 = 0;
|
||||
bnj_scroll2 = 0;
|
||||
btime_palette = 0;
|
||||
|
||||
sprite_dirty = auto_malloc(256 * sizeof(*sprite_dirty));
|
||||
memset(sprite_dirty, 1, 256 * sizeof(*sprite_dirty));
|
||||
|
||||
char_dirty = auto_malloc(1024 * sizeof(*char_dirty));
|
||||
memset(char_dirty, 1, 1024 * sizeof(*char_dirty));
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( bnj )
|
||||
{
|
||||
/* the background area is twice as wide as the screen */
|
||||
int width = video_screen_get_width(machine->primary_screen);
|
||||
int height = video_screen_get_height(machine->primary_screen);
|
||||
int width = 256;
|
||||
int height = 256;
|
||||
bitmap_format format = video_screen_get_format(machine->primary_screen);
|
||||
background_bitmap = auto_bitmap_alloc(2*width, height, format);
|
||||
|
||||
@ -297,15 +301,6 @@ WRITE8_HANDLER( bnj_video_control_w )
|
||||
btime_video_control_w(space, offset, data);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( lnc_video_control_w )
|
||||
{
|
||||
// I have a feeling that this only works by coincidence. I couldn't
|
||||
// figure out how NMI's are disabled by the sound processor
|
||||
lnc_sound_interrupt_enabled = data & 0x08;
|
||||
|
||||
bnj_video_control_w(space, offset, data & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( disco_video_control_w )
|
||||
{
|
||||
btime_palette = (data >> 2) & 0x03;
|
||||
@ -317,13 +312,6 @@ WRITE8_HANDLER( disco_video_control_w )
|
||||
}
|
||||
|
||||
|
||||
INTERRUPT_GEN( lnc_sound_interrupt )
|
||||
{
|
||||
if (lnc_sound_interrupt_enabled)
|
||||
cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
|
||||
static void draw_chars(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, UINT8 transparency, UINT8 color, int priority)
|
||||
{
|
||||
offs_t offs;
|
||||
@ -341,7 +329,7 @@ static void draw_chars(running_machine *machine, bitmap_t *bitmap, const rectang
|
||||
if (flip_screen_get(machine))
|
||||
{
|
||||
x = 31 - x;
|
||||
y = 31 - y;
|
||||
y = 33 - y;
|
||||
}
|
||||
|
||||
drawgfx(bitmap,machine->gfx[0],
|
||||
@ -377,7 +365,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
if (flip_screen_get(machine))
|
||||
{
|
||||
x = 240 - x;
|
||||
y = 240 - y + sprite_y_adjust_flip_screen;
|
||||
y = 256 - y + sprite_y_adjust_flip_screen;
|
||||
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
@ -429,7 +417,7 @@ static void draw_background(running_machine *machine, bitmap_t *bitmap, const re
|
||||
if (flip_screen_get(machine))
|
||||
{
|
||||
x = 240 - x;
|
||||
y = 240 - y;
|
||||
y = 256 - y;
|
||||
}
|
||||
|
||||
drawgfx(bitmap, machine->gfx[2],
|
||||
@ -565,7 +553,7 @@ VIDEO_UPDATE( bnj )
|
||||
if (flip_screen_get(screen->machine))
|
||||
{
|
||||
sx = 496 - sx;
|
||||
sy = 240 - sy;
|
||||
sy = 256 - sy;
|
||||
}
|
||||
|
||||
drawgfx(background_bitmap, screen->machine->gfx[2],
|
||||
@ -612,7 +600,7 @@ VIDEO_UPDATE( cookrace )
|
||||
if (flip_screen_get(screen->machine))
|
||||
{
|
||||
sx = 31 - sx;
|
||||
sy = 31 - sy;
|
||||
sy = 33 - sy;
|
||||
}
|
||||
|
||||
drawgfx(bitmap, screen->machine->gfx[2],
|
||||
|
@ -213,8 +213,6 @@ WRITE8_HANDLER( decocass_paletteram_w )
|
||||
|
||||
WRITE8_HANDLER( decocass_charram_w )
|
||||
{
|
||||
if (data == decocass_charram[offset])
|
||||
return;
|
||||
decocass_charram[offset] = data;
|
||||
/* dirty sprite */
|
||||
sprite_dirty[(offset >> 5) & 255] = 1;
|
||||
@ -245,8 +243,6 @@ static void mark_bg_tile_dirty(offs_t offset)
|
||||
|
||||
WRITE8_HANDLER( decocass_tileram_w )
|
||||
{
|
||||
if (data == decocass_tileram[offset])
|
||||
return;
|
||||
decocass_tileram[offset] = data;
|
||||
/* dirty tile (64 bytes per tile) */
|
||||
tile_dirty[(offset / 64) & 15] = 1;
|
||||
@ -257,8 +253,6 @@ WRITE8_HANDLER( decocass_tileram_w )
|
||||
|
||||
WRITE8_HANDLER( decocass_objectram_w )
|
||||
{
|
||||
if (data == decocass_objectram[offset])
|
||||
return;
|
||||
decocass_objectram[offset] = data;
|
||||
/* dirty the object */
|
||||
object_dirty = 1;
|
||||
@ -266,8 +260,6 @@ WRITE8_HANDLER( decocass_objectram_w )
|
||||
|
||||
WRITE8_HANDLER( decocass_bgvideoram_w )
|
||||
{
|
||||
if (data == decocass_bgvideoram[offset])
|
||||
return;
|
||||
decocass_bgvideoram[offset] = data;
|
||||
mark_bg_tile_dirty( offset );
|
||||
}
|
||||
@ -592,10 +584,10 @@ VIDEO_START( decocass )
|
||||
tilemap_set_transparent_pen( fg_tilemap, 0 );
|
||||
|
||||
bg_tilemap_l_clip = *video_screen_get_visible_area(machine->primary_screen);
|
||||
bg_tilemap_l_clip.max_y = video_screen_get_height(machine->primary_screen) / 2;
|
||||
bg_tilemap_l_clip.max_y = 256 / 2;
|
||||
|
||||
bg_tilemap_r_clip = *video_screen_get_visible_area(machine->primary_screen);
|
||||
bg_tilemap_r_clip.min_y = video_screen_get_height(machine->primary_screen) / 2;
|
||||
bg_tilemap_r_clip.min_y = 256 / 2;
|
||||
|
||||
/* background videroam bits D0-D3 are shared with the tileram */
|
||||
decocass_bgvideoram = decocass_tileram;
|
||||
@ -615,18 +607,6 @@ VIDEO_UPDATE( decocass )
|
||||
else if (watchdog_count-- > 0)
|
||||
watchdog_reset(screen->machine);
|
||||
|
||||
#if TAPE_UI_DISPLAY
|
||||
if (tape_timer)
|
||||
{
|
||||
attotime tape_time = decocass_adjust_tape_time(tape_time0);
|
||||
popmessage("%c%c [%05.1fs] %c%c",
|
||||
(tape_dir < 0 && tape_speed) ? '<' : ' ',
|
||||
(tape_dir < 0) ? '<' : ' ',
|
||||
attotime_to_double(tape_time),
|
||||
(tape_dir > 0) ? '>' : ' ',
|
||||
(tape_dir > 0 && tape_speed) ? '>' : ' ');
|
||||
}
|
||||
#endif
|
||||
#ifdef MAME_DEBUG
|
||||
{
|
||||
static int showmsg;
|
||||
|
Loading…
Reference in New Issue
Block a user