2 Skelton for retropc emulator
4 Author : K.Ohta <whatisthis.sowhat _at_ gmail.com>
19 #include <QElapsedTimer>
30 #include "simd_types.h"
35 #include "../config.h"
36 #include "../fileio.h"
39 #include "qt_gldraw.h"
40 //#include "qt_main.h"
41 //#include "csp_logger.h"
44 OSD_BASE::OSD_BASE(USING_FLAGS *p, CSP_Logger *logger) : QThread(0)
47 vm_mutex = new QMutex(QMutex::Recursive);
49 screen_mutex = new QMutex(QMutex::Recursive);
50 device_node_list.clear();
54 mapped_screen_pointer = NULL;
55 mapped_screen_width = 0;
56 mapped_screen_height = 0;
57 mapped_screen_status = false;
58 SupportedFeatures.clear();
67 extern std::string cpp_homedir;
68 extern std::string my_procname;
70 EmuThreadClass *OSD_BASE::get_parent_handler()
75 void OSD_BASE::set_parent_thread(EmuThreadClass *parent)
77 parent_thread = parent;
80 void OSD_BASE::initialize(int rate, int samples)
84 void OSD_BASE::release()
88 void OSD_BASE::power_off()
92 void OSD_BASE::suspend()
94 if(get_use_movie_player()) {
95 if(now_movie_play && !now_movie_pause) {
97 now_movie_pause = false;
103 void OSD_BASE::restore()
105 if(get_use_movie_player()) {
106 if(now_movie_play && !now_movie_pause) {
113 void OSD_BASE::debug_log(int level, const char *fmt, ...)
119 vsnprintf(strbuf, 4095, fmt, ap);
120 debug_log(level, 0, strbuf);
124 void OSD_BASE::debug_log(int level, int domain_num, const char *fmt, ...)
130 vsnprintf(strbuf, 4095, fmt, ap);
131 debug_log(level, domain_num, strbuf);
135 void OSD_BASE::debug_log(int level, int domain_num, char *strbuf)
139 _TCHAR *OSD_BASE::get_app_path(void)
144 _TCHAR* OSD_BASE::bios_path(const _TCHAR* file_name)
146 static _TCHAR file_path[_MAX_PATH];
147 snprintf((char *)file_path, _MAX_PATH, "%s%s", app_path, (const char *)file_name);
148 debug_log(CSP_LOG_INFO, CSP_LOG_TYPE_OSD, "BIOS PATH:%s", file_path);
152 void OSD_BASE::get_host_time(cur_time_t* time)
155 //GetLocalTime(&sTime);
156 QDateTime nowTime = QDateTime::currentDateTime();
157 QDate d = nowTime.date();
158 QTime t = nowTime.time();
160 time->year = d.year();
161 time->month = d.month();
163 time->day_of_week = d.dayOfWeek();
164 time->hour = t.hour();
165 time->minute = t.minute();
166 time->second = t.second();
169 void OSD_BASE::sleep(uint32_t ms)
174 void OSD_BASE::create_date_file_name(_TCHAR *name, int length, const _TCHAR *extension)
176 QDateTime nowTime = QDateTime::currentDateTime();
177 QString tmps = QString::fromUtf8("emu");
178 tmps = tmps + get_vm_config_name();
179 tmps = tmps + QString::fromUtf8("_");
180 tmps = tmps + nowTime.toString(QString::fromUtf8("yyyy-MM-dd_hh-mm-ss.zzz."));
181 tmps = tmps + QString::fromUtf8((const char *)extension);
182 snprintf((char *)name, length, "%s", tmps.toLocal8Bit().constData());
185 _TCHAR* OSD_BASE::application_path()
190 void OSD_BASE::vm_draw_screen(void)
195 double OSD_BASE::vm_frame_rate(void)
200 Sint16* OSD_BASE::create_sound(int *extra_frames)
202 return (Sint16 *)NULL;
206 bool OSD_BASE::get_use_socket(void)
210 bool OSD_BASE::get_support_variable_timing(void)
215 bool OSD_BASE::get_notify_key_down(void)
220 bool OSD_BASE::get_notify_key_down_lr_shift(void)
225 bool OSD_BASE::get_notify_key_down_lr_control(void)
230 bool OSD_BASE::get_notify_key_down_lr_menu(void)
235 bool OSD_BASE::get_use_shift_numpad_key(void)
240 bool OSD_BASE::get_use_auto_key(void)
245 bool OSD_BASE::get_dont_keeep_key_pressed(void)
250 bool OSD_BASE::get_one_board_micro_computer(void)
255 bool OSD_BASE::get_use_screen_rotate(void)
260 bool OSD_BASE::get_use_movie_player(void)
265 bool OSD_BASE::get_use_video_capture(void)
270 void OSD_BASE::vm_key_down(int code, bool flag)
274 void OSD_BASE::vm_key_up(int code)
278 void OSD_BASE::vm_reset(void)
283 int OSD_BASE::get_vm_buttons_code(int num)
288 void OSD_BASE::update_buttons(bool press_flag, bool release_flag)
292 QString OSD_BASE::get_vm_config_name(void)
294 return QString::fromUtf8(" ");
297 int OSD_BASE::get_screen_width(void)
302 int OSD_BASE::get_screen_height(void)
307 void OSD_BASE::lock_vm(void)
312 void OSD_BASE::unlock_vm(void)
318 bool OSD_BASE::is_vm_locked(void)
323 void OSD_BASE::force_unlock_vm(void)
327 void OSD_BASE::set_draw_thread(DrawThreadClass *handler)
331 void OSD_BASE::initialize_screen()
333 first_draw_screen = false;
334 first_invalidate = true;
335 self_invalidate = false;
338 void OSD_BASE::release_screen()
342 int OSD_BASE::get_window_mode_width(int mode)
347 int OSD_BASE::get_window_mode_height(int mode)
352 void OSD_BASE::reset_vm_node(void)
354 device_node_list.clear();
355 // p_logger->reset();
359 void OSD_BASE::set_device_name(int id, char *name)
363 void OSD_BASE::set_vm_node(int id, const _TCHAR *name)
367 for(i = 0; i < device_node_list.size(); i++) {
368 sp = device_node_list.at(i);
372 set_device_name(id, (char *)name);
373 device_node_list.replace(i, sp);
374 if(id >= max_vm_nodes) max_vm_nodes = id + 1;
381 set_device_name(id, (char *)name);
382 device_node_list.append(sp);
383 if(id >= max_vm_nodes) max_vm_nodes = id + 1;
386 const _TCHAR *OSD_BASE::get_vm_node_name(int id)
390 for(i = 0; i < device_node_list.size(); i++) {
391 sp = device_node_list.at(i);
399 int OSD_BASE::get_vm_node_size(void)
404 void OSD_BASE::add_feature(const _TCHAR *key, double value)
408 tmps = QString::fromUtf8(key);
409 if(!check_feature(key)) {
412 SupportedFeatures.append(l);
415 void OSD_BASE::add_feature(const _TCHAR *key, int64_t value)
419 tmps = QString::fromUtf8(key);
420 if(!check_feature(key)) {
423 SupportedFeatures.append(l);
427 void OSD_BASE::add_feature(const _TCHAR *key, float value)
429 add_feature(key, (double)value);
432 void OSD_BASE::add_feature(const _TCHAR *key, int value)
434 add_feature(key, (int64_t)value);
437 void OSD_BASE::add_feature(const _TCHAR *key, uint32_t value)
439 add_feature(key, (int64_t)(value & 0xffffffff));
442 void OSD_BASE::add_feature(const _TCHAR *key, uint16_t value)
444 add_feature(key, (int64_t)(value & 0xffff));
447 void OSD_BASE::add_feature(const _TCHAR *key, uint8_t value)
449 add_feature(key, (int64_t)(value & 0xff));
453 bool OSD_BASE::check_feature(const _TCHAR *key)
457 tmps = QString::fromUtf8(key);
458 for(int i = 0; i < SupportedFeatures.size(); i++) {
459 l = SupportedFeatures.at(i);
460 if(l.string == tmps) {
467 double OSD_BASE::get_feature_double_value(const _TCHAR *key)
471 tmps = QString::fromUtf8(key);
472 for(int i = 0; i < SupportedFeatures.size(); i++) {
473 l = SupportedFeatures.at(i);
474 if(l.string == tmps) {
478 return std::numeric_limits<double>::quiet_NaN(); // You don't use (0.0 / 0.0).
481 int64_t OSD_BASE::get_feature_int_value(const _TCHAR *key)
485 tmps = QString::fromUtf8(key);
486 for(int i = 0; i < SupportedFeatures.size(); i++) {
487 l = SupportedFeatures.at(i);
488 if(l.string == tmps) {
495 uint32_t OSD_BASE::get_feature_uint32_value(const _TCHAR *key)
497 return (uint32_t)(get_feature_int_value(key) & 0xffffffff);
500 uint16_t OSD_BASE::get_feature_uint16_value(const _TCHAR *key)
502 return (uint16_t)(get_feature_uint32_value(key) & 0xffff);
505 uint8_t OSD_BASE::get_feature_uint8_value(const _TCHAR *key)
507 return (uint8_t)(get_feature_uint32_value(key) & 0xff);