{ lib
, stdenv
, fetchurl
, libarchive
, SDL
}:

stdenv.mkDerivation rec {
  pname = "dgen-sdl";
  version = "1.33";

  src = fetchurl {
    url = "https://sourceforge.net/projects/dgen/files/dgen/${version}/${pname}-${version}.tar.gz";
    hash = "sha256-meLAYBfCKHPHf4gYbrzAmGckTrbgQsdjuwlLArje9h4=";
  };

  buildInputs = [
    SDL
    libarchive
  ];

  configureFlags = [
    (lib.enableFeature (!stdenv.hostPlatform.isDarwin) "sdltest")
    "--enable-debug-vdp"
    "--enable-debugger"
    "--enable-joystick"
    "--enable-pico" # experimental
    "--enable-vgmdump"
    "--with-cyclone=no" # Needs ASM support
    "--with-cz80"
    "--with-drz80=no" # Needs ASM support
    "--with-dz80"
    "--with-musa"
    "--with-mz80"
    "--with-star=no" # Needs ASM support
  ];

  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-reserved-user-defined-literal";

  meta = with lib; {
    homepage = "https://dgen.sourceforge.net/";
    description = "Sega Genesis/Mega Drive emulator";
    longDescription = ''
      DGen/SDL is a free, open source emulator for Sega Genesis/Mega Drive
      systems. DGen was originally written by Dave, then ported to SDL by Joe
      Groff and Phil K. Hornung in 1998.

      It features:

      - Game Genie/Hex codes support
      - PAL/NTSC, fullscreen modes
      - Joypad/joystick support
      - Mouse support
      - Highly configurable controls
      - OpenGL textured video output
      - Portable (64‐bit, endian safe), runs in Windows using MinGW
      - Screenshots, demos recording and playback
      - Musashi (generic) and StarScream (x86‐only) CPU cores
      - Cyclone 68000 and DrZ80 (both ARM‐only) CPU cores
      - CZ80 (generic) and MZ80 (generic and x86‐only versions)
      - 16‐bit, 8000 to 48000Hz sound output
      - Support for 8, 15, 16, 24 and 32 bpp modes
      - Archived/compressed ROMs support
      - M68K debugger (contributed by Edd Barrett)
      - Z80 debugger
      - hqx and scale2x upscaling filters
      - VGM dumping
    '';
    license = licenses.mit;
    maintainers = with maintainers; [ AndersonTorres ];
    platforms = with platforms; unix;
  };
}
# TODO: implement configure options
