summaryrefslogtreecommitdiff
path: root/Ports
diff options
context:
space:
mode:
authoraabajyan <arsen.abajyan@pm.me>2021-03-07 22:30:13 +0400
committerAndreas Kling <kling@serenityos.org>2021-03-08 08:57:12 +0100
commit0dfbc2c702cad27a84bda8d8523b53f2deb95d6e (patch)
treecedefa9a19a49e14ea0a3f53ff3bb4e1e622768c /Ports
parent368f78d03c3c68c70e6ad58118214107d1c61347 (diff)
downloadserenity-0dfbc2c702cad27a84bda8d8523b53f2deb95d6e.zip
Ports: Add Genemu
This is a Basic Genesis / MegaDrive Emulator, that only requires SDL2 to run it. Usage: genemu /path/to/game.bin
Diffstat (limited to 'Ports')
-rw-r--r--Ports/AvailablePorts.md1
-rw-r--r--Ports/genemu/package.sh17
-rw-r--r--Ports/genemu/patches/genemu.patch111
3 files changed, 129 insertions, 0 deletions
diff --git a/Ports/AvailablePorts.md b/Ports/AvailablePorts.md
index b7b55c4c0c..da1a7ded99 100644
--- a/Ports/AvailablePorts.md
+++ b/Ports/AvailablePorts.md
@@ -25,6 +25,7 @@ Please make sure to keep this list up to date when adding and updating ports. :^
| [`freetype`](freetype/) | FreeType | 2.10.4 | https://www.freetype.org/ |
| [`frotz`](frotz/) | Frotz | | https://gitlab.com/DavidGriffith/frotz |
| [`gcc`](gcc/) | GNU Compiler Collection | 10.2.0 | https://gcc.gnu.org/ |
+| [`genemu`](genemu) | Genesis / MegaDrive Emulator | | https://github.com/rasky/genemu |
| [`git`](git/) | Git | 2.26.0 | https://git-scm.com/ |
| [`gnuplot`](gnuplot/) | Gnuplot | 5.2.8 | http://www.gnuplot.info/ |
| [`grep`](grep/) | GNU Grep | 2.5.4 | https://www.gnu.org/software/grep/ |
diff --git a/Ports/genemu/package.sh b/Ports/genemu/package.sh
new file mode 100644
index 0000000000..0ea5bfa605
--- /dev/null
+++ b/Ports/genemu/package.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env -S bash ../.port_include.sh
+
+port="genemu"
+version="${port}-git"
+workdir="${port}-master"
+useconfigure=true
+files="https://github.com/rasky/genemu/archive/master.tar.gz ${version}.tar.gz"
+configopts="-DCMAKE_TOOLCHAIN_FILE=${SERENITY_ROOT}/Toolchain/CMakeToolchain.txt"
+depends="SDL2"
+
+configure() {
+ run cmake ${configopts}
+}
+
+install() {
+ run make install
+}
diff --git a/Ports/genemu/patches/genemu.patch b/Ports/genemu/patches/genemu.patch
new file mode 100644
index 0000000000..612533cf40
--- /dev/null
+++ b/Ports/genemu/patches/genemu.patch
@@ -0,0 +1,111 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 94ae8ef..bfb4631 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,11 +1,17 @@
+ cmake_minimum_required(VERSION 2.6)
+-set(CMAKE_BUILD_TYPE "Debug")
+-
+
+ INCLUDE(FindPkgConfig)
+-PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
+-INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS})
++find_package(SDL2 REQUIRED)
+
+-set_source_files_properties( mem.cpp PROPERTIES COMPILE_FLAGS " -O0 -UNDEBUG " )
++set_source_files_properties( mem.cpp PROPERTIES COMPILE_FLAGS " -Og")
+ add_executable(genemu genemu.cpp cpu.cpp vdp.cpp mem.cpp state.cpp gfx.cpp ioports.cpp hw.c Z80/Z80.c m68k/m68kcpu.c m68k/m68kops.c m68k/m68kopac.c m68k/m68kopdm.c m68k/m68kopnz.c m68k/m68kdasm.c ym2612/ym2612.c)
+-target_link_libraries(genemu ${SDL2_LIBRARIES})
++target_include_directories(genemu SYSTEM PRIVATE ${SDL2_INCLUDE_DIRS})
++
++if("${SDL2_LIBRARIES}" STREQUAL "")
++ message(WARNING "SDL2_LIBRARIES wasn't set, manually setting to SDL2::SDL2")
++ set(SDL2_LIBRARIES "SDL2::SDL2")
++endif()
++
++target_link_libraries(genemu PRIVATE ${SDL2_LIBRARIES})
++
++install(TARGETS genemu RUNTIME DESTINATION bin)
+\ No newline at end of file
+diff --git a/gfx.cpp b/gfx.cpp
+index 04daf6e..2848422 100644
+--- a/gfx.cpp
++++ b/gfx.cpp
+@@ -3,7 +3,7 @@
+ #include <assert.h>
+ #include <memory.h>
+ #include <stdio.h>
+-#include <SDL.h>
++#include <SDL2/SDL.h>
+ extern "C" {
+ #include "hw.h"
+ }
+diff --git a/hw.c b/hw.c
+index 6b864df..1f34423 100644
+--- a/hw.c
++++ b/hw.c
+@@ -1,5 +1,5 @@
+ #include "hw.h"
+-#include <SDL.h>
++#include <SDL2/SDL.h>
+ #include <assert.h>
+ #include <time.h>
+
+@@ -105,7 +105,7 @@ void hw_enable_video(int enable)
+ screen = SDL_CreateWindow("Genemu - Sega Genesis Emulator",
+ SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
+ WINDOW_WIDTH, WINDOW_WIDTH*3/4, SDL_WINDOW_RESIZABLE);
+- renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_PRESENTVSYNC);
++ renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_SOFTWARE);
+
+ SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest"); // make the scaled rendering look smoother.
+ SDL_RenderSetLogicalSize(renderer, 320, 240);
+diff --git a/ioports.cpp b/ioports.cpp
+index 9c3f14f..9295163 100644
+--- a/ioports.cpp
++++ b/ioports.cpp
+@@ -1,5 +1,5 @@
+ #include "mem.h"
+-#include <SDL.h>
++#include <SDL2/SDL.h>
+ extern "C" {
+ #include "hw.h"
+ }
+diff --git a/mem.cpp b/mem.cpp
+index fd36d68..4cf0b30 100644
+--- a/mem.cpp
++++ b/mem.cpp
+@@ -10,6 +10,7 @@ extern "C" {
+ #include "vdp.h"
+ #include "cpu.h"
+ #include "ioports.h"
++#include <cstdlib>
+
+ uint8_t *ROM;
+ uint8_t RAM[0x10000];
+diff --git a/mem.h b/mem.h
+index 8c96952..6c39fd6 100644
+--- a/mem.h
++++ b/mem.h
+@@ -7,7 +7,7 @@
+ #define MAX(a,b) ((a)>(b)?(a):(b))
+ #define MIN(a,b) ((a)<(b)?(a):(b))
+
+-#define DISABLE_LOGGING 0
++#define DISABLE_LOGGING 1
+
+ void mem_init(int romsize);
+ int load_bin(const char *fn);
+diff --git a/state.cpp b/state.cpp
+index 38bc547..aa70962 100644
+--- a/state.cpp
++++ b/state.cpp
+@@ -3,7 +3,7 @@
+ #include "vdp.h"
+ #include "cpu.h"
+ #include "hw.h"
+-#include <SDL.h>
++#include <SDL2/SDL.h>
+
+ extern "C" {
+ #include "m68k/m68k.h"