diff options
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/cpu/dsp56k/dsp56dsm.c | 50 | ||||
| -rw-r--r-- | src/emu/cpu/dsp56k/dsp56ops.c | 10 | ||||
| -rw-r--r-- | src/emu/cpu/s2650/s2650.c | 52 | ||||
| -rw-r--r-- | src/emu/devintrf.c | 6 | ||||
| -rw-r--r-- | src/emu/eigccx86.h | 2 | ||||
| -rw-r--r-- | src/emu/info.c | 4 | ||||
| -rw-r--r-- | src/emu/machine/6532riot.c | 2 | ||||
| -rw-r--r-- | src/emu/sound/cdp1863.c | 6 | ||||
| -rw-r--r-- | src/emu/sound/cdp1863.h | 4 | ||||
| -rw-r--r-- | src/emu/sound/cdp1864.c | 16 | ||||
| -rw-r--r-- | src/emu/sound/cdp1864.h | 48 | ||||
| -rw-r--r-- | src/emu/sound/disc_dev.c | 4 | ||||
| -rw-r--r-- | src/emu/sound/discrete.h | 2 | ||||
| -rw-r--r-- | src/emu/sound/tms5110.c | 14 | ||||
| -rw-r--r-- | src/emu/sound/tms5220.c | 158 |
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" |
