diff options
author | 2015-05-06 20:38:32 +0200 | |
---|---|---|
committer | 2015-05-06 20:38:32 +0200 | |
commit | a38d5d5fe0a6d533bf982f432d15d2d03436c2a3 (patch) | |
tree | b325ca5aee4430fa3e7851f0fbf1ff40dd26e62e /src | |
parent | ef8b1168b35695d6875092ca42d9844a783a2402 (diff) | |
parent | 343cfd2be4cfaeee925b99b72f6dbc6fc0676fff (diff) |
Merge branch 'master' of https://github.com/mamedev/mame.git
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/cpu/e0c6200/e0c6200.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/e0c6200/e0c6200.h | 4 | ||||
-rw-r--r-- | src/emu/cpu/e0c6200/e0c6200d.c | 695 | ||||
-rw-r--r-- | src/emu/cpu/e0c6200/e0c6200op.inc | 1 | ||||
-rw-r--r-- | src/emu/inpttype.h | 10 | ||||
-rw-r--r-- | src/emu/sound/s14001a.c | 31 | ||||
-rw-r--r-- | src/emu/sound/s14001a.h | 1 | ||||
-rw-r--r-- | src/emu/video/vooddefs.h | 71 | ||||
-rw-r--r-- | src/emu/video/voodoo.c | 222 | ||||
-rw-r--r-- | src/mame/drivers/berzerk.c | 53 | ||||
-rw-r--r-- | src/mame/drivers/contra.c | 87 | ||||
-rw-r--r-- | src/mame/drivers/f-32.c | 120 | ||||
-rw-r--r-- | src/mame/drivers/gambl186.c | 302 | ||||
-rw-r--r-- | src/mame/drivers/iteagle.c | 1 | ||||
-rw-r--r-- | src/mame/mame.lst | 2 | ||||
-rw-r--r-- | src/mess/drivers/spectrum.c | 7 | ||||
-rw-r--r-- | src/mess/drivers/vt240.c | 14 | ||||
-rw-r--r-- | src/mess/drivers/vt320.c | 8 | ||||
-rw-r--r-- | src/mess/includes/spectrum.h | 1 | ||||
-rw-r--r-- | src/mess/video/spectrum.c | 4 | ||||
-rw-r--r-- | src/tools/unidasm.c | 8 |
21 files changed, 1227 insertions, 417 deletions
diff --git a/src/emu/cpu/e0c6200/e0c6200.c b/src/emu/cpu/e0c6200/e0c6200.c index 4674aa3d01e..e0749d33143 100644 --- a/src/emu/cpu/e0c6200/e0c6200.c +++ b/src/emu/cpu/e0c6200/e0c6200.c @@ -16,8 +16,6 @@ #include "e0c6200.h" #include "debugger.h" -#include "e0c6200op.inc" - const device_type EPSON_E0C6S46 = &device_creator<e0c6s46_device>; diff --git a/src/emu/cpu/e0c6200/e0c6200.h b/src/emu/cpu/e0c6200/e0c6200.h index c4bd04b2254..39f171a9c67 100644 --- a/src/emu/cpu/e0c6200/e0c6200.h +++ b/src/emu/cpu/e0c6200/e0c6200.h @@ -18,8 +18,8 @@ public: // construction/destruction e0c6200_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source) : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) - , m_program_config("program", ENDIANNESS_LITTLE, 16, prgwidth, 0, program) - , m_data_config("data", ENDIANNESS_LITTLE, 8, datawidth, 0, data) + , m_program_config("program", ENDIANNESS_BIG, 16, prgwidth, -1, program) + , m_data_config("data", ENDIANNESS_BIG, 8, datawidth, 0, data) , m_prgwidth(prgwidth) , m_datawidth(datawidth) { } diff --git a/src/emu/cpu/e0c6200/e0c6200d.c b/src/emu/cpu/e0c6200/e0c6200d.c index def8eb9bee7..c6fabd3a7e1 100644 --- a/src/emu/cpu/e0c6200/e0c6200d.c +++ b/src/emu/cpu/e0c6200/e0c6200d.c @@ -10,9 +10,702 @@ #include "debugger.h" #include "e0c6200.h" +// opcode mnemonics +enum e_mnemonics +{ + em_JP, em_RETD, em_CALL, em_CALZ, + em_LD, em_LBPX, em_ADC, em_CP, em_ADD, em_SUB, em_SBC, em_AND, em_OR, em_XOR, + em_RLC, em_FAN, em_PSET, em_LDPX, em_LDPY, em_SET, em_RST, em_INC, em_DEC, + em_RRC, em_ACPX, em_ACPY, em_SCPX, em_SCPY, em_PUSH, em_POP, + em_RETS, em_RET, em_JPBA, em_HALT, em_SLP, em_NOP5, em_NOP7, + em_NOT, em_SCF, em_SZF, em_SDF, em_EI, em_DI, em_RDF, em_RZF, em_RCF, em_ILL +}; + +static const char *const em_name[] = +{ + "JP", "RETD", "CALL", "CALZ", + "LD", "LBPX", "ADC", "CP", "ADD", "SUB", "SBC", "AND", "OR", "XOR", + "RLC", "FAN", "PSET", "LDPX", "LDPY", "SET", "RST", "INC", "DEC", + "RRC", "ACPX", "ACPY", "SCPX", "SCPY", "PUSH", "POP", + "RETS", "RET", "JPBA", "HALT", "SLP", "NOP5", "NOP7", + "NOT", "SCF", "SZF", "SDF", "EI", "DI", "RDF", "RZF", "RCF", "?" +}; + +#define _OVER DASMFLAG_STEP_OVER +#define _OUT DASMFLAG_STEP_OUT + +static const UINT32 em_flags[] = +{ + 0, _OUT, _OVER, _OVER, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, + _OUT, _OUT, 0, _OVER, _OVER, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + + +// opcode params +enum e_params +{ + ep_S, ep_E, ep_I, ep_R0, ep_R2, ep_R4, ep_Q, + ep_cC, ep_cNC, ep_cZ, ep_cNZ, + ep_A, ep_B, ep_X, ep_Y, ep_MX, ep_MY, ep_XP, ep_XH, ep_XL, ep_YP, ep_YH, ep_YL, + ep_P, ep_F, ep_MN, ep_SP, ep_SPH, ep_SPL +}; + +// 0-digit is number of bits per opcode parameter, 0 bits is literal, +// 0x10-digit is for shift-right, 0x100-digit is special flag for r/q param +static const UINT16 ep_bits[] = +{ + 8, 8, 4, 0x102, 0x122, 0x142, 0x102, + 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 4, 0, 0, 0 +}; + +// redirect for r/q param +static const UINT8 ep_redirect_r[4] = { ep_A, ep_B, ep_MX, ep_MY }; + +// literal opcode parameter +static const char *const ep_name[] = +{ + " ", " ", " ", " ", " ", " ", " ", + "C", "NC", "Z", "NZ", + "A", "B", "X", "Y", "MX", "MY", "XP", "XH", "XL", "YP", "YH", "YL", + " ", "F", " ", "SP", "SPH", "SPL" +}; + + +static char* decode_param(UINT16 opcode, int param, char* buffer) +{ + int bits = ep_bits[param] & 0xf; + int shift = ep_bits[param] >> 4 & 0xf; + UINT16 opmask = opcode >> shift & ((1 << bits) - 1); + + // redirect r/q to A/B/MX/MY + if (ep_bits[param] & 0x100) + param = ep_redirect_r[opmask]; + + // literal param + if (ep_bits[param] == 0) + { + strcpy(buffer, ep_name[param]); + return buffer; + } + + // print value like how it's documented in the manual + char val[10]; + if (bits > 4 || opmask > 9) + sprintf(val, "%02XH", opmask); + else + sprintf(val, "%d", opmask); + + if (param == ep_MN) + sprintf(buffer, "M%s", val); + else + strcpy(buffer, val); + + return buffer; +} CPU_DISASSEMBLE(e0c6200) { - return 2; + UINT16 op = (oprom[1] | oprom[0] << 8) & 0xfff; + + int m = -1; + int p1 = -1; + int p2 = -1; + + // determine id for mnemonic and param(s) + switch (op & 0xf00) + { + // JP s + case 0x000: + m = em_JP; p1 = ep_S; + break; + + // RETD e + case 0x100: + m = em_RETD; p1 = ep_E; + break; + + // JP C,s + case 0x200: + m = em_JP; p1 = ep_cC; p2 = ep_S; + break; + + // JP NC,s + case 0x300: + m = em_JP; p1 = ep_cNC; p2 = ep_S; + break; + + // CALL s + case 0x400: + m = em_CALL; p1 = ep_S; + break; + + // CALZ s + case 0x500: + m = em_CALZ; p1 = ep_S; + break; + + // JP Z,s + case 0x600: + m = em_JP; p1 = ep_cZ; p2 = ep_S; + break; + + // JP NZ,s + case 0x700: + m = em_JP; p1 = ep_cNZ; p2 = ep_S; + break; + + // LD Y,e + case 0x800: + m = em_LD; p1 = ep_Y; p2 = ep_E; + break; + + // LBPX MX,e + case 0x900: + m = em_LBPX; p1 = ep_MX; p2 = ep_E; + break; + + // LD X,e + case 0xb00: + m = em_LD; p1 = ep_X; p2 = ep_E; + break; + + + default: + switch (op) + { + + // RLC r + case 0xaf0: case 0xaf5: case 0xafa: case 0xaff: + m = em_RLC; p1 = ep_R0; + break; + + // NOT r + case 0xd0f: case 0xd1f: case 0xd2f: case 0xd3f: + m = em_NOT; p1 = ep_R4; + break; + + // LD XP,r + case 0xe80: case 0xe81: case 0xe82: case 0xe83: + m = em_LD; p1 = ep_XP; p2 = ep_R0; + break; + + // LD XH,r + case 0xe84: case 0xe85: case 0xe86: case 0xe87: + m = em_LD; p1 = ep_XH; p2 = ep_R0; + break; + + // LD XL,r + case 0xe88: case 0xe89: case 0xe8a: case 0xe8b: + m = em_LD; p1 = ep_XL; p2 = ep_R0; + break; + + // RRC r + case 0xe8c: case 0xe8d: case 0xe8e: case 0xe8f: + m = em_RRC; p1 = ep_R0; + break; + + // LD YP,r + case 0xe90: case 0xe91: case 0xe92: case 0xe93: + m = em_LD; p1 = ep_YP; p2 = ep_R0; + break; + + // LD YH,r + case 0xe94: case 0xe95: case 0xe96: case 0xe97: + m = em_LD; p1 = ep_YH; p2 = ep_R0; + break; + + // LD YL,r + case 0xe98: case 0xe99: case 0xe9a: case 0xe9b: + m = em_LD; p1 = ep_YL; p2 = ep_R0; + break; + + // LD r,XP + case 0xea0: case 0xea1: case 0xea2: case 0xea3: + m = em_LD; p1 = ep_R0; p2 = ep_XP; + break; + + // LD r,XH + case 0xea4: case 0xea5: case 0xea6: case 0xea7: + m = em_LD; p1 = ep_R0; p2 = ep_XH; + break; + + // LD r,XL + case 0xea8: case 0xea9: case 0xeaa: case 0xeab: + m = em_LD; p1 = ep_R0; p2 = ep_XL; + break; + + // LD r,YP + case 0xeb0: case 0xeb1: case 0xeb2: case 0xeb3: + m = em_LD; p1 = ep_R0; p2 = ep_YP; + break; + + // LD r,YH + case 0xeb4: case 0xeb5: case 0xeb6: case 0xeb7: + m = em_LD; p1 = ep_R0; p2 = ep_YH; + break; + + // LD r,YL + case 0xeb8: case 0xeb9: case 0xeba: case 0xebb: + m = em_LD; p1 = ep_R0; p2 = ep_YL; + break; + + // INC X + case 0xee0: + m = em_INC; p1 = ep_X; + break; + + // INC Y + case 0xef0: + m = em_INC; p1 = ep_Y; + break; + + // ACPX MX,r + case 0xf28: case 0xf29: case 0xf2a: case 0xf2b: + m = em_ACPX; p1 = ep_MX; p2 = ep_R0; + break; + + // ACPY MY,r + case 0xf2c: case 0xf2d: case 0xf2e: case 0xf2f: + m = em_ACPY; p1 = ep_MY; p2 = ep_R0; + break; + + // SCPX MX,r + case 0xf38: case 0xf39: case 0xf3a: case 0xf3b: + m = em_SCPX; p1 = ep_MX; p2 = ep_R0; + break; + + // SCPY MY,r + case 0xf3c: case 0xf3d: case 0xf3e: case 0xf3f: + m = em_SCPY; p1 = ep_MY; p2 = ep_R0; + break; + + // SCF + case 0xf41: + m = em_SCF; + break; + + // SZF + case 0xf42: + m = em_SZF; + break; + + // SDF + case 0xf44: + m = em_SDF; + break; + + // EI + case 0xf48: + m = em_EI; + break; + + // DI + case 0xf57: + m = em_DI; + break; + + // RDF + case 0xf5b: + m = em_RDF; + break; + + // RZF + case 0xf5d: + m = em_RZF; + break; + + // RCF + case 0xf5e: + m = em_RCF; + break; + + // PUSH r + case 0xfc0: case 0xfc1: case 0xfc2: case 0xfc3: + m = em_PUSH; p1 = ep_R0; + break; + + // PUSH XP + case 0xfc4: + m = em_PUSH; p1 = ep_XP; + break; + + // PUSH XH + case 0xfc5: + m = em_PUSH; p1 = ep_XH; + break; + + // PUSH XL + case 0xfc6: + m = em_PUSH; p1 = ep_XL; + break; + + // PUSH YP + case 0xfc7: + m = em_PUSH; p1 = ep_YP; + break; + + // PUSH YH + case 0xfc8: + m = em_PUSH; p1 = ep_YH; + break; + + // PUSH YL + case 0xfc9: + m = em_PUSH; p1 = ep_YL; + break; + + // PUSH F + case 0xfca: + m = em_PUSH; p1 = ep_F; + break; + + // DEC SP + case 0xfcb: + m = em_DEC; p1 = ep_SP; + break; + + // POP r + case 0xfd0: case 0xfd1: case 0xfd2: case 0xfd3: + m = em_POP; p1 = ep_R0; + break; + + // POP XP + case 0xfd4: + m = em_POP; p1 = ep_XP; + break; + + // POP XH + case 0xfd5: + m = em_POP; p1 = ep_XH; + break; + + // POP XL + case 0xfd6: + m = em_POP; p1 = ep_XL; + break; + + // POP YP + case 0xfd7: + m = em_POP; p1 = ep_YP; + break; + + // POP YH + case 0xfd8: + m = em_POP; p1 = ep_YH; + break; + + // POP YL + case 0xfd9: + m = em_POP; p1 = ep_YL; + break; + + // POP F + case 0xfda: + m = em_POP; p1 = ep_F; + break; + + // INC SP + case 0xfdb: + m = em_INC; p1 = ep_SP; + break; + + // RETS + case 0xfde: + m = em_RETS; + break; + + // RET + case 0xfdf: + m = em_RET; + break; + + // LD SPH,r + case 0xfe0: case 0xfe1: case 0xfe2: case 0xfe3: + m = em_LD; p1 = ep_SPH; p2 = ep_R0; + break; + + // LD r,SPH + case 0xfe4: case 0xfe5: case 0xfe6: case 0xfe7: + m = em_LD; p1 = ep_R0; p2 = ep_SPH; + break; + + // JPBA + case 0xfe8: + m = em_JPBA; + break; + + // LD SPL,r + case 0xff0: case 0xff1: case 0xff2: case 0xff3: + m = em_LD; p1 = ep_SPL; p2 = ep_R0; + break; + + // LD r,SPL + case 0xff4: case 0xff5: case 0xff6: case 0xff7: + m = em_LD; p1 = ep_R0; p2 = ep_SPL; + break; + + // HALT + case 0xff8: + m = em_HALT; + break; + + // SLP + case 0xff9: + m = em_SLP; + break; + + // NOP5 + case 0xffb: + m = em_NOP5; + break; + + // NOP7 + case 0xfff: + m = em_NOP7; + break; + + + default: + switch (op & 0xff0) + { + + // ADC XH,i + case 0xa00: + m = em_ADC; p1 = ep_XH; p2 = ep_I; + break; + + // ADC XL,i + case 0xa10: + m = em_ADC; p1 = ep_XL; p2 = ep_I; + break; + + // ADC YH,i + case 0xa20: + m = em_ADC; p1 = ep_YH; p2 = ep_I; + break; + + // ADC YL,i + case 0xa30: + m = em_ADC; p1 = ep_YL; p2 = ep_I; + break; + + // CP XH,i + case 0xa40: + m = em_CP; p1 = ep_XH; p2 = ep_I; + break; + + // CP XL,i + case 0xa50: + m = em_CP; p1 = ep_XL; p2 = ep_I; + break; + + // CP YH,i + case 0xa60: + m = em_CP; p1 = ep_YH; p2 = ep_I; + break; + + // CP YL,i + case 0xa70: + m = em_CP; p1 = ep_YL; p2 = ep_I; + break; + + // ADD r,q + case 0xa80: + m = em_ADD; p1 = ep_R2; p2 = ep_Q; + break; + + // ADC r,q + case 0xa90: + m = em_ADC; p1 = ep_R2; p2 = ep_Q; + break; + + // SUB r,q + case 0xaa0: + m = em_SUB; p1 = ep_R2; p2 = ep_Q; + break; + + // SBC r,q + case 0xab0: + m = em_SBC; p1 = ep_R2; p2 = ep_Q; + break; + + // AND r,q + case 0xac0: + m = em_AND; p1 = ep_R2; p2 = ep_Q; + break; + + // OR r,q + case 0xad0: + m = em_OR; p1 = ep_R2; p2 = ep_Q; + break; + + // XOR r,q + case 0xae0: + m = em_XOR; p1 = ep_R2; p2 = ep_Q; + break; + + // ADD r,i + case 0xc00: case 0xc10: case 0xc20: case 0xc30: + m = em_ADD; p1 = ep_R4; p2 = ep_I; + break; + + // ADC r,i + case 0xc40: case 0xc50: case 0xc60: case 0xc70: + m = em_ADC; p1 = ep_R4; p2 = ep_I; + break; + + // AND r,i + case 0xc80: case 0xc90: case 0xca0 : case 0xcb0: + m = em_AND; p1 = ep_R4; p2 = ep_I; + break; + + // OR r,i + case 0xcc0: case 0xcd0: case 0xce0: case 0xcf0: + m = em_OR; p1 = ep_R4; p2 = ep_I; + break; + + // XOR r,i + case 0xd00: case 0xd10: case 0xd20: case 0xd30: + m = em_XOR; p1 = ep_R4; p2 = ep_I; + break; + + // SBC r,i + case 0xd40: case 0xd50: case 0xd60: case 0xd70: + m = em_SBC; p1 = ep_R4; p2 = ep_I; + break; + + // FAN r,i + case 0xd80: case 0xd90: case 0xda0: case 0xdb0: + m = em_FAN; p1 = ep_R4; p2 = ep_I; + break; + + // CP r,i + case 0xdc0: case 0xdd0: case 0xde0: case 0xdf0: + m = em_CP; p1 = ep_R4; p2 = ep_I; + break; + + // LD r,i + case 0xe00: case 0xe10: case 0xe20: case 0xe30: + m = em_LD; p1 = ep_R4; p2 = ep_I; + break; + + // PSET p + case 0xe40: case 0xe50: + m = em_PSET; p1 = ep_P; + break; + + // LDPX MX,i + case 0xe60: + m = em_LDPX; p1 = ep_MX; p2 = ep_I; + break; + + // LDPY MY,i + case 0xe70: + m = em_LDPY; p1 = ep_MY; p2 = ep_I; + break; + + // LD r,q + case 0xec0: + m = em_LD; p1 = ep_R2; p2 = ep_Q; + break; + + // LDPX r,q + case 0xee0: + m = em_LDPX; p1 = ep_R2; p2 = ep_Q; + break; + + // LDPY r,q + case 0xef0: + m = em_LDPY; p1 = ep_R2; p2 = ep_Q; + break; + + // CP r,q + case 0xf00: + m = em_CP; p1 = ep_R2; p2 = ep_Q; + break; + + // FAN r,q + case 0xf10: + m = em_FAN; p1 = ep_R2; p2 = ep_Q; + break; + + // SET F,i + case 0xf40: + m = em_SET; p1 = ep_F; p2 = ep_I; + break; + + // RST F,i + case 0xf50: + m = em_RST; p1 = ep_F; p2 = ep_I; + break; + + // INC Mn + case 0xf60: + m = em_INC; p1 = ep_MN; + break; + + // DEC Mn + case 0xf70: + m = em_DEC; p1 = ep_MN; + break; + + // LD Mn,A + case 0xf80: + m = em_LD; p1 = ep_MN; p2 = ep_A; + break; + + // LD Mn,B + case 0xf90: + m = em_LD; p1 = ep_MN; p2 = ep_B; + break; + + // LD A,Mn + case 0xfa0: + m = em_LD; p1 = ep_A; p2 = ep_MN; + break; + + // LD B,Mn + case 0xfb0: + m = em_LD; p1 = ep_B; p2 = ep_MN; + break; + + + // illegal opcode + default: + m = em_ILL; + break; + + + } // 0xff0 + break; + + } // 0xfff + break; + + } // 0xf00 (big switch) + + + // fetch mnemonic + char *dst = buffer; + dst += sprintf(dst, "%-6s", em_name[m]); + + // fetch param(s) + char pbuffer[10]; + if (p1 != -1) + { + dst += sprintf(dst, "%s", decode_param(op, p1, pbuffer)); + if (p2 != -1) + { + dst += sprintf(dst, ",%s", decode_param(op, p2, pbuffer)); + } + } + + return 1 | em_flags[m] | DASMFLAG_SUPPORTED; } diff --git a/src/emu/cpu/e0c6200/e0c6200op.inc b/src/emu/cpu/e0c6200/e0c6200op.inc deleted file mode 100644 index 946fdf6a4d5..00000000000 --- a/src/emu/cpu/e0c6200/e0c6200op.inc +++ /dev/null @@ -1 +0,0 @@ -// E0C6200 opcode handlers diff --git a/src/emu/inpttype.h b/src/emu/inpttype.h index 09751221393..849fea74d61 100644 --- a/src/emu/inpttype.h +++ b/src/emu/inpttype.h @@ -20,10 +20,10 @@ typelist.append(*global_alloc(input_type_entry(IPT_##_type, IPG_##_group, (_player == 0) ? _player : (_player) - 1, (_player == 0) ? #_type : ("P" #_player "_" #_type), _name, _seq, _decseq, _incseq))); /* These input port macros expand to a great deal of code and break compilers */ -#if defined(__GNUC__) && __GNUC__ == 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ >= 4) +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 4 || (__GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ >= 4)))) +#pragma GCC push_options #pragma GCC optimize ("O1") -#endif -#ifdef _MSC_VER +#elif defined(_MSC_VER) #pragma optimize("", off) #endif @@ -829,6 +829,8 @@ void construct_core_types(simple_list<input_type_entry> &typelist) construct_core_types_OSD(typelist); construct_core_types_invalid(typelist); } -#ifdef _MSC_VER +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 4 || (__GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ >= 4)))) +#pragma GCC pop_options +#elif defined(_MSC_VER) #pragma optimize("", on) #endif diff --git a/src/emu/sound/s14001a.c b/src/emu/sound/s14001a.c index 409610da341..e6900d4898f 100644 --- a/src/emu/sound/s14001a.c +++ b/src/emu/sound/s14001a.c @@ -602,16 +602,6 @@ s14001a_device::s14001a_device(const machine_config &mconfig, const char *tag, d } //------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void s14001a_device::device_config_complete() -{ -} - -//------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -629,6 +619,27 @@ void s14001a_device::device_start() } m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() ? clock() : machine().sample_rate()); + + save_item(NAME(m_WordInput)); + save_item(NAME(m_LatchedWord)); + save_item(NAME(m_SyllableAddress)); + save_item(NAME(m_PhoneAddress)); + save_item(NAME(m_PlayParams)); + save_item(NAME(m_PhoneOffset)); + save_item(NAME(m_LengthCounter)); + save_item(NAME(m_RepeatCounter)); + save_item(NAME(m_OutputCounter)); + save_item(NAME(m_machineState)); + save_item(NAME(m_nextstate)); + save_item(NAME(m_laststate)); + save_item(NAME(m_resetState)); + save_item(NAME(m_oddeven)); + save_item(NAME(m_GlobalSilenceState)); + save_item(NAME(m_OldDelta)); + save_item(NAME(m_DACOutput)); + save_item(NAME(m_audioout)); + save_item(NAME(m_filtervals[8])); + save_item(NAME(m_VSU1000_amp)); } //------------------------------------------------- diff --git a/src/emu/sound/s14001a.h b/src/emu/sound/s14001a.h index 4c212fc05a4..074cab14f34 100644 --- a/src/emu/sound/s14001a.h +++ b/src/emu/sound/s14001a.h @@ -27,7 +27,6 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); // sound stream update overrides diff --git a/src/emu/video/vooddefs.h b/src/emu/video/vooddefs.h index 094b6f0eb32..a64b0c22f66 100644 --- a/src/emu/video/vooddefs.h +++ b/src/emu/video/vooddefs.h @@ -1619,6 +1619,7 @@ struct raster_info UINT32 eff_fbz_mode; /* effective fbzMode value */ UINT32 eff_tex_mode_0; /* effective textureMode value for TMU #0 */ UINT32 eff_tex_mode_1; /* effective textureMode value for TMU #1 */ + UINT32 hash; }; @@ -2420,9 +2421,8 @@ do if (ALPHAMODE_ALPHABLEND(ALPHAMODE)) \ { \ int dpix = dest[XX]; \ - int dr = (dpix >> 8) & 0xf8; \ - int dg = (dpix >> 3) & 0xfc; \ - int db = (dpix << 3) & 0xf8; \ + int dr, dg, db; \ + EXTRACT_565_TO_888(dpix, dr, dg, db); \ int da = FBZMODE_ENABLE_ALPHA_PLANES(FBZMODE) ? depth[XX] : 0xff; \ int sr = (RR); \ int sg = (GG); \ @@ -2623,12 +2623,12 @@ do { \ case 0: /* fog table */ \ { \ - INT32 delta = (VV)->fbi.fogdelta[wfloat >> 10]; \ + INT32 delta = (VV)->fbi.fogdelta[fogdepth >> 10]; \ INT32 deltaval; \ \ /* perform the multiply against lower 8 bits of wfloat */ \ deltaval = (delta & (VV)->fbi.fogdelta_mask) * \ - ((wfloat >> 2) & 0xff); \ + ((fogdepth >> 2) & 0xff); \ \ /* fog zones allow for negating this value */ \ if (FOGMODE_FOG_ZONES(FOGMODE) && (delta & 2)) \ @@ -2641,7 +2641,7 @@ do deltaval >>= 4; \ \ /* add to the blending factor */ \ - fogblend = (VV)->fbi.fogblend[wfloat >> 10] + deltaval; \ + fogblend = (VV)->fbi.fogblend[fogdepth >> 10] + deltaval; \ break; \ } \ \ @@ -3040,7 +3040,7 @@ while (0) #define PIXEL_PIPELINE_BEGIN(VV, STATS, XX, YY, FBZCOLORPATH, FBZMODE, ITERZ, ITERW) \ do \ { \ - INT32 depthval, wfloat; \ + INT32 depthval, wfloat, fogdepth, biasdepth; \ INT32 prefogr, prefogg, prefogb; \ INT32 r, g, b, a; \ \ @@ -3080,33 +3080,27 @@ do wfloat = 0x0000; \ else \ { \ - UINT32 temp = (UINT32)(ITERW); \ - if ((temp & 0xffff0000) == 0) \ + UINT32 temp = (UINT32)(ITERW); \ + if (!(temp & 0xffff0000)) \ wfloat = 0xffff; \ else \ { \ int exp = count_leading_zeros(temp); \ - temp &=0x7fff0000; \ wfloat = ((exp << 12) | ((~temp >> (19 - exp)) & 0xfff)) + 1; \ } \ } \ + fogdepth = wfloat; \ /* add the bias for fog selection*/ \ if (FBZMODE_ENABLE_DEPTH_BIAS(FBZMODE)) \ { \ - wfloat += (INT16)(VV)->reg[zaColor].u; \ - CLAMP(wfloat, 0, 0xffff); \ + fogdepth += (INT16)(VV)->reg[zaColor].u; \ + CLAMP(fogdepth, 0, 0xffff); \ } \ \ /* compute depth value (W or Z) for this pixel */ \ if (FBZMODE_WBUFFER_SELECT(FBZMODE) == 0) \ { \ CLAMPED_Z(ITERZ, FBZCOLORPATH, depthval); \ - /* add the bias */ \ - if (FBZMODE_ENABLE_DEPTH_BIAS(FBZMODE)) \ - { \ - depthval += (INT16)(VV)->reg[zaColor].u; \ - CLAMP(depthval, 0, 0xffff); \ - } \ } \ else if (FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE) == 0) \ depthval = wfloat; \ @@ -3116,25 +3110,28 @@ do depthval = 0x0000; \ else \ { \ - UINT32 temp = (ITERZ) << 4; \ - if ((temp & 0xffff0000) == 0) \ + UINT32 temp = (ITERZ << 4); \ + if (!(temp & 0xffff0000)) \ depthval = 0xffff; \ else \ { \ int exp = count_leading_zeros(temp); \ - temp &=0x7fff0000; \ depthval = ((exp << 12) | ((~temp >> (19 - exp)) & 0xfff)) + 1; \ } \ } \ - /* add the bias */ \ - if (FBZMODE_ENABLE_DEPTH_BIAS(FBZMODE)) \ - { \ - depthval += (INT16)(VV)->reg[zaColor].u; \ - CLAMP(depthval, 0, 0xffff); \ - } \ - } \ - \ - \ + } \ + /* add the bias */ \ + biasdepth = depthval; \ + if (FBZMODE_ENABLE_DEPTH_BIAS(FBZMODE)) \ + { \ + biasdepth += (INT16)(VV)->reg[zaColor].u; \ + CLAMP(biasdepth, 0, 0xffff); \ + } + + +#define DEPTH_TEST(VV, STATS, XX, FBZMODE) \ +do \ +{ \ /* handle depth buffer testing */ \ if (FBZMODE_ENABLE_DEPTHBUF(FBZMODE)) \ { \ @@ -3143,7 +3140,7 @@ do /* the source depth is either the iterated W/Z+bias or a */ \ /* constant value */ \ if (FBZMODE_DEPTH_SOURCE_COMPARE(FBZMODE) == 0) \ - depthsource = depthval; \ + depthsource = biasdepth; \ else \ depthsource = (UINT16)(VV)->reg[zaColor].u; \ \ @@ -3205,7 +3202,9 @@ do case 7: /* depthOP = always */ \ break; \ } \ - } + } \ +} \ +while (0) #define PIXEL_PIPELINE_END(VV, STATS, DITHER, DITHER4, DITHER_LOOKUP, XX, dest, depth, FBZMODE, FBZCOLORPATH, ALPHAMODE, FOGMODE, ITERZ, ITERW, ITERAXXX) \ @@ -3235,7 +3234,7 @@ do if (depth && FBZMODE_AUX_BUFFER_MASK(FBZMODE)) \ { \ if (FBZMODE_ENABLE_ALPHA_PLANES(FBZMODE) == 0) \ - depth[XX] = depthval; \ + depth[XX] = biasdepth; \ else \ depth[XX] = a; \ } \ @@ -3315,7 +3314,7 @@ do c_other.u = (VV)->reg[color1].u; \ break; \ \ - default: /* reserved */ \ + default: /* reserved - voodoo3 framebufferRGB */ \ c_other.u = 0; \ break; \ } \ @@ -3647,9 +3646,11 @@ static void raster_##name(void *destbase, INT32 y, const poly_extent *extent, co rgb_union iterargb = { 0 }; \ rgb_union texel = { 0 }; \ \ - /* pixel pipeline part 1 handles depth testing and stippling */ \ + /* pixel pipeline part 1 handles depth setup and stippling */ \ PIXEL_PIPELINE_BEGIN(v, stats, x, y, FBZCOLORPATH, FBZMODE, \ iterz, iterw); \ + /* depth testing */ \ + DEPTH_TEST(v, stats, x, FBZMODE); \ \ /* run the texture pipeline on TMU1 to produce a value in texel */ \ /* note that they set LOD min to 8 to "disable" a TMU */ \ diff --git a/src/emu/video/voodoo.c b/src/emu/video/voodoo.c index a29bb711570..b27c794723c 100644 --- a/src/emu/video/voodoo.c +++ b/src/emu/video/voodoo.c @@ -211,7 +211,7 @@ static TIMER_CALLBACK( stall_cpu_callback ); static void stall_cpu(voodoo_state *v, int state, attotime current_time); static TIMER_CALLBACK( vblank_callback ); static INT32 register_w(voodoo_state *v, offs_t offset, UINT32 data); -static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, int forcefront); +static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, bool lfb_3d); static INT32 texture_w(voodoo_state *v, offs_t offset, UINT32 data); static INT32 banshee_2d_w(voodoo_state *v, offs_t offset, UINT32 data); @@ -1725,7 +1725,7 @@ static UINT32 cmdfifo_execute(voodoo_state *v, cmdfifo_info *f) /* loop over all registers and write them one at a time */ for (i = 3; i <= 31; i++) if (command & (1 << i)) - cycles += register_w(v, bltSrcBaseAddr + (i - 3), *src++); + cycles += register_w(v, banshee2D_clip0Min + (i - 3), *src++); break; /* @@ -1874,11 +1874,12 @@ static UINT32 cmdfifo_execute(voodoo_state *v, cmdfifo_info *f) // Banshee/Voodoo3 2D register writes /* loop over all registers and write them one at a time */ + target &= 0xff; for (i = 15; i <= 28; i++) { if (command & (1 << i)) { - cycles += banshee_2d_w(v, target & 0xff, *src); + cycles += banshee_2d_w(v, target + (i - 15), *src); //logerror(" 2d reg: %03x = %08X\n", target & 0x7ff, *src); src++; } @@ -1942,7 +1943,7 @@ static UINT32 cmdfifo_execute(voodoo_state *v, cmdfifo_info *f) /* loop over words */ for (i = 0; i < count; i++) - cycles += lfb_w(v, target++, *src++, 0xffffffff, FALSE); + cycles += lfb_w(v, target++, *src++, 0xffffffff, true); break; } @@ -2931,7 +2932,7 @@ default_case: * *************************************/ -static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, int forcefront) +static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, bool lfb_3d) { UINT16 *dest, *depth; UINT32 destmax, depthmax; @@ -2942,6 +2943,29 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, /* statistics */ v->stats.lfb_writes++; + // TODO: This direct write is not verified. + // For direct lfb access just write the data + if (!lfb_3d) { + UINT32 bufoffs; + /* compute X,Y */ + offset <<= 1; + x = offset & ((1 << v->fbi.lfb_stride) - 1); + y = (offset >> v->fbi.lfb_stride); + dest = (UINT16 *)(v->fbi.ram + v->fbi.lfb_base*4); + destmax = (v->fbi.mask + 1 - v->fbi.lfb_base*4) / 2; + bufoffs = y * v->fbi.rowpixels + x; + if (bufoffs >= destmax) { + logerror("LFB_W: Buffer offset out of bounds x=%i y=%i lfb_3d=%i offset=%08X bufoffs=%08X data=%08X\n", x, y, lfb_3d, offset, (UINT32) bufoffs, data); + return 0; + } + if (ACCESSING_BITS_0_15) + dest[bufoffs + 0] = data&0xffff; + if (ACCESSING_BITS_16_31) + dest[bufoffs + 1] = data>>16; + if (LOG_LFB) logerror("VOODOO.%d.LFB:write direct (%d,%d) = %08X & %08X\n", v->index, x, y, data, mem_mask); + return 0; + } + /* byte swizzling */ if (LFBMODE_BYTE_SWIZZLE_WRITES(v->reg[lfbMode].u)) { @@ -3128,12 +3152,13 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, break; default: /* reserved */ + logerror("lfb_w: Unknown format\n"); return 0; } /* compute X,Y */ - x = (offset << 0) & ((1 << v->fbi.lfb_stride) - 1); - y = (offset >> v->fbi.lfb_stride) & ((1 << v->fbi.lfb_stride) - 1); + x = offset & ((1 << v->fbi.lfb_stride) - 1); + y = (offset >> v->fbi.lfb_stride) & 0x3ff; /* adjust the mask based on which half of the data is written */ if (!ACCESSING_BITS_0_15) @@ -3142,7 +3167,7 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, mask &= ~(0xf0 + LFB_DEPTH_PRESENT_MSW); /* select the target buffer */ - destbuf = (v->type >= TYPE_VOODOO_BANSHEE) ? (!forcefront) : LFBMODE_WRITE_BUFFER_SELECT(v->reg[lfbMode].u); + destbuf = (v->type >= TYPE_VOODOO_BANSHEE) ? 1 : LFBMODE_WRITE_BUFFER_SELECT(v->reg[lfbMode].u); switch (destbuf) { case 0: /* front buffer */ @@ -3250,12 +3275,14 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, stats_block *stats = &v->fbi.lfb_stats; INT64 iterw; if (LFBMODE_WRITE_W_SELECT(v->reg[lfbMode].u)) { - iterw = (UINT32) (v->reg[zaColor].u & 0xffff) << 16; + iterw = (UINT32) v->reg[zaColor].u << 16; } else { + // The most significant fractional bits of 16.32 W are set to z iterw = (UINT32) sw[pix] << 16; } INT32 iterz = sw[pix] << 12; rgb_union color; + rgb_union iterargb = { 0 }; /* apply clipping */ if (FBZMODE_ENABLE_CLIPPING(v->reg[fbzMode].u)) @@ -3272,7 +3299,52 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, } /* pixel pipeline part 1 handles depth testing and stippling */ - PIXEL_PIPELINE_BEGIN(v, stats, x, y, v->reg[fbzColorPath].u, v->reg[fbzMode].u, iterz, iterw); + //PIXEL_PIPELINE_BEGIN(v, stats, x, y, v->reg[fbzColorPath].u, v->reg[fbzMode].u, iterz, iterw); +// Start PIXEL_PIPE_BEGIN copy + //#define PIXEL_PIPELINE_BEGIN(VV, STATS, XX, YY, FBZCOLORPATH, FBZMODE, ITERZ, ITERW) + do + { + INT32 fogdepth, biasdepth; + INT32 prefogr, prefogg, prefogb; + INT32 r, g, b, a; + + (stats)->pixels_in++; + + /* apply clipping */ + /* note that for perf reasons, we assume the caller has done clipping */ + + /* handle stippling */ + if (FBZMODE_ENABLE_STIPPLE(v->reg[fbzMode].u)) + { + /* rotate mode */ + if (FBZMODE_STIPPLE_PATTERN(v->reg[fbzMode].u) == 0) + { + v->reg[stipple].u = (v->reg[stipple].u << 1) | (v->reg[stipple].u >> 31); + if ((v->reg[stipple].u & 0x80000000) == 0) + { + v->stats.total_stippled++; + goto skipdrawdepth; + } + } + + /* pattern mode */ + else + { + int stipple_index = ((y & 3) << 3) | (~x & 7); + if (((v->reg[stipple].u >> stipple_index) & 1) == 0) + { + v->stats.total_stippled++; + goto skipdrawdepth; + } + } + } +// End PIXEL_PIPELINE_BEGIN COPY + + // Depth testing value for lfb pipeline writes is directly from write data, no biasing is used + fogdepth = biasdepth = (UINT32) sw[pix]; + + /* Perform depth testing */ + DEPTH_TEST(v, stats, x, v->reg[fbzMode].u); /* use the RGBA we stashed above */ color.rgb.r = r = sr[pix]; @@ -3286,7 +3358,9 @@ static INT32 lfb_w(voodoo_state *v, offs_t offset, UINT32 data, UINT32 mem_mask, APPLY_ALPHATEST(v, stats, v->reg[alphaMode].u, color.rgb.a); /* pixel pipeline part 2 handles color combine, fog, alpha, and final output */ - PIXEL_PIPELINE_END(v, stats, dither, dither4, dither_lookup, x, dest, depth, v->reg[fbzMode].u, v->reg[fbzColorPath].u, v->reg[alphaMode].u, v->reg[fogMode].u, iterz, iterw, v->reg[zaColor]); + PIXEL_PIPELINE_END(v, stats, dither, dither4, dither_lookup, x, dest, depth, + v->reg[fbzMode].u, v->reg[fbzColorPath].u, v->reg[alphaMode].u, v->reg[fogMode].u, + iterz, iterw, iterargb); } nextpixel: /* advance our pointers */ @@ -3368,7 +3442,7 @@ static INT32 texture_w(voodoo_state *v, offs_t offset, UINT32 data) { tbaseaddr = t->lodoffset[0] + offset*4; - if (LOG_TEXTURE_RAM) logerror("Texture 16-bit w: offset=%X data=%08X\n", offset*4, data); + if (LOG_TEXTURE_RAM) logerror("Texture 8-bit w: offset=%X data=%08X\n", offset*4, data); } /* write the four bytes in little-endian order */ @@ -3520,7 +3594,7 @@ static void flush_fifos(voodoo_state *v, attotime current_time) mem_mask &= 0xffff0000; address &= 0xffffff; - cycles = lfb_w(v, address, data, mem_mask, FALSE); + cycles = lfb_w(v, address, data, mem_mask, true); } } @@ -3646,7 +3720,7 @@ WRITE32_MEMBER( voodoo_device::voodoo_w ) else if (offset & (0x800000/4)) cycles = texture_w(v, offset, data); else - cycles = lfb_w(v, offset, data, mem_mask, FALSE); + cycles = lfb_w(v, offset, data, mem_mask, true); /* if we ended up with cycles, mark the operation pending */ if (cycles) @@ -3916,7 +3990,7 @@ static UINT32 register_r(voodoo_state *v, offs_t offset) * *************************************/ -static UINT32 lfb_r(voodoo_state *v, offs_t offset, int forcefront) +static UINT32 lfb_r(voodoo_state *v, offs_t offset, bool lfb_3d) { UINT16 *buffer; UINT32 bufmax; @@ -3928,43 +4002,54 @@ static UINT32 lfb_r(voodoo_state *v, offs_t offset, int forcefront) v->stats.lfb_reads++; /* compute X,Y */ - x = (offset << 1) & 0x3fe; - y = (offset >> 9) & 0x3ff; + offset <<= 1; + x = offset & ((1 << v->fbi.lfb_stride) - 1); + y = (offset >> v->fbi.lfb_stride); /* select the target buffer */ - destbuf = (v->type >= TYPE_VOODOO_BANSHEE) ? (!forcefront) : LFBMODE_READ_BUFFER_SELECT(v->reg[lfbMode].u); - switch (destbuf) - { - case 0: /* front buffer */ - buffer = (UINT16 *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.frontbuf]); - bufmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.frontbuf]) / 2; - break; + if (lfb_3d) { + y &= 0x3ff; + destbuf = (v->type >= TYPE_VOODOO_BANSHEE) ? 1 : LFBMODE_READ_BUFFER_SELECT(v->reg[lfbMode].u); + switch (destbuf) + { + case 0: /* front buffer */ + buffer = (UINT16 *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.frontbuf]); + bufmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.frontbuf]) / 2; + break; - case 1: /* back buffer */ - buffer = (UINT16 *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.backbuf]); - bufmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.backbuf]) / 2; - break; + case 1: /* back buffer */ + buffer = (UINT16 *)(v->fbi.ram + v->fbi.rgboffs[v->fbi.backbuf]); + bufmax = (v->fbi.mask + 1 - v->fbi.rgboffs[v->fbi.backbuf]) / 2; + break; + + case 2: /* aux buffer */ + if (v->fbi.auxoffs == ~0) + return 0xffffffff; + buffer = (UINT16 *)(v->fbi.ram + v->fbi.auxoffs); + bufmax = (v->fbi.mask + 1 - v->fbi.auxoffs) / 2; + break; - case 2: /* aux buffer */ - if (v->fbi.auxoffs == ~0) + default: /* reserved */ return 0xffffffff; - buffer = (UINT16 *)(v->fbi.ram + v->fbi.auxoffs); - bufmax = (v->fbi.mask + 1 - v->fbi.auxoffs) / 2; - break; + } - default: /* reserved */ - return 0xffffffff; + /* determine the screen Y */ + scry = y; + if (LFBMODE_Y_ORIGIN(v->reg[lfbMode].u)) + scry = (v->fbi.yorigin - y) & 0x3ff; + } else { + // Direct lfb access + buffer = (UINT16 *)(v->fbi.ram + v->fbi.lfb_base*4); + bufmax = (v->fbi.mask + 1 - v->fbi.lfb_base*4) / 2; + scry = y; } - /* determine the screen Y */ - scry = y; - if (LFBMODE_Y_ORIGIN(v->reg[lfbMode].u)) - scry = (v->fbi.yorigin - y) & 0x3ff; - /* advance pointers to the proper row */ bufoffs = scry * v->fbi.rowpixels + x; - if (bufoffs >= bufmax) + if (bufoffs >= bufmax) { + logerror("LFB_R: Buffer offset out of bounds x=%i y=%i lfb_3d=%i offset=%08X bufoffs=%08X\n", x, y, lfb_3d, offset, (UINT32) bufoffs); return 0xffffffff; + } /* wait for any outstanding work to finish */ poly_wait(v->poly, "LFB read"); @@ -4005,7 +4090,7 @@ READ32_MEMBER( voodoo_device::voodoo_r ) if (!(offset & (0xc00000/4))) return register_r(v, offset); else if (!(offset & (0x800000/4))) - return lfb_r(v, offset, FALSE); + return lfb_r(v, offset, true); return 0xffffffff; } @@ -4098,17 +4183,18 @@ READ32_MEMBER( voodoo_banshee_device::banshee_r ) else if (offset < 0x600000/4) result = register_r(v, offset & 0x1fffff/4); else if (offset < 0x800000/4) - logerror("%s:banshee_r(TEX:%X)\n", machine().describe_context(), (offset*4) & 0x1fffff); + logerror("%s:banshee_r(TEX0:%X)\n", machine().describe_context(), (offset*4) & 0x1fffff); + else if (offset < 0xa00000/4) + logerror("%s:banshee_r(TEX1:%X)\n", machine().describe_context(), (offset*4) & 0x1fffff); else if (offset < 0xc00000/4) - logerror("%s:banshee_r(RES:%X)\n", machine().describe_context(), (offset*4) & 0x3fffff); + logerror("%s:banshee_r(FLASH Bios ROM:%X)\n", machine().describe_context(), (offset*4) & 0x3fffff); else if (offset < 0x1000000/4) logerror("%s:banshee_r(YUV:%X)\n", machine().describe_context(), (offset*4) & 0x3fffff); else if (offset < 0x2000000/4) { - UINT8 temp = v->fbi.lfb_stride; - v->fbi.lfb_stride = 11; - result = lfb_r(v, offset & 0xffffff/4, FALSE); - v->fbi.lfb_stride = temp; + result = lfb_r(v, offset & 0xffffff/4, true); + } else { + logerror("%s:banshee_r(%X) Access out of bounds\n", machine().describe_context(), offset*4); } return result; } @@ -4130,9 +4216,14 @@ READ32_MEMBER( voodoo_banshee_device::banshee_fb_r ) #endif if (offset*4 <= v->fbi.mask) result = ((UINT32 *)v->fbi.ram)[offset]; + else + logerror("%s:banshee_fb_r(%X) Access out of bounds\n", machine().describe_context(), offset*4); + } + else { + if (LOG_LFB) + logerror("%s:banshee_fb_r(%X) to lfb_r: %08X lfb_base=%08X\n", machine().describe_context(), offset*4, offset - v->fbi.lfb_base, v->fbi.lfb_base); + result = lfb_r(v, offset - v->fbi.lfb_base, false); } - else - result = lfb_r(v, offset - v->fbi.lfb_base, FALSE); return result; } @@ -4657,17 +4748,18 @@ WRITE32_MEMBER( voodoo_banshee_device::banshee_w ) else if (offset < 0x600000/4) register_w(v, offset & 0x1fffff/4, data); else if (offset < 0x800000/4) - logerror("%s:banshee_w(TEX:%X) = %08X & %08X\n", machine().describe_context(), (offset*4) & 0x1fffff, data, mem_mask); + logerror("%s:banshee_w(TEX0:%X) = %08X & %08X\n", machine().describe_context(), (offset*4) & 0x1fffff, data, mem_mask); + else if (offset < 0xa00000/4) + logerror("%s:banshee_w(TEX1:%X) = %08X & %08X\n", machine().describe_context(), (offset*4) & 0x1fffff, data, mem_mask); else if (offset < 0xc00000/4) - logerror("%s:banshee_w(RES:%X) = %08X & %08X\n", machine().describe_context(), (offset*4) & 0x3fffff, data, mem_mask); + logerror("%s:banshee_r(FLASH Bios ROM:%X)\n", machine().describe_context(), (offset*4) & 0x3fffff); else if (offset < 0x1000000/4) logerror("%s:banshee_w(YUV:%X) = %08X & %08X\n", machine().describe_context(), (offset*4) & 0x3fffff, data, mem_mask); else if (offset < 0x2000000/4) { - UINT8 temp = v->fbi.lfb_stride; - v->fbi.lfb_stride = 11; - lfb_w(v, offset & 0xffffff/4, data, mem_mask, FALSE); - v->fbi.lfb_stride = temp; + lfb_w(v, offset & 0xffffff/4, data, mem_mask, true); + } else { + logerror("%s:banshee_w Address out of range %08X = %08X & %08X\n", machine().describe_context(), (offset*4), data, mem_mask); } } @@ -4691,13 +4783,15 @@ WRITE32_MEMBER( voodoo_banshee_device::banshee_fb_w ) { if (offset*4 <= v->fbi.mask) COMBINE_DATA(&((UINT32 *)v->fbi.ram)[offset]); + else + logerror("%s:banshee_fb_w Out of bounds (%X) = %08X & %08X\n", machine().describe_context(), offset*4, data, mem_mask); #if LOG_LFB logerror("%s:banshee_fb_w(%X) = %08X & %08X\n", machine().describe_context(), offset*4, data, mem_mask); #endif } } else - lfb_w(v, offset - v->fbi.lfb_base, data, mem_mask, FALSE); + lfb_w(v, offset - v->fbi.lfb_base, data, mem_mask, false); } @@ -4828,7 +4922,7 @@ WRITE32_MEMBER( voodoo_banshee_device::banshee_io_w ) } case io_lfbMemoryConfig: - v->fbi.lfb_base = (data & 0x1fff) << 10; + v->fbi.lfb_base = (data & 0x1fff) << (12-2); v->fbi.lfb_stride = ((data >> 13) & 7) + 9; if (LOG_REGISTERS) logerror("%s:banshee_io_w(%s) = %08X & %08X\n", machine().describe_context(), banshee_io_reg_name[offset], data, mem_mask); @@ -4870,7 +4964,7 @@ void voodoo_device::common_start_voodoo(UINT8 type) voodoo_state *v = get_safe_token(this); const raster_info *info; void *fbmem, *tmumem[2]; - UINT32 tmumem0; + UINT32 tmumem0, tmumem1; int val; /* validate configuration */ @@ -4993,6 +5087,7 @@ void voodoo_device::common_start_voodoo(UINT8 type) /* allocate memory */ tmumem0 = m_tmumem0; + tmumem1 = m_tmumem1; if (v->type <= TYPE_VOODOO_2) { /* separate FB/TMU memory */ @@ -5005,6 +5100,8 @@ void voodoo_device::common_start_voodoo(UINT8 type) /* shared memory */ tmumem[0] = tmumem[1] = fbmem = auto_alloc_array(machine(), UINT8, m_fbmem << 20); tmumem0 = m_fbmem; + if (v->type == TYPE_VOODOO_3) + tmumem1 = m_fbmem; } /* set up frame buffer */ @@ -5016,9 +5113,9 @@ void voodoo_device::common_start_voodoo(UINT8 type) /* set up the TMUs */ init_tmu(v, &v->tmu[0], &v->reg[0x100], tmumem[0], tmumem0 << 20); v->chipmask |= 0x02; - if (m_tmumem1 != 0 || v->type == TYPE_VOODOO_3) + if (tmumem1 != 0) { - init_tmu(v, &v->tmu[1], &v->reg[0x200], tmumem[1], m_tmumem1 << 20); + init_tmu(v, &v->tmu[1], &v->reg[0x200], tmumem[1], tmumem1 << 20); v->chipmask |= 0x04; v->tmu_config |= 0x40; } @@ -5567,7 +5664,7 @@ static raster_info *add_rasterizer(voodoo_state *v, const raster_info *cinfo) v->raster_hash[hash] = info; if (LOG_RASTERIZERS) - printf("Adding rasterizer @ %p : %08X %08X %08X %08X %08X %08X (hash=%d)\n", + printf("Adding rasterizer @ %p : cp=%08X am=%08X %08X fbzM=%08X tm0=%08X tm1=%08X (hash=%d)\n", info->callback, info->eff_color_path, info->eff_alpha_mode, info->eff_fog_mode, info->eff_fbz_mode, info->eff_tex_mode_0, info->eff_tex_mode_1, hash); @@ -5627,6 +5724,7 @@ static raster_info *find_rasterizer(voodoo_state *v, int texcount) curinfo.polys = 0; curinfo.hits = 0; curinfo.next = 0; + curinfo.hash = hash; return add_rasterizer(v, &curinfo); } diff --git a/src/mame/drivers/berzerk.c b/src/mame/drivers/berzerk.c index a9fe7218dbb..4c0177cfd7d 100644 --- a/src/mame/drivers/berzerk.c +++ b/src/mame/drivers/berzerk.c @@ -22,17 +22,14 @@ class berzerk_state : public driver_device public: berzerk_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_colorram(*this, "colorram"), m_maincpu(*this, "maincpu"), m_s14001a(*this, "speech"), m_ls181_10c(*this, "ls181_10c"), m_ls181_12c(*this, "ls181_12c"), m_custom(*this, "exidy"), - m_screen(*this, "screen") { } - - required_shared_ptr<UINT8> m_videoram; - required_shared_ptr<UINT8> m_colorram; + m_screen(*this, "screen"), + m_videoram(*this, "videoram"), + m_colorram(*this, "colorram") { } required_device<cpu_device> m_maincpu; required_device<s14001a_device> m_s14001a; @@ -41,6 +38,9 @@ public: required_device<exidy_sound_device> m_custom; required_device<screen_device> m_screen; + required_shared_ptr<UINT8> m_videoram; + required_shared_ptr<UINT8> m_colorram; + UINT8 m_magicram_control; UINT8 m_last_shift_data; UINT8 m_intercept; @@ -52,6 +52,7 @@ public: int m_p1_direction; int m_p2_counter_74ls161; int m_p2_direction; + DECLARE_READ8_MEMBER(led_on_r); DECLARE_WRITE8_MEMBER(led_on_w); DECLARE_READ8_MEMBER(led_off_r); @@ -64,16 +65,19 @@ public: DECLARE_WRITE8_MEMBER(magicram_w); DECLARE_WRITE8_MEMBER(magicram_control_w); DECLARE_READ8_MEMBER(intercept_v256_r); - DECLARE_WRITE8_MEMBER(berzerk_audio_w); - DECLARE_READ8_MEMBER(berzerk_audio_r); + DECLARE_WRITE8_MEMBER(audio_w); + DECLARE_READ8_MEMBER(audio_r); DECLARE_READ8_MEMBER(moonwarp_p1_r); DECLARE_READ8_MEMBER(moonwarp_p2_r); + DECLARE_DRIVER_INIT(moonwarp); virtual void machine_start(); virtual void machine_reset(); virtual void sound_reset(); virtual void video_start(); - UINT32 screen_update_berzerk(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + TIMER_CALLBACK_MEMBER(irq_callback); TIMER_CALLBACK_MEMBER(nmi_callback); void vpos_to_vsync_chain_counter(int vpos, UINT8 *counter, UINT8 *v256); @@ -467,7 +471,7 @@ void berzerk_state::get_pens(rgb_t *pens) } -UINT32 berzerk_state::screen_update_berzerk(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +UINT32 berzerk_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { rgb_t pens[NUM_PENS]; offs_t offs; @@ -514,7 +518,7 @@ UINT32 berzerk_state::screen_update_berzerk(screen_device &screen, bitmap_rgb32 * *************************************/ -WRITE8_MEMBER(berzerk_state::berzerk_audio_w) +WRITE8_MEMBER(berzerk_state::audio_w) { int clock_divisor; @@ -568,7 +572,7 @@ WRITE8_MEMBER(berzerk_state::berzerk_audio_w) } -READ8_MEMBER(berzerk_state::berzerk_audio_r) +READ8_MEMBER(berzerk_state::audio_r) { switch (offset) { @@ -591,7 +595,7 @@ void berzerk_state::sound_reset() { address_space &space = m_maincpu->space(AS_IO); /* clears the flip-flop controlling the volume and freq on the speech chip */ - berzerk_audio_w(space, 4, 0x40); + audio_w(space, 4, 0x40); } @@ -633,7 +637,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( berzerk_io_map, AS_IO, 8, berzerk_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x3f) AM_NOP - AM_RANGE(0x40, 0x47) AM_READWRITE(berzerk_audio_r, berzerk_audio_w) + AM_RANGE(0x40, 0x47) AM_READWRITE(audio_r, audio_w) AM_RANGE(0x48, 0x48) AM_READ_PORT("P1") AM_WRITENOP AM_RANGE(0x49, 0x49) AM_READ_PORT("SYSTEM") AM_WRITENOP AM_RANGE(0x4a, 0x4a) AM_READ_PORT("P2") AM_WRITENOP @@ -1124,7 +1128,7 @@ static MACHINE_CONFIG_START( berzerk, berzerk_state ) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(berzerk_state, screen_update_berzerk) + MCFG_SCREEN_UPDATE_DRIVER(berzerk_state, screen_update) /* audio hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1319,6 +1323,11 @@ DRIVER_INIT_MEMBER(berzerk_state,moonwarp) address_space &io = m_maincpu->space(AS_IO); io.install_read_handler (0x48, 0x48, read8_delegate(FUNC(berzerk_state::moonwarp_p1_r), this)); io.install_read_handler (0x4a, 0x4a, read8_delegate(FUNC(berzerk_state::moonwarp_p2_r), this)); + + save_item(NAME(m_p1_counter_74ls161)); + save_item(NAME(m_p1_direction)); + save_item(NAME(m_p2_counter_74ls161)); + save_item(NAME(m_p2_direction)); } /************************************* @@ -1327,10 +1336,10 @@ DRIVER_INIT_MEMBER(berzerk_state,moonwarp) * *************************************/ -GAME( 1980, berzerk, 0, berzerk, berzerk, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (set 1)", 0 ) -GAME( 1980, berzerk1, berzerk, berzerk, berzerk, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (set 2)", 0 ) -GAME( 1980, berzerkf, berzerk, berzerk, berzerkf, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (French Speech)", 0 ) -GAME( 1980, berzerkg, berzerk, berzerk, berzerkg, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (German Speech)", 0 ) -GAME( 1980, berzerks, berzerk, berzerk, berzerks, driver_device, 0, ROT0, "Stern Electronics (Sonic License)", "Berzerk (Spanish Speech)", 0 ) -GAME( 1981, frenzy, 0, frenzy, frenzy, driver_device, 0, ROT0, "Stern Electronics", "Frenzy", 0 ) -GAME( 1981, moonwarp, 0, frenzy, moonwarp, berzerk_state, moonwarp, ROT0, "Stern Electronics", "Moon War (prototype on Frenzy hardware)", 0) +GAME( 1980, berzerk, 0, berzerk, berzerk, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1980, berzerk1, berzerk, berzerk, berzerk, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1980, berzerkf, berzerk, berzerk, berzerkf, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (French Speech)", GAME_SUPPORTS_SAVE ) +GAME( 1980, berzerkg, berzerk, berzerk, berzerkg, driver_device, 0, ROT0, "Stern Electronics", "Berzerk (German Speech)", GAME_SUPPORTS_SAVE ) +GAME( 1980, berzerks, berzerk, berzerk, berzerks, driver_device, 0, ROT0, "Stern Electronics (Sonic License)", "Berzerk (Spanish Speech)", GAME_SUPPORTS_SAVE ) +GAME( 1981, frenzy, 0, frenzy, frenzy, driver_device, 0, ROT0, "Stern Electronics", "Frenzy", GAME_SUPPORTS_SAVE ) +GAME( 1981, moonwarp, 0, frenzy, moonwarp, berzerk_state, moonwarp, ROT0, "Stern Electronics", "Moon War (prototype on Frenzy hardware)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/contra.c b/src/mame/drivers/contra.c index 23aa3d8bffa..7153f36c076 100644 --- a/src/mame/drivers/contra.c +++ b/src/mame/drivers/contra.c @@ -124,9 +124,9 @@ static INPUT_PORTS_START( contra ) PORT_DIPSETTING( 0x02, "3" ) PORT_DIPSETTING( 0x01, "5" ) PORT_DIPSETTING( 0x00, "7" ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") /* Not Used according to manual */ - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,5") PORT_DIPSETTING( 0x18, "30000 70000" ) PORT_DIPSETTING( 0x10, "40000 80000" ) @@ -145,9 +145,9 @@ static INPUT_PORTS_START( contra ) PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "Upright Controls" ) PORT_DIPLOCATION("SW3:2") /* Not Used according to manual */ - PORT_DIPSETTING( 0x02, DEF_STR( Single ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Dual ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" ) PORT_DIPNAME( 0x08, 0x08, "Sound" ) PORT_DIPLOCATION("SW3:4") PORT_DIPSETTING( 0x00, DEF_STR( Mono ) ) @@ -156,6 +156,21 @@ INPUT_PORTS_END +static INPUT_PORTS_START( gryzor ) + PORT_INCLUDE( contra ) + + PORT_MODIFY("DSW2") + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") /* Not Used according to manual, used in gryzor sets */ + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) + + PORT_MODIFY("DSW3") + PORT_DIPNAME( 0x02, 0x02, "Upright Controls" ) PORT_DIPLOCATION("SW3:2") /* Not Used according to manual, used in gryzor sets */ + PORT_DIPSETTING( 0x02, DEF_STR( Single ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Dual ) ) +INPUT_PORTS_END + + static const gfx_layout gfxlayout = { 8,8, @@ -279,6 +294,46 @@ ROM_START( contra1 ) ROM_LOAD( "007766.20d.bin", 0x0000, 0x0001, NO_DUMP ) /* PAL16L8A-2CN */ ROM_END +ROM_START( contrae ) + ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF ) /* 64k for code + 96k for banked ROMs */ + ROM_LOAD( "633_e03.18a", 0x20000, 0x08000, CRC(7ebdb314) SHA1(b42c032cce7ae0c9b3eea6a41b7ffa5cb7fced5d) ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_LOAD( "633_e02.17a", 0x10000, 0x10000, CRC(9d5ebe66) SHA1(5218426e1494b4f6dec667f1ade7ada13aa04f2b) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for SOUND code */ + ROM_LOAD( "633e01.12a", 0x08000, 0x08000, CRC(d1549255) SHA1(d700c7de36746ba247e3a5d0410b7aa036aa4073) ) + + // this PCB used official Konami riser-boards in place of the mask roms + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "633_e04_a.7d", 0x00000, 0x10000, CRC(e027f330) SHA1(e3480c0ed9f5ed5df829e66eb72e01ea39d5fca3) ) + ROM_LOAD16_BYTE( "633_e04_b.7d", 0x20000, 0x10000, CRC(a71230f5) SHA1(c2c92b42a04adbb4c7ba3d4632b9a9db0555840e) ) + ROM_LOAD16_BYTE( "633_e04_c.7d", 0x40000, 0x10000, CRC(0b103d01) SHA1(95e7feb7103d71b43ba921b7a376a2faf642621b) ) + ROM_LOAD16_BYTE( "633_e04_d.7d", 0x60000, 0x10000, CRC(ab3faa60) SHA1(905c1eaa5fb46904058977582c9bb3132ba165f7) ) + ROM_LOAD16_BYTE( "633_e05_a.7f", 0x00001, 0x10000, CRC(81a70a77) SHA1(c7493474af0144c05d3d98b2f77a3dae2d8d7ca5) ) + ROM_LOAD16_BYTE( "633_e05_b.7f", 0x20001, 0x10000, CRC(55556f29) SHA1(ebd52abd4adb9c4302050579fa126fde49fb468d) ) + ROM_LOAD16_BYTE( "633_e05_c.7f", 0x40001, 0x10000, CRC(acba86bf) SHA1(c248c837b1f8093bcaf465b0c75b67f1f67a3f61) ) + ROM_LOAD16_BYTE( "633_e05_d.7f", 0x60001, 0x10000, CRC(59cf234d) SHA1(4a6bb30789e581c0600c55d8e8fba778e30ba299) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "633_e06_a.16d", 0x00000, 0x10000, CRC(030079c5) SHA1(3f93e05e9df0a9dde570b771e04b719cf0ace967) ) + ROM_LOAD16_BYTE( "633_e06_b.16d", 0x20000, 0x10000, CRC(e17d5807) SHA1(15ebbf62d026cc8ac75c9877304458cbc0c5d5e0) ) + ROM_LOAD16_BYTE( "633_e06_c.16d", 0x40000, 0x10000, CRC(7d6a28cd) SHA1(9fbbe0460406bb8b3e2e572c4d5a2f8be4ba9c2e) ) + ROM_LOAD16_BYTE( "633_e06_d.16d", 0x60000, 0x10000, CRC(83db378f) SHA1(b9a2235382836fe06868d3bbd45978653bf5c91d) ) + ROM_LOAD16_BYTE( "633_e07_a.16f", 0x00001, 0x10000, CRC(8fcd40e5) SHA1(980273dc9108cc546b2146ec1e9db5dd440c4bd2) ) + ROM_LOAD16_BYTE( "633_e07_b.16f", 0x20001, 0x10000, CRC(694e306e) SHA1(f077aefb2b1ed29b27ed02b094007fe6b50a06a1) ) + ROM_LOAD16_BYTE( "633_e07_c.16f", 0x40001, 0x10000, CRC(fb33f3ff) SHA1(c6f6035a1478e8d2cdab01ddf2ec07a834b79593) ) + ROM_LOAD16_BYTE( "633_e07_d.16f", 0x60001, 0x10000, CRC(cfab0988) SHA1(3961bcbc3093b787211ab2815914f90a89df78b1) ) + + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "633e08.10g", 0x0000, 0x0100, CRC(9f0949fa) SHA1(7c8fefdcae4523d008a7d39062194c7a80aa3500) ) /* 007121 #0 sprite lookup table */ + ROM_LOAD( "633e09.12g", 0x0100, 0x0100, CRC(14ca5e19) SHA1(eeee2f8b3d1e4acf47de1e74c4e507ff924591e7) ) /* 007121 #0 char lookup table */ + ROM_LOAD( "633e10.18g", 0x0200, 0x0100, CRC(e782c494) SHA1(9459e721a4361fc4fbace3a017211f0199dee24d) ) /* 007121 #1 sprite lookup table */ // earlier rev + ROM_LOAD( "633e11.20g", 0x0300, 0x0100, CRC(14ca5e19) SHA1(eeee2f8b3d1e4acf47de1e74c4e507ff924591e7) ) /* 007121 #1 char lookup table */ + + ROM_REGION( 0x0001, "pals", 0 ) + ROM_LOAD( "007766.20d.bin", 0x0000, 0x0001, NO_DUMP ) /* PAL16L8A-2CN */ +ROM_END + ROM_START( contraj ) ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF ) /* 64k for code + 96k for banked ROMs */ ROM_LOAD( "633n03.18a", 0x20000, 0x08000, CRC(fedab568) SHA1(7fd4546335bdeef7f8326d4cbde7fa36d74e5cfc) ) @@ -506,13 +561,13 @@ ROM_START( contrabj1 ) ROM_LOAD( "633f11.20g", 0x0300, 0x0100, CRC(14ca5e19) SHA1(eeee2f8b3d1e4acf47de1e74c4e507ff924591e7) ) /* 007121 #1 char lookup table */ ROM_END - -GAME( 1987, contra, 0, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (US, set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contra1, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (US, set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contraj, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (Japan, set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contraj1, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (Japan, set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1987, gryzor, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Gryzor (set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1987, gryzor1, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Gryzor (set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contrab, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (bootleg)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contrabj, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (Japan bootleg, set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1987, contrabj1, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (Japan bootleg, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contra, 0, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (US / Asia, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contra1, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (US / Asia, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contrae, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (US / Asia, set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contraj, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (Japan, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contraj1, contra, contra, contra, driver_device, 0, ROT90, "Konami", "Contra (Japan, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1987, gryzor, contra, contra, gryzor, driver_device, 0, ROT90, "Konami", "Gryzor (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1987, gryzor1, contra, contra, gryzor, driver_device, 0, ROT90, "Konami", "Gryzor (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contrab, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (bootleg)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contrabj, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (Japan bootleg, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1987, contrabj1, contra, contra, contra, driver_device, 0, ROT90, "bootleg", "Contra (Japan bootleg, set 2)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/f-32.c b/src/mame/drivers/f-32.c index e6814e8954a..1699ccb88d5 100644 --- a/src/mame/drivers/f-32.c +++ b/src/mame/drivers/f-32.c @@ -6,11 +6,25 @@ Supported Games PCB-ID ---------------------------------- Mosaic F-E1-32-009 + Royal Poker 2 F-E1-32N-COM9e driver by Pierpaolo Prazzoli *********************************************************************/ +/* +royalpk2 : to get 'secret. OK.' + +0002D92C: MOV L18, L29 +0002D92E: CMPI L18, $1 +0002D930: BNE $2d94c + +go 2d92c +do l29 = 1 +f5 + +*/ + #include "emu.h" #include "cpu/e132xs/e132xs.h" #include "machine/eepromser.h" @@ -26,7 +40,7 @@ public: m_videoram(*this, "videoram"){ } /* devices */ - required_device<e132xn_device> m_maincpu; + required_device<hyperstone_device> m_maincpu; /* memory pointers */ required_shared_ptr<UINT32> m_videoram; @@ -134,6 +148,9 @@ static INPUT_PORTS_START( mosaicf2 ) PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) INPUT_PORTS_END + + + static MACHINE_CONFIG_START( mosaicf2, mosaicf2_state ) /* basic machine hardware */ @@ -143,6 +160,8 @@ static MACHINE_CONFIG_START( mosaicf2, mosaicf2_state ) MCFG_CPU_VBLANK_INT_DRIVER("screen", mosaicf2_state, irq0_line_hold) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") + MCFG_EEPROM_ERASE_TIME(attotime::from_usec(1)) + MCFG_EEPROM_WRITE_TIME(attotime::from_usec(1)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -167,6 +186,85 @@ static MACHINE_CONFIG_START( mosaicf2, mosaicf2_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MACHINE_CONFIG_END + + +static INPUT_PORTS_START( royalpk2 ) + PORT_START("P1") + + PORT_START("SYSTEM_P2") + PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") + PORT_BIT( 0xff7fffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START( "EEPROMIN" ) + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + + PORT_START( "EEPROMOUT" ) + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) + + PORT_START( "EEPROMCLK" ) + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) + + PORT_START( "EEPROMCS" ) + PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) +INPUT_PORTS_END + + + +static ADDRESS_MAP_START( royalpk2_map, AS_PROGRAM, 32, mosaicf2_state ) + AM_RANGE(0x00000000, 0x003fffff) AM_RAM + AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_SHARE("videoram") + AM_RANGE(0x80000000, 0x807fffff) AM_ROM AM_REGION("user2",0) + AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("user1",0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( royalpk2_io, AS_IO, 32, mosaicf2_state ) + AM_RANGE(0x4900, 0x4903) AM_READ_PORT("SYSTEM_P2") + + AM_RANGE(0x4a00, 0x4a03) AM_READ_PORT("EEPROMIN") + + AM_RANGE(0x6800, 0x6803) AM_WRITE_PORT("EEPROMCLK") + AM_RANGE(0x6900, 0x6903) AM_WRITE_PORT("EEPROMCS") + AM_RANGE(0x6a00, 0x6a03) AM_WRITE_PORT("EEPROMOUT") +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( royalpk2, mosaicf2_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", GMS30C2132, XTAL_50MHz) + MCFG_CPU_PROGRAM_MAP(royalpk2_map) + MCFG_CPU_IO_MAP(royalpk2_io) + MCFG_CPU_VBLANK_INT_DRIVER("screen", mosaicf2_state, irq1_line_hold) + + MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") + MCFG_EEPROM_ERASE_TIME(attotime::from_usec(1)) + MCFG_EEPROM_WRITE_TIME(attotime::from_usec(1)) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) + MCFG_SCREEN_SIZE(512, 512) + MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 223) + MCFG_SCREEN_UPDATE_DRIVER(mosaicf2_state, screen_update_mosaicf2) + MCFG_SCREEN_PALETTE("palette") + + MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette") + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + +// MCFG_YM2151_ADD("ymsnd", XTAL_14_31818MHz/4) /* 3.579545 MHz */ +// MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) +// MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_14_31818MHz/8, OKIM6295_PIN7_HIGH) /* 1.7897725 MHz */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + + // there is a 16c550 for communication +MACHINE_CONFIG_END + + /* Mosaic (c) 1999 F2 System @@ -221,6 +319,9 @@ DRAML & DRAMU are GM71C18163CJ6 ROM1 & SND are stardard 27C040 and/or 27C020 eproms L00-L03 & U00-U03 are 29F1610ML Flash roms + + +todo: royalpk2 layout (it's very different) */ ROM_START( mosaicf2 ) @@ -242,4 +343,21 @@ ROM_START( mosaicf2 ) ROM_LOAD( "snd.bin", 0x000000, 0x040000, CRC(4584589c) SHA1(5f9824724f840767c3dc1dc04b203ddf3d78b84c) ) ROM_END +ROM_START( royalpk2 ) + ROM_REGION32_BE( 0x100000, "user1", ROMREGION_ERASE00 ) /* Hyperstone CPU Code */ + /* 0 - 0x80000 empty */ + ROM_LOAD( "prog1", 0x80000, 0x080000, CRC(e1546304) SHA1(b628b347ba7fbbae948e98e72aa5ea190c5d0f2b) ) + + ROM_REGION32_BE( 0x800000, "user2", 0 ) /* gfx data */ + ROM_LOAD32_WORD_SWAP( "1.u00", 0x000000, 0x200000, CRC(b397a805) SHA1(3fafa8533c793f41d0567b76667d3f3478eb9c1d) ) + ROM_LOAD32_WORD_SWAP( "2.l00", 0x000002, 0x200000, CRC(83a67d20) SHA1(9bf4c3da0cd1aab2488f260f694493d8ee25883e) ) + ROM_LOAD32_WORD_SWAP( "3.u01", 0x400000, 0x200000, CRC(f7b9d508) SHA1(5d98687c6cf158df8134d88d3726778d3762b411) ) + ROM_LOAD32_WORD_SWAP( "4.l01", 0x400002, 0x200000, CRC(dcff4960) SHA1(f742c7a3b62262c4b0210db9df03f51b3f600bf2) ) + + ROM_REGION( 0x80000, "oki", 0 ) /* Oki Samples */ + ROM_LOAD( "snd2", 0x000000, 0x080000, CRC(f25e3315) SHA1(ce5350ecba6769b17bb01d82b55f26ded4d51773) ) +ROM_END + + GAME( 1999, mosaicf2, 0, mosaicf2, mosaicf2, driver_device, 0, ROT0, "F2 System", "Mosaic (F2 System)", GAME_SUPPORTS_SAVE ) +GAME( 1999, royalpk2, 0, royalpk2, royalpk2, driver_device, 0, ROT0, "F2 System", "Royal Poker 2 (Network version 3.12)", GAME_NOT_WORKING ) diff --git a/src/mame/drivers/gambl186.c b/src/mame/drivers/gambl186.c index 31befac7a27..13915fab7aa 100644 --- a/src/mame/drivers/gambl186.c +++ b/src/mame/drivers/gambl186.c @@ -1,6 +1,9 @@ -/* Unknown Gambling game with 186 CPU */ +/*********************************************************************************** -/* + Multi Game - EGD + Poker - Roulette - Black Jack - Bingo + +************************************************************************************ 80186xl20 Xtal 40Mhz At89c52 (not dumped) with external 32K ram?? Xtal 11.xxx18Mhz @@ -31,10 +34,11 @@ In order to get the game to run, follow these steps: - reset machine (press 'F3') TODO: -- inputs needs overhaul, namely fix coins and games enable (right now only Bingo 10 is enabled); - watchdog (service mode claims that there's one at the end of the aforementioned procedure); +- fix the poker game (casino 10). seems lack of watchdog. - sound; -*/ + +***********************************************************************************/ @@ -253,9 +257,9 @@ static ADDRESS_MAP_START( gambl186_io, AS_IO, 16, gambl186_state ) AM_RANGE(0x0504, 0x0505) AM_READ_PORT("IN2") //AM_RANGE(0x0500, 0x050f) AM_READ(unk_r) - AM_RANGE(0x0580, 0x0581) AM_READ_PORT("DSW0") - AM_RANGE(0x0582, 0x0583) AM_READ_PORT("DSW1") - AM_RANGE(0x0584, 0x0585) AM_READ_PORT("DSW2") AM_WRITENOP // ??? + AM_RANGE(0x0580, 0x0581) AM_READ_PORT("DSW1") + AM_RANGE(0x0582, 0x0583) AM_READ_PORT("JOY") + AM_RANGE(0x0584, 0x0585) AM_READ_PORT("DSW0") AM_WRITENOP // Watchdog: bit 8 AM_RANGE(0x0600, 0x0603) AM_WRITENOP // lamps AM_RANGE(0x0680, 0x0683) AM_READWRITE(comms_r, comms_w) AM_RANGE(0x0700, 0x0701) AM_WRITE(data_bank_w) @@ -265,274 +269,78 @@ ADDRESS_MAP_END static INPUT_PORTS_START( gambl186 ) PORT_START("IN0") - PORT_DIPNAME( 0x01, 0x01, "0-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START1 ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("-") // Unknown meaning + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("-") PORT_CODE(KEYCODE_2) // Unknown meaning PORT_START("IN1") - PORT_DIPNAME( 0x01, 0x01, "1-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, "1-2" ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_CODE(KEYCODE_9) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_CODE(KEYCODE_0) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN4 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Key") PORT_CODE(KEYCODE_Q) PORT_TOGGLE PORT_START("IN2") - PORT_DIPNAME( 0x01, 0x01, "2-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - /* TODO: order isn't honored */ - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN5 ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_COIN6 ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("- Aux") PORT_CODE(KEYCODE_3) // Unknown meaning + PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("JOY") + PORT_BIT( 0x01ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0xe000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("DSW0") - PORT_DIPNAME( 0x01, 0x01, "0-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, "0-2" ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE(0x1000, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:4") + PORT_DIPNAME( 0x2000, 0x0000, "Casino 10 Game" ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Bookkeeping" ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x8000, 0x8000, "SW1-1" ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x01, "1-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, "1-2" ) + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_DIPNAME( 0x0100, 0x0100, "SW2-4" ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0200, 0x0200, "SW2-3" ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0400, 0x0400, "SW2-2" ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0800, 0x0800, "VGA Mode" ) PORT_DIPLOCATION("SW2:1") + PORT_DIPSETTING( 0x0800, "640x480" ) + PORT_DIPSETTING( 0x0000, "640x240" ) + PORT_DIPNAME( 0x1000, 0x0000, "Roulette Game" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x2000, 0x2000, "SW2-6" ) PORT_DIPLOCATION("SW2:6") PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x0000, "Black Jack Game" ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x01, "2-1" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, "2-2" ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_SERVICE(0x1000, IP_ACTIVE_LOW ) - - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, "Bookkeeping" ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x8000, 0x8000, "SW2-8" ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -541,7 +349,7 @@ INPUT_PORTS_END static MACHINE_CONFIG_START( gambl186, gambl186_state ) - MCFG_CPU_ADD("maincpu", I80186, XTAL_40MHz/2) + MCFG_CPU_ADD("maincpu", I80186, XTAL_40MHz) MCFG_CPU_PROGRAM_MAP(gambl186_map) MCFG_CPU_IO_MAP(gambl186_io) @@ -552,7 +360,6 @@ MACHINE_CONFIG_END - ROM_START( gambl186 ) ROM_REGION( 0x100000, "data", 0 ) ROM_LOAD16_BYTE( "ie398.u11", 0x00000, 0x80000, CRC(86ad7cab) SHA1(b701c3701db630d218a9b1700f216f795a1b1272) ) @@ -580,6 +387,5 @@ ROM_START( gambl186a ) ROM_END -/* TODO: proper title, at least sub-label all games inside it. */ -GAME( 1997, gambl186, 0, gambl186, gambl186, driver_device, 0, ROT0, "EGD", "Multi Game - Bingo 10 (V398)", GAME_NOT_WORKING | GAME_NO_SOUND ) -GAME( 199?, gambl186a, gambl186, gambl186, gambl186, driver_device, 0, ROT0, "EGD", "Multi Game - Bingo 10 (V399)", GAME_NOT_WORKING | GAME_NO_SOUND ) +GAME( 1997, gambl186, 0, gambl186, gambl186, driver_device, 0, ROT0, "EGD", "Multi Game (V398)", GAME_NOT_WORKING | GAME_NO_SOUND ) +GAME( 199?, gambl186a, gambl186, gambl186, gambl186, driver_device, 0, ROT0, "EGD", "Multi Game (V399)", GAME_NOT_WORKING | GAME_NO_SOUND ) diff --git a/src/mame/drivers/iteagle.c b/src/mame/drivers/iteagle.c index 714bf0d0c8c..ccd4d81f10a 100644 --- a/src/mame/drivers/iteagle.c +++ b/src/mame/drivers/iteagle.c @@ -148,7 +148,6 @@ static MACHINE_CONFIG_START( gtfore, iteagle_state ) MCFG_ITEAGLE_EEPROM_ADD( ":pci:0a.0") MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MCFG_SCREEN_REFRESH_RATE(59) MCFG_SCREEN_SIZE(512, 384) MCFG_SCREEN_UPDATE_DEVICE(":pci:09.0", voodoo_pci_device, screen_update) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 7aa4b6b1958..38bd34436ec 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -6364,6 +6364,7 @@ ddribble // GX690 (c) 1986 ddribblep // GX690 (c) 1986 contra // GX633 (c) 1987 contra1 // GX633 (c) 1987 +contrae // GX633 (c) 1987 contraj // GX633 (c) 1987 (Japan) contraj1 // GX633 (c) 1987 (Japan) gryzor // GX633 (c) 1987 @@ -10915,6 +10916,7 @@ wheelfir // (c) 199? TCH littlerb // (c) 1993 TCH tattack // (c) 198? Shonan mosaicf2 // (c) 1999 F2 System +royalpk2 // finalgdr // (c) 2001 Semicom mrkicker // (c) 2001 Semicom wivernwg // (c) 2001 Semicom diff --git a/src/mess/drivers/spectrum.c b/src/mess/drivers/spectrum.c index 163308645ff..f32f95c6ec5 100644 --- a/src/mess/drivers/spectrum.c +++ b/src/mess/drivers/spectrum.c @@ -645,10 +645,15 @@ static GFXDECODE_START( spectrum ) GFXDECODE_ENTRY( "maincpu", 0x3d00, spectrum_charlayout, 0, 8 ) GFXDECODE_END +void spectrum_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + m_maincpu->set_input_line(0, CLEAR_LINE); +} INTERRUPT_GEN_MEMBER(spectrum_state::spec_interrupt) { - device.execute().set_input_line(0, HOLD_LINE); + m_maincpu->set_input_line(0, HOLD_LINE); + timer_set(attotime::from_ticks(32, m_maincpu->clock()), 0, 0); } DEVICE_IMAGE_LOAD_MEMBER(spectrum_state, spectrum_cart) diff --git a/src/mess/drivers/vt240.c b/src/mess/drivers/vt240.c index df4d04d91dd..0275480c429 100644 --- a/src/mess/drivers/vt240.c +++ b/src/mess/drivers/vt240.c @@ -275,16 +275,25 @@ ROM_START( vt240 ) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASEFF ) ROM_DEFAULT_BIOS( "vt240" ) - ROM_SYSTEM_BIOS( 0, "vt240o", "VT240 older" ) // has "VV2211 STATUS" in rom, V2.1? + // according to the schematics an even older set exists, variation 'E1' with roms: + // e100/8085: 23-003e6 + // e20: 23-001e6 + // e22: 23-002e6 + // e19: 23-048e5 + // e21: 23-049e5 + // but according to the Field Change Order below, the initial release is V2.1, so the above must be a prototype. + // DOL for v2.1 to v2.2 change: http://web.archive.org/web/20060905145200/http://cmcnabb.cc.vt.edu/dec94mds/vt240dol.txt + ROM_SYSTEM_BIOS( 0, "vt240v21", "VT240 V2.1" ) // initial factory release, FCO says this was 8 Feburary 1985 ROMX_LOAD( "23-006e6-00.e20", 0x00000, 0x8000, CRC(79C11D82) SHA1(5A6FE5B75B6504A161F2C9B148C0FE9F19770837), ROM_SKIP(1) | ROM_BIOS(1)) ROMX_LOAD( "23-004e6-00.e22", 0x00001, 0x8000, CRC(EBA10FEF) SHA1(C0EE4D8E4EEB70066F03F3D17A7E2F2BD0B5F8AD), ROM_SKIP(1) | ROM_BIOS(1)) ROMX_LOAD( "23-007e6-00.e19", 0x10000, 0x8000, CRC(D18A2AB8) SHA1(37F448A332FC50298007ED39C8BF1AB1EB6D4CAE), ROM_SKIP(1) | ROM_BIOS(1)) ROMX_LOAD( "23-005e6-00.e21", 0x10001, 0x8000, CRC(558D0285) SHA1(E96A49BF9D55D8AB879D9B39AA380368C5C9ADE0), ROM_SKIP(1) | ROM_BIOS(1)) - ROM_SYSTEM_BIOS( 1, "vt240", "VT240 newer" ) // has "VV2222 UPDATE" in rom, V2.2? + ROM_SYSTEM_BIOS( 1, "vt240", "VT240 V2.2" ) // Revised version, December 1985 ROMX_LOAD( "23-058e6.e20", 0x00000, 0x8000, CRC(D2A56B90) SHA1(39CBB26134D7D8BA308DF3A93228918A5945B45F), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD( "23-056e6.e22", 0x00001, 0x8000, CRC(C46E13C3) SHA1(0F2801FA7483D1F97708143CD81AE0816BF9A435), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD( "23-059e6.e19", 0x10000, 0x8000, CRC(F8393346) SHA1(1E28DAF1B7F2BDABC47CE2F6FA99EF038B275A29), ROM_SKIP(1) | ROM_BIOS(2)) ROMX_LOAD( "23-057e6.e21", 0x10001, 0x8000, CRC(7CE9DCE9) SHA1(5A105E5BDCA13910B3B79CC23567CE2DC36B844D), ROM_SKIP(1) | ROM_BIOS(2)) + // E39, E85, E131 are empty. ROM_REGION( 0x1000, "proms", ROMREGION_ERASEFF ) ROM_LOAD( "23-351a1.e149", 0x0000, 0x0020, NO_DUMP) // 82s123; DRAM RAS/CAS Timing PROM @@ -316,4 +325,5 @@ DRIVER_INIT_MEMBER(vt240_state,vt240) /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ COMP( 1983, vt240, 0, 0, mc7105, vt240, vt240_state, vt240, "Digital Equipment Corporation", "VT240", GAME_NOT_WORKING | GAME_NO_SOUND) //COMP( 1983, vt241, 0, 0, vt220, vt220, driver_device, 0, "Digital Equipment Corporation", "VT241", GAME_NOT_WORKING | GAME_NO_SOUND) +// NOTE: the only difference between VT240 and VT241 is the latter comes with a VR241 Color monitor, while the former comes with a mono display; the ROMs and operation are identical. COMP( 1983, mc7105, 0, 0, mc7105, vt240, vt240_state, vt240, "Elektronika", "MC7105", GAME_NOT_WORKING | GAME_NO_SOUND) diff --git a/src/mess/drivers/vt320.c b/src/mess/drivers/vt320.c index 838cde2875f..9d172fd7261 100644 --- a/src/mess/drivers/vt320.c +++ b/src/mess/drivers/vt320.c @@ -106,9 +106,11 @@ MACHINE_CONFIG_END ROM_START( vt320 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_DEFAULT_BIOS( "vt320" ) - ROM_SYSTEM_BIOS( 0, "vt320o", "VT320 older version" ) - ROMX_LOAD( "23-054e7.e9", 0x0000, 0x10000, CRC(be98f9a4) SHA1(b8044d42ffaadb734fbd047fbca9c8aadeb0bf6c), ROM_BIOS(1)) - ROM_SYSTEM_BIOS( 1, "vt320", "VT320 newer version" ) + //DOL: http://web.archive.org/web/20060905115711/http://cmcnabb.cc.vt.edu/dec94mds/vt320dol.txt + ROM_SYSTEM_BIOS( 0, "vt320v11", "VT320 V1.1" ) + // 23-054E7 below can also appear (same contents?) as 23-048E7 which is a mask rom + ROMX_LOAD( "23-054e7.e9", 0x0000, 0x10000, CRC(be98f9a4) SHA1(b8044d42ffaadb734fbd047fbca9c8aadeb0bf6c), ROM_BIOS(1)) // EPROM + ROM_SYSTEM_BIOS( 1, "vt320", "VT320 V1.2" ) ROMX_LOAD( "23-104e7.e9", 0x0000, 0x10000, CRC(5f419b5a) SHA1(dbc429b32d6baefd8a56862717d6e7fea1fb0c1c), ROM_BIOS(2)) ROM_END diff --git a/src/mess/includes/spectrum.h b/src/mess/includes/spectrum.h index dd86e8f242b..25064cffbd7 100644 --- a/src/mess/includes/spectrum.h +++ b/src/mess/includes/spectrum.h @@ -242,6 +242,7 @@ protected: void ts2068_hires_scanline(bitmap_ind16 &bitmap, int y, int borderlines); void ts2068_64col_scanline(bitmap_ind16 &bitmap, int y, int borderlines, unsigned short inkcolor); void ts2068_lores_scanline(bitmap_ind16 &bitmap, int y, int borderlines, int screen); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); }; diff --git a/src/mess/video/spectrum.c b/src/mess/video/spectrum.c index d3640db4ce6..a39699c758b 100644 --- a/src/mess/video/spectrum.c +++ b/src/mess/video/spectrum.c @@ -21,7 +21,7 @@ ***************************************************************************/ VIDEO_START_MEMBER(spectrum_state,spectrum) { - m_frame_invert_count = 25; + m_frame_invert_count = 16; m_frame_number = 0; m_flash_invert = 0; @@ -37,7 +37,7 @@ VIDEO_START_MEMBER(spectrum_state,spectrum) VIDEO_START_MEMBER(spectrum_state,spectrum_128) { - m_frame_invert_count = 25; + m_frame_invert_count = 16; m_frame_number = 0; m_flash_invert = 0; diff --git a/src/tools/unidasm.c b/src/tools/unidasm.c index f4354a5d234..a6e516b239d 100644 --- a/src/tools/unidasm.c +++ b/src/tools/unidasm.c @@ -84,6 +84,7 @@ CPU_DISASSEMBLE( ds5002fp ); CPU_DISASSEMBLE( dsp16a ); CPU_DISASSEMBLE( dsp32c ); CPU_DISASSEMBLE( dsp56k ); +CPU_DISASSEMBLE( e0c6200 ); CPU_DISASSEMBLE( esrip ); CPU_DISASSEMBLE( f8 ); CPU_DISASSEMBLE( g65816_generic ); @@ -231,13 +232,14 @@ static const dasm_table_entry dasm_table[] = { "dsp16a", _16le, -1, CPU_DISASSEMBLE_NAME(dsp16a) }, { "dsp32c", _32le, 0, CPU_DISASSEMBLE_NAME(dsp32c) }, { "dsp56k", _16le, -1, CPU_DISASSEMBLE_NAME(dsp56k) }, + { "e0c6200", _16be, -1, CPU_DISASSEMBLE_NAME(e0c6200) }, { "esrip", _64be, 0, CPU_DISASSEMBLE_NAME(esrip) }, { "f8", _8bit, 0, CPU_DISASSEMBLE_NAME(f8) }, { "g65816", _8bit, 0, CPU_DISASSEMBLE_NAME(g65816_generic) }, { "h6280", _8bit, 0, CPU_DISASSEMBLE_NAME(h6280) }, - // { "h8", _16be, 0, CPU_DISASSEMBLE_NAME(h8) }, - // { "h8_24", _16be, 0, CPU_DISASSEMBLE_NAME(h8_24) }, - // { "h8_32", _16be, 0, CPU_DISASSEMBLE_NAME(h8_32) }, +// { "h8", _16be, 0, CPU_DISASSEMBLE_NAME(h8) }, +// { "h8_24", _16be, 0, CPU_DISASSEMBLE_NAME(h8_24) }, +// { "h8_32", _16be, 0, CPU_DISASSEMBLE_NAME(h8_32) }, { "hc11", _8bit, 0, CPU_DISASSEMBLE_NAME(mb88) }, { "hcd62121", _16be, 0, CPU_DISASSEMBLE_NAME(hcd62121) }, { "hd61700", _8bit, 0, CPU_DISASSEMBLE_NAME(hd61700) }, |