Reversing previous submission. The AY8910 has so many ways it can be hooked, that it doesn't really make sense to designate any one as "natural"

This commit is contained in:
Zsolt Vasvari 2008-01-22 02:02:09 +00:00
parent 1a17348787
commit 2c63c6e3d4
4 changed files with 10 additions and 151 deletions

View File

@ -240,54 +240,6 @@ static void _AYWriteReg(struct AY8910 *PSG, int r, int v)
/* AY8910 interface */ /* AY8910 interface */
static UINT8 ay8910_r(int which, offs_t offset)
{
UINT8 ret;
struct AY8910 *PSG = sndti_token(SOUND_AY8910, which);
if (offset & 0x01)
ret = ay8910_read_ym(PSG);
else
/* return whatever the chip returns for a write
when BC1 = 0 and BDIR = 0 */
ret = 0x00;
return ret;
}
READ8_HANDLER( AY8910_0_r ) { return ay8910_r(0, offset); }
READ8_HANDLER( AY8910_1_r ) { return ay8910_r(1, offset); }
READ8_HANDLER( AY8910_2_r ) { return ay8910_r(2, offset); }
READ8_HANDLER( AY8910_3_r ) { return ay8910_r(3, offset); }
READ8_HANDLER( AY8910_4_r ) { return ay8910_r(4, offset); }
READ16_HANDLER( AY8910_0_lsb_r ) { return ay8910_r(0, offset); }
READ16_HANDLER( AY8910_1_lsb_r ) { return ay8910_r(1, offset); }
READ16_HANDLER( AY8910_2_lsb_r ) { return ay8910_r(2, offset); }
READ16_HANDLER( AY8910_3_lsb_r ) { return ay8910_r(3, offset); }
READ16_HANDLER( AY8910_4_lsb_r ) { return ay8910_r(4, offset); }
READ16_HANDLER( AY8910_0_msb_r ) { return ay8910_r(0, offset) << 8; }
READ16_HANDLER( AY8910_1_msb_r ) { return ay8910_r(1, offset) << 8; }
READ16_HANDLER( AY8910_2_msb_r ) { return ay8910_r(2, offset) << 8; }
READ16_HANDLER( AY8910_3_msb_r ) { return ay8910_r(3, offset) << 8; }
READ16_HANDLER( AY8910_4_msb_r ) { return ay8910_r(4, offset) << 8; }
READ8_HANDLER( AY8910_0_inv_a0_r ) { return ay8910_r(0, offset ^ 1); }
READ8_HANDLER( AY8910_1_inv_a0_r ) { return ay8910_r(1, offset ^ 1); }
READ8_HANDLER( AY8910_2_inv_a0_r ) { return ay8910_r(2, offset ^ 1); }
READ8_HANDLER( AY8910_3_inv_a0_r ) { return ay8910_r(3, offset ^ 1); }
READ8_HANDLER( AY8910_4_inv_a0_r ) { return ay8910_r(4, offset ^ 1); }
READ16_HANDLER( AY8910_0_lsb_inv_a0_r ) { return ay8910_r(0, offset ^ 1); }
READ16_HANDLER( AY8910_1_lsb_inv_a0_r ) { return ay8910_r(1, offset ^ 1); }
READ16_HANDLER( AY8910_2_lsb_inv_a0_r ) { return ay8910_r(2, offset ^ 1); }
READ16_HANDLER( AY8910_3_lsb_inv_a0_r ) { return ay8910_r(3, offset ^ 1); }
READ16_HANDLER( AY8910_4_lsb_inv_a0_r ) { return ay8910_r(4, offset ^ 1); }
READ16_HANDLER( AY8910_0_msb_inv_a0_r ) { return ay8910_r(0, offset ^ 1) << 8; }
READ16_HANDLER( AY8910_1_msb_inv_a0_r ) { return ay8910_r(1, offset ^ 1) << 8; }
READ16_HANDLER( AY8910_2_msb_inv_a0_r ) { return ay8910_r(2, offset ^ 1) << 8; }
READ16_HANDLER( AY8910_3_msb_inv_a0_r ) { return ay8910_r(3, offset ^ 1) << 8; }
READ16_HANDLER( AY8910_4_msb_inv_a0_r ) { return ay8910_r(4, offset ^ 1) << 8; }
READ8_HANDLER( AY8910_read_port_0_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 0)); } READ8_HANDLER( AY8910_read_port_0_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 0)); }
READ8_HANDLER( AY8910_read_port_1_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 1)); } READ8_HANDLER( AY8910_read_port_1_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 1)); }
READ8_HANDLER( AY8910_read_port_2_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 2)); } READ8_HANDLER( AY8910_read_port_2_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 2)); }
@ -304,38 +256,6 @@ READ16_HANDLER( AY8910_read_port_2_msb_r ) { return ay8910_read_ym(sndti_token(S
READ16_HANDLER( AY8910_read_port_3_msb_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 3)) << 8; } READ16_HANDLER( AY8910_read_port_3_msb_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 3)) << 8; }
READ16_HANDLER( AY8910_read_port_4_msb_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 4)) << 8; } READ16_HANDLER( AY8910_read_port_4_msb_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 4)) << 8; }
WRITE8_HANDLER( AY8910_0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data); }
WRITE8_HANDLER( AY8910_1_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 1), offset & 1, data); }
WRITE8_HANDLER( AY8910_2_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 2), offset & 1, data); }
WRITE8_HANDLER( AY8910_3_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 3), offset & 1, data); }
WRITE8_HANDLER( AY8910_4_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 4), offset & 1, data); }
WRITE16_HANDLER( AY8910_0_lsb_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data & 0xff); }
WRITE16_HANDLER( AY8910_1_lsb_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 1), offset & 1, data & 0xff); }
WRITE16_HANDLER( AY8910_2_lsb_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 2), offset & 1, data & 0xff); }
WRITE16_HANDLER( AY8910_3_lsb_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 3), offset & 1, data & 0xff); }
WRITE16_HANDLER( AY8910_4_lsb_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 4), offset & 1, data & 0xff); }
WRITE16_HANDLER( AY8910_0_msb_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data >> 8); }
WRITE16_HANDLER( AY8910_1_msb_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data >> 8); }
WRITE16_HANDLER( AY8910_2_msb_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data >> 8); }
WRITE16_HANDLER( AY8910_3_msb_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data >> 8); }
WRITE16_HANDLER( AY8910_4_msb_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), offset & 1, data >> 8); }
WRITE8_HANDLER( AY8910_0_inv_a0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data); }
WRITE8_HANDLER( AY8910_1_inv_a0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 1), (offset & 1) ^ 1, data); }
WRITE8_HANDLER( AY8910_2_inv_a0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 2), (offset & 1) ^ 1, data); }
WRITE8_HANDLER( AY8910_3_inv_a0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 3), (offset & 1) ^ 1, data); }
WRITE8_HANDLER( AY8910_4_inv_a0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 4), (offset & 1) ^ 1, data); }
WRITE16_HANDLER( AY8910_0_lsb_inv_a0_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data & 0xff); }
WRITE16_HANDLER( AY8910_1_lsb_inv_a0_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 1), (offset & 1) ^ 1, data & 0xff); }
WRITE16_HANDLER( AY8910_2_lsb_inv_a0_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 2), (offset & 1) ^ 1, data & 0xff); }
WRITE16_HANDLER( AY8910_3_lsb_inv_a0_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 3), (offset & 1) ^ 1, data & 0xff); }
WRITE16_HANDLER( AY8910_4_lsb_inv_a0_w ) { if (ACCESSING_LSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 4), (offset & 1) ^ 1, data & 0xff); }
WRITE16_HANDLER( AY8910_0_msb_inv_a0_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data >> 8); }
WRITE16_HANDLER( AY8910_1_msb_inv_a0_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data >> 8); }
WRITE16_HANDLER( AY8910_2_msb_inv_a0_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data >> 8); }
WRITE16_HANDLER( AY8910_3_msb_inv_a0_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data >> 8); }
WRITE16_HANDLER( AY8910_4_msb_inv_a0_w ) { if (ACCESSING_MSB) ay8910_write_ym(sndti_token(SOUND_AY8910, 0), (offset & 1) ^ 1, data >> 8); }
WRITE8_HANDLER( AY8910_control_port_0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 0),0,data); } WRITE8_HANDLER( AY8910_control_port_0_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 0),0,data); }
WRITE8_HANDLER( AY8910_control_port_1_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 1),0,data); } WRITE8_HANDLER( AY8910_control_port_1_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 1),0,data); }
WRITE8_HANDLER( AY8910_control_port_2_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 2),0,data); } WRITE8_HANDLER( AY8910_control_port_2_w ) { ay8910_write_ym(sndti_token(SOUND_AY8910, 2),0,data); }

