diff options
Diffstat (limited to 'src/akiru/src')
-rw-r--r-- | src/akiru/src/akiru.cpp | 124 | ||||
-rw-r--r-- | src/akiru/src/akiru.h | 35 | ||||
-rw-r--r-- | src/akiru/src/emuwindow/emuwindow_glfw.cpp | 100 | ||||
-rw-r--r-- | src/akiru/src/emuwindow/emuwindow_glfw.h | 56 | ||||
-rw-r--r-- | src/akiru/src/version.h | 6 |
5 files changed, 321 insertions, 0 deletions
diff --git a/src/akiru/src/akiru.cpp b/src/akiru/src/akiru.cpp new file mode 100644 index 00000000..0d15c5b2 --- /dev/null +++ b/src/akiru/src/akiru.cpp @@ -0,0 +1,124 @@ +/*! + * Copyright (C) 2013 Akiru Emulator + * + * @file akiry.cpp + * @author ShizZy <shizzy247@gmail.com> + * @date 2012-02-11 + * @brief Main entry point + * + * @section LICENSE + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details at + * http://www.gnu.org/copyleft/gpl.html + * + * Official project repository can be found at: + * http://code.google.com/p/gekko-gc-emu/ + */ + +#include "common.h" +#include "platform.h" + +#if EMU_PLATFORM == PLATFORM_LINUX +#include <unistd.h> +#endif + +#include "config.h" +#include "xml.h" +#include "x86_utils.h" + +//#include "core.h" +//#include "dvd/loader.h" +//#include "powerpc/cpu_core.h" +//#include "hw/hw.h" +//#include "video_core.h" + +#include "emuwindow/emuwindow_glfw.h" + +#include "akiru.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// This is needed to fix SDL in certain build environments +#ifdef main +#undef main +#endif + +//#define PLAY_FIFO_RECORDING + +/// Application entry point +int __cdecl main(int argc, char **argv) { + u32 tight_loop; + + LOG_NOTICE(TMASTER, APP_NAME " starting...\n"); + + char program_dir[MAX_PATH]; + _getcwd(program_dir, MAX_PATH-1); + size_t cwd_len = strlen(program_dir); + program_dir[cwd_len] = '/'; + program_dir[cwd_len+1] = '\0'; + + common::ConfigManager config_manager; + config_manager.set_program_dir(program_dir, MAX_PATH); + config_manager.ReloadConfig(NULL); + core::SetConfigManager(&config_manager); + + EmuWindow_GLFW* emu_window = new EmuWindow_GLFW; + + if (E_OK != core::Init(emu_window)) { + LOG_ERROR(TMASTER, "core initialization failed, exiting..."); + core::Kill(); + exit(1); + } + +#ifndef PLAY_FIFO_RECORDING + // Load a game or die... + if (E_OK == dvd::LoadBootableFile(common::g_config->default_boot_file())) { + if (common::g_config->enable_auto_boot()) { + core::Start(); + } else { + LOG_ERROR(TMASTER, "Autoboot required in no-GUI mode... Exiting!\n"); + } + } else { + LOG_ERROR(TMASTER, "Failed to load a bootable file... Exiting!\n"); + exit(E_ERR); + } + // run the game + while(core::SYS_DIE != core::g_state) { + if (core::SYS_RUNNING == core::g_state) { + if(!(cpu->is_on)) { + cpu->Start(); // Initialize and start CPU. + } else { + for(tight_loop = 0; tight_loop < 10000; ++tight_loop) { + cpu->execStep(); + } + } + } else if (core::SYS_HALTED == core::g_state) { + core::Stop(); + } + } + core::Kill(); +#else + // load fifo log and replay it + + // TODO: Restructure initialization process - Fix Flipper_Open being called from dvd loaders (wtf?) + Flipper_Open(); + video_core::Start(emu_window); + core::SetState(core::SYS_RUNNING); + + fifo_player::FPFile file; + fifo_player::Load("/home/tony/20_frames.gff", file); + fifo_player::PlayFile(file); + + // TODO: Wait for video core to finish - PlayFile should handle this + while (1); +#endif + delete emu_window; + + return E_OK; +} diff --git a/src/akiru/src/akiru.h b/src/akiru/src/akiru.h new file mode 100644 index 00000000..a3b21092 --- /dev/null +++ b/src/akiru/src/akiru.h @@ -0,0 +1,35 @@ +/*! + * Copyright (C) 2005-2012 Gekko Emulator + * + * \file pcafe.h + * \author ShizZy <shizzy247@gmail.com> + * \date 2012-02-11 + * \brief Main entry point + * + * \section LICENSE + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details at + * http://www.gnu.org/copyleft/gpl.html + * + * Official project repository can be found at: + * http://code.google.com/p/gekko-gc-emu/ + */ + +#ifndef PCAFE_PCAFE_H_ +#define PCAFE_PCAFE_H_ + +#include "version.h" + +#define APP_NAME "gekko" +#define APP_VERSION "0.31-" VERSION +#define APP_TITLE APP_NAME " " APP_VERSION +#define COPYRIGHT "Copyright (C) 2005-2012 Gekko Team" + +#endif // PCAFE_PCAFE_H_
\ No newline at end of file diff --git a/src/akiru/src/emuwindow/emuwindow_glfw.cpp b/src/akiru/src/emuwindow/emuwindow_glfw.cpp new file mode 100644 index 00000000..884c10ad --- /dev/null +++ b/src/akiru/src/emuwindow/emuwindow_glfw.cpp @@ -0,0 +1,100 @@ +/** + * Copyright (C) 2005-2012 Gekko Emulator + * + * @file emuwindow_glfw.h + * @author ShizZy <shizzy247@gmail.com> + * @date 2012-04-20 + * @brief Implementation implementation of EmuWindow class for GLFW + * + * @section LICENSE + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details at + * http://www.gnu.org/copyleft/gpl.html + * + * Official project repository can be found at: + * http://code.google.com/p/gekko-gc-emu/ + */ + +#include "common.h" +#include "video_core.h" +#include "emuwindow_glfw.h" +#include "gc_controller.h" +#include "keyboard_input/keyboard_input.h" + +static void OnKeyEvent(GLFWwindow win, int key, int action) { + EmuWindow_GLFW* emuwin = (EmuWindow_GLFW*)glfwGetWindowUserPointer(win); + input_common::GCController::GCButtonState state; + + if (action == GLFW_PRESS) { + state = input_common::GCController::PRESSED; + } else { + state = input_common::GCController::RELEASED; + } + for (int channel = 0; channel < 4 && emuwin->controller_interface(); ++channel) { + emuwin->controller_interface()->SetControllerStatus(channel, key, state); + } +} + +static void OnWindowSizeEvent(GLFWwindow win, int width, int height) { + EmuWindow_GLFW* emuwin = (EmuWindow_GLFW*)glfwGetWindowUserPointer(win); + emuwin->set_client_area_width(width); + emuwin->set_client_area_height(height); +} + +/// EmuWindow_GLFW constructor +EmuWindow_GLFW::EmuWindow_GLFW() { + // Initialize the window + if(glfwInit() != GL_TRUE) { + LOG_ERROR(TVIDEO, "Failed to initialize GLFW! Exiting..."); + exit(E_ERR); + } + glfwWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_OPENGL_VERSION_MINOR, 1); + render_window_ = glfwCreateWindow(640, 480, GLFW_WINDOWED, "gekko", 0); + + // Setup callbacks + glfwSetWindowUserPointer(render_window_, this); + glfwSetKeyCallback(render_window_, OnKeyEvent); + glfwSetWindowSizeCallback(render_window_, OnWindowSizeEvent); + + DoneCurrent(); +} + +/// EmuWindow_GLFW destructor +EmuWindow_GLFW::~EmuWindow_GLFW() { + glfwTerminate(); +} + +/// Swap buffers to display the next frame +void EmuWindow_GLFW::SwapBuffers() { + glfwSwapBuffers(render_window_); +} + +/// Polls window events +void EmuWindow_GLFW::PollEvents() { + // TODO(ShizZy): Does this belong here? This is a reasonable place to update the window title + // from the main thread, but this should probably be in an event handler... + static char title[128]; + sprintf(title, "%s (FPS: %02.02f)", window_title_.c_str(), + video_core::g_renderer->current_fps()); + glfwSetWindowTitle(render_window_, title); + + glfwPollEvents(); +} + +/// Makes the GLFW OpenGL context current for the caller thread +void EmuWindow_GLFW::MakeCurrent() { + glfwMakeContextCurrent(render_window_); +} + +/// Releases (dunno if this is the "right" word) the GLFW context from the caller thread +void EmuWindow_GLFW::DoneCurrent() { + glfwMakeContextCurrent(NULL); +} diff --git a/src/akiru/src/emuwindow/emuwindow_glfw.h b/src/akiru/src/emuwindow/emuwindow_glfw.h new file mode 100644 index 00000000..1256cabe --- /dev/null +++ b/src/akiru/src/emuwindow/emuwindow_glfw.h @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2005-2012 Gekko Emulator + * + * @file emuwindow_glfw.h + * @author ShizZy <shizzy247@gmail.com> + * @date 2012-04-20 + * @brief Implementation implementation of EmuWindow class for GLFW + * + * @section LICENSE + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details at + * http://www.gnu.org/copyleft/gpl.html + * + * Official project repository can be found at: + * http://code.google.com/p/gekko-gc-emu/ + */ + +#ifndef VIDEO_CORE_EMUWINDOW_GLFW_ +#define VIDEO_CORE_EMUWINDOW_GLFW_ + +#include <GL/glew.h> +#include <GL/glfw3.h> + +#include "video/emuwindow.h" + +class EmuWindow_GLFW : public EmuWindow { +public: + EmuWindow_GLFW(); + ~EmuWindow_GLFW(); + + /// Swap buffers to display the next frame + void SwapBuffers(); + + /// Polls window events + void PollEvents(); + + /// Makes the graphics context current for the caller thread + void MakeCurrent(); + + /// Releases (dunno if this is the "right" word) the GLFW context from the caller thread + void DoneCurrent(); + + GLFWwindow render_window_; ///< Internal GLFW render window + +private: + +}; + +#endif // VIDEO_CORE_EMUWINDOW_GLFW_ diff --git a/src/akiru/src/version.h b/src/akiru/src/version.h new file mode 100644 index 00000000..07b88c64 --- /dev/null +++ b/src/akiru/src/version.h @@ -0,0 +1,6 @@ +// GENERATED - Do not edit! +#ifndef VERSION_H_ +#define VERSION_H_ +#define __BUILD__ "122" +#define VERSION __BUILD__ +#endif // VERSION_H_ |