]> git.sur5r.net Git - cc65/blobdiff - src/sim65/chips/rom.c
Added gcc attributes
[cc65] / src / sim65 / chips / rom.c
index eebfc74827a0cd54e5a740058696a8984cadb975..ac734b36f91e2abf084ec2f9b62a19dae61fbdc1 100644 (file)
 static int InitChip (const struct SimData* Data);
 /* Initialize the chip, return an error code */
 
-static void* InitInstance (unsigned Addr, unsigned Range, void* CfgInfo);
-/* Initialize a new chip instance */
+static void* CreateInstance (unsigned Addr, unsigned Range, void* CfgInfo);
+/* Create a new chip instance */
+
+static void DestroyInstance (void* Data);
+/* Destroy a chip instance */
 
 static void WriteCtrl (void* Data, unsigned Offs, unsigned char Val);
 /* Write control data */
@@ -76,7 +79,7 @@ static unsigned char Read (void* Data, unsigned Offs);
 
 
 /* Control data passed to the main program */
-static const struct ChipData ROMData[1] = {
+static const struct ChipData CData[1] = {
     {
         "ROM",                  /* Name of the chip */
         CHIPDATA_TYPE_CHIP,     /* Type of the chip */
@@ -85,7 +88,8 @@ static const struct ChipData ROMData[1] = {
 
         /* -- Exported functions -- */
         InitChip,
-        InitInstance,
+        CreateInstance,
+       DestroyInstance,
         WriteCtrl,
         Write,
         ReadCtrl,
@@ -115,8 +119,8 @@ struct InstanceData {
 int GetChipData (const ChipData** Data, unsigned* Count)
 {
     /* Pass the control structure to the caller */
-    *Data = ROMData;
-    *Count = sizeof (Data) / sizeof (Data[0]);
+    *Data = CData;
+    *Count = sizeof (CData) / sizeof (CData[0]);
 
     /* Call was successful */
     return 0;
@@ -142,8 +146,8 @@ static int InitChip (const struct SimData* Data)
 
 
 
-static void* InitInstance (unsigned Addr, unsigned Range, void* CfgInfo)
-/* Initialize a new chip instance */
+static void* CreateInstance (unsigned Addr, unsigned Range, void* CfgInfo)
+/* Create a new chip instance */
 {
     char* Name;
     FILE* F;
@@ -185,6 +189,21 @@ static void* InitInstance (unsigned Addr, unsigned Range, void* CfgInfo)
 
 
 
+static void DestroyInstance (void* Data)
+/* Destroy a chip instance */
+{
+    /* Cast the data pointer */
+    InstanceData* D = (InstanceData*) Data;
+
+    /* Free the ROM memory */
+    Sim->Free (D->Mem);
+
+    /* Free the instance data itself */
+    free (D);
+}
+
+
+
 static void WriteCtrl (void* Data, unsigned Offs, unsigned char Val)
 /* Write control data */
 {