diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2013-04-18 14:52:27 +0000 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2013-04-18 14:52:27 +0000 |
commit | 96f1b3375fd9c64d5b2f7f607f2f24f2bd6f5e5b (patch) | |
tree | bd362d3a281e555f469371bba0818ad129351f69 /src/mame/drivers/ghosteo.c | |
parent | 03ce85e6969286ef6b385ea2b85d8bbc626c9234 (diff) |
s2c24xxx cleanup and modernization of devices using it (nw)
Diffstat (limited to 'src/mame/drivers/ghosteo.c')
-rw-r--r-- | src/mame/drivers/ghosteo.c | 108 |
1 files changed, 55 insertions, 53 deletions
diff --git a/src/mame/drivers/ghosteo.c b/src/mame/drivers/ghosteo.c index 5ce253d4c83..3bf3ac2b870 100644 --- a/src/mame/drivers/ghosteo.c +++ b/src/mame/drivers/ghosteo.c @@ -85,7 +85,8 @@ public: : driver_device(mconfig, type, tag), m_system_memory(*this, "systememory"), m_i2cmem(*this, "i2cmem"), - m_maincpu(*this, "maincpu") { } + m_s3c2410(*this, "s3c2410"), + m_maincpu(*this, "maincpu") { } required_shared_ptr<UINT32> m_system_memory; required_device<i2cmem_device> m_i2cmem; @@ -99,12 +100,22 @@ public: int m_rom_pagesize; UINT8* m_flash; - device_t* m_s3c2410; + required_device<s3c2410_device> m_s3c2410; DECLARE_DRIVER_INIT(touryuu); DECLARE_DRIVER_INIT(bballoon); virtual void machine_start(); virtual void machine_reset(); required_device<cpu_device> m_maincpu; + DECLARE_READ32_MEMBER(s3c2410_gpio_port_r); + DECLARE_WRITE32_MEMBER(s3c2410_gpio_port_w); + DECLARE_READ32_MEMBER(s3c2410_core_pin_r); + DECLARE_WRITE8_MEMBER(s3c2410_nand_command_w ); + DECLARE_WRITE8_MEMBER(s3c2410_nand_address_w ); + DECLARE_READ8_MEMBER(s3c2410_nand_data_r ); + DECLARE_WRITE8_MEMBER(s3c2410_nand_data_w ); + DECLARE_WRITE_LINE_MEMBER(s3c2410_i2c_scl_w ); + DECLARE_READ_LINE_MEMBER(s3c2410_i2c_sda_r ); + DECLARE_WRITE_LINE_MEMBER(s3c2410_i2c_sda_w ); }; @@ -136,40 +147,38 @@ NAND Flash Controller (4KB internal buffer) static const UINT8 security_data[] = { 0x01, 0xC4, 0xFF, 0x22, 0xFF, 0xFF, 0xFF, 0xFF }; -static UINT32 s3c2410_gpio_port_r( device_t *device, int port, UINT32 mask) +READ32_MEMBER(ghosteo_state::s3c2410_gpio_port_r) { - ghosteo_state *state = device->machine().driver_data<ghosteo_state>(); - UINT32 data = state->m_bballoon_port[port]; - switch (port) + UINT32 data = m_bballoon_port[offset]; + switch (offset) { case S3C2410_GPIO_PORT_F : { - data = (data & ~0xFF) | security_data[state->m_security_count]; // bballoon security @ 0x3001BD68 + data = (data & ~0xFF) | security_data[m_security_count]; // bballoon security @ 0x3001BD68 } break; case S3C2410_GPIO_PORT_G : { data = data ^ 0x20; - state->m_bballoon_port[port] = data; + m_bballoon_port[offset] = data; } break; } return data; } -static void s3c2410_gpio_port_w( device_t *device, int port, UINT32 mask, UINT32 data) +WRITE32_MEMBER(ghosteo_state::s3c2410_gpio_port_w) { - ghosteo_state *state = device->machine().driver_data<ghosteo_state>(); - UINT32 old_value = state->m_bballoon_port[port]; - state->m_bballoon_port[port] = data; - switch (port) + UINT32 old_value = m_bballoon_port[offset]; + m_bballoon_port[offset] = data; + switch (offset) { case S3C2410_GPIO_PORT_F : { switch (data) { - case 0x04 : state->m_security_count = 0; break; - case 0x44 : state->m_security_count = 2; break; + case 0x04 : m_security_count = 0; break; + case 0x44 : m_security_count = 2; break; } } break; @@ -179,10 +188,10 @@ static void s3c2410_gpio_port_w( device_t *device, int port, UINT32 mask, UINT32 if (((data & 0x10) != 0) && ((old_value & 0x10) == 0)) { #if NAND_LOG - logerror( "security_count %d -> %d\n", state->m_security_count, state->m_security_count + 1); + logerror( "security_count %d -> %d\n", m_security_count, m_security_count + 1); #endif - state->m_security_count++; - if (state->m_security_count > 7) state->m_security_count = 0; + m_security_count++; + if (m_security_count > 7) m_security_count = 0; } } break; @@ -203,10 +212,10 @@ NCON : NAND flash memory address step selection */ -static int s3c2410_core_pin_r( device_t *device, int pin) +READ32_MEMBER(ghosteo_state::s3c2410_core_pin_r) { int data = 0; - switch (pin) + switch (offset) { case S3C2410_CORE_PIN_NCON : data = 1; break; case S3C2410_CORE_PIN_OM0 : data = 0; break; @@ -217,10 +226,9 @@ static int s3c2410_core_pin_r( device_t *device, int pin) // NAND -static WRITE8_DEVICE_HANDLER( s3c2410_nand_command_w ) +WRITE8_MEMBER(ghosteo_state::s3c2410_nand_command_w ) { - ghosteo_state *state = space.machine().driver_data<ghosteo_state>(); - struct nand_t &nand = state->m_nand; + struct nand_t &nand = m_nand; // device_t *nand = space.machine().device( "nand"); #if NAND_LOG logerror( "s3c2410_nand_command_w %02X\n", data); @@ -230,7 +238,7 @@ static WRITE8_DEVICE_HANDLER( s3c2410_nand_command_w ) case 0xFF : { nand.mode = NAND_M_INIT; - s3c2410_pin_frnb_w( device, 1); + s3c2410_pin_frnb_w( m_s3c2410, 1); } break; case 0x00 : @@ -243,10 +251,9 @@ static WRITE8_DEVICE_HANDLER( s3c2410_nand_command_w ) } } -static WRITE8_DEVICE_HANDLER( s3c2410_nand_address_w ) +WRITE8_MEMBER(ghosteo_state::s3c2410_nand_address_w ) { - ghosteo_state *state = space.machine().driver_data<ghosteo_state>(); - struct nand_t &nand = state->m_nand; + struct nand_t &nand = m_nand; // device_t *nand = space.machine().device( "nand"); #if NAND_LOG logerror( "s3c2410_nand_address_w %02X\n", data); @@ -271,18 +278,17 @@ static WRITE8_DEVICE_HANDLER( s3c2410_nand_address_w ) nand.addr_load_ptr++; if ((nand.mode == NAND_M_READ) && (nand.addr_load_ptr == 4)) { - s3c2410_pin_frnb_w( device, 0); - s3c2410_pin_frnb_w( device, 1); + s3c2410_pin_frnb_w( m_s3c2410, 0); + s3c2410_pin_frnb_w( m_s3c2410, 1); } } break; } } -static READ8_DEVICE_HANDLER( s3c2410_nand_data_r ) +READ8_MEMBER(ghosteo_state::s3c2410_nand_data_r ) { - ghosteo_state *state = space.machine().driver_data<ghosteo_state>(); - struct nand_t &nand = state->m_nand; + struct nand_t &nand = m_nand; // device_t *nand = space.machine().device( "nand"); UINT8 data = 0; switch (nand.mode) @@ -294,16 +300,16 @@ static READ8_DEVICE_HANDLER( s3c2410_nand_data_r ) break; case NAND_M_READ : { - if (nand.byte_addr < state->m_rom_pagesize) + if (nand.byte_addr < m_rom_pagesize) { - data = *(state->m_flash + nand.page_addr * state->m_rom_pagesize + nand.byte_addr); + data = *(m_flash + nand.page_addr * m_rom_pagesize + nand.byte_addr); } else { if ((nand.byte_addr >= 0x200) && (nand.byte_addr < 0x204)) { UINT8 mecc[4]; - s3c2410_nand_calculate_mecc( state->m_flash + nand.page_addr * 0x200, 0x200, mecc); + s3c2410_nand_calculate_mecc( m_flash + nand.page_addr * 0x200, 0x200, mecc); data = mecc[nand.byte_addr-0x200]; } else @@ -327,7 +333,7 @@ static READ8_DEVICE_HANDLER( s3c2410_nand_data_r ) return data; } -static WRITE8_DEVICE_HANDLER( s3c2410_nand_data_w ) +WRITE8_MEMBER(ghosteo_state::s3c2410_nand_data_w ) { // device_t *nand = space.machine().device( "nand"); #if NAND_LOG @@ -337,27 +343,24 @@ static WRITE8_DEVICE_HANDLER( s3c2410_nand_data_w ) // I2C -static WRITE_LINE_DEVICE_HANDLER( s3c2410_i2c_scl_w ) +WRITE_LINE_MEMBER(ghosteo_state::s3c2410_i2c_scl_w ) { - ghosteo_state *sta = device->machine().driver_data<ghosteo_state>(); // logerror( "s3c2410_i2c_scl_w %d\n", state ? 1 : 0); - i2cmem_scl_write( sta->m_i2cmem, state); + i2cmem_scl_write( m_i2cmem, state); } -static READ_LINE_DEVICE_HANDLER( s3c2410_i2c_sda_r ) +READ_LINE_MEMBER(ghosteo_state::s3c2410_i2c_sda_r ) { - ghosteo_state *sta = device->machine().driver_data<ghosteo_state>(); int state; - state = i2cmem_sda_read( sta->m_i2cmem ); + state = i2cmem_sda_read( m_i2cmem ); // logerror( "s3c2410_i2c_sda_r %d\n", state ? 1 : 0); return state; } -static WRITE_LINE_DEVICE_HANDLER( s3c2410_i2c_sda_w ) +WRITE_LINE_MEMBER(ghosteo_state::s3c2410_i2c_sda_w ) { - ghosteo_state *sta = device->machine().driver_data<ghosteo_state>(); // logerror( "s3c2410_i2c_sda_w %d\n", state ? 1 : 0); - i2cmem_sda_write( sta->m_i2cmem, state); + i2cmem_sda_write( m_i2cmem, state); } WRITE32_MEMBER(ghosteo_state::sound_w) @@ -540,17 +543,17 @@ INPUT_PORTS_END static const s3c2410_interface bballoon_s3c2410_intf = { // CORE (pin read / pin write) - { s3c2410_core_pin_r, NULL }, + { DEVCB_DRIVER_MEMBER32(ghosteo_state,s3c2410_core_pin_r), DEVCB_NULL }, // GPIO (port read / port write) - { s3c2410_gpio_port_r, s3c2410_gpio_port_w }, + { DEVCB_DRIVER_MEMBER32(ghosteo_state,s3c2410_gpio_port_r), DEVCB_DRIVER_MEMBER32(ghosteo_state,s3c2410_gpio_port_w) }, // I2C (scl write / sda read / sda write) - { s3c2410_i2c_scl_w, s3c2410_i2c_sda_r, s3c2410_i2c_sda_w }, + { DEVCB_DRIVER_LINE_MEMBER(ghosteo_state,s3c2410_i2c_scl_w), DEVCB_DRIVER_LINE_MEMBER(ghosteo_state,s3c2410_i2c_sda_r), DEVCB_DRIVER_LINE_MEMBER(ghosteo_state,s3c2410_i2c_sda_w) }, // ADC (data read) - { NULL }, + { DEVCB_NULL }, // I2S (data write) - { NULL }, + { DEVCB_NULL }, // NAND (command write / address write / data read / data write) - { s3c2410_nand_command_w, s3c2410_nand_address_w, s3c2410_nand_data_r, s3c2410_nand_data_w } + { DEVCB_DRIVER_MEMBER(ghosteo_state,s3c2410_nand_command_w), DEVCB_DRIVER_MEMBER(ghosteo_state,s3c2410_nand_address_w), DEVCB_DRIVER_MEMBER(ghosteo_state,s3c2410_nand_data_r), DEVCB_DRIVER_MEMBER(ghosteo_state,s3c2410_nand_data_w) } }; static const i2cmem_interface bballoon_i2cmem_interface = @@ -596,8 +599,7 @@ void ghosteo_state::machine_start() void ghosteo_state::machine_reset() { - m_maincpu->space(AS_PROGRAM).install_read_handler(0x4d000010, 0x4d000013,read32_delegate(FUNC(ghosteo_state::bballoon_speedup_r), this)); - m_s3c2410 = machine().device("s3c2410"); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x4d000010, 0x4d000013,read32_delegate(FUNC(ghosteo_state::bballoon_speedup_r), this)); } static MACHINE_CONFIG_START( ghosteo, ghosteo_state ) |