trunk/src/mame/drivers/spectra.c
| r31351 | r31352 | |
| 27 | 27 | { |
| 28 | 28 | public: |
| 29 | 29 | spectra_state(const machine_config &mconfig, device_type type, const char *tag) |
| 30 | | : genpin_class(mconfig, type, tag), |
| 31 | | m_maincpu(*this, "maincpu"), |
| 32 | | m_snsnd(*this, "snsnd"), |
| 33 | | m_p_ram(*this, "ram") |
| 30 | : genpin_class(mconfig, type, tag) |
| 31 | , m_maincpu(*this, "maincpu") |
| 32 | , m_snsnd(*this, "snsnd") |
| 33 | , m_p_ram(*this, "nvram") |
| 34 | 34 | { } |
| 35 | 35 | |
| 36 | 36 | DECLARE_READ8_MEMBER(porta_r); |
| r31351 | r31352 | |
| 39 | 39 | DECLARE_WRITE8_MEMBER(portb_w); |
| 40 | 40 | TIMER_DEVICE_CALLBACK_MEMBER(nmitimer); |
| 41 | 41 | TIMER_DEVICE_CALLBACK_MEMBER(outtimer); |
| 42 | | protected: |
| 43 | | |
| 44 | | // devices |
| 45 | | required_device<cpu_device> m_maincpu; |
| 46 | | required_device<sn76477_device> m_snsnd; |
| 47 | | required_shared_ptr<UINT8> m_p_ram; |
| 48 | | |
| 49 | | // driver_device overrides |
| 50 | | virtual void machine_reset(); |
| 51 | 42 | private: |
| 52 | 43 | UINT8 m_porta; |
| 53 | 44 | UINT8 m_portb; |
| 54 | 45 | UINT8 m_t_c; |
| 55 | 46 | UINT8 m_out_offs; |
| 47 | virtual void machine_reset(); |
| 48 | required_device<cpu_device> m_maincpu; |
| 49 | required_device<sn76477_device> m_snsnd; |
| 50 | required_shared_ptr<UINT8> m_p_ram; |
| 56 | 51 | }; |
| 57 | 52 | |
| 58 | 53 | |
| 59 | 54 | static ADDRESS_MAP_START( spectra_map, AS_PROGRAM, 8, spectra_state ) |
| 60 | 55 | ADDRESS_MAP_UNMAP_HIGH |
| 61 | 56 | ADDRESS_MAP_GLOBAL_MASK(0xfff) |
| 62 | | AM_RANGE(0x0000, 0x00ff) AM_RAM AM_SHARE("ram") // battery backed, 2x 5101L |
| 57 | AM_RANGE(0x0000, 0x00ff) AM_RAM AM_SHARE("nvram") // battery backed, 2x 5101L |
| 63 | 58 | AM_RANGE(0x0100, 0x017f) AM_RAM // RIOT RAM |
| 64 | 59 | AM_RANGE(0x0180, 0x019f) AM_DEVREADWRITE("riot", riot6532_device, read, write) |
| 65 | 60 | AM_RANGE(0x0400, 0x0fff) AM_ROM |
| r31351 | r31352 | |
| 148 | 143 | if (BIT(data, 1)) vco -= 0.625; |
| 149 | 144 | if (BIT(data, 2)) vco -= 1.25; |
| 150 | 145 | if (BIT(data, 3)) vco -= 2.5; |
| 151 | | m_snsnd->vco_voltage_w(5.4 - vco); |
| 146 | m_snsnd->vco_voltage_w(5.3125 - vco); |
| 152 | 147 | m_snsnd->enable_w(!BIT(data, 4)); // strobe: toggles enable |
| 153 | 148 | m_snsnd->envelope_1_w(!BIT(data, 5)); //decay: toggles envelope |
| 154 | 149 | m_snsnd->vco_w(BIT(data, 6)); // "phaser" sound: VCO toggled |
| r31351 | r31352 | |
| 238 | 233 | MCFG_RIOT6532_OUT_PB_CB(WRITE8(spectra_state, portb_w)) |
| 239 | 234 | MCFG_RIOT6532_IRQ_CB(INPUTLINE("maincpu", M6502_IRQ_LINE)) |
| 240 | 235 | |
| 241 | | MCFG_NVRAM_ADD_1FILL("ram") |
| 236 | MCFG_NVRAM_ADD_1FILL("nvram") |
| 242 | 237 | |
| 243 | 238 | MCFG_TIMER_DRIVER_ADD_PERIODIC("nmitimer", spectra_state, nmitimer, attotime::from_hz(120)) |
| 244 | 239 | MCFG_TIMER_DRIVER_ADD_PERIODIC("outtimer", spectra_state, outtimer, attotime::from_hz(1200)) |