Refactor save jukebox handling into its own class
[lsnes.git] / src / core / instance.cpp
blobcba6b92fb79284c0133a82e8efb46eff64833170
1 #include "core/advdumper.hpp"
2 #include "core/audioapi.hpp"
3 #include "core/command.hpp"
4 #include "core/controllerframe.hpp"
5 #include "core/controller.hpp"
6 #include "core/debug.hpp"
7 #include "core/dispatch.hpp"
8 #include "core/emustatus.hpp"
9 #include "core/framebuffer.hpp"
10 #include "core/framerate.hpp"
11 #include "core/instance.hpp"
12 #include "core/inthread.hpp"
13 #include "core/jukebox.hpp"
14 #include "core/keymapper.hpp"
15 #include "core/mbranch.hpp"
16 #include "core/memorymanip.hpp"
17 #include "core/memorywatch.hpp"
18 #include "core/messages.hpp"
19 #include "core/moviedata.hpp"
20 #include "core/movie.hpp"
21 #include "core/multitrack.hpp"
22 #include "core/project.hpp"
23 #include "core/queue.hpp"
24 #include "core/random.hpp"
25 #include "core/rom.hpp"
26 #include "core/settings.hpp"
27 #include "library/command.hpp"
28 #include "library/keyboard.hpp"
29 #include "library/keyboard-mapper.hpp"
30 #include "library/lua-base.hpp"
31 #include "library/memoryspace.hpp"
32 #include "library/settingvar.hpp"
33 #include "lua/lua.hpp"
35 #include <deque>
36 #ifdef __linux__
37 #include <execinfo.h>
38 #endif
40 dtor_list::dtor_list()
42 list = NULL;
45 dtor_list::~dtor_list()
47 destroy();
50 void dtor_list::destroy()
52 dtor_list::entry* e = list;
53 while(e) {
54 e->free1(e->ptr);
55 e = e->prev;
57 e = list;
58 while(e) {
59 dtor_list::entry* f = e;
60 e = e->prev;
61 f->free2(f->ptr);
62 delete f;
64 list = NULL;
67 emulator_instance::emulator_instance()
69 //Preinit.
70 D.prealloc(fbuf);
71 D.prealloc(project);
72 D.prealloc(buttons);
73 D.prealloc(dispatch);
75 D.init(dispatch);
76 D.init(command);
77 D.init(iqueue, *command);
78 D.init(mlogic);
79 D.init(slotcache, *mlogic);
80 D.init(memory);
81 D.init(lua);
82 D.init(lua2, *lua, *command);
83 D.init(mwatch, *memory, *project, *fbuf);
84 D.init(settings);
85 D.init(jukebox, *settings);
86 D.init(setcache, *settings);
87 D.init(audio);
88 D.init(commentary, *settings, *dispatch, *audio);
89 D.init(subtitles, *mlogic, *fbuf, *dispatch);
90 D.init(mbranch, *mlogic, *dispatch);
91 D.init(controls, *project, *mlogic, *buttons, *dispatch);
92 D.init(keyboard);
93 D.init(mapper, *keyboard, *command);
94 D.init(rom);
95 D.init(fbuf, *subtitles, *settings, *mwatch, *keyboard, *dispatch, *lua2, *rom);
96 D.init(buttons, *controls, *mapper, *keyboard, *fbuf, *dispatch, *lua2);
97 D.init(mteditor, *mlogic, *controls, *dispatch);
98 D.init(status_A);
99 D.init(status_B);
100 D.init(status_C);
101 D.init(status, *status_A, *status_B, *status_C);
102 D.init(abindmanager, *mapper, *command);
103 D.init(nrrdata);
104 D.init(cmapper, *memory, *mlogic, *rom);
105 D.init(project, *commentary, *mwatch, *command, *controls, *setcache, *buttons, *dispatch, *iqueue, *rom);
106 D.init(dbg, *dispatch, *rom);
107 D.init(framerate);
108 D.init(mdumper, *lua2);
110 status_A->valid = false;
111 status_B->valid = false;
112 status_C->valid = false;
113 command->add_set(lsnes_cmds);
114 mapper->add_invbind_set(lsnes_invbinds);
115 settings->add_set(lsnes_setgrp);
116 dispatch->set_error_streams(&messages.getstream());
117 random_seed_value = 0;
120 emulator_instance::~emulator_instance()
122 D.destroy();
125 emulator_instance lsnes_instance;
127 emulator_instance& CORE()
129 if(threads::id() != lsnes_instance.emu_thread) {
130 std::cerr << "WARNING: CORE() called in wrong thread." << std::endl;
131 #ifdef __linux__
132 void* arr[256];
133 backtrace_symbols_fd(arr, 256, 2);
134 #endif
136 return lsnes_instance;