From 350f4b27e0b461dc9e08951427ad742a98f22cf7 Mon Sep 17 00:00:00 2001 From: Tom Seddon Date: Sun, 8 Sep 2019 13:36:11 +0100 Subject: [PATCH] Add destroyChip. --- netlist_sim.c | 38 ++++++++++++++++++++++++++++++++++++++ netlist_sim.h | 1 + perfect6502.c | 6 ++++++ perfect6502.h | 3 ++- 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/netlist_sim.c b/netlist_sim.c index eacf2af..8c1c672 100644 --- a/netlist_sim.c +++ b/netlist_sim.c @@ -599,6 +599,44 @@ setupNodesAndTransistors(netlist_transdefs *transdefs, BOOL *node_is_pullup, nod return state; } +void +destroyNodesAndTransistors(state_t *state) +{ + free(state->nodes_pullup); + free(state->nodes_pulldown); + free(state->nodes_value); + for (count_t i = 0; i < state->nodes; i++) { + free(state->nodes_gates[i]); + } + free(state->nodes_gates); + for (count_t i = 0; i < state->nodes; i++) { + free(state->nodes_c1c2s[i]); + } + free(state->nodes_c1c2s); + free(state->nodes_gatecount); + free(state->nodes_c1c2count); + free(state->nodes_dependants); + free(state->nodes_left_dependants); + for (count_t i = 0; i < state->nodes; i++) { + free(state->nodes_dependant[i]); + } + free(state->nodes_dependant); + for (count_t i = 0; i < state->nodes; i++) { + free(state->nodes_left_dependant[i]); + } + free(state->nodes_left_dependant); + free(state->transistors_gate); + free(state->transistors_c1); + free(state->transistors_c2); + free(state->transistors_on); + free(state->list1); + free(state->list2); + free(state->listout_bitmap); + free(state->group); + free(state->groupbitmap); + free(state); +} + void stabilizeChip(state_t *state) { diff --git a/netlist_sim.h b/netlist_sim.h index b5bc066..6e96b84 100644 --- a/netlist_sim.h +++ b/netlist_sim.h @@ -3,6 +3,7 @@ #endif state_t *setupNodesAndTransistors(netlist_transdefs *transdefs, BOOL *node_is_pullup, nodenum_t nodes, nodenum_t transistors, nodenum_t vss, nodenum_t vcc); +void destroyNodesAndTransistors(state_t *state); void setNode(state_t *state, nodenum_t nn, BOOL s); BOOL isNodeHigh(state_t *state, nodenum_t nn); unsigned int readNodes(state_t *state, int count, nodenum_t *nodelist); diff --git a/perfect6502.c b/perfect6502.c index 6505191..4d29d6c 100644 --- a/perfect6502.c +++ b/perfect6502.c @@ -198,6 +198,12 @@ initAndResetChip() return state; } +void +destroyChip(void *state) +{ + destroyNodesAndTransistors(state); +} + /************************************************************ * * Tracing/Debugging diff --git a/perfect6502.h b/perfect6502.h index ef90243..2eb54ad 100644 --- a/perfect6502.h +++ b/perfect6502.h @@ -3,6 +3,7 @@ #endif extern state_t *initAndResetChip(); +extern void destroyChip(state_t *state); extern void step(state_t *state); extern void chipStatus(state_t *state); extern unsigned short readPC(state_t *state); @@ -19,4 +20,4 @@ extern unsigned char readIR(state_t *state); extern unsigned char memory[65536]; extern unsigned int cycle; -extern unsigned int transistors; \ No newline at end of file +extern unsigned int transistors;