summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2007-12-31 01:57:54 +0000
committer Aaron Giles <aaron@aarongiles.com>2007-12-31 01:57:54 +0000
commitd7e58ce2d094d1990abbd8ac96f6a0600855d34a (patch)
tree81c6c820686f9745673125db305181cb398ded6a
parent1ea08b693342d1dc60ecdbd40888186ed5299cf7 (diff)
(From Oliver Stoneberg)
Fixed several memory leaks related to SCSI CD emulation.
-rw-r--r--src/emu/machine/53c810.c10
-rw-r--r--src/emu/machine/53c810.h1
-rw-r--r--src/emu/machine/am53cf96.c10
-rw-r--r--src/emu/machine/am53cf96.h1
-rw-r--r--src/emu/machine/wd33c93.c10
-rw-r--r--src/emu/machine/wd33c93.h1
-rw-r--r--src/mame/drivers/konamigq.c6
-rw-r--r--src/mame/drivers/konamigv.c6
8 files changed, 45 insertions, 0 deletions
diff --git a/src/emu/machine/53c810.c b/src/emu/machine/53c810.c
index 8c182413843..4ccd1c16543 100644
--- a/src/emu/machine/53c810.c
+++ b/src/emu/machine/53c810.c
@@ -698,6 +698,16 @@ extern void lsi53c810_init(const struct LSI53C810interface *interface)
}
}
+extern void lsi53c810_exit(const struct LSI53C810interface *interface)
+{
+ int i;
+
+ for (i = 0; i < interface->scsidevs->devs_present; i++)
+ {
+ SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] );
+ }
+}
+
void lsi53c810_read_data(int bytes, UINT8 *pData)
{
if (devices[last_id])
diff --git a/src/emu/machine/53c810.h b/src/emu/machine/53c810.h
index 8818ee9f3b3..860a4776135 100644
--- a/src/emu/machine/53c810.h
+++ b/src/emu/machine/53c810.h
@@ -12,6 +12,7 @@ struct LSI53C810interface
};
extern void lsi53c810_init(const struct LSI53C810interface *interface);
+extern void lsi53c810_exit(const struct LSI53C810interface *interface);
extern void lsi53c810_read_data(int bytes, UINT8 *pData);
extern void lsi53c810_write_data(int bytes, UINT8 *pData);
diff --git a/src/emu/machine/am53cf96.c b/src/emu/machine/am53cf96.c
index 0dce33a9e54..b930d6796a3 100644
--- a/src/emu/machine/am53cf96.c
+++ b/src/emu/machine/am53cf96.c
@@ -231,6 +231,16 @@ void am53cf96_init( const struct AM53CF96interface *interface )
state_save_register_global(last_id);
}
+void am53cf96_exit( const struct AM53CF96interface *interface )
+{
+ int i;
+
+ for (i = 0; i < interface->scsidevs->devs_present; i++)
+ {
+ SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] );
+ }
+}
+
// retrieve data from the SCSI controller
void am53cf96_read_data(int bytes, UINT8 *pData)
{
diff --git a/src/emu/machine/am53cf96.h b/src/emu/machine/am53cf96.h
index ea893904f1d..de2b00600ae 100644
--- a/src/emu/machine/am53cf96.h
+++ b/src/emu/machine/am53cf96.h
@@ -15,6 +15,7 @@ struct AM53CF96interface
};
extern void am53cf96_init( const struct AM53CF96interface *interface );
+extern void am53cf96_exit( const struct AM53CF96interface *interface );
extern void am53cf96_read_data(int bytes, UINT8 *pData);
void am53cf96_write_data(int bytes, UINT8 *pData);
void *am53cf96_get_device(int id);
diff --git a/src/emu/machine/wd33c93.c b/src/emu/machine/wd33c93.c
index 03b8f4455b0..f93f1190bf8 100644
--- a/src/emu/machine/wd33c93.c
+++ b/src/emu/machine/wd33c93.c
@@ -809,6 +809,16 @@ extern void wd33c93_init( const struct WD33C93interface *interface )
// state_save_register_item_array("wd33c93", 0, scsi_data);
}
+extern void wd33c93_exit( const struct WD33C93interface *interface )
+{
+ int i;
+
+ for (i = 0; i < interface->scsidevs->devs_present; i++)
+ {
+ SCSIDeleteInstance( devices[interface->scsidevs->devices[i].scsiID] );
+ }
+}
+
void wd33c93_get_dma_data( int bytes, UINT8 *pData )
{
int len = bytes;
diff --git a/src/emu/machine/wd33c93.h b/src/emu/machine/wd33c93.h
index 4e967941465..fdeb206cc38 100644
--- a/src/emu/machine/wd33c93.h
+++ b/src/emu/machine/wd33c93.h
@@ -15,6 +15,7 @@ struct WD33C93interface
};
extern void wd33c93_init( const struct WD33C93interface *interface );
+extern void wd33c93_exit( const struct WD33C93interface *interface );
extern void wd33c93_get_dma_data(int bytes, UINT8 *pData);
extern void wd33c93_write_data(int bytes, UINT8 *pData);
extern void *wd33c93_get_device(int id);
diff --git a/src/mame/drivers/konamigq.c b/src/mame/drivers/konamigq.c
index 7342cb131a2..a0b0af1981f 100644
--- a/src/mame/drivers/konamigq.c
+++ b/src/mame/drivers/konamigq.c
@@ -346,10 +346,16 @@ static DRIVER_INIT( konamigq )
m_p_n_pcmram = memory_region( REGION_SOUND1 ) + 0x80000;
}
+static void konamigq_exit(running_machine *machine)
+{
+ am53cf96_exit(&scsi_intf);
+}
+
static MACHINE_START( konamigq )
{
/* init the scsi controller and hook up it's DMA */
am53cf96_init(&scsi_intf);
+ add_exit_callback(machine, konamigq_exit);
psx_dma_install_read_handler(5, scsi_dma_read);
psx_dma_install_write_handler(5, scsi_dma_write);
diff --git a/src/mame/drivers/konamigv.c b/src/mame/drivers/konamigv.c
index 88e01ac121f..104c1342fbd 100644
--- a/src/mame/drivers/konamigv.c
+++ b/src/mame/drivers/konamigv.c
@@ -306,12 +306,18 @@ static const struct AM53CF96interface scsi_intf =
&scsi_irq, /* command completion IRQ */
};
+static void konamigv_exit(running_machine *machine)
+{
+ am53cf96_exit(&scsi_intf);
+}
+
static DRIVER_INIT( konamigv )
{
psx_driver_init();
/* init the scsi controller and hook up it's DMA */
am53cf96_init(&scsi_intf);
+ add_exit_callback(machine, konamigv_exit);
psx_dma_install_read_handler(5, scsi_dma_read);
psx_dma_install_write_handler(5, scsi_dma_write);
}