mirror of
https://github.com/buserror/mii_emu.git
synced 2024-06-16 10:29:31 +00:00
Added mii_dispose() -- clean up everything
Seems there are no leaks; only blocks left non-freed are the queue of drivers, which is static anyway Also added a MII_TERMINATE state to quit any 'main' loop. Signed-off-by: Michel Pollet <buserror@gmail.com>
This commit is contained in:
parent
73059bfd93
commit
5d0abefadf
|
@ -308,7 +308,7 @@ extern const unsigned int mii_droid_size;
|
|||
nk_x11_render(NK_ANTI_ALIASING_ON, MAX_VERTEX_BUFFER, MAX_ELEMENT_BUFFER);
|
||||
glXSwapBuffers(win.dpy, win.win);
|
||||
}
|
||||
|
||||
mii_dispose(&g_mii);
|
||||
cleanup:
|
||||
nk_x11_shutdown();
|
||||
glXMakeCurrent(win.dpy, 0, 0);
|
||||
|
|
|
@ -167,6 +167,9 @@ static void *mii_thread_func(void *arg)
|
|||
break;
|
||||
case MII_RUNNING:
|
||||
break;
|
||||
case MII_TERMINATE:
|
||||
mii_thread_running = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (mii->video.frame_count != last_frame) {
|
||||
|
@ -193,6 +196,7 @@ static void *mii_thread_func(void *arg)
|
|||
usleep(sleep_time);
|
||||
}
|
||||
}
|
||||
mii_dispose(mii);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
17
src/mii.c
17
src/mii.c
|
@ -497,7 +497,6 @@ mii_init(
|
|||
mii->bank[MII_BANK_ROM].mem = (uint8_t*)&iie_enhanced_rom_bin[0];
|
||||
mii->cpu.trap = MII_TRAP;
|
||||
mii_reset(mii, true);
|
||||
mii_speaker_init(mii, &mii->speaker);
|
||||
mii->cpu_state = mii_cpu_init(&mii->cpu);
|
||||
for (int i = 0; i < 7; i++)
|
||||
mii->slot[i].id = i;
|
||||
|
@ -508,6 +507,8 @@ mii_prepare(
|
|||
mii_t *mii,
|
||||
uint32_t flags )
|
||||
{
|
||||
mii_dd_system_init(mii, &mii->dd);
|
||||
mii_speaker_init(mii, &mii->speaker);
|
||||
printf("%s driver table\n", __func__);
|
||||
mii_slot_drv_t * drv = mii_slot_drv_list;
|
||||
while (drv) {
|
||||
|
@ -519,6 +520,20 @@ mii_prepare(
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
mii_dispose(
|
||||
mii_t *mii )
|
||||
{
|
||||
for (int i = 0; i < 7; i++) {
|
||||
if (mii->slot[i].drv && mii->slot[i].drv->dispose)
|
||||
mii->slot[i].drv->dispose(mii, &mii->slot[i]);
|
||||
}
|
||||
for (int i = 0; i < MII_BANK_COUNT; i++)
|
||||
mii_bank_dispose(&mii->bank[i]);
|
||||
mii_speaker_dispose(&mii->speaker);
|
||||
mii_dd_system_dispose(&mii->dd);
|
||||
}
|
||||
|
||||
void
|
||||
mii_reset(
|
||||
mii_t *mii,
|
||||
|
|
17
src/mii.h
17
src/mii.h
|
@ -11,7 +11,6 @@
|
|||
#include <stdbool.h>
|
||||
|
||||
#include "mii_65c02.h"
|
||||
#include "fifo_declare.h"
|
||||
#include "mii_dd.h"
|
||||
#include "mii_bank.h"
|
||||
#include "mii_slot.h"
|
||||
|
@ -33,7 +32,10 @@ enum {
|
|||
MII_BANK_COUNT,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* A 'trap' is a sequence of 2 special NOPs that are used to trigger
|
||||
* a callback. The callback is called with the mii_t * and the trap ID
|
||||
*/
|
||||
typedef void (*mii_trap_handler_cb)(
|
||||
mii_t * mii,
|
||||
uint8_t trap);
|
||||
|
@ -49,6 +51,7 @@ enum {
|
|||
MII_RUNNING = 0, // default
|
||||
MII_STOPPED,
|
||||
MII_STEP,
|
||||
MII_TERMINATE,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -144,6 +147,12 @@ void
|
|||
mii_prepare(
|
||||
mii_t *mii,
|
||||
uint32_t flags );
|
||||
/*
|
||||
* Stop the emulator, dispose of everything, free memory etc.
|
||||
*/
|
||||
void
|
||||
mii_dispose(
|
||||
mii_t *mii );
|
||||
|
||||
/*
|
||||
* Parses arguments until in finds one that isn't for mii, and returns
|
||||
|
@ -262,8 +271,8 @@ extern mii_slot_drv_t * mii_slot_drv_list;
|
|||
#define MII_TRAP 0xdbfb
|
||||
/*
|
||||
* Request a trap ID for the given callback. Calling code is responsible
|
||||
* for setting up the trap using the 2 magic NOPs in sequence. See mii_smartport.c
|
||||
* for an example.
|
||||
* for setting up the trap using the 2 magic NOPs in sequence.
|
||||
* See mii_smartport.c for an example.
|
||||
*/
|
||||
uint8_t
|
||||
mii_register_trap(
|
||||
|
|
Loading…
Reference in New Issue
Block a user