trunk/src/mess/drivers/mini2440.c
| r20499 | r20500 | |
| 30 | 30 | { |
| 31 | 31 | public: |
| 32 | 32 | mini2440_state(const machine_config &mconfig, device_type type, const char *tag) |
| 33 | | : driver_device(mconfig, type, tag), |
| 34 | | m_maincpu(*this, "maincpu") |
| 33 | : driver_device(mconfig, type, tag) |
| 34 | , m_maincpu(*this, "maincpu") |
| 35 | , m_s3c2440(*this, "s3c2440") |
| 36 | , m_nand(*this, "nand") |
| 37 | , m_dac1(*this, "dac1") |
| 38 | , m_dac2(*this, "dac2") |
| 39 | , m_penx(*this, "PENX") |
| 40 | , m_peny(*this, "PENY") |
| 35 | 41 | { } |
| 36 | 42 | |
| 37 | 43 | required_device<cpu_device> m_maincpu; |
| 44 | required_device<device_t> m_s3c2440; |
| 45 | required_device<nand_device> m_nand; |
| 46 | required_device<dac_device> m_dac1; |
| 47 | required_device<dac_device> m_dac2; |
| 48 | required_ioport m_penx; |
| 49 | required_ioport m_peny; |
| 38 | 50 | |
| 39 | | device_t *m_s3c2440; |
| 40 | | nand_device *m_nand; |
| 41 | | dac_device *m_dac[2]; |
| 42 | | |
| 43 | 51 | UINT32 m_port[9]; |
| 44 | 52 | DECLARE_DRIVER_INIT(mini2440); |
| 45 | 53 | virtual void machine_start(); |
| r20499 | r20500 | |
| 140 | 148 | static WRITE16_DEVICE_HANDLER( s3c2440_i2s_data_w ) |
| 141 | 149 | { |
| 142 | 150 | mini2440_state *state = space.machine().driver_data<mini2440_state>(); |
| 143 | | state->m_dac[offset]->write_signed16(data + 0x8000); |
| 151 | if ( offset ) |
| 152 | state->m_dac1->write_signed16(data + 0x8000); |
| 153 | else |
| 154 | state->m_dac2->write_signed16(data + 0x8000); |
| 144 | 155 | } |
| 145 | 156 | |
| 146 | 157 | // ADC |
| 147 | 158 | |
| 148 | 159 | static READ32_DEVICE_HANDLER( s3c2440_adc_data_r ) |
| 149 | 160 | { |
| 161 | mini2440_state *state = space.machine().driver_data<mini2440_state>(); |
| 162 | |
| 150 | 163 | UINT32 data = 0; |
| 151 | 164 | switch (offset) |
| 152 | 165 | { |
| 153 | | case 2 + 0 : data = space.machine().root_device().ioport( "PENX")->read(); break; |
| 154 | | case 2 + 1 : data = 915 - space.machine().root_device().ioport( "PENY")->read() + 90; break; |
| 166 | case 2 + 0 : data = state->m_penx->read(); break; |
| 167 | case 2 + 1 : data = 915 - state->m_peny->read() + 90; break; |
| 155 | 168 | } |
| 156 | 169 | verboselog( space.machine(), 5, "s3c2440_adc_data_r %08X\n", data); |
| 157 | 170 | return data; |
| r20499 | r20500 | |
| 168 | 181 | |
| 169 | 182 | void mini2440_state::machine_start() |
| 170 | 183 | { |
| 171 | | m_s3c2440 = machine().device("s3c2440"); |
| 172 | | m_nand = machine().device<nand_device>("nand"); |
| 173 | | m_dac[0] = machine().device<dac_device>("dac1"); |
| 174 | | m_dac[1] = machine().device<dac_device>("dac2"); |
| 175 | 184 | m_nand->set_data_ptr(memregion("nand")->base()); |
| 176 | 185 | } |
| 177 | 186 | |
| 178 | 187 | void mini2440_state::machine_reset() |
| 179 | 188 | { |
| 180 | | machine().device("maincpu")->reset(); |
| 189 | m_maincpu->reset(); |
| 181 | 190 | memset( m_port, 0, sizeof( m_port)); |
| 182 | 191 | } |
| 183 | 192 | |