summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/cpu/dsp56k/dsp56dsm.c50
-rw-r--r--src/emu/cpu/dsp56k/dsp56ops.c10
-rw-r--r--src/emu/cpu/s2650/s2650.c52
-rw-r--r--src/emu/devintrf.c6
-rw-r--r--src/emu/eigccx86.h2
-rw-r--r--src/emu/info.c4
-rw-r--r--src/emu/machine/6532riot.c2
-rw-r--r--src/emu/sound/cdp1863.c6
-rw-r--r--src/emu/sound/cdp1863.h4
-rw-r--r--src/emu/sound/cdp1864.c16
-rw-r--r--src/emu/sound/cdp1864.h48
-rw-r--r--src/emu/sound/disc_dev.c4
-rw-r--r--src/emu/sound/discrete.h2
-rw-r--r--src/emu/sound/tms5110.c14
-rw-r--r--src/emu/sound/tms5220.c158
15 files changed, 189 insertions, 189 deletions
diff --git a/src/emu/cpu/dsp56k/dsp56dsm.c b/src/emu/cpu/dsp56k/dsp56dsm.c
index 67952b92100..9ed61a38f66 100644
--- a/src/emu/cpu/dsp56k/dsp56dsm.c
+++ b/src/emu/cpu/dsp56k/dsp56dsm.c
@@ -1,8 +1,8 @@
/***************************************************************************
- dsp56dsm.c
- Disassembler for the portable Motorola/Freescale dsp56k emulator.
- Written by Andrew Gardner
+ dsp56dsm.c
+ Disassembler for the portable Motorola/Freescale dsp56k emulator.
+ Written by Andrew Gardner
***************************************************************************/
@@ -229,7 +229,7 @@ CPU_DISASSEMBLE( dsp56k )
if ((op & 0xe000) == 0x6000)
{
char d_register[32] = "";
-
+
/* Quote: (MOVE, MAC(R), MPY(R), ADD, SUB, TFR) */
UINT16 op_byte = op & 0x00ff;
@@ -259,11 +259,11 @@ CPU_DISASSEMBLE( dsp56k )
else if ((op & 0xe09f) == 0x6010)
{
/* Note: The opcode encoding : 011x xxxx 0xx1 0000 (move + double memory read)
- is .identical. to (tfr X0,A + two parallel reads). This sparks the notion
- that these 'move' opcodes don't actually exist and are just there as
- documentation. Real-world examples would need to be examined to come
- to a satisfactory conclusion, but as it stands, tfr will override this
- move operation. */
+ is .identical. to (tfr X0,A + two parallel reads). This sparks the notion
+ that these 'move' opcodes don't actually exist and are just there as
+ documentation. Real-world examples would need to be examined to come
+ to a satisfactory conclusion, but as it stands, tfr will override this
+ move operation. */
size = dsp56k_dasm_move_1(op_byte, opcode_str, arg_str, d_register);
}
/* MPY : 011m mKKK 1xx0 F0QQ : A-160 */
@@ -356,10 +356,10 @@ CPU_DISASSEMBLE( dsp56k )
/* Now check it against all the other potential collisions */
/* This is necessary because "don't care bits" get in the way. */
/*
- MOVE(M) : 0000 0101 BBBB BBBB 0000 001W --0- -HHH : A-152
- MOVE(C) : 0000 0101 BBBB BBBB 0011 1WDD DDD0 ---- : A-144
- MOVE : 0000 0101 BBBB BBBB ---- HHHW 0001 0001 : A-128
- */
+ MOVE(M) : 0000 0101 BBBB BBBB 0000 001W --0- -HHH : A-152
+ MOVE(C) : 0000 0101 BBBB BBBB 0011 1WDD DDD0 ---- : A-144
+ MOVE : 0000 0101 BBBB BBBB ---- HHHW 0001 0001 : A-128
+ */
if (((op2 & 0xfe20) != 0x0200) &&
((op2 & 0xf810) != 0x3800) &&
((op2 & 0x00ff) != 0x0011))
@@ -1426,7 +1426,7 @@ static size_t dsp56k_dasm_cmp(const UINT16 op_byte, char* opcode_str, char* arg_
char D[32];
char S1[32];
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
- in before cmp, so the same decode function can be used. */
+ in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITS(op_byte,0x07), BITS(op_byte,0x08), S1, D);
sprintf(opcode_str, "cmp");
sprintf(arg_str, "%s,%s", S1, D);
@@ -1529,7 +1529,7 @@ static size_t dsp56k_dasm_cmpm(const UINT16 op_byte, char* opcode_str, char* arg
char D[32];
char S1[32];
/* Note: This is a JJJF limited in the docs, but other opcodes sneak
- in before cmp, so the same decode function can be used. */
+ in before cmp, so the same decode function can be used. */
decode_JJJF_table(BITS(op_byte,0x07), BITS(op_byte,0x08), S1, D);
sprintf(opcode_str, "cmpm");
sprintf(arg_str, "%s,%s", S1, D);
@@ -1541,7 +1541,7 @@ static size_t dsp56k_dasm_cmpm(const UINT16 op_byte, char* opcode_str, char* arg
static size_t dsp56k_dasm_mpy(const UINT16 op_byte, char* opcode_str, char* arg_str, char* d_register)
{
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
- but since it's a multiply it doesn't matter */
+ but since it's a multiply it doesn't matter */
char D[32];
char S1[32];
char S2[32];
@@ -1561,7 +1561,7 @@ static size_t dsp56k_dasm_mpy(const UINT16 op_byte, char* opcode_str, char* arg_
static size_t dsp56k_dasm_mpyr(const UINT16 op_byte, char* opcode_str, char* arg_str, char* d_register)
{
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
- but since it's a multiply it doesn't matter */
+ but since it's a multiply it doesn't matter */
char D[32];
char S1[32];
char S2[32];
@@ -1599,7 +1599,7 @@ static size_t dsp56k_dasm_mac(const UINT16 op_byte, char* opcode_str, char* arg_
static size_t dsp56k_dasm_macr(const UINT16 op_byte, char* opcode_str, char* arg_str, char* d_register)
{
/* There are inconsistencies with the S1 & S2 operand ordering in the docs,
- but since it's a multiply it doesn't matter */
+ but since it's a multiply it doesn't matter */
char D[32];
char S1[32];
char S2[32];
@@ -1881,8 +1881,8 @@ static size_t dsp56k_dasm_debugcc(const UINT16 op, char* opcode_str, char* arg_s
/* DIV : 0001 0101 0--0 F1DD : A-76 */
static size_t dsp56k_dasm_div(const UINT16 op, char* opcode_str, char* arg_str)
{
- /* The docs on page A-76 claim there is potential for a parallel move here,
- but various other sources (including elsewhere in the family manual) disagree */
+ /* The docs on page A-76 claim there is potential for a parallel move here,
+ but various other sources (including elsewhere in the family manual) disagree */
char D[32];
char S1[32];
decode_DDF_table(BITS(op,0x0003), BITS(op,0x0008), S1, D);
@@ -2485,10 +2485,10 @@ static size_t dsp56k_dasm_tcc(const UINT16 op, char* opcode_str, char* arg_str)
sprintf(arg_str, "%s,%s R0,R%d", S, D, Rnum);
/* Note: S == 'A' && D == 'A' is used by the assembler when "no Data ALU
- transfer is specified in the instruction." The Data ALU contains the
- X,Y,A,B registers. The AGU holds the R registers. This comment means
- the assembler will create Tcc A,A when it wants to conditionally transfer
- only a R register to another R register. */
+ transfer is specified in the instruction." The Data ALU contains the
+ X,Y,A,B registers. The AGU holds the R registers. This comment means
+ the assembler will create Tcc A,A when it wants to conditionally transfer
+ only a R register to another R register. */
return 1;
}
@@ -3204,7 +3204,7 @@ static void assemble_reg_from_W_table(UINT16 W, char *args, char ma, char *SD, I
UINT8 abs_xx;
char operation[32];
- if(xx < 0)
+ if(xx < 0)
sprintf(operation,"-");
else
sprintf(operation,"+");
diff --git a/src/emu/cpu/dsp56k/dsp56ops.c b/src/emu/cpu/dsp56k/dsp56ops.c
index d4d6e923400..df4471132b0 100644
--- a/src/emu/cpu/dsp56k/dsp56ops.c
+++ b/src/emu/cpu/dsp56k/dsp56ops.c
@@ -284,11 +284,11 @@ static void execute_one(dsp56k_core* cpustate)
else if ((op & 0xe09f) == 0x6010)
{
/* Note: The opcode encoding : 011x xxxx 0xx1 0000 (move + double memory read)
- is .identical. to (tfr X0,A + two parallel reads). This sparks the notion
- that these 'move' opcodes don't actually exist and are just there as
- documentation. Real-world examples would need to be examined to come
- to a satisfactory conclusion, but as it stands, tfr will override this
- move operation. */
+ is .identical. to (tfr X0,A + two parallel reads). This sparks the notion
+ that these 'move' opcodes don't actually exist and are just there as
+ documentation. Real-world examples would need to be examined to come
+ to a satisfactory conclusion, but as it stands, tfr will override this
+ move operation. */
size = dsp56k_op_move_1(cpustate, op_byte, &d_register, &cycle_count);
}
/* MPY : 011m mKKK 1xx0 F0QQ : A-160 */
diff --git a/src/emu/cpu/s2650/s2650.c b/src/emu/cpu/s2650/s2650.c
index 7a4a96b5021..5dee5200c4a 100644
--- a/src/emu/cpu/s2650/s2650.c
+++ b/src/emu/cpu/s2650/s2650.c
@@ -178,36 +178,36 @@ INLINE void set_sp(s2650_regs *s2650c, UINT8 new_sp)
INLINE int check_irq_line(s2650_regs *s2650c)
{
int cycles = 0;
-
+
if (s2650c->irq_state != CLEAR_LINE)
- {
- if( (s2650c->psu & II) == 0 )
- {
- int vector;
- if (s2650c->halt)
- {
+ {
+ if( (s2650c->psu & II) == 0 )
+ {
+ int vector;
+ if (s2650c->halt)
+ {
s2650c->halt = 0;
- s2650c->iar = (s2650c->iar + 1) & PMSK;
- }
- vector = (*s2650c->irq_callback)(s2650c->device, 0) & 0xff;
- /* build effective address within first 8K page */
- s2650c->ea = S2650_relative[vector] & PMSK;
- if (vector & 0x80) /* indirect bit set ? */
- {
- int addr = s2650c->ea;
- cycles += 6;
- /* build indirect 32K address */
- s2650c->ea = RDMEM(addr) << 8;
- if (!(++addr & PMSK)) addr -= PLEN;
+ s2650c->iar = (s2650c->iar + 1) & PMSK;
+ }
+ vector = (*s2650c->irq_callback)(s2650c->device, 0) & 0xff;
+ /* build effective address within first 8K page */
+ s2650c->ea = S2650_relative[vector] & PMSK;
+ if (vector & 0x80) /* indirect bit set ? */
+ {
+ int addr = s2650c->ea;
+ cycles += 6;
+ /* build indirect 32K address */
+ s2650c->ea = RDMEM(addr) << 8;
+ if (!(++addr & PMSK)) addr -= PLEN;
s2650c->ea = (s2650c->ea + RDMEM(addr)) & AMSK;
- }
+ }
LOG(("S2650 interrupt to $%04x\n", s2650c->ea));
set_sp(s2650c, get_sp(s2650c) + 1);
- set_psu(s2650c, s2650c->psu | II);
- s2650c->ras[get_sp(s2650c)] = s2650c->page + s2650c->iar;
- s2650c->page = s2650c->ea & PAGE;
- s2650c->iar = s2650c->ea & PMSK;
- }
+ set_psu(s2650c, s2650c->psu | II);
+ s2650c->ras[get_sp(s2650c)] = s2650c->page + s2650c->iar;
+ s2650c->page = s2650c->ea & PAGE;
+ s2650c->iar = s2650c->ea & PMSK;
+ }
}
return cycles;
}
@@ -891,7 +891,7 @@ static CPU_EXECUTE( s2650 )
/* check for external irqs */
s2650c->icount -= check_irq_line(s2650c);
-
+
do
{
s2650c->ppc = s2650c->page + s2650c->iar;
diff --git a/src/emu/devintrf.c b/src/emu/devintrf.c
index 57397dd18a1..69002896b3b 100644
--- a/src/emu/devintrf.c
+++ b/src/emu/devintrf.c
@@ -361,15 +361,15 @@ const device_config *device_list_find_by_tag(const device_config *listhead, cons
/*-------------------------------------------------
- device_find_child_by_tag - retrieve a child
- device configuration based on a tag
+ device_find_child_by_tag - retrieve a child
+ device configuration based on a tag
-------------------------------------------------*/
const device_config *device_find_child_by_tag(const device_config *owner, const char *tag)
{
astring *tempstring;
const device_config *child;
-
+
assert(owner != NULL);
assert(tag != NULL);
diff --git a/src/emu/eigccx86.h b/src/emu/eigccx86.h
index ae1b7951660..f9a3c3dbe0d 100644
--- a/src/emu/eigccx86.h
+++ b/src/emu/eigccx86.h
@@ -681,7 +681,7 @@ INLINE INT64 ATTR_UNUSED ATTR_FORCE_INLINE _get_profile_ticks(void)
result = ((UINT64)r2<<32) | (UINT64)r1;
return (INT64) (result & U64(0x7fffffffffffffff));
-}
+}
#endif
#endif /* __EIGCCX86__ */
diff --git a/src/emu/info.c b/src/emu/info.c
index 63602465a1b..3b90f81e9ed 100644
--- a/src/emu/info.c
+++ b/src/emu/info.c
@@ -521,11 +521,11 @@ static void print_game_rom(FILE *out, const game_driver *game, const machine_con
/* for disk entries, add the disk index */
else
fprintf(out, " index=\"%x\"", DISK_GETINDEX(rom));
-
+
/* add optional flag */
if ((!is_disk && ROM_ISOPTIONAL(rom)) || (is_disk && DISK_ISOPTIONAL(rom)))
fprintf(out, " optional=\"yes\"");
-
+
fprintf(out, "/>\n");
}
}
diff --git a/src/emu/machine/6532riot.c b/src/emu/machine/6532riot.c
index e98c7709510..8a2c7350be8 100644
--- a/src/emu/machine/6532riot.c
+++ b/src/emu/machine/6532riot.c
@@ -54,7 +54,7 @@ struct _riot6532_state
int index;
riot6532_port port[2];
-
+
devcb_resolved_write_line irq_func;
UINT8 irqstate;
diff --git a/src/emu/sound/cdp1863.c b/src/emu/sound/cdp1863.c
index 4ea3db0ce5f..47927f00e09 100644
--- a/src/emu/sound/cdp1863.c
+++ b/src/emu/sound/cdp1863.c
@@ -9,9 +9,9 @@
/*
- TODO:
+ TODO:
- - what happens if you connect both clocks?
+ - what happens if you connect both clocks?
*/
@@ -74,7 +74,7 @@ INLINE cdp1863_config *get_safe_config(const device_config *device)
WRITE8_DEVICE_HANDLER( cdp1863_str_w )
{
cdp1863_t *cdp1863 = get_safe_token(device);
-
+
cdp1863->latch = data;
}
diff --git a/src/emu/sound/cdp1863.h b/src/emu/sound/cdp1863.h
index f366c3ca430..31d0cf5329c 100644
--- a/src/emu/sound/cdp1863.h
+++ b/src/emu/sound/cdp1863.h
@@ -7,12 +7,12 @@
**********************************************************************
_____ _____
- _RESET 1 |* \_/ | 16 Vdd
+ _RESET 1 |* \_/ | 16 Vdd
CLK 2 2 | | 15 OE
CLK 1 3 | | 14 OUT
STR 4 | CDP1863 | 13 DO7
DI0 5 | | 12 DI6
- DI1 6 | | 11 DI5
+ DI1 6 | | 11 DI5
DI2 7 | | 10 DI4
Vss 8 |_____________| 9 DI3
diff --git a/src/emu/sound/cdp1864.c b/src/emu/sound/cdp1864.c
index 6bc9233fd7c..c2fcc343e4e 100644
--- a/src/emu/sound/cdp1864.c
+++ b/src/emu/sound/cdp1864.c
@@ -11,14 +11,14 @@
TODO:
- - interlace mode
- - PAL output, currently using RGB
- - cpu synchronization
-
- SC1 and SC0 are used to provide CDP1864C-to-CPU synchronization for a jitter-free display.
- During every horizontal sync the CDP1864C samples SC0 and SC1 for SC0 = 1 and SC1 = 0
- (CDP1800 execute state). Detection of a fetch cycle causes the CDP1864C to skip cycles to
- attain synchronization. (i.e. picture moves 8 pixels to the right)
+ - interlace mode
+ - PAL output, currently using RGB
+ - cpu synchronization
+
+ SC1 and SC0 are used to provide CDP1864C-to-CPU synchronization for a jitter-free display.
+ During every horizontal sync the CDP1864C samples SC0 and SC1 for SC0 = 1 and SC1 = 0
+ (CDP1800 execute state). Detection of a fetch cycle causes the CDP1864C to skip cycles to
+ attain synchronization. (i.e. picture moves 8 pixels to the right)
*/
diff --git a/src/emu/sound/cdp1864.h b/src/emu/sound/cdp1864.h
index 49307630ec3..f27a6c8a699 100644
--- a/src/emu/sound/cdp1864.h
+++ b/src/emu/sound/cdp1864.h
@@ -6,30 +6,30 @@
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************
- ________________
- INLACE 1 ---| \/ |--- 40 Vdd
- CLK IN_ 2 ---| |--- 39 AUD
- CLR OUT_ 3 ---| |--- 38 CLR IN_
- AOE 4 ---| |--- 37 DMA0_
- SC1 5 ---| |--- 36 INT_
- SC0 6 ---| |--- 35 TPA
- MRD_ 7 ---| |--- 34 TPB
- BUS 7 8 ---| |--- 33 EVS
- BUS 6 9 ---| |--- 32 V SYNC
- BUS 5 10 ---| CDP1864C |--- 31 H SYNC
- BUS 4 11 ---| top view |--- 30 C SYNC_
- BUS 3 12 ---| |--- 29 RED
- BUS 2 13 ---| |--- 28 BLUE
- BUS 1 14 ---| |--- 27 GREEN
- BUS 0 15 ---| |--- 26 BCK GND_
- CON_ 16 ---| |--- 25 BURST
- N2 17 ---| |--- 24 ALT
- EF_ 18 ---| |--- 23 R DATA
- N0 19 ---| |--- 22 G DATA
- Vss 20 ---|________________|--- 21 B DATA
-
-
- http://homepage.mac.com/ruske/cosmacelf/cdp1864.pdf
+ ________________
+ INLACE 1 ---| \/ |--- 40 Vdd
+ CLK IN_ 2 ---| |--- 39 AUD
+ CLR OUT_ 3 ---| |--- 38 CLR IN_
+ AOE 4 ---| |--- 37 DMA0_
+ SC1 5 ---| |--- 36 INT_
+ SC0 6 ---| |--- 35 TPA
+ MRD_ 7 ---| |--- 34 TPB
+ BUS 7 8 ---| |--- 33 EVS
+ BUS 6 9 ---| |--- 32 V SYNC
+ BUS 5 10 ---| CDP1864C |--- 31 H SYNC
+ BUS 4 11 ---| top view |--- 30 C SYNC_
+ BUS 3 12 ---| |--- 29 RED
+ BUS 2 13 ---| |--- 28 BLUE
+ BUS 1 14 ---| |--- 27 GREEN
+ BUS 0 15 ---| |--- 26 BCK GND_
+ CON_ 16 ---| |--- 25 BURST
+ N2 17 ---| |--- 24 ALT
+ EF_ 18 ---| |--- 23 R DATA
+ N0 19 ---| |--- 22 G DATA
+ Vss 20 ---|________________|--- 21 B DATA
+
+
+ http://homepage.mac.com/ruske/cosmacelf/cdp1864.pdf
**********************************************************************/
diff --git a/src/emu/sound/disc_dev.c b/src/emu/sound/disc_dev.c
index 00118b5fe4f..8a1ed05f36a 100644
--- a/src/emu/sound/disc_dev.c
+++ b/src/emu/sound/disc_dev.c
@@ -1583,8 +1583,8 @@ static DISCRETE_RESET(dsd_566)
* This approach gives a bit better results compared to the first approach.
*/
/* Original formula before optimization of static values
- #define LS624_F(_C, _VI, _VR) pow(10, -0.912029404 * log10(_C) + 0.243264328 * (_VI) \
- - 0.091695877 * (_VR) -0.014110946 * (_VI) * (_VR) - 3.207072925)
+ #define LS624_F(_C, _VI, _VR) pow(10, -0.912029404 * log10(_C) + 0.243264328 * (_VI) \
+ - 0.091695877 * (_VR) -0.014110946 * (_VI) * (_VR) - 3.207072925)
*/
#define LS624_F(_VI) pow(10, context->k1 + 0.243264328 * (_VI) + context->k2 * (_VI))
diff --git a/src/emu/sound/discrete.h b/src/emu/sound/discrete.h
index 77b9fa7fd3e..537f8d6ba9c 100644
--- a/src/emu/sound/discrete.h
+++ b/src/emu/sound/discrete.h
@@ -3552,7 +3552,7 @@ enum
#define DISC_SCHMITT_OSC_ENAB_IS_NOR 0x06
#define DISC_SCHMITT_OSC_ENAB_MASK 0x06 /* Bits that define output enable type.
- * Used only internally in module. */
+ * Used only internally in module. */
/* 555 Common output flags */
#define DISC_555_OUT_DC 0x00
diff --git a/src/emu/sound/tms5110.c b/src/emu/sound/tms5110.c
index 63c3e53aacc..aecfeb35934 100644
--- a/src/emu/sound/tms5110.c
+++ b/src/emu/sound/tms5110.c
@@ -32,8 +32,8 @@
PROM OUT | 13 16 | NC
VSS | 14 15 | M0
+-----------------+
-
- T11: Sync for serial data out
+
+ T11: Sync for serial data out
M58817
@@ -173,7 +173,7 @@ struct _tms5110_state
const UINT8 *table;
sound_stream *stream;
INT32 speech_rom_bitnum;
-
+
emu_timer *romclk_timer;
UINT8 romclk_state;
};
@@ -740,7 +740,7 @@ void tms5110_PDC_set(tms5110_state *tms, int data)
case TMS5110_CMD_TEST_TALK:
tms->state = CTL_STATE_NEXT_OUTPUT;
break;
-
+
default:
logerror("tms5110.c: unknown command: 0x%02x\n", tms->CTL_pins);
break;
@@ -962,7 +962,7 @@ static DEVICE_START( tms5110 )
tms->M0_callback = speech_rom_read_bit;
tms->set_load_address = speech_rom_set_addr;
}
-
+
tms->state = CTL_STATE_INPUT; /* most probably not defined */
register_for_save_states(tms);
@@ -1087,7 +1087,7 @@ WRITE8_DEVICE_HANDLER( tms5110_pdc_w )
immediately(?????? not TMS5110) by a RESET command.
TMS5110 datasheets mention this is only available as a result of executing
TEST TALK command.
-
+
FIXME: data read not implemented, CTL1 only available after TALK command
******************************************************************************/
@@ -1137,7 +1137,7 @@ READ8_DEVICE_HANDLER( tms5110_romclk_r )
/* bring up to date first */
stream_update(tms->stream);
-
+
/* create and start timer if necessary */
if (tms->romclk_timer == NULL)
{
diff --git a/src/emu/sound/tms5220.c b/src/emu/sound/tms5220.c
index 8573c1a443d..d96d2c6b8e7 100644
--- a/src/emu/sound/tms5220.c
+++ b/src/emu/sound/tms5220.c
@@ -39,101 +39,101 @@ Note the standard naming for d* data bits with 7 as MSB and 0 as LSB is in lower
TI's naming has D7 as LSB and D0 as MSB and is in uppercase
TODO:
- Implement a ready callback for pc interfaces
- - this will be quite a challenge since for it to be really accurate
- the whole emulation has to run in sync (lots of timers) with the
- cpu cores.
- If a command is still executing, /READY will be kept high until the command has
- finished if the next command is written.
- TMS5220C: see below.
- tomcat has a 5220 which is not hooked up at all
+ Implement a ready callback for pc interfaces
+ - this will be quite a challenge since for it to be really accurate
+ the whole emulation has to run in sync (lots of timers) with the
+ cpu cores.
+ If a command is still executing, /READY will be kept high until the command has
+ finished if the next command is written.
+ TMS5220C: see below.
+ tomcat has a 5220 which is not hooked up at all
Notes:
- Looping has the tms5220 hookep up directly to the cpu. However currently the
- tms9900 cpu core does not support a ready line.
-
- Email from Lord Nightmare having a lot more detail follows:
-
- Yes, there is at least two more differences:
-The 5220 is 'noisier' when playing unvoiced frames than the 5220C is; I
-think the 5220C may use a different energy table (or use one value lower
-in the normal energy table) than the 5220 does, possibly only when
-playing unvoiced frames, but I can't prove this without a decap; the
-5220C's PROMOUT pin (for dumping the lpc tables as played) is
+ Looping has the tms5220 hookep up directly to the cpu. However currently the
+ tms9900 cpu core does not support a ready line.
+
+ Email from Lord Nightmare having a lot more detail follows:
+
+ Yes, there is at least two more differences:
+The 5220 is 'noisier' when playing unvoiced frames than the 5220C is; I
+think the 5220C may use a different energy table (or use one value lower
+in the normal energy table) than the 5220 does, possibly only when
+playing unvoiced frames, but I can't prove this without a decap; the
+5220C's PROMOUT pin (for dumping the lpc tables as played) is
nonfunctional due to changed design or a die bug.
-In addition, the NOP commands on the FIFO interface have been changed
+In addition, the NOP commands on the FIFO interface have been changed
and data passed in the low bits has a meaning regarding frame length:
commands :
(lsb is right, msb is left; x means don't care)
-x0x0xbcc : (5220: NOP) (5220C: select frame length by cc, and b selects
-whether every frame is preceeded by 2 bits to select the frame length
-(instead of using the value set by cc)) (default is 00 for frame length
+x0x0xbcc : (5220: NOP) (5220C: select frame length by cc, and b selects
+whether every frame is preceeded by 2 bits to select the frame length
+(instead of using the value set by cc)) (default is 00 for frame length
(200 samples) and 0 for whether the preceeding 2 bits are enabled (off))
-x001xxxx: sends eight read bit commands (M0 high M1 low) to VSM and
-reads the resulting bits serially into a temporary register, which
-becomes readable as the next byte read from the tms52xx once ready goes
+x001xxxx: sends eight read bit commands (M0 high M1 low) to VSM and
+reads the resulting bits serially into a temporary register, which
+becomes readable as the next byte read from the tms52xx once ready goes
active.
-Note the bit order of the byte read from the TMS52xx is BACKWARDS as
-compared to the actual data order as in the rom on the VSM chips! This
-was IMHO a rather silly design decision of TI. (I asked Larry
-Brantingham about this but he wasn't involved with the TMS52xx chips,
+Note the bit order of the byte read from the TMS52xx is BACKWARDS as
+compared to the actual data order as in the rom on the VSM chips! This
+was IMHO a rather silly design decision of TI. (I asked Larry
+Brantingham about this but he wasn't involved with the TMS52xx chips,
just the 5100)
-There's ASCII data in the TI 99/4 speech module VSMs which has the bit
+There's ASCII data in the TI 99/4 speech module VSMs which has the bit
order reversed on purpose because of this!
-x011xxxx: sends a read and branch command (M0 high, M1 high) to force
-VSM to set its data pointer to whatever the data is at its current
+x011xxxx: sends a read and branch command (M0 high, M1 high) to force
+VSM to set its data pointer to whatever the data is at its current
pointer location is)
-x100aaaa: send a load address command (M0 low M1 high) to vsm with the 4
+x100aaaa: send a load address command (M0 low M1 high) to vsm with the 4
'a' bits
-x101xxxx: 'speak' begins speaking from current address in the data
+x101xxxx: 'speak' begins speaking from current address in the data
pointer of the vsms
x110xxxx: 'speak external' begins speaking from the 16 byte fifo
-x111xxxx: resets the speech synthesis core immediately; clears the bit
-offset counter in the fifo to the nearest byte 'forward ', but does NOT
+x111xxxx: resets the speech synthesis core immediately; clears the bit
+offset counter in the fifo to the nearest byte 'forward ', but does NOT
clear the fifo, annoyingly!
Its also possible but inconclusive that the chirp table was changed.
-The LPC tables between the 5220 and 5220C are MOSTLY the same of not
-completely so, but as mentioned above the energy table has some sort of
+The LPC tables between the 5220 and 5220C are MOSTLY the same of not
+completely so, but as mentioned above the energy table has some sort of
difference.
As for which games used which chips, from the TMS5220 wikipedia page:
-
+
TMS5200 AKA TMC0285: (1981 to 1983ish when supplies ran low)
- Arcade: Zaccaria's 'money money' and 'jack rabbit'; Bally/Midway's
-'Discs of Tron' (all environmental cabs and a few upright cabs; the code
-exists on all versions for the speech though, and upright cabs can be
-upgraded to add it by hacking on a 'Squawk & Talk' pinball speech board
+ Arcade: Zaccaria's 'money money' and 'jack rabbit'; Bally/Midway's
+'Discs of Tron' (all environmental cabs and a few upright cabs; the code
+exists on all versions for the speech though, and upright cabs can be
+upgraded to add it by hacking on a 'Squawk & Talk' pinball speech board
(which is also TMS5200 based) with a few modded components)
Pinball: All Bally/Midway machines which uses the 'Squawk & Talk' board.
- Home computer: TI 99/4 PHP1500 Speech module (along with two VSM
-serial chips); Street Electronics Corp.'s Apple II 'Echo 2' Speech
+ Home computer: TI 99/4 PHP1500 Speech module (along with two VSM
+serial chips); Street Electronics Corp.'s Apple II 'Echo 2' Speech
synthesizer (early cards only)
-TMS5220: (mostly on things made between 1982 and 1984-1985 when supplies
+TMS5220: (mostly on things made between 1982 and 1984-1985 when supplies
ran low)
- Arcade: Bally/Midway's 'NFL Football'; Atari's 'Star Wars',
-'Firefox', 'Return of the Jedi', 'Road Runner', 'The Empire Strikes
-Back' (all verified with schematics); Venture Line's 'Looping' and 'Sky
-Bumper' (need verify for both); Olympia's 'Portraits' (need verify);
+ Arcade: Bally/Midway's 'NFL Football'; Atari's 'Star Wars',
+'Firefox', 'Return of the Jedi', 'Road Runner', 'The Empire Strikes
+Back' (all verified with schematics); Venture Line's 'Looping' and 'Sky
+Bumper' (need verify for both); Olympia's 'Portraits' (need verify);
Exidy's 'Victory' and 'Victor Banana' (need verify for both)
Pinball: Several (don't know names offhand, have not checked schematics)
- Home computer: Street Electronics Corp.'s Apple II 'Echo 2' Speech
-synthesizer (later cards only); Texas Instruments' 'Speak and Learn'
+ Home computer: Street Electronics Corp.'s Apple II 'Echo 2' Speech
+synthesizer (later cards only); Texas Instruments' 'Speak and Learn'
scanner wand unit.
TMS5220C AKA TSP5220C: (on stuff made from 1984 to 1992 or so)
- Arcade: Atari's 'Indiana Jones and the Temple of Doom', '720',
-'Gauntlet', 'Gauntlet II', 'A.P.B.', 'Paperboy', 'RoadBlasters',
-'Vindicators Pt II'(verify?), and 'Escape from the Planet of the Robot
+ Arcade: Atari's 'Indiana Jones and the Temple of Doom', '720',
+'Gauntlet', 'Gauntlet II', 'A.P.B.', 'Paperboy', 'RoadBlasters',
+'Vindicators Pt II'(verify?), and 'Escape from the Planet of the Robot
Monsters' (all verified except for vindicators pt 2)
- Pinball: Several (less common than the tms5220? (not sure about
+ Pinball: Several (less common than the tms5220? (not sure about
this), mostly on later pinballs with LPC speech)
- Home computer: Street Electronics Corp.'s 'ECHO' parallel/hobbyist
-module (6511 based), IBM PS/2 Speech adapter (parallel port connection
+ Home computer: Street Electronics Corp.'s 'ECHO' parallel/hobbyist
+module (6511 based), IBM PS/2 Speech adapter (parallel port connection
device), PES Speech adapter (serial port connection)
@@ -177,7 +177,7 @@ struct _tms5220_state
{
/* callbacks */
devcb_resolved_write_line irq_func;
-
+
/* these contain data that describes the 128-bit data FIFO */
UINT8 fifo[FIFO_SIZE];
UINT8 fifo_head;
@@ -242,20 +242,20 @@ struct _tms5220_state
UINT8 RDB_flag; /* whether we should read data register or status register */
/* io_ready: page 3 of the datasheet specifies that READY will be asserted until
- * data is available or processed by the system.
- */
-
+ * data is available or processed by the system.
+ */
+
UINT8 io_ready;
-
+
/* flag for "true" timing involving rs/ws */
-
+
UINT8 true_timing;
-
+
/* rsws - state, rs bit 1, ws bit 0 */
UINT8 rs_ws;
UINT8 read_latch;
UINT8 write_latch;
-
+
/* flag for variant tmc0285/tms5200 emulation */
/* The TMC0285 AKA TMS5200 is an earlier variant of the TMS5220 used in
the early releases of the Speech Module for the TI-99/4(a) computer,
@@ -1220,7 +1220,7 @@ static DEVICE_START( tms5220 )
tms->clock = device->clock;
/* resolve */
-
+
devcb_resolve_write_line(&tms->irq_func, &tms->intf->irq_func, device);
/* initialize a stream */
@@ -1229,7 +1229,7 @@ static DEVICE_START( tms5220 )
/* not during reset which is called frm within a write! */
tms->io_ready = 1;
tms->true_timing = 0;
-
+
tms->variant = variant_tms5220;
register_for_save_states(tms);
}
@@ -1333,10 +1333,10 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_rsq_w )
{
tms5220_state *tms = get_safe_token(device);
UINT8 new;
-
+
tms->true_timing = 1;
state &= 0x01;
-
+
new = (tms->rs_ws & 0x01) | (state<<1);
if (new != tms->rs_ws)
{
@@ -1345,11 +1345,11 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_rsq_w )
{
if (tms->variant == variant_tms5220c)
device_reset(device);
- else
+ else
/* illegal */
LOG(("tms5220_rs_w: illegal\n"));
return;
- }
+ }
else if ( new == 3)
{
/* high impedance */
@@ -1359,7 +1359,7 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_rsq_w )
if (state)
{
/* low to high */
- }
+ }
else
{
/* high to low - schedule ready cycle*/
@@ -1377,7 +1377,7 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_wsq_w )
{
tms5220_state *tms = get_safe_token(device);
UINT8 new;
-
+
tms->true_timing = 1;
state &= 0x01;
new = (tms->rs_ws & 0x02) | (state<<0);
@@ -1388,11 +1388,11 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_wsq_w )
{
if (tms->variant == variant_tms5220c)
device_reset(device);
- else
+ else
/* illegal */
LOG(("tms5220_ws_w: illegal\n"));
return;
- }
+ }
else if ( new == 3)
{
/* high impedance */
@@ -1402,7 +1402,7 @@ WRITE_LINE_DEVICE_HANDLER( tms5220_wsq_w )
if (state)
{
/* low to high */
- }
+ }
else
{
/* high to low - schedule ready cycle*/
@@ -1577,7 +1577,7 @@ static const char DEVTEMPLATE_SOURCE[] = __FILE__;
#include "devtempl.h"
#define DEVTEMPLATE_DERIVED_ID(p,s) p##tms5220c##s
-#define DEVTEMPLATE_DERIVED_FEATURES DT_HAS_START
+#define DEVTEMPLATE_DERIVED_FEATURES DT_HAS_START
#define DEVTEMPLATE_DERIVED_NAME "TMS5220C"
#include "devtempl.h"