summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/ghosteo.c
diff options
context:
space:
mode:
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
commit96f1b3375fd9c64d5b2f7f607f2f24f2bd6f5e5b (patch)
treebd362d3a281e555f469371bba0818ad129351f69 /src/mame/drivers/ghosteo.c
parent03ce85e6969286ef6b385ea2b85d8bbc626c9234 (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.c108
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 )