2 Skelton for retropc emulator
3 Author : Takeda.Toshiya
4 Port to Qt : K.Ohta <whatisthis.sowhat _at_ gmail.com>
7 History : 2015.11.10 Split from qt_main.h
8 [ win32 main ] -> [ Qt main ] -> [Emu Thread]
10 #ifndef _CSP_QT_EMU_THREAD_TMPL_H
11 #define _CSP_QT_EMU_THREAD_TMPL_H
16 #include <QElapsedTimer>
20 #include "commonclasses.h"
24 //#include "menuclasses.h"
25 #include "mainwidget_base.h"
26 #include "commonclasses.h"
29 class META_MainWindow;
35 //#include "../../romakana.h"
43 class DLL_PREFIX EmuThreadClassBase : public QThread {
54 //QQueue <key_queue_t>key_up_queue;
55 //QQueue <key_queue_t>key_down_queue;
56 FIFO *key_up_code_fifo;
57 FIFO *key_up_mod_fifo;
58 FIFO *key_up_repeat_fifo;
60 FIFO *key_down_code_fifo;
61 FIFO *key_down_mod_fifo;
62 FIFO *key_down_repeat_fifo;
65 QQueue <QString>roma_kana_queue;
68 bool romakana_conversion_mode;
71 USING_FLAGS *using_flags;
74 QWaitCondition *drawCond;
75 class META_MainWindow *MainWindow;
76 QElapsedTimer tick_timer;
80 bool bSpecialResetReq;
83 bool bUpdateConfigReq;
84 bool bStartRecordSoundReq;
85 bool bStopRecordSoundReq;
86 bool bStartRecordMovieReq;
90 bool doing_debug_command;
91 bool bUpdateVolumeReq[32];
92 int volume_balance[32];
97 qint64 update_fps_time;
106 QString laserdisc_text;
107 QString bubble_text[16];
108 QString clipBoardText;
110 _TCHAR roma_kana_buffer[8];
111 uint32_t roma_kana_shadow[8];
113 void calc_volume_from_balance(int num, int balance);
114 void calc_volume_from_level(int num, int level);
116 virtual void button_pressed_mouse_sub(Qt::MouseButton button) {};
117 virtual void button_released_mouse_sub(Qt::MouseButton button) {};
118 virtual void get_qd_string(void) {};
119 virtual void get_fd_string(void) {};
120 virtual void get_tape_string(void) {};
121 virtual void get_cd_string(void) {};
122 virtual void get_bubble_string(void) {};
123 void enqueue_key_up(key_queue_t s) {
124 key_up_code_fifo->write(s.code);
125 key_up_mod_fifo->write(s.mod);
126 key_up_repeat_fifo->write(s.repeat? 1 : 0);
128 void enqueue_key_down(key_queue_t s) {
129 key_down_code_fifo->write(s.code);
130 key_down_mod_fifo->write(s.mod);
131 key_down_repeat_fifo->write(s.repeat? 1 : 0);
133 void dequeue_key_up(key_queue_t *s) {
134 s->code = (uint32_t)key_up_code_fifo->read();
135 s->mod = (uint32_t)key_up_mod_fifo->read();
136 if(key_up_repeat_fifo->read() != 0) {
142 void dequeue_key_down(key_queue_t *s) {
143 s->code = (uint32_t)key_down_code_fifo->read();
144 s->mod = (uint32_t)key_down_mod_fifo->read();
145 if(key_down_repeat_fifo->read() != 0) {
151 bool is_empty_key_down() {
152 bool f = key_down_code_fifo->empty();
153 f &= key_down_mod_fifo->empty();
154 f &= key_down_repeat_fifo->empty();
157 bool is_empty_key_up() {
158 bool f = key_up_code_fifo->empty();
159 f &= key_up_mod_fifo->empty();
160 f &= key_up_repeat_fifo->empty();
163 void clear_key_queue() {
164 key_up_code_fifo->clear();
165 key_up_mod_fifo->clear();
166 key_up_repeat_fifo->clear();
168 key_down_code_fifo->clear();
169 key_down_mod_fifo->clear();
170 key_down_repeat_fifo->clear();
172 virtual void set_romakana(void) { };
174 EmuThreadClassBase(META_MainWindow *rootWindow, USING_FLAGS *p, QObject *parent = 0);
175 ~EmuThreadClassBase();
176 virtual void run() {};
177 void set_tape_play(bool);
178 void resize_screen(int sw, int sh, int stw, int sth);
179 void sample_access_drv(void);
180 virtual bool now_debugging() { return false; };
185 void do_special_reset();
186 void do_load_state(QString name);
187 void do_save_state(QString name);
188 void do_update_config();
189 void do_start_record_sound();
190 void do_stop_record_sound();
191 void do_start_record_video(int fps);
192 void do_stop_record_video();
193 void do_update_volume_level(int num, int level);
194 void do_update_volume_balance(int num, int level);
196 void button_pressed_mouse(Qt::MouseButton);
197 void button_released_mouse(Qt::MouseButton);
198 void do_key_down(uint32_t vk, uint32_t mod, bool repeat);
199 void do_key_up(uint32_t vk, uint32_t mod);
201 int message_changed(QString);
202 int window_title_changed(QString);
203 int sig_draw_thread(bool);
204 int quit_draw_thread(void);
205 int sig_screen_aspect(int);
206 int sig_screen_size(int, int);
207 int sig_finished(void);
208 int call_emu_thread(EMU *);
209 int sig_check_grab_mouse(bool);
210 int sig_mouse_enable(bool);
211 int sig_update_recent_disk(int);
212 int sig_change_osd(int, int, QString);
213 int sig_update_recent_bubble(int);
214 int sig_change_osd_bubble(int, QString);
215 int sig_set_grid_vertical(int, bool);
216 int sig_set_grid_horizonal(int, bool);
217 int sig_send_data_led(quint32);
218 int sig_resize_screen(int, int);
219 int sig_resize_uibar(int, int);
220 int sig_is_enable_mouse(bool);
221 int sig_debugger_input(QString);
222 int sig_quit_debugger();
223 int sig_romakana_mode(bool);