View File

@ -27,38 +27,6 @@ struct AY8910interface
void AY8910_set_volume(int chip,int channel,int volume); void AY8910_set_volume(int chip,int channel,int volume);
READ8_HANDLER( AY8910_0_r );
READ8_HANDLER( AY8910_1_r );
READ8_HANDLER( AY8910_2_r );
READ8_HANDLER( AY8910_3_r );
READ8_HANDLER( AY8910_4_r );
READ16_HANDLER( AY8910_0_lsb_r );
READ16_HANDLER( AY8910_1_lsb_r );
READ16_HANDLER( AY8910_2_lsb_r );
READ16_HANDLER( AY8910_3_lsb_r );
READ16_HANDLER( AY8910_4_lsb_r );
READ16_HANDLER( AY8910_0_msb_r );
READ16_HANDLER( AY8910_1_msb_r );
READ16_HANDLER( AY8910_2_msb_r );
READ16_HANDLER( AY8910_3_msb_r );
READ16_HANDLER( AY8910_4_msb_r );
READ8_HANDLER( AY8910_0_inv_a0_r );
READ8_HANDLER( AY8910_1_inv_a0_r );
READ8_HANDLER( AY8910_2_inv_a0_r );
READ8_HANDLER( AY8910_3_inv_a0_r );
READ8_HANDLER( AY8910_4_inv_a0_r );
READ16_HANDLER( AY8910_0_lsb_inv_a0_r );
READ16_HANDLER( AY8910_1_lsb_inv_a0_r );
READ16_HANDLER( AY8910_2_lsb_inv_a0_r );
READ16_HANDLER( AY8910_3_lsb_inv_a0_r );
READ16_HANDLER( AY8910_4_lsb_inv_a0_r );
READ16_HANDLER( AY8910_0_msb_inv_a0_r );
READ16_HANDLER( AY8910_1_msb_inv_a0_r );
READ16_HANDLER( AY8910_2_msb_inv_a0_r );
READ16_HANDLER( AY8910_3_msb_inv_a0_r );
READ16_HANDLER( AY8910_4_msb_inv_a0_r );
READ8_HANDLER( AY8910_read_port_0_r ); READ8_HANDLER( AY8910_read_port_0_r );
READ8_HANDLER( AY8910_read_port_1_r ); READ8_HANDLER( AY8910_read_port_1_r );
READ8_HANDLER( AY8910_read_port_2_r ); READ8_HANDLER( AY8910_read_port_2_r );
@ -75,38 +43,6 @@ READ16_HANDLER( AY8910_read_port_2_msb_r );
READ16_HANDLER( AY8910_read_port_3_msb_r ); READ16_HANDLER( AY8910_read_port_3_msb_r );
READ16_HANDLER( AY8910_read_port_4_msb_r ); READ16_HANDLER( AY8910_read_port_4_msb_r );
WRITE8_HANDLER( AY8910_0_w );
WRITE8_HANDLER( AY8910_1_w );
WRITE8_HANDLER( AY8910_2_w );
WRITE8_HANDLER( AY8910_3_w );
WRITE8_HANDLER( AY8910_4_w );
WRITE16_HANDLER( AY8910_0_lsb_w );
WRITE16_HANDLER( AY8910_1_lsb_w );
WRITE16_HANDLER( AY8910_2_lsb_w );
WRITE16_HANDLER( AY8910_3_lsb_w );
WRITE16_HANDLER( AY8910_4_lsb_w );
WRITE16_HANDLER( AY8910_0_msb_w );
WRITE16_HANDLER( AY8910_1_msb_w );
WRITE16_HANDLER( AY8910_2_msb_w );
WRITE16_HANDLER( AY8910_3_msb_w );
WRITE16_HANDLER( AY8910_4_msb_w );
WRITE8_HANDLER( AY8910_0_inv_a0_w );
WRITE8_HANDLER( AY8910_1_inv_a0_w );
WRITE8_HANDLER( AY8910_2_inv_a0_w );
WRITE8_HANDLER( AY8910_3_inv_a0_w );
WRITE8_HANDLER( AY8910_4_inv_a0_w );
WRITE16_HANDLER( AY8910_0_lsb_inv_a0_w );
WRITE16_HANDLER( AY8910_1_lsb_inv_a0_w );
WRITE16_HANDLER( AY8910_2_lsb_inv_a0_w );
WRITE16_HANDLER( AY8910_3_lsb_inv_a0_w );
WRITE16_HANDLER( AY8910_4_lsb_inv_a0_w );
WRITE16_HANDLER( AY8910_0_msb_inv_a0_w );
WRITE16_HANDLER( AY8910_1_msb_inv_a0_w );
WRITE16_HANDLER( AY8910_2_msb_inv_a0_w );
WRITE16_HANDLER( AY8910_3_msb_inv_a0_w );
WRITE16_HANDLER( AY8910_4_msb_inv_a0_w );
WRITE8_HANDLER( AY8910_control_port_0_w ); WRITE8_HANDLER( AY8910_control_port_0_w );
WRITE8_HANDLER( AY8910_control_port_1_w ); WRITE8_HANDLER( AY8910_control_port_1_w );
WRITE8_HANDLER( AY8910_control_port_2_w ); WRITE8_HANDLER( AY8910_control_port_2_w );
@ -139,7 +75,6 @@ WRITE16_HANDLER( AY8910_write_port_2_msb_w );
WRITE16_HANDLER( AY8910_write_port_3_msb_w ); WRITE16_HANDLER( AY8910_write_port_3_msb_w );
WRITE16_HANDLER( AY8910_write_port_4_msb_w ); WRITE16_HANDLER( AY8910_write_port_4_msb_w );
/*********** An interface for SSG of YM2203 ***********/ /*********** An interface for SSG of YM2203 ***********/
void *ay8910_start_ym(sound_type chip_type, int sndindex, int clock, int streams, void *ay8910_start_ym(sound_type chip_type, int sndindex, int clock, int streams,

View File

@ -537,8 +537,10 @@ static ADDRESS_MAP_START( nyny_audio_1_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0080, 0x0fff) AM_NOP AM_RANGE(0x0080, 0x0fff) AM_NOP
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READWRITE(soundlatch_r, audio_1_answer_w) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READWRITE(soundlatch_r, audio_1_answer_w)
AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0fff) AM_READ(input_port_4_r) AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0fff) AM_READ(input_port_4_r)
AM_RANGE(0x3000, 0x3001) AM_MIRROR(0x0ffc) AM_READWRITE(AY8910_0_inv_a0_r, AY8910_0_inv_a0_w) AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0ffc) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
AM_RANGE(0x3002, 0x3003) AM_MIRROR(0x0ffc) AM_READWRITE(AY8910_1_inv_a0_r, AY8910_1_inv_a0_w) AM_RANGE(0x3001, 0x3001) AM_MIRROR(0x0ffc) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x3002, 0x3002) AM_MIRROR(0x0ffc) AM_READWRITE(AY8910_read_port_1_r, AY8910_write_port_1_w)
AM_RANGE(0x3003, 0x3003) AM_MIRROR(0x0ffc) AM_WRITE(AY8910_control_port_1_w)
AM_RANGE(0x4000, 0x4fff) AM_NOP AM_RANGE(0x4000, 0x4fff) AM_NOP
AM_RANGE(0x5000, 0x57ff) AM_MIRROR(0x0800) AM_ROM AM_RANGE(0x5000, 0x57ff) AM_MIRROR(0x0800) AM_ROM
AM_RANGE(0x6000, 0x67ff) AM_MIRROR(0x0800) AM_ROM AM_RANGE(0x6000, 0x67ff) AM_MIRROR(0x0800) AM_ROM
@ -551,7 +553,8 @@ static ADDRESS_MAP_START( nyny_audio_2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */ AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
AM_RANGE(0x0080, 0x0fff) AM_NOP AM_RANGE(0x0080, 0x0fff) AM_NOP
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READ(soundlatch2_r) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0fff) AM_READ(soundlatch2_r)
AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x0ffe) AM_READWRITE(AY8910_2_inv_a0_r, AY8910_2_inv_a0_w) AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0ffe) AM_READWRITE(AY8910_read_port_2_r, AY8910_write_port_2_w)
AM_RANGE(0x2001, 0x2001) AM_MIRROR(0x0ffe) AM_WRITE(AY8910_control_port_2_w)
AM_RANGE(0x3000, 0x6fff) AM_NOP AM_RANGE(0x3000, 0x6fff) AM_NOP
AM_RANGE(0x7000, 0x77ff) AM_MIRROR(0x0800) AM_ROM AM_RANGE(0x7000, 0x77ff) AM_MIRROR(0x0800) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -206,15 +206,16 @@ static ADDRESS_MAP_START( io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x30, 0x30) AM_WRITE(thief_input_select_w) // 8255 AM_RANGE(0x30, 0x30) AM_WRITE(thief_input_select_w) // 8255
AM_RANGE(0x31, 0x31) AM_READ(thief_io_r) // 8255 AM_RANGE(0x31, 0x31) AM_READ(thief_io_r) // 8255
AM_RANGE(0x33, 0x33) AM_WRITE(tape_control_w) AM_RANGE(0x33, 0x33) AM_WRITE(tape_control_w)
AM_RANGE(0x40, 0x41) AM_READWRITE(AY8910_0_r, AY8910_0_w) AM_RANGE(0x40, 0x40) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x42, 0x43) AM_READWRITE(AY8910_1_r, AY8910_1_w) AM_RANGE(0x41, 0x41) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
AM_RANGE(0x42, 0x42) AM_WRITE(AY8910_control_port_1_w)
AM_RANGE(0x43, 0x43) AM_READWRITE(AY8910_read_port_1_r, AY8910_write_port_1_w)
AM_RANGE(0x50, 0x50) AM_WRITE(thief_color_plane_w) AM_RANGE(0x50, 0x50) AM_WRITE(thief_color_plane_w)
AM_RANGE(0x60, 0x6f) AM_WRITE(thief_vtcsel_w) AM_RANGE(0x60, 0x6f) AM_WRITE(thief_vtcsel_w)
AM_RANGE(0x70, 0x7f) AM_WRITE(thief_color_map_w) AM_RANGE(0x70, 0x7f) AM_WRITE(thief_color_map_w)
ADDRESS_MAP_END ADDRESS_MAP_END
/**********************************************************/ /**********************************************************/
static INPUT_PORTS_START( sharkatt ) static INPUT_PORTS_START( sharkatt )