trunk/src/emu/sound/okim6258.c
| r29524 | r29525 | |
| 108 | 108 | |
| 109 | 109 | void okim6258_device::device_start() |
| 110 | 110 | { |
| 111 | | const okim6258_interface *intf = (const okim6258_interface *)static_config(); |
| 112 | | |
| 113 | 111 | compute_tables(); |
| 114 | 112 | |
| 115 | 113 | m_master_clock = clock(); |
| 116 | | m_adpcm_type = intf->adpcm_type; |
| 117 | 114 | |
| 118 | | /* D/A precision is 10-bits but 12-bit data can be output serially to an external DAC */ |
| 119 | | m_output_bits = intf->output_12bits ? 12 : 10; |
| 120 | | m_divider = dividers[intf->divider]; |
| 115 | m_divider = dividers[m_start_divider]; |
| 121 | 116 | |
| 122 | 117 | m_stream = stream_alloc(0, 1, clock()/m_divider); |
| 123 | 118 | |
trunk/src/emu/sound/okim6258.h
| r29524 | r29525 | |
| 10 | 10 | #define TYPE_3BITS 0 |
| 11 | 11 | #define TYPE_4BITS 1 |
| 12 | 12 | |
| 13 | | #define OUTPUT_10BITS 0 |
| 14 | | #define OUTPUT_12BITS 1 |
| 13 | #define OUTPUT_10BITS 10 |
| 14 | #define OUTPUT_12BITS 12 |
| 15 | 15 | |
| 16 | 16 | |
| 17 | 17 | //************************************************************************** |
| r29524 | r29525 | |
| 23 | 23 | #define MCFG_OKIM6258_REPLACE(_tag, _clock) \ |
| 24 | 24 | MCFG_DEVICE_REPLACE(_tag, OKIM6258, _clock) |
| 25 | 25 | |
| 26 | #define MCFG_OKIM6258_DIVIDER(_div) \ |
| 27 | okim6258_device::set_start_div(*device, _div); |
| 26 | 28 | |
| 29 | #define MCFG_OKIM6258_ADPCM_TYPE(_type) \ |
| 30 | okim6258_device::set_type(*device, _type); |
| 31 | |
| 32 | #define MCFG_OKIM6258_OUT_BITS(_bits) \ |
| 33 | okim6258_device::set_outbits(*device, _bits); |
| 34 | |
| 35 | |
| 27 | 36 | //************************************************************************** |
| 28 | 37 | // TYPE DEFINITIONS |
| 29 | 38 | //************************************************************************** |
| 30 | 39 | |
| 31 | | struct okim6258_interface |
| 32 | | { |
| 33 | | int divider; |
| 34 | | int adpcm_type; |
| 35 | | int output_12bits; |
| 36 | | }; |
| 37 | | |
| 38 | | |
| 39 | 40 | // ======================> okim6258_device |
| 40 | 41 | |
| 41 | 42 | class okim6258_device : public device_t, |
| r29524 | r29525 | |
| 45 | 46 | okim6258_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 46 | 47 | ~okim6258_device() { } |
| 47 | 48 | |
| 49 | // static configuration |
| 50 | static void set_start_div(device_t &device, int div) { downcast<okim6258_device &>(device).m_start_divider = div; } |
| 51 | static void set_type(device_t &device, int type) { downcast<okim6258_device &>(device).m_adpcm_type = type; } |
| 52 | static void set_outbits(device_t &device, int outbit) { downcast<okim6258_device &>(device).m_output_bits = outbit; } |
| 53 | |
| 48 | 54 | protected: |
| 49 | 55 | // device-level overrides |
| 50 | 56 | virtual void device_start(); |
| r29524 | r29525 | |
| 71 | 77 | UINT8 m_status; |
| 72 | 78 | |
| 73 | 79 | UINT32 m_master_clock; /* master clock frequency */ |
| 80 | UINT32 m_start_divider; |
| 74 | 81 | UINT32 m_divider; /* master clock divider */ |
| 75 | 82 | UINT8 m_adpcm_type; /* 3/4 bit ADPCM select */ |
| 76 | 83 | UINT8 m_data_in; /* ADPCM data-in register */ |
| 77 | 84 | UINT8 m_nibble_shift; /* nibble select */ |
| 78 | 85 | sound_stream *m_stream; /* which stream are we playing on? */ |
| 79 | 86 | |
| 80 | | UINT8 m_output_bits; |
| 87 | UINT8 m_output_bits; /* D/A precision is 10-bits but 12-bit data can be |
| 88 | output serially to an external DAC */ |
| 81 | 89 | |
| 82 | 90 | INT32 m_signal; |
| 83 | 91 | INT32 m_step; |
trunk/src/mess/drivers/x68k.c
| r29524 | r29525 | |
| 1359 | 1359 | {attotime::from_usec(32),attotime::from_nsec(450),attotime::from_nsec(50),attotime::from_nsec(50)}, // Burst mode timing (guesstimate) |
| 1360 | 1360 | }; |
| 1361 | 1361 | |
| 1362 | | static const okim6258_interface x68k_okim6258_interface = |
| 1363 | | { |
| 1364 | | FOSC_DIV_BY_512, |
| 1365 | | TYPE_4BITS, |
| 1366 | | OUTPUT_10BITS, |
| 1367 | | }; |
| 1368 | | |
| 1369 | 1362 | static INPUT_PORTS_START( x68000 ) |
| 1370 | 1363 | PORT_START("ctrltype") |
| 1371 | 1364 | PORT_CONFNAME(0x0f, 0x00, "Joystick Port 1") |
| r29524 | r29525 | |
| 1870 | 1863 | MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(x68k_state,x68k_ct_w)) // CT1, CT2 from YM2151 port 0x1b |
| 1871 | 1864 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) |
| 1872 | 1865 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) |
| 1866 | |
| 1873 | 1867 | MCFG_OKIM6258_ADD("okim6258", 4000000) |
| 1874 | | MCFG_SOUND_CONFIG(x68k_okim6258_interface) |
| 1868 | MCFG_OKIM6258_DIVIDER(FOSC_DIV_BY_512) |
| 1869 | MCFG_OKIM6258_ADPCM_TYPE(TYPE_4BITS) |
| 1870 | MCFG_OKIM6258_OUT_BITS(OUTPUT_10BITS) |
| 1875 | 1871 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) |
| 1876 | 1872 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) |
| 1877 | 1873 | |