if(WIN32)
# add_subdirectory(../../src/qt/gui qt/gui)
endif()
-add_subdirectory(../../src/qt qt/osd)
+#add_subdirectory(../../src/qt qt/osd)
add_subdirectory(../../src common)
add_subdirectory(../../src/vm vm/)
if(WIN32)
set(LOCAL_LIBS
common_emu
-# qt_gui
qt_${VM_NAME}
vm_${VM_NAME}
${VM_APPEND_LIBS}
qt_osd
${DEBUG_LIBS}
common_common
-# qt_gui
)
else()
set(LOCAL_LIBS
${VM_APPEND_LIBS}
vm_vm
${FMGEN_LIB}
- qt_osd
${DEBUG_LIBS}
common_common
)
if(WIN32)
set(BUNDLE_LIBS ${BUNDLE_LIBS})
else()
- set(BUNDLE_LIBS ${BUNDLE_LIBS} -lCSPgui)
+ set(BUNDLE_LIBS ${BUNDLE_LIBS} -lCSPosd -lCSPgui)
endif()
if(USE_QT_5)
# libCSPGui
mkdir -p libCSPgui/build
+mkdir -p libCSPosd/build
cd libCSPgui/build
echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
.. | tee -a make.log
make clean
-
make ${MAKEFLAGS_GENERAL} 2>&1 | tee -a ./make.log
case $? in
0 ) sudo make install 2>&1 | tee -a ./make.log ;;
make clean
cd ../..
+# libCSPosd
+cd libCSPosd/build
+
+echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
+${CMAKE} -DCMAKE_C_COMPILER:STRING=${CCMAKE_CC} \
+ -DCMAKE_CXX_COMPILER:STRING=${CCMAKE_CXX} \
+ "-DLIBCSP_INSTALL_DIR:STRING=${LIB_INSTALL}" \
+ ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ ${CMAKE_APPENDFLAG} \
+ .. | tee make.log
+
+${CMAKE} -DCMAKE_C_COMPILER:STRING=${CCMAKE_CC} \
+ -DCMAKE_CXX_COMPILER:STRING=${CCMAKE_CXX} \
+ "-DLIBCSP_INSTALL_DIR:STRING=${LIB_INSTALL}" \
+ ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ ${CMAKE_APPENDFLAG} \
+ .. | tee -a make.log
+
+make clean
+
+make ${MAKEFLAGS_GENERAL} 2>&1 | tee -a ./make.log
+case $? in
+ 0 ) sudo make install 2>&1 | tee -a ./make.log ;;
+ * ) exit $? ;;
+ esac
+
+make clean
+cd ../..
for SRCDATA in $@ ; do\
# libCSPGui
mkdir -p libCSPgui/build-win32
+mkdir -p libCSPosd/build-win32
+
cd libCSPgui/build-win32
echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
#make clean
cd ../..
+#libCSPosd
+cd libCSPosd/build-win32
+echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
+${CMAKE} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_SCRIPT} \
+ ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ "-DUSE_SDL2=ON" \
+ ${CMAKE_APPENDFLAG} \
+ ${CMAKE_LINKFLAG} \
+ .. | tee make.log
+
+${CMAKE} ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ "-DUSE_SDL2=ON" \
+ ${CMAKE_APPENDFLAG} \
+ ${CMAKE_LINKFLAG} \
+ .. | tee -a make.log
+
+make clean
+
+make ${MAKEFLAGS_GENERAL} 2>&1 | tee -a ./make.log
+#case $? in
+# 0 )
+# cp ./qt/gui/libqt_gui.a ../../bin-win32/
+# cp ./qt/gui/*.lib ../../bin-win32/
+# cp ./qt/gui/*.dll ../../bin-win32/
+# ;;
+# * ) exit $? ;;
+#esac
+#make clean
+cd ../..
+
for SRCDATA in $@ ; do\
mkdir -p ${SRCDATA}/build-win32
cd libCSPgui/build-win32
make clean
cd ../..
+
+cd libCSPosd/build-win32
+make clean
+cd ../..
+
exit 0
esac
#libCSPgui
mkdir -p libCSPgui/build-win32
+mkdir -p libCSPosd/build-win32
cd libCSPgui/build-win32
echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
${CMAKE} -G "MinGW Makefiles" \
;;
* ) exit $? ;;
esac
+#mingw32-make clean
+cd ../..
+
+#libCSPosd
+cd libCSPosd/build-win32
+echo ${CMAKE_FLAGS1} ${CMAKE_FLAGS2}
+${CMAKE} -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_SCRIPT} \
+ ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ "-DUSE_SDL2=ON" \
+ ${CMAKE_APPENDFLAG} \
+ ${CMAKE_LINKFLAG} \
+ .. | tee make.log
+
+${CMAKE} ${CMAKE_FLAGS1} \
+ "${CMAKE_FLAGS2}=${MAKEFLAGS_LIB_CXX}" \
+ "${CMAKE_FLAGS3}=${MAKEFLAGS_LIB_CC}" \
+ "-DUSE_SDL2=ON" \
+ ${CMAKE_APPENDFLAG} \
+ ${CMAKE_LINKFLAG} \
+ .. | tee -a make.log
+
mingw32-make clean
+mingw32-make ${MAKEFLAGS_GENERAL} 2>&1 | tee -a ./make.log
+#case $? in
+# 0 )
+# cp ./qt/gui/libqt_gui.a ../../bin-win32/
+# cp ./qt/gui/*.lib ../../bin-win32/
+# cp ./qt/gui/*.dll ../../bin-win32/
+# ;;
+# * ) exit $? ;;
+#esac
+#make clean
cd ../..
for SRCDATA in $@ ; do\
done
cd libCSPgui/build-win32
+mingw32-make clean
+cd ../..
+cd libCSPosd/build-win32
mingw32-make clean
cd ../..
--- /dev/null
+# Build Common Sourcecode Project, Agar.
+# (C) 2014 K.Ohta <whatisthis.sowhat@gmail.com>
+# This is part of , but license is apache 2.2,
+# this part was written only me.
+
+cmake_minimum_required (VERSION 2.8)
+cmake_policy(SET CMP0011 NEW)
+
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake")
+
+project (libCSPgui)
+
+include(CheckFunctionExists)
+# Use cmake if enabled.
+ find_program(USE_CCACHE ccache)
+ if(USE_CCACHE)
+ SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+ endif()
+ FIND_PACKAGE(Qt5Widgets REQUIRED)
+ FIND_PACKAGE(Qt5Core REQUIRED)
+ FIND_PACKAGE(Qt5Gui REQUIRED)
+ FIND_PACKAGE(Qt5OpenGL REQUIRED)
+ include_directories(${Qt5Widgets_INCLUDE_DIRS})
+ include_directories(${Qt5Core_INCLUDE_DIRS})
+ include_directories(${Qt5Gui_INCLUDE_DIRS})
+ include_directories(${Qt5OpenGL_INCLUDE_DIRS})
+ add_definitions(-D_USE_OPENGL -DUSE_OPENGL)
+if(USE_SOCKET)
+ FIND_PACKAGE(Qt5Network REQUIRED)
+ include_directories(${Qt5Network_INCLUDE_DIRS})
+endif()
+SET(USE_QT_5 ON)
+set(USE_QT5_4_APIS OFF CACHE BOOL "Build with Qt5.4 (or later) APIs if you can.")
+set(USE_GCC_OLD_ABI ON CACHE BOOL "Build with older GCC ABIs if you can.")
+set(USE_SDL2 ON CACHE BOOL "Build with libSDL2. DIsable is building with libSDL1.")
+
+add_definitions(-D_USE_QT5)
+
+if(USE_QT5_4_APIS)
+ add_definitions(-D_USE_QT_5_4)
+endif()
+
+if(USE_GCC_OLD_ABI)
+ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
+else()
+ add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
+endif()
+
+SET(CMAKE_AUTOMOC OFF)
+SET(CMAKE_AUTORCC ON)
+SET(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+add_definitions(-D_USE_QT)
+add_definitions(-DUSE_QT)
+add_definitions(-DQT_MAJOR_VERSION=${Qt5Widgets_VERSION_MAJOR})
+add_definitions(-DQT_MINOR_VERSION=${Qt5Widgets_VERSION_MINOR})
+
+if(USE_OPENMP)
+ find_package(OpenMP)
+ include_directories(${OPENMP_INCLUDE_PATH})
+endif()
+
+find_package(Threads)
+include_directories(${THREADS_INCLUDE_PATH})
+
+include(FindPkgConfig)
+
+if(USE_SDL2)
+ if(CMAKE_CROSSCOMPILING)
+ include_directories(${SDL2_INCLUDE_DIRS})
+ else()
+ pkg_search_module(SDL2 REQUIRED sdl2)
+ include_directories(${SDL2_INCLUDE_DIRS})
+ endif()
+ set(SDL_LIBS ${SDL2_LIBRARIES})
+ add_definitions(-DUSE_SDL2)
+else()
+ if(CMAKE_CROSSCOMPILING)
+ include_directories(${SDL_INCLUDE_DIRS})
+ set(SDL_LIBS ${SDL_LIBRARIES})
+ else()
+ include(FindSDL)
+ #pkg_search_module(SDL REQUIRED sdl)
+ #include_directories(${SDL_INCLUDE_DIRS})
+ include_directories(${SDL_INCLUDE_DIR})
+ set(SDL_LIBS ${SDL_LIBRARY})
+ endif()
+endif()
+
+# GCC Only?
+if(CMAKE_COMPILER_IS_GNUCC)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions")
+endif()
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -flax-vector-conversions")
+endif()
+
+
+check_function_exists("nanosleep" HAVE_NANOSLEEP)
+if(NOT HAVE_NANOSLEEP)
+ check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP)
+endif(NOT HAVE_NANOSLEEP)
+
+if(LIB_RT_HAS_NANOSLEEP)
+ add_target_library(${EXEC_TARGET} rt)
+endif(LIB_RT_HAS_NANOSLEEP)
+
+if(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
+ add_definitions(-DHAVE_NANOSLEEP)
+endif(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
+
+
+set(SRC_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../src)
+
+if(USE_QT_5)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+endif()
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/common)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/gui)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt)
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src)
+add_subdirectory(../../src/qt qt/osd)
+
#endif()
-add_library(qt_osd
+SET(s_qt_osd_srcs
osd.cpp
osd_screen.cpp
osd_console.cpp
${s_qt_osd_headers_MOC}
)
+if(WIN32)
+ include (GenerateExportHeader)
+
+ add_library(qt_osd
+ ${s_qt_osd_srcs}
+ ${s_qt_osd_headers_MOC}
+ )
+
+else()
+ add_library(CSPosd SHARED
+ ${s_qt_osd_srcs}
+ ${s_qt_osd_headers_MOC}
+ )
+
+ set_target_properties(CSPosd PROPERTIES
+ SOVERSION 1.0.0
+ VERSION 1.0.0
+ )
+ INSTALL(TARGETS CSPosd DESTINATION ${LIBCSP_INSTALL_DIR})
+endif()
+
util_fd2.cpp
util_bubble2.cpp
util_main.cpp
+ ../osd_wrapper.cpp
)
if(USE_QT_5)
if(WIN32)
target_link_libraries(${EXEC_TARGET}
${LOCAL_LIBS}
+ ${CMAKE_SOURCE_DIR}/../../build-cmake/libCSPgui/build-win32/qt/gui/libqt_osd.a
${CMAKE_SOURCE_DIR}/../../build-cmake/libCSPgui/build-win32/qt/gui/libqt_gui.a
${BUNDLE_LIBS}
${CMAKE_SOURCE_DIR}/../../build-cmake/libCSPgui/build-win32/qt/gui/libqt_gui.a
[ Qt dependent ]
*/
-#include "emu.h"
+//#include "emu.h"
#include <string>
#include <QDateTime>
#include <QDate>
#include <QTime>
#include <QString>
#include <QObject>
-#include "emu_thread.h"
-#include "draw_thread.h"
+#include <QThread>
+
#include "qt_gldraw.h"
#include "agar_logger.h"
+#include "osd.h"
OSD::OSD() : QThread(0)
{
parent_thread = parent;
}
-void OSD::set_draw_thread(DrawThreadClass *handler)
-{
- this->moveToThread(handler);
- connect(this, SIGNAL(sig_update_screen(bitmap_t *)), handler, SLOT(do_update_screen(bitmap_t *)));
- connect(this, SIGNAL(sig_save_screen(const char *)), glv, SLOT(do_save_frame_screen(const char *)));
- connect(this, SIGNAL(sig_close_window()), parent_thread, SLOT(doExit()));
- connect(this, SIGNAL(sig_resize_vm_screen(QImage *, int, int)), glv, SLOT(do_set_texture_size(QImage *, int, int)));
- connect(this, SIGNAL(sig_console_input_string(QString)), parent_thread, SLOT(do_call_debugger_command(QString)));
- connect(parent_thread, SIGNAL(sig_debugger_input(QString)), this, SLOT(do_set_input_string(QString)));
- connect(parent_thread, SIGNAL(sig_quit_debugger()), this, SLOT(do_close_debugger_thread()));
-}
-
void OSD::initialize(int rate, int samples)
{
// get module path
initialize_printer();
initialize_screen();
initialize_sound(rate, samples);
-#if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
- initialize_video();
-#endif
-#ifdef USE_SOCKET
- initialize_socket();
-#endif
+ if(get_use_movie_player() || get_use_video_capture()) initialize_video();
+ if(get_use_socket()) initialize_socket();
}
void OSD::release()
release_printer();
release_screen();
release_sound();
-#if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
- release_video();
-#endif
-#ifdef USE_SOCKET
- release_socket();
-#endif
+ if(get_use_movie_player() || get_use_video_capture()) release_video();
+ if(get_use_socket()) release_socket();
//CoUninitialize();
}
void OSD::suspend()
{
-#ifdef USE_MOVIE_PLAYER
- if(now_movie_play && !now_movie_pause) {
- pause_movie();
- now_movie_pause = false;
+ if(get_use_movie_player()) {
+ if(now_movie_play && !now_movie_pause) {
+ pause_movie();
+ now_movie_pause = false;
+ }
}
-#endif
mute_sound();
}
void OSD::restore()
{
-#ifdef USE_MOVIE_PLAYER
- if(now_movie_play && !now_movie_pause) {
- play_movie();
+ if(get_use_movie_player()) {
+ if(now_movie_play && !now_movie_pause) {
+ play_movie();
+ }
}
-#endif
}
_TCHAR* OSD::bios_path(const _TCHAR* file_name)
{
QDateTime nowTime = QDateTime::currentDateTime();
QString tmps = QString::fromUtf8("emu");
- tmps = tmps + QString::fromUtf8(CONFIG_NAME);
+ tmps = tmps + get_vm_config_name();
tmps = tmps + QString::fromUtf8("_");
tmps = tmps + nowTime.toString(QString::fromUtf8("yyyy-MM-dd_hh-mm-ss.zzz."));
tmps = tmps + QString::fromUtf8(extension);
snprintf(name, length, _T("%s"), tmps.toLocal8Bit().constData());
}
-void OSD::lock_vm(void)
-{
- locked_vm = true;
- if(parent_thread != NULL) {
- if(!parent_thread->now_debugging()) VMSemaphore->acquire(1);
- } else {
- VMSemaphore->acquire(1);
- }
-}
-
-void OSD::unlock_vm(void)
-{
- if(parent_thread != NULL) {
- if(!parent_thread->now_debugging()) VMSemaphore->release(1);
- } else {
- VMSemaphore->release(1);
- }
- locked_vm = false;
-}
-
-bool OSD::is_vm_locked(void)
-{
- return locked_vm;
-}
-
-void OSD::force_unlock_vm(void)
-{
- if(parent_thread == NULL) {
- while(VMSemaphore->available() < 1) VMSemaphore->release(1);
- return;
- }
- if(parent_thread->now_debugging()) return;
- while(VMSemaphore->available() < 1) VMSemaphore->release(1);
-}
#if !defined(Q_OS_WIN32)
#include "qt_input.h"
#endif
-//#ifdef USE_SOCKET
#define SOCKET_MAX 4
#define SOCKET_BUFFER_MAX 0x100000
-//#endif
#include "osd_types.h"
{
Q_OBJECT
protected:
-// VM* vm;
-// EMU* emu;
EmuThreadClass *parent_thread;
QSemaphore *VMSemaphore;
QSemaphore *DebugSemaphore;
uint8_t keycode_conv[256];
uint8_t key_status[256]; // windows key code mapping
uint8_t key_dik_prev[256];
-//#ifdef USE_SHIFT_NUMPAD_KEY
uint8_t key_converted[256];
bool key_shift_pressed, key_shift_released;
-//#endif
+
+
uint32_t modkey_status;
bool lost_focus;
uint32_t joy_status[4]; // joystick #1, #2 (b0 = up, b1 = down, b2 = left, b3 = right, b4- = buttons
void release_screen();
void initialize_screen_buffer(bitmap_t *buffer, int width, int height, int mode);
void release_screen_buffer(bitmap_t *buffer);
-//#ifdef USE_SCREEN_ROTATE
void rotate_screen_buffer(bitmap_t *source, bitmap_t *dest);
-//#endif
+
void stretch_screen_buffer(bitmap_t *source, bitmap_t *dest);
int add_video_frames();
#endif
SDL_AudioSpec snd_spec_req, snd_spec_presented;
-//#if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
// video device
void initialize_video();
void release_video();
bitmap_t dshow_screen_buffer;
int direct_show_width, direct_show_height;
bool direct_show_mute[2];
-//#endif
-//#ifdef USE_MOVIE_PLAYER
+
double movie_frame_rate;
int movie_sound_rate;
-//#endif
-//#ifdef USE_VIDEO_CAPTURE
+
void enum_capture_devs();
bool connect_capture_dev(int index, bool pin);
int cur_capture_dev_index;
int num_capture_devs;
_TCHAR capture_dev_name[MAX_CAPTURE_DEVS][256];
-//#endif
+
_TCHAR prn_file_name[_MAX_PATH];
FILEIO *prn_fio;
int prn_data, prn_wait_frames;
bool prn_strobe;
// socket
-//#ifdef USE_SOCKET
void initialize_socket();
void release_socket();
int socket_delay[SOCKET_MAX];
char recv_buffer[SOCKET_MAX][SOCKET_BUFFER_MAX];
int recv_r_ptr[SOCKET_MAX], recv_w_ptr[SOCKET_MAX];
-//#endif
-
+
+ // wrapper
+ void vm_draw_screen(void);
+ double vm_frame_rate(void);
+ Sint16* create_sound(int *extra_frames);
+ bool get_use_socket(void);
+ bool get_support_variable_timing(void);
+ bool get_notify_key_down(void);
+ bool get_notify_key_down_lr_shift(void);
+ bool get_notify_key_down_lr_control(void);
+ bool get_notify_key_down_lr_menu(void);
+ bool get_use_shift_numpad_key(void);
+ bool get_use_auto_key(void);
+ bool get_dont_keeep_key_pressed(void);
+ bool get_one_board_micro_computer(void);
+ bool get_use_screen_rotate(void);
+ bool get_use_movie_player(void);
+ bool get_use_video_capture(void);
+ void vm_key_down(int code, bool flag);
+ void vm_key_up(int code);
+ void vm_reset(void);
+ void update_buttons(void);
+ QString get_vm_config_name(void);
+ int get_screen_width(void);
+ int get_screen_height(void);
+ int get_vm_buttons_code(int num);
+
public:
OSD();
~OSD();
class Ui_MainWindow *main_window_handle;
GLDrawClass *glv;
int host_cpus;
-//#ifdef USE_AUTO_KEY
bool now_auto_key;
-//#endif
void initialize(int rate, int samples);
void release();
{
lost_focus = true;
}
-//#ifdef ONE_BOARD_MICRO_COMPUTER
void press_button(int num);
-//#endif
+
# if !defined(Q_OS_WIN) && !defined(Q_OS_CYGWIN)
uint16_t GetAsyncKeyState(uint32_t vk); // Win32 GetAsyncKeyState() wrappeer.
# endif
}
scrntype_t* get_vm_screen_buffer(int y);
int draw_screen();
-//#ifdef ONE_BOARD_MICRO_COMPUTER
void reload_bitmap()
{
first_invalidate = true;
}
-//#endif
void capture_screen();
bool start_record_video(int fps);
void stop_record_video();
void restart_record_video();
void add_extra_frames(int extra_frames);
bool now_record_video;
-//#ifdef USE_CRT_FILTER
bool screen_skip_line;
-//#endif
-
// common sound
void update_sound(int* extra_frames);
void mute_sound();
void restart_record_sound();
bool now_record_sound;
-//#if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE)
// common video device
void get_video_buffer();
void mute_video_dev(bool l, bool r);
-//#endif
-//#ifdef USE_MOVIE_PLAYER
bool open_movie_file(const _TCHAR* file_path);
void close_movie_file();
void play_movie();
void set_cur_movie_frame(int frame, bool relative);
uint32_t get_cur_movie_frame();
bool now_movie_play, now_movie_pause;
-//#endif
-//#ifdef USE_VIDEO_CAPTURE
int get_cur_capture_dev_index()
{
return cur_capture_dev_index;
void show_capture_dev_pin();
void show_capture_dev_source();
void set_capture_dev_channel(int ch);
-//#endif
// common printer
-//#ifdef USE_PRINTER
void create_bitmap(bitmap_t *bitmap, int width, int height);
void release_bitmap(bitmap_t *bitmap);
void create_font(font_t *font, const _TCHAR *family, int width, int height, int rotate, bool bold, bool italic);
void draw_point_to_bitmap(bitmap_t *bitmap, int x, int y, uint8_t r, uint8_t g, uint8_t b);
void stretch_bitmap(bitmap_t *dest, int dest_x, int dest_y, int dest_width, int dest_height, bitmap_t *source, int source_x, int source_y, int source_width, int source_height);
-//#endif
void write_bitmap_to_file(bitmap_t *bitmap, const _TCHAR *file_path);
// common socket
-//#ifdef USE_SOCKET
int get_socket(int ch)
{
return soc[ch];
void send_socket_data_udp(int ch, uint32_t ipaddr, int port);
void send_socket_data(int ch);
void recv_socket_data(int ch);
-//#endif
// win32 dependent
void update_screen();
void set_parent_thread(EmuThreadClass *parent);
EmuThreadClass *get_parent_handler();
- void set_draw_thread(DrawThreadClass *handler);
+
_TCHAR *console_input_string(void);
void clear_console_input_string(void);
+ // Wrapper
void lock_vm(void);
void unlock_vm(void);
void force_unlock_vm(void);
bool is_vm_locked(void);
-
+ void set_draw_thread(DrawThreadClass *handler);
+
public slots:
void do_write_inputdata(QString s);
void do_set_input_string(QString s);
#include "emu.h"
#include "fifo.h"
-#include "emu_thread.h"
+//#include "emu_thread.h"
#include "emu.h"
#include <QString>
void OSD::do_close_debugger_thread()
{
-#if defined(USE_DEBUGGER)
- emit sig_debugger_finished();
- //}
-#endif
+ emit sig_debugger_finished();
}
#include <QApplication>
#include <SDL.h>
-#include "../emu.h"
+//#include "../emu.h"
#include "../fifo.h"
-#include "fileio.h"
+#include "../fileio.h"
+//#include "osd.h"
#include "qt_input.h"
#include "qt_gldraw.h"
#include "qt_main.h"
-#include "mainwidget.h"
+#include "osd.h"
+//#include "mainwidget.h"
#include "agar_logger.h"
#include "dropdown_keyset.h"
-#ifdef NOTIFY_KEY_DOWN_LR_SHIFT
-#define VK_SHIFT_TEMP VK_LSHIFT
-#else
-#define VK_SHIFT_TEMP VK_SHIFT
-#endif
#define KEY_KEEP_FRAMES 3
-#ifdef USE_SHIFT_NUMPAD_KEY
static const int numpad_table[256] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-#endif
void OSD::initialize_input()
memset(mouse_status, 0, sizeof(mouse_status));
// mouse emulation is disenabled
mouse_enabled = false;
- mouse_ptrx = mouse_oldx = SCREEN_WIDTH / 2;
- mouse_ptry = mouse_oldy = SCREEN_HEIGHT / 2;
+ mouse_ptrx = mouse_oldx = get_screen_width() / 2;
+ mouse_ptry = mouse_oldy = get_screen_height() / 2;
// initialize keycode convert table
FILEIO* fio = new FILEIO();
if(fio->Fopen(bios_path(_T("keycode.cfg")), FILEIO_READ_BINARY)) {
}
}
delete fio;
-#ifdef USE_AUTO_KEY
now_auto_key = false;
-#endif
-#ifdef USE_SHIFT_NUMPAD_KEY
// initialize shift+numpad conversion
memset(key_converted, 0, sizeof(key_converted));
key_shift_pressed = key_shift_released = false;
-#endif
lost_focus = false;
}
int i_c = 0;;
bool press_flag = false;
bool release_flag = false;
-#ifdef USE_SHIFT_NUMPAD_KEY
- //update numpad key status
- if(key_shift_pressed && !key_shift_released) {
- if(key_status[VK_SHIFT] == 0) {
- // shift key is newly pressed
- key_status[VK_SHIFT] = 0x80;
-# ifdef NOTIFY_KEY_DOWN
- vm->key_down(VK_SHIFT, false);
-# endif
- }
- } else if(!key_shift_pressed && key_shift_released) {
- if(key_status[VK_SHIFT] != 0) {
- // shift key is newly released
- key_status[VK_SHIFT] = 0;
-# ifdef NOTIFY_KEY_DOWN
- vm->key_up(VK_SHIFT);
-# endif
- // check l/r shift
- if(!(GetAsyncKeyState(VK_LSHIFT) & 0x8000)) key_status[VK_LSHIFT] &= 0x7f;
- if(!(GetAsyncKeyState(VK_RSHIFT) & 0x8000)) key_status[VK_RSHIFT] &= 0x7f;
- }
- if(key_status[VK_LSHIFT] != 0) {
+ if(get_use_shift_numpad_key()) {
+ //update numpad key status
+ if(key_shift_pressed && !key_shift_released) {
+ if(key_status[VK_SHIFT] == 0) {
+ // shift key is newly pressed
+ key_status[VK_SHIFT] = 0x80;
+ if(this->get_notify_key_down()) vm_key_down(VK_SHIFT, false);
+ }
+ } else if(!key_shift_pressed && key_shift_released) {
+ if(key_status[VK_SHIFT] != 0) {
// shift key is newly released
- key_status[VK_LSHIFT] = 0;
-# ifdef NOTIFY_KEY_DOWN
- vm->key_up(VK_LSHIFT);
-# endif
+ key_status[VK_SHIFT] = 0;
+ if(this->get_notify_key_down()) vm_key_up(VK_SHIFT);
+ // check l/r shift
+ if(!(GetAsyncKeyState(VK_LSHIFT) & 0x8000)) key_status[VK_LSHIFT] &= 0x7f;
+ if(!(GetAsyncKeyState(VK_RSHIFT) & 0x8000)) key_status[VK_RSHIFT] &= 0x7f;
+ }
+ if(key_status[VK_LSHIFT] != 0) {
+ // shift key is newly released
+ key_status[VK_LSHIFT] = 0;
+ if(this->get_notify_key_down()) vm_key_up(VK_LSHIFT);
// check l/r shift
if(!(GetAsyncKeyState(VK_LSHIFT) & 0x8000)) key_status[VK_LSHIFT] &= 0x7f;
+ }
+ if(key_status[VK_RSHIFT] != 0) {
+ // shift key is newly released
+ key_status[VK_RSHIFT] = 0;
+ if(this->get_notify_key_down()) vm_key_up(VK_RSHIFT);
+ // check l/r shift
+ if(!(GetAsyncKeyState(VK_RSHIFT) & 0x8000)) key_status[VK_RSHIFT] &= 0x7f;
+ }
}
- if(key_status[VK_RSHIFT] != 0) {
- // shift key is newly released
- key_status[VK_RSHIFT] = 0;
-# ifdef NOTIFY_KEY_DOWN
- vm->key_up(VK_RSHIFT);
-# endif
- // check l/r shift
- if(!(GetAsyncKeyState(VK_RSHIFT) & 0x8000)) key_status[VK_RSHIFT] &= 0x7f;
- }
+ key_shift_pressed = key_shift_released = false;
}
- key_shift_pressed = key_shift_released = false;
-#endif
// release keys
-#ifdef USE_AUTO_KEY
if(lost_focus && !now_auto_key) {
-#else
- if(lost_focus) {
-#endif
// we lost key focus so release all pressed keys
for(int i = 0; i < 256; i++) {
if(key_status[i] & 0x80) {
key_status[i] &= 0x7f;
release_flag = true;
-#ifdef NOTIFY_KEY_DOWN
- if(!key_status[i]) {
- vm->key_up(i);
+ if(this->get_notify_key_down()) {
+ if(!key_status[i]) {
+ vm_key_up(i);
+ }
}
-#endif
}
}
} else {
if(key_status[i] & 0x7f) {
key_status[i] = (key_status[i] & 0x80) | ((key_status[i] & 0x7f) - 1);
press_flag = true;
-#ifdef NOTIFY_KEY_DOWN
- if(!key_status[i]) {
- vm->key_up(i);
+ if(this->get_notify_key_down()) {
+ if(!key_status[i]) {
+ vm_key_up(i);
+ }
}
-#endif
}
}
}
lost_focus = false;
-#if defined(MAX_BUTTONS)
- if(!press_flag && !release_flag) {
- int ii;
- ii = 0;
- for(ii = 0; vm_buttons[ii].code != 0x00; ii++) {
- if((mouse_ptrx >= vm_buttons[ii].x) && (mouse_ptrx < (vm_buttons[ii].x + vm_buttons[ii].width))) {
- if((mouse_ptry >= vm_buttons[ii].y) && (mouse_ptry < (vm_buttons[ii].y + vm_buttons[ii].height))) {
- if((key_status[vm_buttons[ii].code] & 0x7f) == 0) this->press_button(ii);
- }
- }
- }
- if((mouse_ptrx >= vm_buttons[ii].x) && (mouse_ptrx < (vm_buttons[ii].x + vm_buttons[ii].width))) {
- if((mouse_ptry >= vm_buttons[ii].y) && (mouse_ptry < (vm_buttons[ii].y + vm_buttons[ii].height))) {
- this->press_button(ii);
- }
- }
- mouse_ptrx = mouse_ptry = 0;
- }
- //return;
-#endif
-
+ update_buttons();
// update mouse status
if(mouse_enabled) {
bool hid = false;
return;
}
}
-#ifdef USE_SHIFT_NUMPAD_KEY
- if(code == VK_LSHIFT) {
- key_shift_pressed = true;
- return;
- } else if(numpad_table[code] != 0) {
- if(key_shift_pressed || key_shift_released) {
- key_converted[code] = 1;
+ if(get_use_shift_numpad_key()) {
+ if(code == VK_LSHIFT) {
key_shift_pressed = true;
- code = numpad_table[code];
+ return;
+ } else if(numpad_table[code] != 0) {
+ if(key_shift_pressed || key_shift_released) {
+ key_converted[code] = 1;
+ key_shift_pressed = true;
+ code = numpad_table[code];
+ }
}
}
-#endif
key_down_native(code, repeat);
}
return;
}
}
-#ifdef USE_SHIFT_NUMPAD_KEY
- if(code == VK_LSHIFT) {
- key_shift_pressed = false;
- key_shift_released = true;
- return;
- } else if(key_converted[code] != 0) {
- key_converted[code] = 0;
- code = numpad_table[code];
+ if(get_use_shift_numpad_key()) {
+ if(code == VK_LSHIFT) {
+ key_shift_pressed = false;
+ key_shift_released = true;
+ return;
+ } else if(key_converted[code] != 0) {
+ key_converted[code] = 0;
+ code = numpad_table[code];
+ }
}
-#endif
key_up_native(code);
}
code = VK_KANJI;
keep_frames = true;
}
- //if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU)) {
- code = keycode_conv[code];
- //}
+ code = keycode_conv[code];
-#ifdef DONT_KEEEP_KEY_PRESSED
- if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU)) {
- key_status[code] = KEY_KEEP_FRAMES;
- } else
-#endif
- key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
-
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
+ if(get_dont_keeep_key_pressed()) {
+ if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU)) {
+ key_status[code] = KEY_KEEP_FRAMES;
+ } else {
+ key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
+ }
+ } else {
+ key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
+ }
+
uint8_t prev_shift = key_status[VK_SHIFT];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
uint8_t prev_control = key_status[VK_CONTROL];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
uint8_t prev_menu = key_status[VK_MENU];
-#endif
-#endif
key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-#ifdef NOTIFY_KEY_DOWN
- if(keep_frames) {
- repeat = false;
- }
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
- if(code == VK_LSHIFT || code == VK_RSHIFT) {
- if(prev_shift == 0 && key_status[VK_SHIFT] != 0) {
- vm->key_down(VK_SHIFT, repeat);
+ if(get_notify_key_down()) {
+ if(keep_frames) {
+ repeat = false;
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
- if(code == VK_LCONTROL|| code == VK_RCONTROL) {
- if(prev_control == 0 && key_status[VK_CONTROL] != 0) {
- vm->key_down(VK_CONTROL, repeat);
+ if(!get_notify_key_down_lr_shift()) {
+ if(code == VK_LSHIFT || code == VK_RSHIFT) {
+ if(prev_shift == 0 && key_status[VK_SHIFT] != 0) {
+ vm_key_down(VK_SHIFT, repeat);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
- if(code == VK_LMENU|| code == VK_RMENU) {
- if(prev_menu == 0 && key_status[VK_MENU] != 0) {
- vm->key_down(VK_MENU, repeat);
+ if(!get_notify_key_down_lr_control()) {
+ if(code == VK_LCONTROL|| code == VK_RCONTROL) {
+ if(prev_control == 0 && key_status[VK_CONTROL] != 0) {
+ vm_key_down(VK_CONTROL, repeat);
+ }
+ return;
+ }
}
- return;
+ if(!get_notify_key_down_lr_menu()) {
+ if(code == VK_LMENU|| code == VK_RMENU) {
+ if(prev_menu == 0 && key_status[VK_MENU] != 0) {
+ vm_key_down(VK_MENU, repeat);
+ }
+ return;
+ }
+ }
+ vm_key_down(code, repeat);
}
-#endif
- vm->key_down(code, repeat);
-#endif
}
void OSD::key_up_native(int code)
return;
}
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
uint8_t prev_shift = key_status[VK_SHIFT];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
uint8_t prev_control = key_status[VK_CONTROL];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
uint8_t prev_menu = key_status[VK_MENU];
-#endif
-#endif
key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
- if(code == VK_LSHIFT || code == VK_RSHIFT) {
- if(prev_shift != 0 && key_status[VK_SHIFT] == 0) {
- vm->key_up(VK_SHIFT);
+
+ if(get_notify_key_down()) {
+ if(!get_notify_key_down_lr_shift()) {
+ if(code == VK_LSHIFT || code == VK_RSHIFT) {
+ if(prev_shift != 0 && key_status[VK_SHIFT] == 0) {
+ vm_key_up(VK_SHIFT);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
- if(code == VK_LCONTROL|| code == VK_RCONTROL) {
- if(prev_control != 0 && key_status[VK_CONTROL] == 0) {
- vm->key_up(VK_CONTROL);
+ if(!get_notify_key_down_lr_control()) {
+ if(code == VK_LCONTROL|| code == VK_RCONTROL) {
+ if(prev_control != 0 && key_status[VK_CONTROL] == 0) {
+ vm_key_up(VK_CONTROL);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
- if(code == VK_LMENU || code == VK_RMENU) {
- if(prev_menu != 0 && key_status[VK_MENU] == 0) {
- vm->key_up(VK_MENU);
+ if(!get_notify_key_down_lr_menu()) {
+ if(code == VK_LMENU || code == VK_RMENU) {
+ if(prev_menu != 0 && key_status[VK_MENU] == 0) {
+ vm_key_up(VK_MENU);
+ }
+ return;
+ }
}
- return;
+ vm_key_up(code);
}
-#endif
- vm->key_up(code);
-#endif
}
void OSD::key_down_sub(int code, bool repeat)
code = keycode_conv[code];
}
-#ifdef DONT_KEEEP_KEY_PRESSED
- if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU)) {
- key_status[code] = KEY_KEEP_FRAMES;
- } else
-#endif
- key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
-
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
+
+ if(get_dont_keeep_key_pressed()) {
+ if(!(code == VK_LSHIFT || code == VK_RSHIFT || code == VK_LCONTROL || code == VK_RCONTROL || code == VK_LMENU || code == VK_RMENU)) {
+ key_status[code] = KEY_KEEP_FRAMES;
+ } else {
+ key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
+ }
+ } else {
+ key_status[code] = keep_frames ? KEY_KEEP_FRAMES : 0x80;
+ }
+
uint8_t prev_shift = key_status[VK_SHIFT];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
uint8_t prev_control = key_status[VK_CONTROL];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
uint8_t prev_menu = key_status[VK_MENU];
-#endif
-#endif
+
key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-#ifdef NOTIFY_KEY_DOWN
- if(keep_frames) {
- repeat = false;
- }
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
- if(code == VK_LSHIFT || code == VK_RSHIFT) {
- if(prev_shift == 0 && key_status[VK_SHIFT] != 0) {
- vm->key_down(VK_SHIFT, repeat);
+ if(get_notify_key_down()) {
+ if(keep_frames) {
+ repeat = false;
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
- if(code == VK_LCONTROL|| code == VK_RCONTROL) {
- if(prev_control == 0 && key_status[VK_CONTROL] != 0) {
- vm->key_down(VK_CONTROL, repeat);
+ if(!get_notify_key_down_lr_shift()) {
+ if(code == VK_LSHIFT || code == VK_RSHIFT) {
+ if(prev_shift == 0 && key_status[VK_SHIFT] != 0) {
+ vm_key_down(VK_SHIFT, repeat);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
- if(code == VK_LMENU|| code == VK_RMENU) {
- if(prev_menu == 0 && key_status[VK_MENU] != 0) {
- vm->key_down(VK_MENU, repeat);
+ if(!get_notify_key_down_lr_control()) {
+ if(code == VK_LCONTROL|| code == VK_RCONTROL) {
+ if(prev_control == 0 && key_status[VK_CONTROL] != 0) {
+ vm_key_down(VK_CONTROL, repeat);
+ }
+ return;
+ }
}
- return;
+ if(!get_notify_key_down_lr_menu()) {
+ if(code == VK_LMENU|| code == VK_RMENU) {
+ if(prev_menu == 0 && key_status[VK_MENU] != 0) {
+ vm_key_down(VK_MENU, repeat);
+ }
+ return;
+ }
+ }
+ vm_key_down(code, repeat);
}
-#endif
- vm->key_down(code, repeat);
-#endif
}
void OSD::key_up_sub(int code)
return;
}
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
uint8_t prev_shift = key_status[VK_SHIFT];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
uint8_t prev_control = key_status[VK_CONTROL];
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
uint8_t prev_menu = key_status[VK_MENU];
-#endif
-#endif
key_status[VK_SHIFT] = key_status[VK_LSHIFT] | key_status[VK_RSHIFT];
key_status[VK_CONTROL] = key_status[VK_LCONTROL] | key_status[VK_RCONTROL];
key_status[VK_MENU] = key_status[VK_LMENU] | key_status[VK_RMENU];
-
-#ifdef NOTIFY_KEY_DOWN
-#ifndef NOTIFY_KEY_DOWN_LR_SHIFT
- if(code == VK_LSHIFT || code == VK_RSHIFT) {
- if(prev_shift != 0 && key_status[VK_SHIFT] == 0) {
- vm->key_up(VK_SHIFT);
+ if(get_notify_key_down()) {
+ if(!get_notify_key_down_lr_shift()) {
+ if(code == VK_LSHIFT || code == VK_RSHIFT) {
+ if(prev_shift != 0 && key_status[VK_SHIFT] == 0) {
+ vm_key_up(VK_SHIFT);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_CONTROL
- if(code == VK_LCONTROL|| code == VK_RCONTROL) {
- if(prev_control != 0 && key_status[VK_CONTROL] == 0) {
- vm->key_up(VK_CONTROL);
+ if(!get_notify_key_down_lr_control()) {
+ if(code == VK_LCONTROL|| code == VK_RCONTROL) {
+ if(prev_control != 0 && key_status[VK_CONTROL] == 0) {
+ vm_key_up(VK_CONTROL);
+ }
+ return;
+ }
}
- return;
- }
-#endif
-#ifndef NOTIFY_KEY_DOWN_LR_MENU
- if(code == VK_LMENU || code == VK_RMENU) {
- if(prev_menu != 0 && key_status[VK_MENU] == 0) {
- vm->key_up(VK_MENU);
+ if(!get_notify_key_down_lr_menu()) {
+ if(code == VK_LMENU || code == VK_RMENU) {
+ if(prev_menu != 0 && key_status[VK_MENU] == 0) {
+ vm_key_up(VK_MENU);
+ }
+ return;
+ }
}
- return;
+ vm_key_up(code);
}
-#endif
- vm->key_up(code);
-#endif
}
-#ifdef ONE_BOARD_MICRO_COMPUTER
+
void OSD::press_button(int num)
{
- int code = vm_buttons[num].code;
-
- if(code) {
- key_down_sub(code, false);
- key_status[code] = KEY_KEEP_FRAMES;
- } else {
- // code=0: reset virtual machine
- vm->reset();
+ if(get_one_board_micro_computer()) {
+ int code = get_vm_buttons_code(num);
+
+ if(code) {
+ key_down_sub(code, false);
+ key_status[code] = KEY_KEEP_FRAMES;
+ } else {
+ // code=0: reset virtual machine
+ vm_reset();
+ }
}
}
-#endif
+
void OSD::enable_mouse()
{
if(!mouse_enabled) {
QCursor cursor;
QPoint pos;
- mouse_oldx = mouse_ptrx = SCREEN_WIDTH / 2;
- mouse_oldy = mouse_ptry = SCREEN_HEIGHT / 2;
+ mouse_oldx = mouse_ptrx = get_screen_width() / 2;
+ mouse_oldy = mouse_ptry = get_screen_height() / 2;
cursor = glv->cursor();
pos.setX(glv->width() / 2);
pos.setY(glv->height() / 2);
[ Qt printer ]
*/
-#include "../emu.h"
+#include "osd.h"
void OSD::initialize_printer()
{
}
prn_fio->Fputc(prn_data);
// wait 10sec
-#ifdef SUPPORT_VARIABLE_TIMING
- prn_wait_frames = (int)(vm->get_frame_rate() * 10.0 + 0.5);
-#else
- prn_wait_frames = (int)(FRAMES_PER_SEC * 10.0 + 0.5);
-#endif
+ prn_wait_frames = (int)(vm_frame_rate() * 10.0 + 0.5);
}
}
#define REC_VIDEO_FULL 2
#define REC_VIDEO_ERROR 3
-void OSD::initialize_screen()
-{
- host_window_width = base_window_width = WINDOW_WIDTH;
- host_window_height = base_window_height = WINDOW_HEIGHT;
- host_window_mode = true;
-
- vm_screen_width = SCREEN_WIDTH;
- vm_screen_height = SCREEN_HEIGHT;
- vm_window_width = WINDOW_WIDTH;
- vm_window_height = WINDOW_HEIGHT;
- vm_window_width_aspect = WINDOW_WIDTH_ASPECT;
- vm_window_height_aspect = WINDOW_HEIGHT_ASPECT;
-
- QColor col(0, 0, 0, 255);
- //memset(&vm_screen_buffer, 0, sizeof(bitmap_t));
- vm_screen_buffer.width = SCREEN_WIDTH;
- vm_screen_buffer.height = SCREEN_HEIGHT;
- vm_screen_buffer.pImage = QImage(SCREEN_WIDTH, SCREEN_HEIGHT, QImage::Format_ARGB32);
- vm_screen_buffer.pImage.fill(col);
- now_record_video = false;
- //pAVIStream = NULL;
- //pAVICompressed = NULL;
- //pAVIFile = NULL;
-
- first_draw_screen = false;
- first_invalidate = true;
- self_invalidate = false;
-}
-
-void OSD::release_screen()
-{
- stop_record_video();
-
- //release_d3d9();
- //if(vm_screen_buffer.pImage != NULL) delete vm_screen_buffer.pImage;
- release_screen_buffer(&vm_screen_buffer);
-}
-
-int OSD::get_window_mode_width(int mode)
-{
-#ifdef USE_SCREEN_ROTATE
- if(config.rotate_type == 1 || config.rotate_type == 3) {
- return (config.window_stretch_type == 0 ? vm_window_height : vm_window_height_aspect) * (mode + WINDOW_MODE_BASE);
- }
-#endif
- return (config.window_stretch_type == 0 ? vm_window_width : vm_window_width_aspect) * (mode + WINDOW_MODE_BASE);
-}
-int OSD::get_window_mode_height(int mode)
-{
-#ifdef USE_SCREEN_ROTATE
- if(config.rotate_type == 1 || config.rotate_type == 3) {
- return (config.window_stretch_type == 0 ? vm_window_width : vm_window_width_aspect) * (mode + WINDOW_MODE_BASE);
- }
-#endif
- return (config.window_stretch_type == 0 ? vm_window_height : vm_window_height_aspect) * (mode + WINDOW_MODE_BASE);
-}
void OSD::set_host_window_size(int window_width, int window_height, bool window_mode)
{
}
initialize_screen_buffer(&vm_screen_buffer, vm_screen_width, vm_screen_height, 0);
}
- vm->draw_screen();
+ this->vm_draw_screen();
unlock_vm();
// screen size was changed in vm->draw_screen()
if(vm_screen_buffer.width != vm_screen_width || vm_screen_buffer.height != vm_screen_height) {
static double frames = 0;
static int prev_video_fps = -1;
int counter = 0;
-#if 0
-#ifdef SUPPORT_VARIABLE_TIMING
static double prev_vm_fps = -1;
- double vm_fps = vm->frame_rate();
-
- if(prev_video_fps != rec_video_fps || prev_vm_fps != vm_fps) {
- prev_video_fps = rec_video_fps;
- prev_vm_fps = vm_fps;
- frames = vm_fps / rec_video_fps;
- }
-#else
- if(prev_video_fps != rec_video_fps) {
- prev_video_fps = rec_video_fps;
- frames = FRAMES_PER_SEC / rec_video_fps;
+#if 0
+ if(get_support_variable_timing()) {
+ double vm_fps = vm_frame_rate();
+
+ prev_vm_fps = -1;
+ if(prev_video_fps != rec_video_fps || prev_vm_fps != vm_fps) {
+ prev_video_fps = rec_video_fps;
+ prev_vm_fps = vm_fps;
+ frames = vm_fps / rec_video_fps;
+ }
+ } else {
+ if(prev_video_fps != rec_video_fps) {
+ prev_video_fps = rec_video_fps;
+ frames = FRAMES_PER_SEC / rec_video_fps;
+ }
}
-#endif
while(rec_video_run_frames > 0) {
rec_video_run_frames -= frames;
rec_video_frames += frames;
void OSD::update_sound(int* extra_frames)
{
*extra_frames = 0;
-#ifdef USE_DEBUGGER
-// if(now_debugging) {
-// return;
-// }
-#endif
+
now_mute = false;
if(sound_ok) {
uint32_t play_c, offset, size1, size2;
}
//SDL_UnlockAudio();
// sound buffer must be updated
- Sint16* sound_buffer = (Sint16 *)vm->create_sound(extra_frames);
+ Sint16* sound_buffer = (Sint16 *)this->create_sound(extra_frames);
if(now_record_sound) {
// record sound
if(sound_samples > rec_sound_buffer_ptr) {
// sync video recording
static double frames = 0;
static int prev_samples = -1;
-#ifdef SUPPORT_VARIABLE_TIMING
- static double prev_fps = -1;
- double fps = vm->get_frame_rate();
- if(prev_samples != samples || prev_fps != fps) {
- prev_samples = samples;
- prev_fps = fps;
- frames = fps * (double)samples / (double)sound_rate;
- }
-#else
- if(prev_samples != samples) {
- prev_samples = samples;
- frames = FRAMES_PER_SEC * (double)samples / (double)sound_rate;
+ if(this->get_support_variable_timing()) {
+ static double prev_fps = -1;
+ double fps = this->vm_frame_rate();
+ if(prev_samples != samples || prev_fps != fps) {
+ prev_samples = samples;
+ prev_fps = fps;
+ frames = fps * (double)samples / (double)sound_rate;
+ }
+ } else {
+ if(prev_samples != samples) {
+ prev_samples = samples;
+ frames = vm_frame_rate() * (double)samples / (double)sound_rate;
+ }
}
-#endif
rec_video_frames -= frames;
if(rec_video_frames > 2) {
rec_video_run_frames -= (rec_video_frames - 2);
//LockVM();
QDateTime nowTime = QDateTime::currentDateTime();
QString tmps = QString::fromUtf8("Sound_Save_emu");
- tmps = tmps + QString::fromUtf8(CONFIG_NAME);
+ tmps = tmps + get_vm_config_name();
tmps = tmps + QString::fromUtf8("_");
tmps = tmps + nowTime.toString(QString::fromUtf8("yyyy-MM-dd_hh-mm-ss.zzz"));
tmps = tmps + QString::fromUtf8(".wav");
#include <ctime>
-#include "../vm/vm.h"
+//#include "../vm/vm.h"
//#include "../emu.h"
#include "../config.h"
#include "../fileio.h"
memset(&dshow_screen_buffer, 0, sizeof(screen_buffer_t));
direct_show_mute[0] = direct_show_mute[1] = true;
-#ifdef USE_MOVIE_PLAYER
+
now_movie_play = now_movie_pause = false;
-#endif
-#ifdef USE_VIDEO_CAPTURE
- enum_capture_devs();
+ if(get_use_video_capture()) enum_capture_devs();
cur_capture_dev_index = -1;
#endif
-#endif
}
#define SAFE_RELEASE(x) { \
--- /dev/null
+/*
+ Skelton for retropc emulator
+
+ Author : K.Ohta <whatisthis.sowhat _at_ gmail.com>
+ Date : 2015.11.30-
+
+ [ VM/OSD Wrapper ]
+*/
+
+#include <QImage>
+#include <QPainter>
+#include <QColor>
+#include <QPen>
+#include <QPoint>
+#include <QTextCodec>
+
+#include "osd.h"
+#include "../vm/vm.h"
+#include "emu.h"
+
+#include "emu_thread.h"
+#include "draw_thread.h"
+
+#include "qt_gldraw.h"
+#include "agar_logger.h"
+
+void OSD::vm_draw_screen(void)
+{
+ vm->draw_screen();
+}
+
+double OSD::vm_frame_rate(void)
+{
+#ifdef SUPPORT_VARIABLE_TIMING
+ return vm->get_frame_rate();
+#else
+ return FRAMES_PER_SEC;
+#endif
+}
+
+Sint16* OSD::create_sound(int *extra_frames)
+{
+ return (Sint16 *)vm->create_sound(extra_frames);
+}
+
+
+bool OSD::get_use_socket(void)
+{
+#ifdef USE_SOCKET
+ return true;
+#else
+ return false;
+#endif
+}
+bool OSD::get_support_variable_timing(void)
+{
+#ifdef SUPPORT_VARIABLE_TIMING
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_notify_key_down(void)
+{
+#ifdef NOTIFY_KEY_DOWN
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_notify_key_down_lr_shift(void)
+{
+#ifdef NOTIFY_KEY_DOWN_LR_SHIFT
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_notify_key_down_lr_control(void)
+{
+#ifdef NOTIFY_KEY_DOWN_LR_CONTROL
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_notify_key_down_lr_menu(void)
+{
+#ifdef NOTIFY_KEY_DOWN_LR_MEHU
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_use_shift_numpad_key(void)
+{
+#ifdef USE_SHIFT_NUMPAD_KEY
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_use_auto_key(void)
+{
+#ifdef USE_AUTO_KEY
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_dont_keeep_key_pressed(void)
+{
+#ifdef DONT_KEEEP_KEY_PRESSED
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_one_board_micro_computer(void)
+{
+#ifdef ONE_BOARD_MICRO_COMPUTER
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_use_screen_rotate(void)
+{
+#ifdef USE_SCREEN_ROTATE
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_use_movie_player(void)
+{
+#ifdef USE_MOVIE_PLAYER
+ return true;
+#else
+ return false;
+#endif
+}
+
+bool OSD::get_use_video_capture(void)
+{
+#ifdef USE_VIDEO_CAPTURE
+ return true;
+#else
+ return false;
+#endif
+}
+
+void OSD::vm_key_down(int code, bool flag)
+{
+ vm->key_down(code, flag);
+}
+
+void OSD::vm_key_up(int code)
+{
+ vm->key_up(code);
+}
+
+void OSD::vm_reset(void)
+{
+ vm->reset();
+}
+
+int OSD::get_vm_buttons_code(int num)
+{
+#ifdef ONE_BOARD_MICRO_COMPUTER
+ if(num < 0) return 0;
+ return vm_buttons[num].code;
+#else
+ return 0;
+#endif
+}
+
+void OSD::update_buttons(void)
+{
+#if defined(MAX_BUTTONS)
+ if(!press_flag && !release_flag) {
+ int ii;
+ ii = 0;
+ for(ii = 0; vm_buttons[ii].code != 0x00; ii++) {
+ if((mouse_ptrx >= vm_buttons[ii].x) && (mouse_ptrx < (vm_buttons[ii].x + vm_buttons[ii].width))) {
+ if((mouse_ptry >= vm_buttons[ii].y) && (mouse_ptry < (vm_buttons[ii].y + vm_buttons[ii].height))) {
+ if((key_status[vm_buttons[ii].code] & 0x7f) == 0) this->press_button(ii);
+ }
+ }
+ }
+ if((mouse_ptrx >= vm_buttons[ii].x) && (mouse_ptrx < (vm_buttons[ii].x + vm_buttons[ii].width))) {
+ if((mouse_ptry >= vm_buttons[ii].y) && (mouse_ptry < (vm_buttons[ii].y + vm_buttons[ii].height))) {
+ this->press_button(ii);
+ }
+ }
+ mouse_ptrx = mouse_ptry = 0;
+ }
+ //return;
+#endif
+}
+
+QString OSD::get_vm_config_name(void)
+{
+#if defined(CONFIG_NAME)
+ return QString::fromUtf8(CONFIG_NAME);
+#else
+ return QString::fromUtf8(" ");
+#endif
+}
+
+int OSD::get_screen_width(void)
+{
+ return SCREEN_WIDTH;
+}
+
+int OSD::get_screen_height(void)
+{
+ return SCREEN_HEIGHT;
+}
+
+void OSD::lock_vm(void)
+{
+ locked_vm = true;
+ if(parent_thread != NULL) {
+ if(!parent_thread->now_debugging()) VMSemaphore->acquire(1);
+ } else {
+ VMSemaphore->acquire(1);
+ }
+}
+
+void OSD::unlock_vm(void)
+{
+ if(parent_thread != NULL) {
+ if(!parent_thread->now_debugging()) VMSemaphore->release(1);
+ } else {
+ VMSemaphore->release(1);
+ }
+ locked_vm = false;
+}
+
+
+bool OSD::is_vm_locked(void)
+{
+ return locked_vm;
+}
+
+void OSD::force_unlock_vm(void)
+{
+ if(parent_thread == NULL) {
+ while(VMSemaphore->available() < 1) VMSemaphore->release(1);
+ return;
+ }
+ if(parent_thread->now_debugging()) return;
+ while(VMSemaphore->available() < 1) VMSemaphore->release(1);
+}
+
+void OSD::set_draw_thread(DrawThreadClass *handler)
+{
+ this->moveToThread(handler);
+ connect(this, SIGNAL(sig_update_screen(bitmap_t *)), handler, SLOT(do_update_screen(bitmap_t *)));
+ connect(this, SIGNAL(sig_save_screen(const char *)), glv, SLOT(do_save_frame_screen(const char *)));
+ connect(this, SIGNAL(sig_resize_vm_screen(QImage *, int, int)), glv, SLOT(do_set_texture_size(QImage *, int, int)));
+ connect(parent_thread, SIGNAL(sig_debugger_input(QString)), this, SLOT(do_set_input_string(QString)));
+ connect(parent_thread, SIGNAL(sig_quit_debugger()), this, SLOT(do_close_debugger_thread()));
+ connect(this, SIGNAL(sig_close_window()), parent_thread, SLOT(doExit()));
+ connect(this, SIGNAL(sig_console_input_string(QString)), parent_thread, SLOT(do_call_debugger_command(QString)));
+}
+
+void OSD::initialize_screen()
+{
+ host_window_width = base_window_width = WINDOW_WIDTH;
+ host_window_height = base_window_height = WINDOW_HEIGHT;
+ host_window_mode = true;
+
+ vm_screen_width = SCREEN_WIDTH;
+ vm_screen_height = SCREEN_HEIGHT;
+ vm_window_width = WINDOW_WIDTH;
+ vm_window_height = WINDOW_HEIGHT;
+ vm_window_width_aspect = WINDOW_WIDTH_ASPECT;
+ vm_window_height_aspect = WINDOW_HEIGHT_ASPECT;
+
+ QColor col(0, 0, 0, 255);
+ //memset(&vm_screen_buffer, 0, sizeof(bitmap_t));
+ vm_screen_buffer.width = SCREEN_WIDTH;
+ vm_screen_buffer.height = SCREEN_HEIGHT;
+ vm_screen_buffer.pImage = QImage(SCREEN_WIDTH, SCREEN_HEIGHT, QImage::Format_ARGB32);
+ vm_screen_buffer.pImage.fill(col);
+ now_record_video = false;
+ //pAVIStream = NULL;
+ //pAVICompressed = NULL;
+ //pAVIFile = NULL;
+
+ first_draw_screen = false;
+ first_invalidate = true;
+ self_invalidate = false;
+}
+
+void OSD::release_screen()
+{
+ stop_record_video();
+
+ //release_d3d9();
+ //if(vm_screen_buffer.pImage != NULL) delete vm_screen_buffer.pImage;
+ release_screen_buffer(&vm_screen_buffer);
+}
+
+int OSD::get_window_mode_width(int mode)
+{
+ if(get_use_screen_rotate()) {
+ if(config.rotate_type == 1 || config.rotate_type == 3) {
+ return (config.window_stretch_type == 0 ? vm_window_height : vm_window_height_aspect) * (mode + WINDOW_MODE_BASE);
+ }
+ }
+ return (config.window_stretch_type == 0 ? vm_window_width : vm_window_width_aspect) * (mode + WINDOW_MODE_BASE);
+}
+
+int OSD::get_window_mode_height(int mode)
+{
+ if(get_use_screen_rotate()) {
+ if(config.rotate_type == 1 || config.rotate_type == 3) {
+ return (config.window_stretch_type == 0 ? vm_window_width : vm_window_width_aspect) * (mode + WINDOW_MODE_BASE);
+ }
+ }
+ return (config.window_stretch_type == 0 ? vm_window_height : vm_window_height_aspect) * (mode + WINDOW_MODE_BASE);
+}