summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/machine.lua12
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/devices/bus/neogeo/carts.cpp2
-rw-r--r--src/devices/cpu/avr8/avr8dasm.cpp299
-rw-r--r--src/devices/cpu/i8008/8008dasm.cpp90
-rw-r--r--src/devices/cpu/m6502/m6502.cpp69
-rw-r--r--src/devices/cpu/m6502/m6502.h1
-rw-r--r--src/devices/cpu/m6800/6800dasm.cpp33
-rw-r--r--src/devices/machine/am2847.cpp169
-rw-r--r--src/devices/machine/am2847.h134
-rw-r--r--src/devices/sound/aica.cpp2
-rw-r--r--src/devices/video/zeus2.cpp2
-rw-r--r--src/emu/drivers/xtal.h1
-rw-r--r--src/lib/util/cdrom.cpp2
-rw-r--r--src/mame/drivers/gamtor.cpp2
-rw-r--r--src/mame/drivers/hazeltin.cpp256
-rw-r--r--src/mame/drivers/hh_tms1k.cpp12
-rw-r--r--src/mame/drivers/hh_ucom4.cpp248
-rw-r--r--src/mame/drivers/ie15.cpp5
-rw-r--r--src/mame/drivers/igs017.cpp12
-rw-r--r--src/mame/drivers/mitchell.cpp41
-rw-r--r--src/mame/drivers/superslave.cpp8
-rw-r--r--src/mame/machine/rmnimbus.cpp4
-rw-r--r--src/tools/chdman.cpp2
25 files changed, 999 insertions, 409 deletions
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index f1cecc70ec8..028a8aba135 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -453,6 +453,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/am2847.h,MACHINES["AM2847"] = true
+---------------------------------------------------
+
+if (MACHINES["AM2847"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/am2847.cpp",
+ MAME_DIR .. "src/devices/machine/am2847.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/am53cf96.h,MACHINES["AM53CF96"] = true
---------------------------------------------------
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 0116a073a0e..55f33df751f 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -368,6 +368,7 @@ MACHINES["ADC083X"] = true
MACHINES["ADC1038"] = true
MACHINES["ADC1213X"] = true
MACHINES["AICARTC"] = true
+--MACHINES["AM2847"] = true
MACHINES["AM53CF96"] = true
MACHINES["AM9517A"] = true
MACHINES["AMIGAFDC"] = true
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 4bfdc58da40..2685bfaec98 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -374,6 +374,7 @@ MACHINES["ADC083X"] = true
MACHINES["ADC1038"] = true
MACHINES["ADC1213X"] = true
MACHINES["AICARTC"] = true
+MACHINES["AM2847"] = true
MACHINES["AM53CF96"] = true
MACHINES["AM9517A"] = true
MACHINES["AMIGAFDC"] = true
diff --git a/src/devices/bus/neogeo/carts.cpp b/src/devices/bus/neogeo/carts.cpp
index ebc021c585f..27dcbb9e4da 100644
--- a/src/devices/bus/neogeo/carts.cpp
+++ b/src/devices/bus/neogeo/carts.cpp
@@ -78,7 +78,7 @@ SLOT_INTERFACE_START(neogeo_cart)
SLOT_INTERFACE_INTERNAL("boot_cthd2k3", NEOGEO_CTHD2K3_CART)
SLOT_INTERFACE_INTERNAL("boot_ct2k3sp", NEOGEO_CT2K3SP_CART)
SLOT_INTERFACE_INTERNAL("boot_ct2k3sa", NEOGEO_CT2K3SA_CART)
- SLOT_INTERFACE_INTERNAL("boot_matrimbl", NEOGEO_MATRIMBL_CART) // this also uses a CMC for SFIX & addditional prg scramble from kof2002
+ SLOT_INTERFACE_INTERNAL("boot_matrimbl", NEOGEO_MATRIMBL_CART) // this also uses a CMC for SFIX & additional prg scramble from kof2002
// Bootleg logic for SVC clones
SLOT_INTERFACE_INTERNAL("boot_svcboot", NEOGEO_SVCBOOT_CART) // this also uses a PVC protection/encryption
diff --git a/src/devices/cpu/avr8/avr8dasm.cpp b/src/devices/cpu/avr8/avr8dasm.cpp
index c344b4085b2..bd870b5d840 100644
--- a/src/devices/cpu/avr8/avr8dasm.cpp
+++ b/src/devices/cpu/avr8/avr8dasm.cpp
@@ -25,9 +25,8 @@
#define ACONST6(op) ((((op) >> 5) & 0x0030) | ((op) & 0x000f))
#define MULCONST2(op) ((((op) >> 6) & 0x0002) | (((op) >> 3) & 0x0001))
-CPU_DISASSEMBLE( avr8 )
+static offs_t internal_disasm_avr8(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
- char *output = buffer;
int pos = 0;
uint32_t op = oprom[pos++];
op |= oprom[pos++] << 8;
@@ -106,28 +105,28 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x0f00)
{
case 0x0000:
- output += sprintf( output, "NOP" );
+ util::stream_format(stream, "NOP");
break;
case 0x0100:
- output += sprintf( output, "MOVW R%d:R%d, R%d:R%d", (RD4(op) << 1)+1, RD4(op) << 1, (RR4(op) << 1)+1, RR4(op) << 1 );
+ util::stream_format(stream, "MOVW R%d:R%d, R%d:R%d", (RD4(op) << 1)+1, RD4(op) << 1, (RR4(op) << 1)+1, RR4(op) << 1);
break;
case 0x0200:
- output += sprintf( output, "MULS R%d, R%d", 16+RD4(op), 16+RR4(op) );
+ util::stream_format(stream, "MULS R%d, R%d", 16+RD4(op), 16+RR4(op));
break;
case 0x0300:
switch(MULCONST2(op))
{
case 0:
- output += sprintf( output, "MULSU R%d, R%d", 16+RD3(op), 16+RR3(op) );
+ util::stream_format(stream, "MULSU R%d, R%d", 16+RD3(op), 16+RR3(op));
break;
case 1:
- output += sprintf( output, "FMUL R%d, R%d", 16+RD3(op), 16+RR3(op) );
+ util::stream_format(stream, "FMUL R%d, R%d", 16+RD3(op), 16+RR3(op));
break;
case 2:
- output += sprintf( output, "FMULS R%d, R%d", 16+RD3(op), 16+RR3(op) );
+ util::stream_format(stream, "FMULS R%d, R%d", 16+RD3(op), 16+RR3(op));
break;
case 3:
- output += sprintf( output, "FMULSU R%d, R%d", 16+RD3(op), 16+RR3(op) );
+ util::stream_format(stream, "FMULSU R%d, R%d", 16+RD3(op), 16+RR3(op));
break;
}
break;
@@ -135,19 +134,19 @@ CPU_DISASSEMBLE( avr8 )
case 0x0500:
case 0x0600:
case 0x0700:
- output += sprintf( output, "CPC R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "CPC R%d, R%d", RD5(op), RR5(op));
break;
case 0x0800:
case 0x0900:
case 0x0a00:
case 0x0b00:
- output += sprintf( output, "SBC R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "SBC R%d, R%d", RD5(op), RR5(op));
break;
case 0x0c00:
case 0x0d00:
case 0x0e00:
case 0x0f00:
- output += sprintf( output, "ADD R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "ADD R%d, R%d", RD5(op), RR5(op));
break;
}
break;
@@ -155,16 +154,16 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x0c00)
{
case 0x0000:
- output += sprintf( output, "CPSE R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "CPSE R%d, R%d", RD5(op), RR5(op));
break;
case 0x0400:
- output += sprintf( output, "CP R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "CP R%d, R%d", RD5(op), RR5(op));
break;
case 0x0800:
- output += sprintf( output, "SUB R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "SUB R%d, R%d", RD5(op), RR5(op));
break;
case 0x0c00:
- output += sprintf( output, "ADC R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "ADC R%d, R%d", RD5(op), RR5(op));
break;
}
break;
@@ -172,49 +171,49 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x0c00)
{
case 0x0000:
- output += sprintf( output, "AND R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "AND R%d, R%d", RD5(op), RR5(op));
break;
case 0x0400:
- output += sprintf( output, "EOR R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "EOR R%d, R%d", RD5(op), RR5(op));
break;
case 0x0800:
- output += sprintf( output, "OR R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "OR R%d, R%d", RD5(op), RR5(op));
break;
case 0x0c00:
- output += sprintf( output, "MOV R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "MOV R%d, R%d", RD5(op), RR5(op));
break;
}
break;
case 0x3000:
- output += sprintf( output, "CPI R%d, 0x%02x", 16+RD4(op), KCONST8(op) );
+ util::stream_format(stream, "CPI R%d, 0x%02x", 16+RD4(op), KCONST8(op));
break;
case 0x4000:
- output += sprintf( output, "SBCI R%d, 0x%02x", 16+RD4(op), KCONST8(op) );
+ util::stream_format(stream, "SBCI R%d, 0x%02x", 16+RD4(op), KCONST8(op));
break;
case 0x5000:
- output += sprintf( output, "SUBI R%d, 0x%02x", 16+RD4(op), KCONST8(op) );
+ util::stream_format(stream, "SUBI R%d, 0x%02x", 16+RD4(op), KCONST8(op));
break;
case 0x6000:
- output += sprintf( output, "ORI R%d, 0x%02x", 16+RD4(op), KCONST8(op) );
+ util::stream_format(stream, "ORI R%d, 0x%02x", 16+RD4(op), KCONST8(op));
break;
case 0x7000:
- output += sprintf( output, "ANDI R%d, 0x%02x", 16+RD4(op), KCONST8(op) );
+ util::stream_format(stream, "ANDI R%d, 0x%02x", 16+RD4(op), KCONST8(op));
break;
case 0x8000:
case 0xa000:
switch(op & 0x0208)
{
case 0x0000:
- output += sprintf( output, "LD(D) R%d, Z+%02x", RD5(op), QCONST6(op) );
+ util::stream_format(stream, "LD(D) R%d, Z+%02x", RD5(op), QCONST6(op));
break;
case 0x0008:
- output += sprintf( output, "LD(D) R%d, Y+%02x", RD5(op), QCONST6(op) );
+ util::stream_format(stream, "LD(D) R%d, Y+%02x", RD5(op), QCONST6(op));
break;
case 0x0200:
- output += sprintf( output, "ST(D) Z+%02x, R%d", QCONST6(op), RD5(op) );
+ util::stream_format(stream, "ST(D) Z+%02x, R%d", QCONST6(op), RD5(op));
break;
case 0x0208:
- output += sprintf( output, "ST(D) Y+%02x, R%d", QCONST6(op), RD5(op) );
+ util::stream_format(stream, "ST(D) Y+%02x, R%d", QCONST6(op), RD5(op));
break;
}
break;
@@ -229,46 +228,46 @@ CPU_DISASSEMBLE( avr8 )
op <<= 16;
op |= oprom[pos++];
op |= oprom[pos++] << 8;
- output += sprintf( output, "LDS R%d, (0x%04x)", RD5(op >> 16), op & 0x0000ffff );
+ util::stream_format(stream, "LDS R%d, (0x%04x)", RD5(op >> 16), op & 0x0000ffff);
break;
case 0x0001:
- output += sprintf( output, "LD R%d, Z+", RD5(op) );
+ util::stream_format(stream, "LD R%d, Z+", RD5(op));
break;
case 0x0002:
- output += sprintf( output, "LD R%d,-Z", RD5(op) );
+ util::stream_format(stream, "LD R%d,-Z", RD5(op));
break;
case 0x0004:
- output += sprintf( output, "LPM R%d, Z", RD5(op) );
+ util::stream_format(stream, "LPM R%d, Z", RD5(op));
break;
case 0x0005:
- output += sprintf( output, "LPM R%d, Z+", RD5(op) );
+ util::stream_format(stream, "LPM R%d, Z+", RD5(op));
break;
case 0x0006:
- output += sprintf( output, "ELPM R%d, Z", RD5(op) );
+ util::stream_format(stream, "ELPM R%d, Z", RD5(op));
break;
case 0x0007:
- output += sprintf( output, "ELPM R%d, Z+", RD5(op) );
+ util::stream_format(stream, "ELPM R%d, Z+", RD5(op));
break;
case 0x0009:
- output += sprintf( output, "LD R%d, Y+", RD5(op) );
+ util::stream_format(stream, "LD R%d, Y+", RD5(op));
break;
case 0x000a:
- output += sprintf( output, "LD R%d,-Y", RD5(op) );
+ util::stream_format(stream, "LD R%d,-Y", RD5(op));
break;
case 0x000c:
- output += sprintf( output, "LD R%d, X", RD5(op) );
+ util::stream_format(stream, "LD R%d, X", RD5(op));
break;
case 0x000d:
- output += sprintf( output, "LD R%d, X+", RD5(op) );
+ util::stream_format(stream, "LD R%d, X+", RD5(op));
break;
case 0x000e:
- output += sprintf( output, "LD R%d,-X", RD5(op) );
+ util::stream_format(stream, "LD R%d,-X", RD5(op));
break;
case 0x000f:
- output += sprintf( output, "POP R%d", RD5(op) );
+ util::stream_format(stream, "POP R%d", RD5(op));
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
@@ -280,34 +279,34 @@ CPU_DISASSEMBLE( avr8 )
op <<= 16;
op |= oprom[pos++];
op |= oprom[pos++] << 8;
- output += sprintf( output, "STS (0x%04x), R%d", op & 0x0000ffff, RD5(op >> 16) );
+ util::stream_format(stream, "STS (0x%04x), R%d", op & 0x0000ffff, RD5(op >> 16));
break;
case 0x0001:
- output += sprintf( output, "ST Z+, R%d", RD5(op) );
+ util::stream_format(stream, "ST Z+, R%d", RD5(op));
break;
case 0x0002:
- output += sprintf( output, "ST -Z , R%d", RD5(op) );
+ util::stream_format(stream, "ST -Z , R%d", RD5(op));
break;
case 0x0009:
- output += sprintf( output, "ST Y+, R%d", RD5(op) );
+ util::stream_format(stream, "ST Y+, R%d", RD5(op));
break;
case 0x000a:
- output += sprintf( output, "ST -Y , R%d", RD5(op) );
+ util::stream_format(stream, "ST -Y , R%d", RD5(op));
break;
case 0x000c:
- output += sprintf( output, "ST X , R%d", RD5(op) );
+ util::stream_format(stream, "ST X , R%d", RD5(op));
break;
case 0x000d:
- output += sprintf( output, "ST X+, R%d", RD5(op) );
+ util::stream_format(stream, "ST X+, R%d", RD5(op));
break;
case 0x000e:
- output += sprintf( output, "ST -X , R%d", RD5(op) );
+ util::stream_format(stream, "ST -X , R%d", RD5(op));
break;
case 0x000f:
- output += sprintf( output, "PUSH R%d", RD5(op) );
+ util::stream_format(stream, "PUSH R%d", RD5(op));
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
@@ -315,79 +314,79 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x000f)
{
case 0x0000:
- output += sprintf( output, "COM R%d", RD5(op) );
+ util::stream_format(stream, "COM R%d", RD5(op));
break;
case 0x0001:
- output += sprintf( output, "NEG R%d", RD5(op) );
+ util::stream_format(stream, "NEG R%d", RD5(op));
break;
case 0x0002:
- output += sprintf( output, "SWAP R%d", RD5(op) );
+ util::stream_format(stream, "SWAP R%d", RD5(op));
break;
case 0x0003:
- output += sprintf( output, "INC R%d", RD5(op) );
+ util::stream_format(stream, "INC R%d", RD5(op));
break;
case 0x0005:
- output += sprintf( output, "ASR R%d", RD5(op) );
+ util::stream_format(stream, "ASR R%d", RD5(op));
break;
case 0x0006:
- output += sprintf( output, "LSR R%d", RD5(op) );
+ util::stream_format(stream, "LSR R%d", RD5(op));
break;
case 0x0007:
- output += sprintf( output, "ROR R%d", RD5(op) );
+ util::stream_format(stream, "ROR R%d", RD5(op));
break;
case 0x0008:
switch(op & 0x00f0)
{
case 0x0000:
- output += sprintf( output, "SEC" );
+ util::stream_format(stream, "SEC");
break;
case 0x0010:
- output += sprintf( output, "SEZ" );
+ util::stream_format(stream, "SEZ");
break;
case 0x0020:
- output += sprintf( output, "SEN" );
+ util::stream_format(stream, "SEN");
break;
case 0x0030:
- output += sprintf( output, "SEV" );
+ util::stream_format(stream, "SEV");
break;
case 0x0040:
- output += sprintf( output, "SES" );
+ util::stream_format(stream, "SES");
break;
case 0x0050:
- output += sprintf( output, "SEH" );
+ util::stream_format(stream, "SEH");
break;
case 0x0060:
- output += sprintf( output, "SET" );
+ util::stream_format(stream, "SET");
break;
case 0x0070:
- output += sprintf( output, "SEI" );
+ util::stream_format(stream, "SEI");
break;
case 0x0080:
- output += sprintf( output, "CLC" );
+ util::stream_format(stream, "CLC");
break;
case 0x0090:
- output += sprintf( output, "CLZ" );
+ util::stream_format(stream, "CLZ");
break;
case 0x00a0:
- output += sprintf( output, "CLN" );
+ util::stream_format(stream, "CLN");
break;
case 0x00b0:
- output += sprintf( output, "CLV" );
+ util::stream_format(stream, "CLV");
break;
case 0x00c0:
- output += sprintf( output, "CLS" );
+ util::stream_format(stream, "CLS");
break;
case 0x00d0:
- output += sprintf( output, "CLH" );
+ util::stream_format(stream, "CLH");
break;
case 0x00e0:
- output += sprintf( output, "CLT" );
+ util::stream_format(stream, "CLT");
break;
case 0x00f0:
- output += sprintf( output, "CLI" );
+ util::stream_format(stream, "CLI");
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
@@ -395,35 +394,35 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x00f0)
{
case 0x0000:
- output += sprintf( output, "IJMP" );
+ util::stream_format(stream, "IJMP");
break;
case 0x0010:
- output += sprintf( output, "EIJMP" );
+ util::stream_format(stream, "EIJMP");
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
case 0x000a:
- output += sprintf( output, "DEC R%d", RD5(op) );
+ util::stream_format(stream, "DEC R%d", RD5(op));
break;
case 0x000c:
case 0x000d:
addr = KCONST22(op) << 16;
addr |= oprom[pos++];
addr |= oprom[pos++] << 8;
- output += sprintf( output, "JMP 0x%06x", addr << 1 );
+ util::stream_format(stream, "JMP 0x%06x", addr << 1);
break;
case 0x000e:
case 0x000f:
addr = KCONST22(op) << 16;
addr |= oprom[pos++];
addr |= oprom[pos++] << 8;
- output += sprintf( output, "CALL 0x%06x", addr << 1 );
+ util::stream_format(stream, "CALL 0x%06x", addr << 1);
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
@@ -431,58 +430,58 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x000f)
{
case 0x0000:
- output += sprintf( output, "COM R%d", RD5(op) );
+ util::stream_format(stream, "COM R%d", RD5(op));
break;
case 0x0001:
- output += sprintf( output, "NEG R%d", RD5(op) );
+ util::stream_format(stream, "NEG R%d", RD5(op));
break;
case 0x0002:
- output += sprintf( output, "SWAP R%d", RD5(op) );
+ util::stream_format(stream, "SWAP R%d", RD5(op));
break;
case 0x0003:
- output += sprintf( output, "INC R%d", RD5(op) );
+ util::stream_format(stream, "INC R%d", RD5(op));
break;
case 0x0005:
- output += sprintf( output, "ASR R%d", RD5(op) );
+ util::stream_format(stream, "ASR R%d", RD5(op));
break;
case 0x0006:
- output += sprintf( output, "LSR R%d", RD5(op) );
+ util::stream_format(stream, "LSR R%d", RD5(op));
break;
case 0x0007:
- output += sprintf( output, "ROR R%d", RD5(op) );
+ util::stream_format(stream, "ROR R%d", RD5(op));
break;
case 0x0008:
switch(op & 0x00f0)
{
case 0x0000:
- output += sprintf( output, "RET" );
+ util::stream_format(stream, "RET");
break;
case 0x0010:
- output += sprintf( output, "RETI" );
+ util::stream_format(stream, "RETI");
break;
case 0x0080:
- output += sprintf( output, "SLEEP" );
+ util::stream_format(stream, "SLEEP");
break;
case 0x0090:
- output += sprintf( output, "BREAK" );
+ util::stream_format(stream, "BREAK");
break;
case 0x00a0:
- output += sprintf( output, "WDR" );
+ util::stream_format(stream, "WDR");
break;
case 0x00c0:
- output += sprintf( output, "LPM" );
+ util::stream_format(stream, "LPM");
break;
case 0x00d0:
- output += sprintf( output, "ELPM" );
+ util::stream_format(stream, "ELPM");
break;
case 0x00e0:
- output += sprintf( output, "SPM" );
+ util::stream_format(stream, "SPM");
break;
case 0x00f0:
- output += sprintf( output, "SPM Z+" );
+ util::stream_format(stream, "SPM Z+");
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
@@ -490,70 +489,70 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x00f0)
{
case 0x0000:
- output += sprintf( output, "ICALL" );
+ util::stream_format(stream, "ICALL");
break;
case 0x0010:
- output += sprintf( output, "EICALL" );
+ util::stream_format(stream, "EICALL");
break;
default:
- output += sprintf( output, "Undefined (%08x)", op );
+ util::stream_format(stream, "Undefined (%08x)", op);
break;
}
break;
case 0x000a:
- output += sprintf( output, "DEC R%d", RD5(op) );
+ util::stream_format(stream, "DEC R%d", RD5(op));
break;
case 0x000c:
case 0x000d:
op <<= 16;
op |= oprom[pos++];
op |= oprom[pos++] << 8;
- output += sprintf( output, "JMP 0x%06x", KCONST22(op) << 1 );
+ util::stream_format(stream, "JMP 0x%06x", KCONST22(op) << 1);
break;
case 0x000e:
case 0x000f:
op <<= 16;
op |= oprom[pos++];
op |= oprom[pos++] << 8;
- output += sprintf( output, "CALL 0x%06x", KCONST22(op) << 1 );
+ util::stream_format(stream, "CALL 0x%06x", KCONST22(op) << 1);
break;
}
break;
case 0x0600:
- output += sprintf( output, "ADIW R%d:R%d, 0x%02x", 24+(RD2(op) << 1)+1, 24+(RD2(op) << 1), KCONST6(op) );
+ util::stream_format(stream, "ADIW R%d:R%d, 0x%02x", 24+(RD2(op) << 1)+1, 24+(RD2(op) << 1), KCONST6(op));
break;
case 0x0700:
- output += sprintf( output, "SBIW R%d:R%d, 0x%02x", 24+(RD2(op) << 1)+1, 24+(RD2(op) << 1), KCONST6(op) );
+ util::stream_format(stream, "SBIW R%d:R%d, 0x%02x", 24+(RD2(op) << 1)+1, 24+(RD2(op) << 1), KCONST6(op));
break;
case 0x0800:
if (ACONST5(op) < 0x20)
- output += sprintf( output, "CBI %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)] );
+ util::stream_format(stream, "CBI %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)]);
else
- output += sprintf( output, "CBI 0x%02x, %d", ACONST5(op), RR3(op) );
+ util::stream_format(stream, "CBI 0x%02x, %d", ACONST5(op), RR3(op));
break;
case 0x0900:
if (ACONST5(op) < 0x20)
- output += sprintf( output, "SBIC %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)] );
+ util::stream_format(stream, "SBIC %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)]);
else
- output += sprintf( output, "SBIC 0x%02x, %d", ACONST5(op), RR3(op) );
+ util::stream_format(stream, "SBIC 0x%02x, %d", ACONST5(op), RR3(op));
break;
case 0x0a00:
if (ACONST5(op) < 0x20)
- output += sprintf( output, "SBI %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)] );
+ util::stream_format(stream, "SBI %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)]);
else
- output += sprintf( output, "SBI 0x%02x, %d", ACONST5(op), RR3(op) );
+ util::stream_format(stream, "SBI 0x%02x, %d", ACONST5(op), RR3(op));
break;
case 0x0b00:
if (ACONST5(op) < 0x20)
- output += sprintf( output, "SBIS %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)] );
+ util::stream_format(stream, "SBIS %s, %s", register_names[ACONST5(op)], register_bit_names[ACONST5(op)][RR3(op)]);
else
- output += sprintf( output, "SBIS 0x%02x, %d", ACONST5(op), RR3(op) );
+ util::stream_format(stream, "SBIS 0x%02x, %d", ACONST5(op), RR3(op));
break;
case 0x0c00:
case 0x0d00:
case 0x0e00:
case 0x0f00:
- output += sprintf( output, "MUL R%d, R%d", RD5(op), RR5(op) );
+ util::stream_format(stream, "MUL R%d, R%d", RD5(op), RR5(op));
break;
}
break;
@@ -561,29 +560,29 @@ CPU_DISASSEMBLE( avr8 )
if(op & 0x0800)
{
if (ACONST6(op) < 0x40 ) {
- output += sprintf( output, "OUT %s, R%d", register_names[ACONST6(op)], RD5(op) );
+ util::stream_format(stream, "OUT %s, R%d", register_names[ACONST6(op)], RD5(op));
} else {
- output += sprintf( output, "OUT 0x%02x, R%d", ACONST6(op), RD5(op) );
+ util::stream_format(stream, "OUT 0x%02x, R%d", ACONST6(op), RD5(op));
}
}
else
{
if (ACONST6(op) < 0x40 ) {
- output += sprintf( output, "IN R%d, %s", RD5(op), register_names[ACONST6(op)] );
+ util::stream_format(stream, "IN R%d, %s", RD5(op), register_names[ACONST6(op)]);
} else {
- output += sprintf( output, "IN R%d, 0x%02x", RD5(op), ACONST6(op) );
+ util::stream_format(stream, "IN R%d, 0x%02x", RD5(op), ACONST6(op));
}
}
break;
case 0xc000:
//I'm not sure if this is correct. why pc + ... : pc + 8 + ... ?
- output += sprintf( output, "RJMP %08x", (((op & 0x0800) ? pc + ((op & 0x0fff) | 0xfffff000) : pc + 8 + (op & 0x0fff)) << 0) );
+ util::stream_format(stream, "RJMP %08x", (((op & 0x0800) ? pc + ((op & 0x0fff) | 0xfffff000) : pc + 8 + (op & 0x0fff)) << 0));
break;
case 0xd000:
- output += sprintf( output, "RCALL %08x", (((op & 0x0800) ? ((op & 0x0fff) | 0xfffff000) : (op & 0x0fff)) << 1) );
+ util::stream_format(stream, "RCALL %08x", (((op & 0x0800) ? ((op & 0x0fff) | 0xfffff000) : (op & 0x0fff)) << 1));
break;
case 0xe000:
- output += sprintf( output, "LDI R%d, 0x%02x", 16 + RD4(op), KCONST8(op) );
+ util::stream_format(stream, "LDI R%d, 0x%02x", 16 + RD4(op), KCONST8(op));
break;
case 0xf000:
switch(op & 0x0c00)
@@ -592,28 +591,28 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x0007)
{
case 0x0000:
- output += sprintf( output, "BRLO %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRLO %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0001:
- output += sprintf( output, "BREQ %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BREQ %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0002:
- output += sprintf( output, "BRMI %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRMI %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0003:
- output += sprintf( output, "BRVS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRVS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0004:
- output += sprintf( output, "BRLT %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRLT %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0005:
- output += sprintf( output, "BRHS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRHS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0006:
- output += sprintf( output, "BRTS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRTS %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0007:
- output += sprintf( output, "BRIE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRIE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
}
break;
@@ -621,49 +620,49 @@ CPU_DISASSEMBLE( avr8 )
switch(op & 0x0007)
{
case 0x0000:
- output += sprintf( output, "BRSH %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRSH %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0001:
- output += sprintf( output, "BRNE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRNE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0002:
- output += sprintf( output, "BRPL %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRPL %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0003:
- output += sprintf( output, "BRVC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRVC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0004:
- output += sprintf( output, "BRGE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRGE %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0005:
- output += sprintf( output, "BRHC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRHC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0006:
- output += sprintf( output, "BRTC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRTC %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
case 0x0007:
- output += sprintf( output, "BRID %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1) );
+ util::stream_format(stream, "BRID %08x", (((op & 0x0200) ? (KCONST7(op) | 0xff80) : KCONST7(op)) << 1));
break;
}
break;
case 0x0800:
if(op & 0x0200)
{
- output += sprintf( output, "BST R%d, %d", RD5(op), RR3(op) );
+ util::stream_format(stream, "BST R%d, %d", RD5(op), RR3(op));
}
else
{
- output += sprintf( output, "BLD R%d, %d", RD5(op), RR3(op) );
+ util::stream_format(stream, "BLD R%d, %d", RD5(op), RR3(op));
}
break;
case 0x0c00:
if(op & 0x0200)
{
- output += sprintf( output, "SBRS R%d, %d", RD5(op), RR3(op) );
+ util::stream_format(stream, "SBRS R%d, %d", RD5(op), RR3(op));
}
else
{
- output += sprintf( output, "SBRC R%d, %d", RD5(op), RR3(op) );
+ util::stream_format(stream, "SBRC R%d, %d", RD5(op), RR3(op));
}
break;
}
@@ -672,3 +671,13 @@ CPU_DISASSEMBLE( avr8 )
return pos | DASMFLAG_SUPPORTED;
}
+
+
+CPU_DISASSEMBLE(avr8)
+{
+ std::ostringstream stream;
+ offs_t result = internal_disasm_avr8(device, stream, pc, oprom, opram, options);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}
diff --git a/src/devices/cpu/i8008/8008dasm.cpp b/src/devices/cpu/i8008/8008dasm.cpp
index 39615eb4f26..7cefac8e71e 100644
--- a/src/devices/cpu/i8008/8008dasm.cpp
+++ b/src/devices/cpu/i8008/8008dasm.cpp
@@ -16,7 +16,7 @@
static const char reg[] = { 'a', 'b', 'c', 'd', 'e', 'h', 'l', 'm' };
static const char flag_names[] = { 'c', 'z', 's', 'p' };
-CPU_DISASSEMBLE( i8008 )
+static offs_t internal_disasm_i8008(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
unsigned PC = pc;
@@ -25,91 +25,101 @@ CPU_DISASSEMBLE( i8008 )
{
case 0x03: // starting with 11
if (op==0xff) {
- sprintf (buffer,"hlt");
+ util::stream_format(stream, "hlt");
} else {
- sprintf (buffer,"l%c%c",reg[(op >> 3) & 7],reg[op & 7]);
+ util::stream_format(stream, "l%c%c",reg[(op >> 3) & 7],reg[op & 7]);
}
break;
case 0x00: // starting with 00
switch(op & 7) {
case 0 : if(((op >> 3) & 7)==0) {
- sprintf (buffer,"hlt");
+ util::stream_format(stream, "hlt");
} else {
if(((op >> 3) & 7)==7) {
- sprintf (buffer,"illegal");
+ util::stream_format(stream, "illegal");
} else {
- sprintf (buffer,"in%c",reg[(op >> 3) & 7]);
+ util::stream_format(stream, "in%c",reg[(op >> 3) & 7]);
}
}
break;
case 1 : if(((op >> 3) & 7)==0) {
- sprintf (buffer,"hlt");
+ util::stream_format(stream, "hlt");
} else {
if(((op >> 3) & 7)==7) {
- sprintf (buffer,"illegal");
+ util::stream_format(stream, "illegal");
} else {
- sprintf (buffer,"dc%c",reg[(op >> 3) & 7]);
+ util::stream_format(stream, "dc%c",reg[(op >> 3) & 7]);
}
}
break;
case 2 : {
switch((op >> 3) & 7) {
- case 0 : sprintf (buffer,"rlc"); break;
- case 1 : sprintf (buffer,"rrc"); break;
- case 2 : sprintf (buffer,"ral"); break;
- case 3 : sprintf (buffer,"rar"); break;
- default : sprintf (buffer,"illegal"); break;
+ case 0 : util::stream_format(stream, "rlc"); break;
+ case 1 : util::stream_format(stream, "rrc"); break;
+ case 2 : util::stream_format(stream, "ral"); break;
+ case 3 : util::stream_format(stream, "rar"); break;
+ default : util::stream_format(stream, "illegal"); break;
}
}
break;
- case 3 : sprintf (buffer,"r%c%c",(BIT(op,5) ? 't' : 'f'),flag_names[(op>>3)&3]); break;
+ case 3 : util::stream_format(stream, "r%c%c",(BIT(op,5) ? 't' : 'f'),flag_names[(op>>3)&3]); break;
case 4 : {
switch((op >> 3) & 7) {
- case 0 : sprintf (buffer,"adi %02x",ARG(pc)); pc++; break;
- case 1 : sprintf (buffer,"aci %02x",ARG(pc)); pc++; break;
- case 2 : sprintf (buffer,"sui %02x",ARG(pc)); pc++; break;
- case 3 : sprintf (buffer,"sbi %02x",ARG(pc)); pc++; break;
- case 4 : sprintf (buffer,"ndi %02x",ARG(pc)); pc++; break;
- case 5 : sprintf (buffer,"xri %02x",ARG(pc)); pc++; break;
- case 6 : sprintf (buffer,"ori %02x",ARG(pc)); pc++; break;
- case 7 : sprintf (buffer,"cpi %02x",ARG(pc)); pc++; break;
+ case 0 : util::stream_format(stream, "adi %02x",ARG(pc)); pc++; break;
+ case 1 : util::stream_format(stream, "aci %02x",ARG(pc)); pc++; break;
+ case 2 : util::stream_format(stream, "sui %02x",ARG(pc)); pc++; break;
+ case 3 : util::stream_format(stream, "sbi %02x",ARG(pc)); pc++; break;
+ case 4 : util::stream_format(stream, "ndi %02x",ARG(pc)); pc++; break;
+ case 5 : util::stream_format(stream, "xri %02x",ARG(pc)); pc++; break;
+ case 6 : util::stream_format(stream, "ori %02x",ARG(pc)); pc++; break;
+ case 7 : util::stream_format(stream, "cpi %02x",ARG(pc)); pc++; break;
}
}
break;
- case 5 : sprintf (buffer,"rst %02x",(op>>3) & 7); break;
- case 6 : sprintf (buffer,"l%ci %02x",reg[(op >> 3) & 7],ARG(pc)); pc++; break;
- case 7 : sprintf (buffer,"ret"); break;
+ case 5 : util::stream_format(stream, "rst %02x",(op>>3) & 7); break;
+ case 6 : util::stream_format(stream, "l%ci %02x",reg[(op >> 3) & 7],ARG(pc)); pc++; break;
+ case 7 : util::stream_format(stream, "ret"); break;
}
break;
case 0x01: // starting with 01
switch(op & 7) {
- case 0 : sprintf (buffer,"j%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 2 : sprintf (buffer,"c%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 4 : sprintf (buffer,"jmp %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 6 : sprintf (buffer,"cal %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
+ case 0 : util::stream_format(stream, "j%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
+ case 2 : util::stream_format(stream, "c%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
+ case 4 : util::stream_format(stream, "jmp %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
+ case 6 : util::stream_format(stream, "cal %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
case 1 :
case 3 :
case 5 :
case 7 : if (((op>>4)&3)==0) {
- sprintf (buffer,"inp %02x",(op >> 1) & 0x07);
+ util::stream_format(stream, "inp %02x",(op >> 1) & 0x07);
} else {
- sprintf (buffer,"out %02x",(op >> 1) & 0x1f);
+ util::stream_format(stream, "out %02x",(op >> 1) & 0x1f);
}
break;
}
break;
case 0x02: // starting with 10
switch((op >> 3) & 7) {
- case 0 : sprintf (buffer,"ad%c",reg[op & 7]); break;
- case 1 : sprintf (buffer,"ac%c",reg[op & 7]); break;
- case 2 : sprintf (buffer,"su%c",reg[op & 7]); break;
- case 3 : sprintf (buffer,"sb%c",reg[op & 7]); break;
- case 4 : sprintf (buffer,"nd%c",reg[op & 7]); break;
- case 5 : sprintf (buffer,"xr%c",reg[op & 7]); break;
- case 6 : sprintf (buffer,"or%c",reg[op & 7]); break;
- case 7 : sprintf (buffer,"cp%c",reg[op & 7]); break;
+ case 0 : util::stream_format(stream, "ad%c",reg[op & 7]); break;
+ case 1 : util::stream_format(stream, "ac%c",reg[op & 7]); break;
+ case 2 : util::stream_format(stream, "su%c",reg[op & 7]); break;
+ case 3 : util::stream_format(stream, "sb%c",reg[op & 7]); break;
+ case 4 : util::stream_format(stream, "nd%c",reg[op & 7]); break;
+ case 5 : util::stream_format(stream, "xr%c",reg[op & 7]); break;
+ case 6 : util::stream_format(stream, "or%c",reg[op & 7]); break;
+ case 7 : util::stream_format(stream, "cp%c",reg[op & 7]); break;
}
break;
}
return (pc - PC) | flags | DASMFLAG_SUPPORTED;
}
+
+
+CPU_DISASSEMBLE(i8008)
+{
+ std::ostringstream stream;
+ offs_t result = internal_disasm_i8008(device, stream, pc, oprom, opram, options);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}
diff --git a/src/devices/cpu/m6502/m6502.cpp b/src/devices/cpu/m6502/m6502.cpp
index 1194273fae3..3562e6c8788 100644
--- a/src/devices/cpu/m6502/m6502.cpp
+++ b/src/devices/cpu/m6502/m6502.cpp
@@ -466,11 +466,11 @@ uint32_t m6502_device::disasm_max_opcode_bytes() const
return 4;
}
-offs_t m6502_device::disassemble_generic(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *table)
+offs_t m6502_device::disassemble_generic(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *table)
{
const disasm_entry &e = table[oprom[0] | inst_state_base];
uint32_t flags = e.flags | DASMFLAG_SUPPORTED;
- buffer += sprintf(buffer, "%s", e.opcode);
+ util::stream_format(stream, "%s", e.opcode);
switch(e.mode) {
case DASM_non:
@@ -478,57 +478,57 @@ offs_t m6502_device::disassemble_generic(char *buffer, offs_t pc, const uint8_t
break;
case DASM_aba:
- sprintf(buffer, " $%02x%02x", opram[2], opram[1]);
+ util::stream_format(stream, " $%02x%02x", opram[2], opram[1]);
flags |= 3;
break;
case DASM_abx:
- sprintf(buffer, " $%02x%02x, x", opram[2], opram[1]);
+ util::stream_format(stream, " $%02x%02x, x", opram[2], opram[1]);
flags |= 3;
break;
case DASM_aby:
- sprintf(buffer, " $%02x%02x, y", opram[2], opram[1]);
+ util::stream_format(stream, " $%02x%02x, y", opram[2], opram[1]);
flags |= 3;
break;
case DASM_acc:
- sprintf(buffer, " a");
+ util::stream_format(stream, " a");
flags |= 1;
break;
case DASM_adr:
- sprintf(buffer, " $%02x%02x", opram[2], opram[1]);
+ util::stream_format(stream, " $%02x%02x", opram[2], opram[1]);
flags |= 3;
break;
case DASM_bzp:
- sprintf(buffer, "%d $%02x", (oprom[0] >> 4) & 7, opram[1]);
+ util::stream_format(stream, "%d $%02x", (oprom[0] >> 4) & 7, opram[1]);
flags |= 2;
break;
case DASM_iax:
- sprintf(buffer, " ($%02x%02x, x)", opram[2], opram[1]);
+ util::stream_format(stream, " ($%02x%02x, x)", opram[2], opram[1]);
flags |= 3;
break;
case DASM_idx:
- sprintf(buffer, " ($%02x, x)", opram[1]);
+ util::stream_format(stream, " ($%02x, x)", opram[1]);
flags |= 2;
break;
case DASM_idy:
- sprintf(buffer, " ($%02x), y", opram[1]);
+ util::stream_format(stream, " ($%02x), y", opram[1]);
flags |= 2;
break;
case DASM_idz:
- sprintf(buffer, " ($%02x), z", opram[1]);
+ util::stream_format(stream, " ($%02x), z", opram[1]);
flags |= 2;
break;
case DASM_imm:
- sprintf(buffer, " #$%02x", opram[1]);
+ util::stream_format(stream, " #$%02x", opram[1]);
flags |= 2;
break;
@@ -537,87 +537,87 @@ offs_t m6502_device::disassemble_generic(char *buffer, offs_t pc, const uint8_t
break;
case DASM_ind:
- sprintf(buffer, " ($%02x%02x)", opram[2], opram[1]);
+ util::stream_format(stream, " ($%02x%02x)", opram[2], opram[1]);
flags |= 3;
break;
case DASM_isy:
- sprintf(buffer, " ($%02x, s), y", opram[1]);
+ util::stream_format(stream, " ($%02x, s), y", opram[1]);
flags |= 2;
break;
case DASM_iw2:
- sprintf(buffer, " #$%02x%02x", opram[2], opram[1]);
+ util::stream_format(stream, " #$%02x%02x", opram[2], opram[1]);
flags |= 3;
break;
case DASM_iw3:
- sprintf(buffer, " #$%02x%02x%02x", opram[3], opram[2], opram[1]);
+ util::stream_format(stream, " #$%02x%02x%02x", opram[3], opram[2], opram[1]);
flags |= 4;
break;
case DASM_rel:
- sprintf(buffer, " $%04x", (pc & 0xf0000) | uint16_t(pc + 2 + int8_t(opram[1])));
+ util::stream_format(stream, " $%04x", (pc & 0xf0000) | uint16_t(pc + 2 + int8_t(opram[1])));
flags |= 2;
break;
case DASM_rw2:
- sprintf(buffer, " $%04x", (pc & 0xf0000) | uint16_t(pc + 2 + int16_t((opram[2] << 8) | opram[1])));
+ util::stream_format(stream, " $%04x", (pc & 0xf0000) | uint16_t(pc + 2 + int16_t((opram[2] << 8) | opram[1])));
flags |= 3;
break;
case DASM_zpb:
- sprintf(buffer, "%d $%02x, $%04x", (oprom[0] >> 4) & 7, opram[1], (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[2])));
+ util::stream_format(stream, "%d $%02x, $%04x", (oprom[0] >> 4) & 7, opram[1], (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[2])));
flags |= 3;
break;
case DASM_zpg:
- sprintf(buffer, " $%02x", opram[1]);
+ util::stream_format(stream, " $%02x", opram[1]);
flags |= 2;
break;
case DASM_zpi:
- sprintf(buffer, " ($%02x)", opram[1]);
+ util::stream_format(stream, " ($%02x)", opram[1]);
flags |= 2;
break;
case DASM_zpx:
- sprintf(buffer, " $%02x, x", opram[1]);
+ util::stream_format(stream, " $%02x, x", opram[1]);
flags |= 2;
break;
case DASM_zpy:
- sprintf(buffer, " $%02x, y", opram[1]);
+ util::stream_format(stream, " $%02x, y", opram[1]);
flags |= 2;
break;
case DASM_imz:
- sprintf(buffer, " #$%02x, $%02x", opram[1], opram[2]);
+ util::stream_format(stream, " #$%02x, $%02x", opram[1], opram[2]);
flags |= 3;
break;
case DASM_spg:
- sprintf(buffer, " \\$%02x", opram[1]);
+ util::stream_format(stream, " \\$%02x", opram[1]);
flags |= 2;
break;
case DASM_biz:
- sprintf(buffer, " %d, $%02x", (opram[0] >> 5) & 7, opram[1]);
+ util::stream_format(stream, " %d, $%02x", (opram[0] >> 5) & 7, opram[1]);
flags |= 2;
break;
case DASM_bzr:
- sprintf(buffer, " %d, $%02x, $%04x", (opram[0] >> 5) & 7, opram[1], (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[2])));
+ util::stream_format(stream, " %d, $%02x, $%04x", (opram[0] >> 5) & 7, opram[1], (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[2])));
flags |= 3;
break;
case DASM_bar:
- sprintf(buffer, " %d, a, $%04x", (opram[0] >> 5) & 7, (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[1])));
+ util::stream_format(stream, " %d, a, $%04x", (opram[0] >> 5) & 7, (pc & 0xf0000) | uint16_t(pc + 3 + int8_t(opram[1])));
flags |= 2;
break;
case DASM_bac:
- sprintf(buffer, " %d, a", (opram[0] >> 5) & 7);
+ util::stream_format(stream, " %d, a", (opram[0] >> 5) & 7);
flags |= 1;
break;
@@ -628,6 +628,15 @@ offs_t m6502_device::disassemble_generic(char *buffer, offs_t pc, const uint8_t
return flags;
}
+offs_t m6502_device::disassemble_generic(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *table)
+{
+ std::ostringstream stream;
+ offs_t result = disassemble_generic(stream, pc, oprom, opram, options, table);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}
+
void m6502_device::prefetch()
{
sync = true;
diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h
index 167b643ac94..e84fe37b8e0 100644
--- a/src/devices/cpu/m6502/m6502.h
+++ b/src/devices/cpu/m6502/m6502.h
@@ -171,6 +171,7 @@ protected:
static const disasm_entry disasm_entries[0x100];
+ offs_t disassemble_generic(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *table);
offs_t disassemble_generic(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *table);
uint8_t read(uint16_t adr) { return mintf->read(adr); }
uint8_t read_9(uint16_t adr) { return mintf->read_9(adr); }
diff --git a/src/devices/cpu/m6800/6800dasm.cpp b/src/devices/cpu/m6800/6800dasm.cpp
index 483f0abc353..1b33f96f599 100644
--- a/src/devices/cpu/m6800/6800dasm.cpp
+++ b/src/devices/cpu/m6800/6800dasm.cpp
@@ -166,7 +166,7 @@ static const uint8_t table[0x104][3] = {
#define ARG2 opram[2]
#define ARGW (opram[1]<<8) + opram[2]
-static unsigned Dasm680x (int subtype, char *buf, unsigned pc, const uint8_t *oprom, const uint8_t *opram)
+static unsigned Dasm680x (int subtype, std::ostream &stream, unsigned pc, const uint8_t *oprom, const uint8_t *opram)
{
uint32_t flags = 0;
int invalid_mask;
@@ -209,46 +209,55 @@ static unsigned Dasm680x (int subtype, char *buf, unsigned pc, const uint8_t *op
if ( invalid & invalid_mask ) /* invalid for this cpu type ? */
{
- strcpy(buf, "illegal");
+ stream << "illegal";
return 1 | flags | DASMFLAG_SUPPORTED;
}
- buf += sprintf(buf, "%-5s", op_name_str[opcode]);
+ util::stream_format(stream, "%-5s", op_name_str[opcode]);
switch( args )
{
case rel: /* relative */
- sprintf (buf, "$%04X", pc + (int8_t)ARG1 + 2);
+ util::stream_format(stream, "$%04X", pc + (int8_t)ARG1 + 2);
return 2 | flags | DASMFLAG_SUPPORTED;
case imb: /* immediate (byte) */
- sprintf (buf, "#$%02X", ARG1);
+ util::stream_format(stream, "#$%02X", ARG1);
return 2 | flags | DASMFLAG_SUPPORTED;
case imw: /* immediate (word) */
- sprintf (buf, "#$%04X", ARGW);
+ util::stream_format(stream, "#$%04X", ARGW);
return 3 | flags | DASMFLAG_SUPPORTED;
case idx: /* indexed + byte offset */
- sprintf (buf, "(x+$%02X)", ARG1 );
+ util::stream_format(stream, "(x+$%02X)", ARG1);
return 2 | flags | DASMFLAG_SUPPORTED;
case imx: /* immediate, indexed + byte offset */
- sprintf (buf, "#$%02X,(x+$%02x)", ARG1, ARG2 );
+ util::stream_format(stream, "#$%02X,(x+$%02x)", ARG1, ARG2);
return 3 | flags | DASMFLAG_SUPPORTED;
case dir: /* direct address */
- sprintf (buf, "$%02X", ARG1 );
+ util::stream_format(stream, "$%02X", ARG1);
return 2 | flags | DASMFLAG_SUPPORTED;
case imd: /* immediate, direct address */
- sprintf (buf, "#$%02X,$%02X", ARG1, ARG2);
+ util::stream_format(stream, "#$%02X,$%02X", ARG1, ARG2);
return 3 | flags | DASMFLAG_SUPPORTED;
case ext: /* extended address */
- sprintf (buf, "$%04X", ARGW);
+ util::stream_format(stream, "$%04X", ARGW);
return 3 | flags | DASMFLAG_SUPPORTED;
case sx1: /* byte from address (s + 1) */
- sprintf (buf, "(s+1)");
+ util::stream_format(stream, "(s+1)");
return 1 | flags | DASMFLAG_SUPPORTED;
default:
return 1 | flags | DASMFLAG_SUPPORTED;
}
}
+static unsigned Dasm680x(int subtype, char *buffer, unsigned pc, const uint8_t *oprom, const uint8_t *opram)
+{
+ std::ostringstream stream;
+ unsigned result = Dasm680x(subtype, stream, pc, oprom, opram);
+ std::string stream_str = stream.str();
+ strcpy(buffer, stream_str.c_str());
+ return result;
+}
+
CPU_DISASSEMBLE( m6800 )
{
return Dasm680x(6800,buffer,pc,oprom,opram);
diff --git a/src/devices/machine/am2847.cpp b/src/devices/machine/am2847.cpp
new file mode 100644
index 00000000000..ef8954c859e
--- /dev/null
+++ b/src/devices/machine/am2847.cpp
@@ -0,0 +1,169 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/**********************************************************************
+
+ AMD Am2847/Am2896 Quad 80/96-Bit Static Shift Registers
+
+**********************************************************************/
+
+#include "am2847.h"
+
+const device_type AM2847 = &device_creator<am2847_device>;
+const device_type AM2849 = &device_creator<am2849_device>;
+const device_type TMS3409 = &device_creator<tms3409_device>;
+
+am2847_base_device::am2847_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, size_t size)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__)
+ , m_in(0)
+ , m_out(0)
+ , m_rc(0)
+ , m_cp(0)
+ , m_buffer_size(size)
+{
+}
+
+am2847_device::am2847_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : am2847_base_device(mconfig, AM2847, "AMD Am2847 80-bit Static Shift Register", tag, owner, clock, "am2847", 5)
+{
+}
+
+am2849_device::am2849_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : am2847_base_device(mconfig, AM2849, "AMD Am2849 96-bit Static Shift Register", tag, owner, clock, "am2847", 6)
+{
+}
+
+tms3409_device::tms3409_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : am2847_base_device(mconfig, TMS3409, "TI TMS3409 80-bit Static Shift Register", tag, owner, clock, "am2847", 5)
+{
+}
+
+void am2847_base_device::device_start()
+{
+ for (int bit = 0; bit < 4; bit++)
+ {
+ m_shifters[bit].alloc(m_buffer_size);
+ }
+
+ init();
+
+ save_item(NAME(m_in));
+ save_item(NAME(m_out));
+}
+
+void am2847_base_device::device_reset()
+{
+ init();
+}
+
+void am2847_base_device::init()
+{
+ m_in = 0;
+ m_out = 0;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::in_a_w )
+{
+ m_in &= ~0x01;
+ m_in |= state;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::in_b_w )
+{
+ m_in &= ~0x02;
+ m_in |= state << 1;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::in_c_w )
+{
+ m_in &= ~0x04;
+ m_in |= state << 2;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::in_d_w )
+{
+ m_in &= ~0x08;
+ m_in |= state << 3;
+}
+
+void am2847_base_device::in_w(uint8_t data)
+{
+ m_in = data & 0x0f;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::rc_a_w )
+{
+ m_rc &= ~0x01;
+ m_rc |= state;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::rc_b_w )
+{
+ m_rc &= ~0x02;
+ m_rc |= state << 1;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::rc_c_w )
+{
+ m_rc &= ~0x04;
+ m_rc |= state << 2;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::rc_d_w )
+{
+ m_rc &= ~0x08;
+ m_rc |= state << 3;
+}
+
+void am2847_base_device::rc_w(uint8_t data)
+{
+ m_rc = data & 0x0f;
+}
+
+WRITE_LINE_MEMBER( am2847_base_device::cp_w )
+{
+ if (m_cp != state && state != 0)
+ {
+ shift();
+ }
+ m_cp = state;
+}
+
+void am2847_base_device::shift()
+{
+ for (int bit = 0; bit < 4; bit++)
+ {
+ m_out &= ~(1 << bit);
+ m_out |= m_shifters[bit].shift(BIT(m_rc, bit) != 0, BIT(m_in, bit)) << bit;
+ }
+}
+
+void am2847_base_device::shifter::alloc(size_t size)
+{
+ m_buffer_size = size;
+ m_buffer = std::make_unique<uint16_t[]>(m_buffer_size);
+ init();
+}
+
+void am2847_base_device::shifter::init()
+{
+ memset(&m_buffer[0], 0, m_buffer_size * 2);
+}
+
+int am2847_base_device::shifter::shift(bool recycle, int in)
+{
+ int out = m_buffer[m_buffer_size-1] & 1;
+ for (int word = m_buffer_size - 1; word >= 1; word--)
+ {
+ m_buffer[word] >>= 1;
+ m_buffer[word] |= (m_buffer[word - 1] & 1) << 15;
+ }
+
+ m_buffer[0] >>= 1;
+
+ if (recycle)
+ m_buffer[0] |= out << 15;
+ else
+ m_buffer[0] |= (in & 1) << 15;
+
+ return out;
+}
diff --git a/src/devices/machine/am2847.h b/src/devices/machine/am2847.h
new file mode 100644
index 00000000000..a019a733537
--- /dev/null
+++ b/src/devices/machine/am2847.h
@@ -0,0 +1,134 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+/**********************************************************************
+
+ AMD Am2847/Am2896 Quad 80/96-Bit Static Shift Registers
+
+ Pin-compatible with:
+ * 2532B
+ * TMS3120
+ * TMS3409
+ * MK1007
+ * 3347
+
+***********************************************************************
+
+ Connection Diagram:
+ ___ ___
+ OUT A 1 |* u | 16 Vss
+ RC A 2 | | 15 IN D
+ IN A 3 | | 14 RC D
+ OUT B 4 | | 13 OUT D
+ RC B 5 | | 12 Vgg
+ IN B 6 | | 11 CP
+ OUT C 7 | | 10 IN C
+ Vdd 8 |_______| 9 RC C
+
+ Logic Symbol:
+
+ 2 5 9 14
+ | | | |
+ _____|______|______|______|_____
+ | RC A RC B RC C RC D |
+ 3 ---| IN A OUT A |--- 1
+ 6 ---| IN A OUT B |--- 4
+ 10 ---| IN A OUT C |--- 7
+ 15 ---| IN A OUT D |--- 13
+ 11 ---| CP |
+ |________________________________|
+
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef AM2847_H
+#define AM2847_H
+
+#include "emu.h"
+
+#define MCFG_AM2847_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, AM2847, 0)
+
+#define MCFG_AM2849_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, AM2849, 0)
+
+#define MCFG_TMS3409_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, TMS3409, 0)
+
+class am2847_base_device : public device_t
+{
+public:
+ am2847_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, size_t size);
+
+ DECLARE_WRITE_LINE_MEMBER( in_a_w );
+ DECLARE_WRITE_LINE_MEMBER( in_b_w );
+ DECLARE_WRITE_LINE_MEMBER( in_c_w );
+ DECLARE_WRITE_LINE_MEMBER( in_d_w );
+ void in_w(uint8_t data); // Or if you prefer...
+
+ DECLARE_WRITE_LINE_MEMBER( rc_a_w );
+ DECLARE_WRITE_LINE_MEMBER( rc_b_w );
+ DECLARE_WRITE_LINE_MEMBER( rc_c_w );
+ DECLARE_WRITE_LINE_MEMBER( rc_d_w );
+ void rc_w(uint8_t data); // Or if you prefer...
+
+ DECLARE_WRITE_LINE_MEMBER( cp_w );
+
+ uint8_t out_r() const { return m_out; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ void init();
+ void shift();
+
+ class shifter
+ {
+ public:
+ shifter() : m_buffer_size(0) { }
+ void alloc(size_t size);
+ void init();
+ int shift(bool recycle, int in);
+ protected:
+ std::unique_ptr<uint16_t[]> m_buffer;
+ size_t m_buffer_size;
+ };
+
+ shifter m_shifters[4];
+ uint8_t m_in;
+ uint8_t m_out;
+ uint8_t m_rc;
+ int m_cp;
+
+ const size_t m_buffer_size;
+};
+
+class am2847_device : public am2847_base_device
+{
+public:
+ // construction/destruction
+ am2847_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class am2849_device : public am2847_base_device
+{
+public:
+ // construction/destruction
+ am2849_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class tms3409_device : public am2847_base_device
+{
+public:
+ // construction/destruction
+ tms3409_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+// device type definition
+extern const device_type AM2847;
+extern const device_type AM2849;
+extern const device_type TMS3409;
+
+#endif // AM2847_H \ No newline at end of file
diff --git a/src/devices/sound/aica.cpp b/src/devices/sound/aica.cpp
index 2f0a2810980..c6b5aa9b020 100644
--- a/src/devices/sound/aica.cpp
+++ b/src/devices/sound/aica.cpp
@@ -372,7 +372,7 @@ void aica_device::StartSlot(AICA_SLOT *slot)
slot->active=1;
slot->Backwards=0;
slot->cur_addr=0; slot->nxt_addr=1<<SHIFT; slot->prv_addr=-1;
- start_offset = SA(slot); // AICA can play 16-bit samples from any boundry
+ start_offset = SA(slot); // AICA can play 16-bit samples from any boundary
slot->base=&m_AICARAM[start_offset];
slot->step=Step(slot);
Compute_EG(slot);
diff --git a/src/devices/video/zeus2.cpp b/src/devices/video/zeus2.cpp
index e81fdc54507..203f4339492 100644
--- a/src/devices/video/zeus2.cpp
+++ b/src/devices/video/zeus2.cpp
@@ -1422,7 +1422,7 @@ void zeus2_renderer::zeus2_draw_quad(const uint32_t *databuffer, uint32_t texdat
}
}
if (logextra & logit && m_state->zeus_quad_size == 14) {
- m_state->logerror("uknown: int16: %d %d %d %d %d %d %d %d float: %f %f %f %f\n",
+ m_state->logerror("unknown: int16: %d %d %d %d %d %d %d %d float: %f %f %f %f\n",
unknown[0], unknown[1], unknown[2], unknown[3], unknown[4], unknown[5], unknown[6], unknown[7],
unknownFloat[0], unknownFloat[1], unknownFloat[2], unknownFloat[3]);
}
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index b868219e45d..a4f00cd82f4 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -199,6 +199,7 @@ enum
XTAL_32_22MHz = 32220000, /* Typically used on 90's Data East PCBs (close to 9x NTSC subcarrier which is 32.215905Mhz*/
XTAL_32_5304MHz = 32530400, /* Seta 2 */
XTAL_33MHz = 33000000, /* Sega Model 3 video board */
+ XTAL_33_264MHz = 33264000, /* Hazeltine 1500 terminal */
XTAL_33_333MHz = 33333000, /* Sega Model 3 CPU board, Vegas */
XTAL_33_833MHz = 33833000,
XTAL_33_8688MHz = 33868800, /* Usually used to drive 90's Yamaha OPL/FM chips with /2 divider */
diff --git a/src/lib/util/cdrom.cpp b/src/lib/util/cdrom.cpp
index 3da270b55e3..efa34257a95 100644
--- a/src/lib/util/cdrom.cpp
+++ b/src/lib/util/cdrom.cpp
@@ -11,7 +11,7 @@
IMPORTANT:
"physical" block addresses are the actual addresses on the emulated CD.
"chd" block addresses are the block addresses in the CHD file.
- Because we pad each track to a 4-frame boundry, these addressing
+ Because we pad each track to a 4-frame boundary, these addressing
schemes will differ after track 1!
***************************************************************************/
diff --git a/src/mame/drivers/gamtor.cpp b/src/mame/drivers/gamtor.cpp
index adb337a720a..46fe85f1d2f 100644
--- a/src/mame/drivers/gamtor.cpp
+++ b/src/mame/drivers/gamtor.cpp
@@ -9,7 +9,7 @@
preliminary video based on llcharm / g4u5 set ONLY
- there is clearly a way to set the base adddress for the tiles, or they should get
+ there is clearly a way to set the base address for the tiles, or they should get
DMAd elsewhere before use.
ends up making some accesses to the rom area because the pointer it gets from RAM is 0
diff --git a/src/mame/drivers/hazeltin.cpp b/src/mame/drivers/hazeltin.cpp
index 3af908590af..d3db3238782 100644
--- a/src/mame/drivers/hazeltin.cpp
+++ b/src/mame/drivers/hazeltin.cpp
@@ -20,23 +20,49 @@ References:
#include "machine/ay31015.h"
#include "machine/kb3600.h"
#include "machine/com8116.h"
-#include "machine/keyboard.h"
+#include "machine/am2847.h"
-#define KEYBOARD_TAG "keyboard"
#define CPU_TAG "maincpu"
#define UART_TAG "uart"
#define BAUDGEN_TAG "baudgen"
#define KBDC_TAG "ay53600"
-#define BAUDPORT_TAG "BAUD"
-#define MISCPORT_TAG "MISC"
-#define MISCKEYS_TAG "MISC_KEYS"
+#define CHARRAM_TAG "chrram"
+#define CHARROM_TAG "chargen"
+#define BAUDPORT_TAG "baud"
+#define MISCPORT_TAG "misc"
+#define MISCKEYS_TAG "misc_keys"
+#define SCREEN_TAG "screen"
+#define TMS3409A_TAG "u67"
+#define TMS3409B_TAG "u57"
+
+// Number of cycles to burn when fetching the next row of characters into the line buffer:
+// CPU clock is 18MHz / 9
+// Dot clock is 33.264MHz / 2
+// 9 dots per character
+// 80 visible characters per line
+// Total duration of fetch: 1440 33.264MHz clock cycles
+//
+// 2*9*80 1 1440 * XTAL_2MHz
+// -------------- divided by --------- = ---------------- = 86.5 main CPU cycles per line fetch
+// XTAL_33_264MHz XTAL_2MHz XTAL_33_264MHz
+#define LINE_FETCH_CYCLES (87)
#define SR2_FULL_DUPLEX (0x01)
#define SR2_UPPER_ONLY (0x08)
#define SR3_PB_RESET (0x04)
-#define KBD_STATUS_KBDR (0x01)
+#define KBD_STATUS_KBDR (0x01)
+#define KBD_STATUS_TV_INT (0x40)
+#define KBD_STATUS_TV_UB (0x80)
+
+#define SCREEN_HTOTAL (9*100)
+#define SCREEN_HDISP (9*80)
+#define SCREEN_HSTART (9*5)
+
+#define SCREEN_VTOTAL (28*11)
+#define SCREEN_VDISP (24*11)
+#define SCREEN_VSTART (0)
class hazl1500_state : public driver_device
{
@@ -49,11 +75,25 @@ public:
, m_baud_dips(*this, BAUDPORT_TAG)
, m_misc_dips(*this, MISCPORT_TAG)
, m_kbd_misc_keys(*this, MISCKEYS_TAG)
+ , m_char_ram(*this, CHARRAM_TAG)
+ , m_char_rom(*this, CHARROM_TAG)
+ , m_line_buffer_lsb(*this, TMS3409A_TAG)
+ , m_line_buffer_msb(*this, TMS3409B_TAG)
+ , m_screen(*this, SCREEN_TAG)
+ , m_hblank_timer(nullptr)
+ , m_scanline_timer(nullptr)
, m_status_reg_3(0)
, m_kbd_status_latch(0)
+ , m_refresh_address(0)
+ , m_vpos(0)
+ , m_hblank(false)
+ , m_vblank(false)
{
}
+ //m_maincpu->adjust_icount(-14);
+
+ virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update_hazl1500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -64,13 +104,27 @@ public:
DECLARE_READ8_MEMBER(status_reg_2_r);
DECLARE_WRITE8_MEMBER(status_reg_3_w);
+ DECLARE_READ8_MEMBER(uart_r);
+ DECLARE_WRITE8_MEMBER(uart_w);
+
DECLARE_READ8_MEMBER(kbd_status_latch_r);
DECLARE_READ8_MEMBER(kbd_encoder_r);
DECLARE_READ_LINE_MEMBER(ay3600_shift_r);
DECLARE_READ_LINE_MEMBER(ay3600_control_r);
DECLARE_WRITE_LINE_MEMBER(ay3600_data_ready_w);
+ DECLARE_WRITE8_MEMBER(refresh_address_w);
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ static const device_timer_id TIMER_HBLANK = 0;
+ static const device_timer_id TIMER_SCANLINE = 1;
+
private:
+ void check_tv_interrupt();
+ void update_tv_unblank();
+ void scanline_tick();
+ void draw_scanline(uint32_t *pix);
+
required_device<cpu_device> m_maincpu;
required_device<ay31015_device> m_uart;
required_device<ay3600_device> m_kbdc;
@@ -78,16 +132,60 @@ private:
required_ioport m_misc_dips;
required_ioport m_kbd_misc_keys;
+ required_shared_ptr<uint8_t> m_char_ram;
+ required_region_ptr<uint8_t> m_char_rom;
+ required_device<tms3409_device> m_line_buffer_lsb;
+ required_device<tms3409_device> m_line_buffer_msb;
+ required_device<screen_device> m_screen;
+
+ std::unique_ptr<uint32_t[]> m_screen_pixbuf;
+
+ emu_timer *m_hblank_timer;
+ emu_timer *m_scanline_timer;
+
uint8_t m_status_reg_3;
uint8_t m_kbd_status_latch;
+
+ uint8_t m_refresh_address;
+ uint16_t m_vpos;
+ bool m_hblank;
+ bool m_vblank;
};
+void hazl1500_state::machine_start()
+{
+ m_hblank_timer = timer_alloc(TIMER_HBLANK);
+ m_hblank_timer->adjust(attotime::never);
+
+ m_scanline_timer = timer_alloc(TIMER_SCANLINE);
+ m_scanline_timer->adjust(attotime::never);
+
+ m_screen_pixbuf = std::make_unique<uint32_t[]>(SCREEN_HTOTAL * SCREEN_VTOTAL);
+
+ save_item(NAME(m_status_reg_3));
+ save_item(NAME(m_kbd_status_latch));
+ save_item(NAME(m_refresh_address));
+ save_item(NAME(m_vpos));
+ save_item(NAME(m_hblank));
+ save_item(NAME(m_vblank));
+}
+
void hazl1500_state::machine_reset()
{
m_status_reg_3 = 0;
m_kbd_status_latch = 0;
+
+ m_refresh_address = 0;
+ m_vpos = m_screen->vpos();
+ m_vblank = (m_vpos >= SCREEN_VDISP);
+ if (!m_vblank)
+ m_kbd_status_latch |= KBD_STATUS_TV_UB;
+ m_hblank = true;
+ m_hblank_timer->adjust(m_screen->time_until_pos(m_vpos, SCREEN_HSTART));
+ m_scanline_timer->adjust(m_screen->time_until_pos(m_vpos + 1, 0));
}
+
WRITE_LINE_MEMBER( hazl1500_state::com5016_fr_w )
{
m_uart->rx_process();
@@ -96,6 +194,7 @@ WRITE_LINE_MEMBER( hazl1500_state::com5016_fr_w )
uint32_t hazl1500_state::screen_update_hazl1500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
+ memcpy(&bitmap.pix32(0), &m_screen_pixbuf[0], sizeof(uint32_t) * SCREEN_HTOTAL * SCREEN_VTOTAL);
return 0;
}
@@ -122,6 +221,16 @@ WRITE8_MEMBER( hazl1500_state::status_reg_3_w )
m_status_reg_3 = data;
}
+READ8_MEMBER( hazl1500_state::uart_r )
+{
+ return m_uart->get_received_data();
+}
+
+WRITE8_MEMBER( hazl1500_state::uart_w )
+{
+ m_uart->set_transmit_data(data);
+}
+
READ8_MEMBER( hazl1500_state::kbd_status_latch_r )
{
return m_kbd_status_latch;
@@ -161,18 +270,131 @@ WRITE_LINE_MEMBER(hazl1500_state::ay3600_data_ready_w)
m_kbd_status_latch &= ~KBD_STATUS_KBDR;
}
+void hazl1500_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch(id)
+ {
+ case TIMER_HBLANK:
+ if (m_hblank)
+ {
+ m_hblank_timer->adjust(m_screen->time_until_pos(m_vpos, SCREEN_HSTART + SCREEN_HDISP));
+ }
+ else
+ {
+ m_hblank_timer->adjust(m_screen->time_until_pos((m_vpos + 1) % SCREEN_VTOTAL, SCREEN_HSTART));
+ }
+ m_hblank ^= 1;
+ break;
+
+ case TIMER_SCANLINE:
+ {
+ scanline_tick();
+ break;
+ }
+ }
+}
+
+WRITE8_MEMBER(hazl1500_state::refresh_address_w)
+{
+ m_refresh_address = data;
+}
+
+void hazl1500_state::check_tv_interrupt()
+{
+ uint8_t char_row = m_vpos % 11;
+ bool bit_match = char_row == 2 || char_row == 3;
+ bool no_vblank = !m_vblank;
+ bool tv_interrupt = bit_match && no_vblank;
+
+ m_kbd_status_latch &= ~KBD_STATUS_TV_INT;
+ m_kbd_status_latch |= tv_interrupt ? KBD_STATUS_TV_INT : 0;
+
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, tv_interrupt ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void hazl1500_state::update_tv_unblank()
+{
+ if (!m_vblank)
+ {
+ m_kbd_status_latch |= KBD_STATUS_TV_UB;
+ }
+ else
+ {
+ m_kbd_status_latch &= ~KBD_STATUS_TV_UB;
+ }
+}
+
+void hazl1500_state::scanline_tick()
+{
+ uint16_t old_vpos = m_vpos;
+ m_vpos = (m_vpos + 1) % SCREEN_VTOTAL;
+ m_vblank = (m_vpos >= SCREEN_VDISP);
+
+ check_tv_interrupt();
+ update_tv_unblank();
+
+ draw_scanline(&m_screen_pixbuf[old_vpos * SCREEN_HTOTAL + SCREEN_HSTART]);
+
+ m_scanline_timer->adjust(m_screen->time_until_pos((m_vpos + 1) % SCREEN_VTOTAL, 0));
+}
+
+void hazl1500_state::draw_scanline(uint32_t *pix)
+{
+ static const uint32_t palette[4] = { 0xff000000, 0xff006000, 0xff000000, 0xff00c000 };
+
+ uint16_t ram_offset = m_refresh_address << 4;
+ uint8_t char_row = m_vpos % 11;
+ uint8_t recycle = (char_row != 10 ? 0xff : 0x00);
+ m_line_buffer_lsb->rc_w(recycle & 0xf);
+ m_line_buffer_msb->rc_w(recycle >> 4);
+
+ if (recycle == 0)
+ m_maincpu->adjust_icount(-LINE_FETCH_CYCLES);
+
+ for (uint16_t x = 0; x < 80; x++)
+ {
+ uint8_t in = 0;
+ if (!m_vblank)
+ in = m_char_ram[ram_offset + x];
+
+ m_line_buffer_lsb->in_w(in & 0xf);
+ m_line_buffer_lsb->cp_w(1);
+ m_line_buffer_lsb->cp_w(0);
+
+ m_line_buffer_msb->in_w(in >> 4);
+ m_line_buffer_msb->cp_w(1);
+ m_line_buffer_msb->cp_w(0);
+
+ const uint8_t chr = (m_line_buffer_msb->out_r() << 4) | m_line_buffer_lsb->out_r();
+ const uint16_t chr_addr = (chr & 0x7f) << 4;
+ const uint8_t gfx = m_char_rom[chr_addr | char_row];
+ const uint8_t bright = (chr & 0x80) >> 6;
+
+ *pix++ = palette[0];
+ *pix++ = palette[BIT(gfx, 6) | bright];
+ *pix++ = palette[BIT(gfx, 5) | bright];
+ *pix++ = palette[BIT(gfx, 4) | bright];
+ *pix++ = palette[BIT(gfx, 3) | bright];
+ *pix++ = palette[BIT(gfx, 2) | bright];
+ *pix++ = palette[BIT(gfx, 1) | bright];
+ *pix++ = palette[BIT(gfx, 0) | bright];
+ *pix++ = palette[0];
+ }
+}
+
static ADDRESS_MAP_START(hazl1500_mem, AS_PROGRAM, 8, hazl1500_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x07ff) AM_ROM
- AM_RANGE(0x3000, 0x377f) AM_RAM AM_SHARE("char_ram")
+ AM_RANGE(0x3000, 0x377f) AM_RAM AM_SHARE(CHARRAM_TAG)
AM_RANGE(0x3780, 0x37ff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(hazl1500_io, AS_IO, 8, hazl1500_state)
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x7f, 0x7f) AM_READWRITE(status_reg_2_r, status_reg_3_w)
+ AM_RANGE(0xbf, 0xbf) AM_READWRITE(uart_r, uart_w)
AM_RANGE(0xdf, 0xdf) AM_READ(kbd_encoder_r)
- AM_RANGE(0xef, 0xef) AM_READ(system_test_r)
+ AM_RANGE(0xef, 0xef) AM_READWRITE(system_test_r, refresh_address_w)
AM_RANGE(0xf7, 0xf7) AM_READ(kbd_status_latch_r)
ADDRESS_MAP_END
@@ -376,16 +598,17 @@ GFXDECODE_END
static MACHINE_CONFIG_START( hazl1500, hazl1500_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",I8080, XTAL_1MHz) //unknown clock
+ MCFG_CPU_ADD(CPU_TAG, I8080, XTAL_18MHz/9) // 18MHz crystal on schematics, using an i8224 clock gen/driver IC
MCFG_CPU_PROGRAM_MAP(hazl1500_mem)
MCFG_CPU_IO_MAP(hazl1500_io)
+ MCFG_QUANTUM_PERFECT_CPU(CPU_TAG)
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(640, 384)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 384-1)
+ MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green())
MCFG_SCREEN_UPDATE_DRIVER(hazl1500_state, screen_update_hazl1500)
+ MCFG_SCREEN_RAW_PARAMS(XTAL_33_264MHz/2,
+ SCREEN_HTOTAL, SCREEN_HSTART, SCREEN_HSTART + SCREEN_HDISP,
+ SCREEN_VTOTAL, SCREEN_VSTART, SCREEN_VSTART + SCREEN_VDISP);
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hazl1500)
@@ -395,6 +618,9 @@ static MACHINE_CONFIG_START( hazl1500, hazl1500_state )
MCFG_DEVICE_ADD(UART_TAG, AY51013, 0)
+ MCFG_TMS3409_ADD(TMS3409A_TAG)
+ MCFG_TMS3409_ADD(TMS3409B_TAG)
+
/* keyboard controller */
MCFG_DEVICE_ADD(KBDC_TAG, AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
@@ -413,10 +639,10 @@ MACHINE_CONFIG_END
ROM_START( hazl1500 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x10000, CPU_TAG, ROMREGION_ERASEFF )
ROM_LOAD( "h15s-00I-10-3.bin", 0x0000, 0x0800, CRC(a2015f72) SHA1(357cde517c3dcf693de580881add058c7b26dfaa))
- ROM_REGION( 0x800, "chargen", ROMREGION_ERASEFF )
+ ROM_REGION( 0x800, CHARROM_TAG, ROMREGION_ERASEFF )
ROM_LOAD( "u83_chr.bin", 0x0000, 0x0800, CRC(e0c6b734) SHA1(7c42947235c66c41059fd4384e09f4f3a17c9857))
ROM_END
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 3802c4f1388..a31cd60fdf4 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -25,7 +25,7 @@
@MP0170 TMS1000 1979, Conic Football
*MP0230 TMS1000? 1980, Entex Blast It (6015)
@MP0914 TMS1000 1979, Entex Baseball 1
- *MP0915 TMS1000 1979, Bandai System Control Car: Cheetah/Palitoy The Incredible Brain Buggy
+ *MP0915 TMS1000 1979, Bandai System Control Car: Cheetah/The Incredible Brain Buggy
@MP0919 TMS1000 1979, Tiger Copy Cat (model 7-520)
*MP0920 TMS1000 1979, Entex Space Battle (6004)
@MP0923 TMS1000 1979, Entex Baseball 2 (6002)
@@ -6021,11 +6021,11 @@ MACHINE_CONFIG_END
9-button version, a clone of Mego Fabulous Fred)
This handheld contains 12 minigames. It looks and plays like Game Robot 9 by
- Gakken (aka Mego's Fabulous Fred) from 1980, which in turn is a mix of Merlin
- and Simon. Unlike Merlin and Simon, spin-offs were not as successful in the USA.
- There were releases with and without the prefix "Tandy-12", I don't know which
- name was more common. Also not worth noting is that it needed five batteries;
- four C-cells and a 9-volt.
+ Takatoku Toys (aka Mego's Fabulous Fred) from 1980, which in turn is a mix of
+ Merlin and Simon. Unlike Merlin and Simon, spin-offs were not as successful in
+ the USA. There were releases with and without the prefix "Tandy-12", I don't
+ know which name was more common. Also not worth noting is that it needed five
+ batteries; four C-cells and a 9-volt.
Some of the games require accessories included with the toy (eg. the Baseball
game is played with a board representing the playing field). To start a game,
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index 49eddd5f112..cc9c0de5b4c 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -48,7 +48,7 @@
@258 uPD553C 1984, Tomy Alien Chase (TN-16)
*296 uPD553C 1984, Epoch Computer Beam Gun Professional
- @511 uPD557LC 1980, Gakken Game Robot 9/Mego Fabulous Fred
+ @511 uPD557LC 1980, Takatoku Toys Game Robot 9/Mego Fabulous Fred
@512 uPD557LC 1980, Castle Toy Tactix
@060 uPD650C 1979, Mattel Computer Gin
@@ -1659,121 +1659,6 @@ MACHINE_CONFIG_END
/***************************************************************************
- Gakken Game Robot 9
- * PCB label GAME ROBOT 7520
- * NEC uCOM-43 MCU, label TTGR-512 (die label NEC D557 511)
- * 9 lamps behind buttons
-
- known releases:
- - Japan: Game Robot 9 (Takatoku Toys?)
- - USA: Fabulous Fred - The Ultimate Electronic Game, distributed by Mego
- - Mexico: Fabuloso Fred, distributed by Ensueno Toys (also released as
- 12-button version, a clone of Tandy-12)
-
- Accessories were included for some of the minigames.
-
-***************************************************************************/
-
-class grobot9_state : public hh_ucom4_state
-{
-public:
- grobot9_state(const machine_config &mconfig, device_type type, const char *tag)
- : hh_ucom4_state(mconfig, type, tag)
- { }
-
- DECLARE_WRITE8_MEMBER(lamps_w);
- DECLARE_WRITE8_MEMBER(speaker_w);
- DECLARE_WRITE8_MEMBER(input_w);
- DECLARE_READ8_MEMBER(input_r);
-};
-
-// handlers
-
-WRITE8_MEMBER(grobot9_state::lamps_w)
-{
- if (offset == NEC_UCOM4_PORTE)
- {
- // E1: speaker out
- m_speaker->level_w(data >> 1 & 1);
-
- // E3: input mux high bit
- m_inp_mux = (m_inp_mux & 7) | (data & 8);
- }
-
- // D,F,E0: lamps
- m_port[offset] = data;
- display_matrix(9, 1, m_port[NEC_UCOM4_PORTD] | m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE] << 8, 1);
-}
-
-WRITE8_MEMBER(grobot9_state::input_w)
-{
- // C012: input mux low
- m_inp_mux = (m_inp_mux & 8) | (data & 7);
-}
-
-READ8_MEMBER(grobot9_state::input_r)
-{
- // A: multiplexed inputs
- return read_inputs(5);
-}
-
-
-// config
-
-static INPUT_PORTS_START( grobot9 )
- PORT_START("IN.0") // C0 port A
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_W) PORT_NAME("Button 2")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_E) PORT_NAME("Button 3")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_D) PORT_NAME("Button 4")
-
- PORT_START("IN.1") // C1 port A
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_C) PORT_NAME("Button 5")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_X) PORT_NAME("Button 6")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 7")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_A) PORT_NAME("Button 8")
-
- PORT_START("IN.2") // C2 port A
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_S) PORT_NAME("Button 9")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Rest")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Eighth Note")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("IN.3") // E3 port A
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Select")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Hit")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat")
-
- PORT_START("IN.4") // INT
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_ucom4_state, single_interrupt_line, nullptr) PORT_NAME("Start-Pitch")
-INPUT_PORTS_END
-
-static MACHINE_CONFIG_START( grobot9, grobot9_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", NEC_D557L, 160000) // approximation
- MCFG_UCOM4_READ_A_CB(READ8(grobot9_state, input_r))
- MCFG_UCOM4_WRITE_C_CB(WRITE8(grobot9_state, input_w))
- MCFG_UCOM4_WRITE_D_CB(WRITE8(grobot9_state, lamps_w))
- MCFG_UCOM4_WRITE_E_CB(WRITE8(grobot9_state, lamps_w))
- MCFG_UCOM4_WRITE_F_CB(WRITE8(grobot9_state, lamps_w))
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
- MCFG_DEFAULT_LAYOUT(layout_grobot9)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-MACHINE_CONFIG_END
-
-
-
-
-
-/***************************************************************************
-
Mattel Computer Gin
* NEC uCOM-43 MCU, label D650C 060
* Hughes HLCD0569 LCD driver
@@ -1953,6 +1838,121 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Takatoku Toys(T.T) Game Robot 9
+ * PCB label GAME ROBOT 7520
+ * NEC uCOM-43 MCU, label TTGR-512 (die label NEC D557 511)
+ * 9 lamps behind buttons
+
+ known releases:
+ - Japan: Game Robot 9
+ - USA: Fabulous Fred - The Ultimate Electronic Game, distributed by Mego
+ - Mexico: Fabuloso Fred, distributed by Ensueno Toys (also released as
+ 12-button version, a clone of Tandy-12)
+
+ Accessories were included for some of the minigames.
+
+***************************************************************************/
+
+class grobot9_state : public hh_ucom4_state
+{
+public:
+ grobot9_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_ucom4_state(mconfig, type, tag)
+ { }
+
+ DECLARE_WRITE8_MEMBER(lamps_w);
+ DECLARE_WRITE8_MEMBER(speaker_w);
+ DECLARE_WRITE8_MEMBER(input_w);
+ DECLARE_READ8_MEMBER(input_r);
+};
+
+// handlers
+
+WRITE8_MEMBER(grobot9_state::lamps_w)
+{
+ if (offset == NEC_UCOM4_PORTE)
+ {
+ // E1: speaker out
+ m_speaker->level_w(data >> 1 & 1);
+
+ // E3: input mux high bit
+ m_inp_mux = (m_inp_mux & 7) | (data & 8);
+ }
+
+ // D,F,E0: lamps
+ m_port[offset] = data;
+ display_matrix(9, 1, m_port[NEC_UCOM4_PORTD] | m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE] << 8, 1);
+}
+
+WRITE8_MEMBER(grobot9_state::input_w)
+{
+ // C012: input mux low
+ m_inp_mux = (m_inp_mux & 8) | (data & 7);
+}
+
+READ8_MEMBER(grobot9_state::input_r)
+{
+ // A: multiplexed inputs
+ return read_inputs(5);
+}
+
+
+// config
+
+static INPUT_PORTS_START( grobot9 )
+ PORT_START("IN.0") // C0 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_Q) PORT_NAME("Button 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_W) PORT_NAME("Button 2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_E) PORT_NAME("Button 3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_D) PORT_NAME("Button 4")
+
+ PORT_START("IN.1") // C1 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_C) PORT_NAME("Button 5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_X) PORT_NAME("Button 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_Z) PORT_NAME("Button 7")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_A) PORT_NAME("Button 8")
+
+ PORT_START("IN.2") // C2 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_S) PORT_NAME("Button 9")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Rest")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Eighth Note")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.3") // E3 port A
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Select")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("Hit")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat")
+
+ PORT_START("IN.4") // INT
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_ucom4_state, single_interrupt_line, nullptr) PORT_NAME("Start-Pitch")
+INPUT_PORTS_END
+
+static MACHINE_CONFIG_START( grobot9, grobot9_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", NEC_D557L, 160000) // approximation
+ MCFG_UCOM4_READ_A_CB(READ8(grobot9_state, input_r))
+ MCFG_UCOM4_WRITE_C_CB(WRITE8(grobot9_state, input_w))
+ MCFG_UCOM4_WRITE_D_CB(WRITE8(grobot9_state, lamps_w))
+ MCFG_UCOM4_WRITE_E_CB(WRITE8(grobot9_state, lamps_w))
+ MCFG_UCOM4_WRITE_F_CB(WRITE8(grobot9_state, lamps_w))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_grobot9)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Tomy(tronic) Cosmic Combat (manufactured in Japan)
* PCB label 2E1019-E01
* NEC uCOM-44 MCU, label D552C 042
@@ -2768,12 +2768,6 @@ ROM_START( edracula )
ROM_END
-ROM_START( grobot9 )
- ROM_REGION( 0x0800, "maincpu", 0 )
- ROM_LOAD( "ttgr-511", 0x0000, 0x0800, CRC(1f25b2bb) SHA1(55ae7e23f6dd46cc6e1a65839327726678410c3a) )
-ROM_END
-
-
ROM_START( mcompgin )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d650c-060", 0x0000, 0x0800, BAD_DUMP CRC(92a4d8be) SHA1(d67f14a2eb53b79a7d9eb08103325299bc643781) ) // d5 stuck: xx1x xxxx
@@ -2786,6 +2780,12 @@ ROM_START( mvbfree )
ROM_END
+ROM_START( grobot9 )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "ttgr-511", 0x0000, 0x0800, CRC(1f25b2bb) SHA1(55ae7e23f6dd46cc6e1a65839327726678410c3a) )
+ROM_END
+
+
ROM_START( tccombat )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-042", 0x0000, 0x0400, CRC(d7b5cfeb) SHA1(a267be8e43b7740758eb0881b655b1cc8aec43da) )
@@ -2859,12 +2859,12 @@ CONS( 1981, galaxy2b, galaxy2, 0, galaxy2b, galaxy2, driver_device, 0, "Epoch"
CONS( 1982, astrocmd, 0, 0, astrocmd, astrocmd, driver_device, 0, "Epoch", "Astro Command", MACHINE_SUPPORTS_SAVE )
CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", MACHINE_SUPPORTS_SAVE )
-CONS( 1980, grobot9, 0, 0, grobot9, grobot9, driver_device, 0, "Gakken", "Game Robot 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
-
CONS( 1979, mcompgin, 0, 0, mcompgin, mcompgin, driver_device, 0, "Mattel", "Computer Gin", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
CONS( 1979, mvbfree, 0, 0, mvbfree, mvbfree, driver_device, 0, "Mego", "Mini-Vid Break Free", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, grobot9, 0, 0, grobot9, grobot9, driver_device, 0, "Takatoku Toys", "Game Robot 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
+
CONS( 1980, tccombat, 0, 0, tccombat, tccombat, driver_device, 0, "Tomy", "Cosmic Combat", MACHINE_SUPPORTS_SAVE )
CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomy)", MACHINE_SUPPORTS_SAVE )
CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/ie15.cpp b/src/mame/drivers/ie15.cpp
index fdef494af27..c9c0710bb51 100644
--- a/src/mame/drivers/ie15.cpp
+++ b/src/mame/drivers/ie15.cpp
@@ -106,7 +106,7 @@ public:
private:
TIMER_CALLBACK_MEMBER(ie15_beepoff);
void update_leds();
- uint32_t draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline);
+ void draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline);
std::unique_ptr<uint32_t[]> m_tmpbmp;
emu_timer *m_hblank_timer;
@@ -526,7 +526,7 @@ void ie15_state::video_start()
XXX 'dotted look' is caused by strobe at 2x pixel clock -- use HLSL for this.
*/
-uint32_t ie15_state::draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline)
+void ie15_state::draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline)
{
static const uint32_t palette[2] = { 0xff000000, 0xff00c000 };
@@ -571,7 +571,6 @@ uint32_t ie15_state::draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanlin
*p++ = palette[0];
}
}
- return 0;
}
void ie15_state::update_leds()
diff --git a/src/mame/drivers/igs017.cpp b/src/mame/drivers/igs017.cpp
index a83e68acf48..e3ee18a5867 100644
--- a/src/mame/drivers/igs017.cpp
+++ b/src/mame/drivers/igs017.cpp
@@ -3952,10 +3952,10 @@ ROM_START( lhzb2 )
ROM_REGION( 0x10000, "igs022data", 0 ) // INTERNATIONAL GAMES SYSTEM CO.,LTD
ROM_LOAD( "m1104.u11",0x0000, 0x10000, CRC(794d0276) SHA1(ac903d2faa3fb315438dc8da22c5337611a8790d) )
- ROM_REGION( 0x400000, "sprites", 0 ) // adddress scrambling
+ ROM_REGION( 0x400000, "sprites", 0 ) // address scrambling
ROM_LOAD16_WORD_SWAP( "m1101.u6", 0x000000, 0x400000, CRC(0114e9d1) SHA1(5b16170d3cd8b8e1662c949b7234fbdd2ca927f7) ) // FIXED BITS (0xxxxxxxxxxxxxxx)
- ROM_REGION( 0x80000, "tilemaps", 0 ) // adddress scrambling
+ ROM_REGION( 0x80000, "tilemaps", 0 ) // address scrambling
ROM_LOAD16_WORD_SWAP( "m1103.u8", 0x00000, 0x80000, CRC(4d3776b4) SHA1(fa9b311b1a6ad56e136b66d090bc62ed5003b2f2) )
ROM_REGION( 0x80000, "oki", 0 )
@@ -3968,10 +3968,10 @@ ROM_START( lhzb2a )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "p-4096", 0x00000, 0x80000, CRC(41293f32) SHA1(df4e993f4a458729ade13981e58f32d8116c0082) )
- ROM_REGION( 0x400000, "sprites", 0 ) // adddress scrambling
+ ROM_REGION( 0x400000, "sprites", 0 ) // address scrambling
ROM_LOAD16_WORD_SWAP( "m1101.u6", 0x000000, 0x400000, CRC(0114e9d1) SHA1(5b16170d3cd8b8e1662c949b7234fbdd2ca927f7) ) // FIXED BITS (0xxxxxxxxxxxxxxx)
- ROM_REGION( 0x80000, "tilemaps", 0 ) // adddress scrambling
+ ROM_REGION( 0x80000, "tilemaps", 0 ) // address scrambling
ROM_LOAD16_WORD_SWAP( "m1103.u8", 0x00000, 0x80000, CRC(4d3776b4) SHA1(fa9b311b1a6ad56e136b66d090bc62ed5003b2f2) )
ROM_REGION( 0x80000, "oki", 0 )
@@ -4027,10 +4027,10 @@ ROM_START( slqz2 )
ROM_REGION( 0x10000, "igs022data", 0 ) // INTERNATIONAL GAMES SYSTEM CO.,LTD
ROM_LOAD( "m1103.u12", 0x00000, 0x10000, CRC(9f3b8d65) SHA1(5ee1ad025474399c2826f21d970e76f25d0fa1fd) )
- ROM_REGION( 0x400000, "sprites", 0 ) // adddress scrambling
+ ROM_REGION( 0x400000, "sprites", 0 ) // address scrambling
ROM_LOAD16_WORD_SWAP( "m1101.u4", 0x000000, 0x400000, CRC(0114e9d1) SHA1(5b16170d3cd8b8e1662c949b7234fbdd2ca927f7) ) // FIXED BITS (0xxxxxxxxxxxxxxx)
- ROM_REGION( 0x80000, "tilemaps", 0 ) // light adddress scrambling
+ ROM_REGION( 0x80000, "tilemaps", 0 ) // light address scrambling
ROM_LOAD( "text.u6", 0x00000, 0x80000, CRC(40d21adf) SHA1(18b202d6330ac89026bec2c9c8224b52540dd48d) )
ROM_REGION( 0x80000, "oki", 0 )
diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp
index a3a0ad9a0b6..a00456dbf47 100644
--- a/src/mame/drivers/mitchell.cpp
+++ b/src/mame/drivers/mitchell.cpp
@@ -628,60 +628,69 @@ static INPUT_PORTS_START( pkladies )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Deal") PORT_CODE(KEYCODE_LCONTROL)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 E") PORT_CODE(KEYCODE_E)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 A") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Deal")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold E / Cancel")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold A / Cancel")
PORT_MODIFY("KEY1")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Cancel") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Cancel")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 B") PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold B / Cancel")
PORT_MODIFY("KEY2")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Flip") PORT_CODE(KEYCODE_SPACE)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Flip")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 C") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold C / Cancel")
PORT_MODIFY("KEY3")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 D") PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold D / Cancel")
PORT_MODIFY("KEY4")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ // P2 inputs seem to be a leftover from mgakuen
PORT_MODIFY("KEY5")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Deal") PORT_CODE(KEYCODE_LCONTROL)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 E") PORT_CODE(KEYCODE_E)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 A") PORT_CODE(KEYCODE_A)
+ // PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Deal")
+ // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_PLAYER(2) PORT_NAME("Hold E")
+ // PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_PLAYER(2) PORT_NAME("Hold A")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY6")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Cancel") PORT_CODE(KEYCODE_LALT)
+ // PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("Cancel")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 B") PORT_CODE(KEYCODE_B)
+ // PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_PLAYER(2) PORT_NAME("Hold B")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY7")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Flip") PORT_CODE(KEYCODE_SPACE)
+ // PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("Flip")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 C") PORT_CODE(KEYCODE_C)
+ // PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_PLAYER(2) PORT_NAME("Hold C")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY8")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 D") PORT_CODE(KEYCODE_D)
+ // PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_PLAYER(2) PORT_NAME("Hold D")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY9")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
diff --git a/src/mame/drivers/superslave.cpp b/src/mame/drivers/superslave.cpp
index 14bb97e1252..f1bc7ed9d88 100644
--- a/src/mame/drivers/superslave.cpp
+++ b/src/mame/drivers/superslave.cpp
@@ -36,13 +36,13 @@ READ8_MEMBER( superslave_state::read )
{
uint8_t data = 0;
- offs_t boundry = 0xc000 | ((m_memctrl & 0xf0) << 6);
+ offs_t boundary = 0xc000 | ((m_memctrl & 0xf0) << 6);
if ((offset < 0x1000) && BIT(m_cmd, 0))
{
data = m_rom->base()[offset & 0x7ff];
}
- else if (offset < boundry)
+ else if (offset < boundary)
{
if (BIT(m_memctrl, 0))
{
@@ -68,9 +68,9 @@ READ8_MEMBER( superslave_state::read )
WRITE8_MEMBER( superslave_state::write )
{
- offs_t boundry = 0xc000 | ((m_memctrl & 0xf0) << 6);
+ offs_t boundary = 0xc000 | ((m_memctrl & 0xf0) << 6);
- if (offset < boundry)
+ if (offset < boundary)
{
if (BIT(m_memctrl, 0))
{
diff --git a/src/mame/machine/rmnimbus.cpp b/src/mame/machine/rmnimbus.cpp
index e4824cd2faa..2604d9c9072 100644
--- a/src/mame/machine/rmnimbus.cpp
+++ b/src/mame/machine/rmnimbus.cpp
@@ -687,8 +687,8 @@ static void decode_dssi_f_fill_area(device_t *device,uint16_t ds, uint16_t si,
device->logerror("Brush params\n");
device->logerror("Style=%04X, StyleIndex=%04X\n",brush->style,brush->style_index);
device->logerror("Colour1=%04X, Colour2=%04X\n",brush->colour1,brush->colour2);
- device->logerror("transparency=%04X, boundry_spec=%04X\n",brush->transparency,brush->boundary_spec);
- device->logerror("boundry colour=%04X, save colour=%04X\n",brush->boundary_colour,brush->save_colour);
+ device->logerror("transparency=%04X, boundary_spec=%04X\n",brush->transparency,brush->boundary_spec);
+ device->logerror("boundary colour=%04X, save colour=%04X\n",brush->boundary_colour,brush->save_colour);
OUTPUT_SEGOFS("SegData:OfsData",area_params->seg_data,area_params->ofs_data);
diff --git a/src/tools/chdman.cpp b/src/tools/chdman.cpp
index f3d84435af7..28a038d6625 100644
--- a/src/tools/chdman.cpp
+++ b/src/tools/chdman.cpp
@@ -1915,7 +1915,7 @@ static void do_create_cd(parameters_t &params)
// process numprocessors
parse_numprocessors(params);
- // pad each track to a 4-frame boundry. cdrom.c will deal with this on the read side
+ // pad each track to a 4-frame boundary. cdrom.c will deal with this on the read side
uint32_t origtotalsectors = 0;
uint32_t totalsectors = 0;
for (int tracknum = 0; tracknum < toc.numtrks; tracknum++)