From 0d48d4c8339598f83d3b4d0bdf5f38c782e6a271 Mon Sep 17 00:00:00 2001
From: Steel Titanium <steeltitanium1@gmail.com>
Date: Sat, 25 Jul 2020 18:55:51 -0400
Subject: [PATCH] WIP: Remove support for DOS

WIP because I don't know if this wording is right for the error.
---
 bin/Dos/Debug/.gitignore         |    2 -
 bin/Dos/Release/.gitignore       |    2 -
 objs/djgppdos/Debug/.gitignore   |    2 -
 objs/djgppdos/Release/.gitignore |    2 -
 src/Makefile                     |   10 -
 src/Makefile.cfg                 |   13 +-
 src/console.c                    |   16 +-
 src/d_main.c                     |   74 +-
 src/dehacked.c                   |    6 -
 src/djgppdos/Makefile.cfg        |   48 -
 src/djgppdos/bcd.c               |  755 -------------
 src/djgppdos/bcd.h               |   90 --
 src/djgppdos/i_cdmus.c           |  445 --------
 src/djgppdos/i_main.c            |   78 --
 src/djgppdos/i_net.c             |  113 --
 src/djgppdos/i_sound.c           |  620 -----------
 src/djgppdos/i_system.c          | 1772 ------------------------------
 src/djgppdos/i_video.c           |  345 ------
 src/djgppdos/internal.h          |  773 -------------
 src/djgppdos/rdb-s.h             |   22 -
 src/djgppdos/vid_vesa.c          |  903 ---------------
 src/djgppdos/vid_vesa.h          |  109 --
 src/doomdef.h                    |    8 +-
 src/m_menu.c                     |    6 -
 src/m_misc.c                     |    2 -
 src/r_skins.c                    |    6 -
 src/w_wad.c                      |    6 -
 src/y_inter.c                    |    6 -
 28 files changed, 7 insertions(+), 6227 deletions(-)
 delete mode 100644 bin/Dos/Debug/.gitignore
 delete mode 100644 bin/Dos/Release/.gitignore
 delete mode 100644 objs/djgppdos/Debug/.gitignore
 delete mode 100644 objs/djgppdos/Release/.gitignore
 delete mode 100644 src/djgppdos/Makefile.cfg
 delete mode 100644 src/djgppdos/bcd.c
 delete mode 100644 src/djgppdos/bcd.h
 delete mode 100644 src/djgppdos/i_cdmus.c
 delete mode 100644 src/djgppdos/i_main.c
 delete mode 100644 src/djgppdos/i_net.c
 delete mode 100644 src/djgppdos/i_sound.c
 delete mode 100644 src/djgppdos/i_system.c
 delete mode 100644 src/djgppdos/i_video.c
 delete mode 100644 src/djgppdos/internal.h
 delete mode 100644 src/djgppdos/rdb-s.h
 delete mode 100644 src/djgppdos/vid_vesa.c
 delete mode 100644 src/djgppdos/vid_vesa.h

diff --git a/bin/Dos/Debug/.gitignore b/bin/Dos/Debug/.gitignore
deleted file mode 100644
index 42c6dc2c66..0000000000
--- a/bin/Dos/Debug/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# DON'T REMOVE
-# This keeps the folder from disappearing
diff --git a/bin/Dos/Release/.gitignore b/bin/Dos/Release/.gitignore
deleted file mode 100644
index 42c6dc2c66..0000000000
--- a/bin/Dos/Release/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# DON'T REMOVE
-# This keeps the folder from disappearing
diff --git a/objs/djgppdos/Debug/.gitignore b/objs/djgppdos/Debug/.gitignore
deleted file mode 100644
index 42c6dc2c66..0000000000
--- a/objs/djgppdos/Debug/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# DON'T REMOVE
-# This keeps the folder from disappearing
diff --git a/objs/djgppdos/Release/.gitignore b/objs/djgppdos/Release/.gitignore
deleted file mode 100644
index 42c6dc2c66..0000000000
--- a/objs/djgppdos/Release/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# DON'T REMOVE
-# This keeps the folder from disappearing
diff --git a/src/Makefile b/src/Makefile
index 9ea1ea2394..5fe41248d8 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,13 +8,11 @@
 # terms of the GNU General Public License, version 2.
 # See the 'LICENSE' file for more details.
 #
-#     -DPC_DOS    -> use DOS specific code (eg:textmode stuff)...
 #     -DLINUX     -> use for the GNU/Linux specific
 #     -D_WINDOWS  -> use for the Win32/DirectX specific
 #     -DHAVE_SDL  -> use for the SDL interface
 #
 # Sets:
-#     Compile the DGJPP/DOS version with 'make WATTCP=1'
 #     Compile the DirectX/Mingw version with 'make MINGW=1'
 #     Compile the SDL/Mingw version with 'make MINGW=1 SDL=1'
 #     Compile the SDL/Linux version with 'make LINUX=1'
@@ -146,10 +144,6 @@ NOHW=1
 NOHS=1
 endif
 
-ifdef DJGPPDOS
-include djgppdos/Makefile.cfg
-endif
-
 ifndef NOOPENMPT
 HAVE_OPENMPT=1
 endif
@@ -498,10 +492,6 @@ POS:=$(BIN)/en.mo
 OPTS+=-DGETTEXT
 endif
 
-ifdef DJGPPDOS
-all:	 pre-build $(BIN)/$(EXENAME)
-endif
-
 ifdef PANDORA
 all:	pre-build $(BIN)/$(PNDNAME)
 endif
diff --git a/src/Makefile.cfg b/src/Makefile.cfg
index 4a2c0687be..7eca76d9d7 100644
--- a/src/Makefile.cfg
+++ b/src/Makefile.cfg
@@ -308,7 +308,7 @@ ifndef MINGW
 ifndef MINGW64
 ifndef SDL
 ifndef DUMMY
-	DJGPPDOS=1
+$(error No interface or platform flag defined)
 endif
 endif
 endif
@@ -344,16 +344,6 @@ UPX_OPTS+=-q
 endif
 
 #Interface Setup
-ifdef DJGPPDOS
-	INTERFACE=djgppdos
-	NASMFORMAT=coff
-	OBJDIR:=$(OBJDIR)/djgppdos
-ifdef WATTCP
-	OBJDIR:=$(OBJDIR)/wattcp
-endif
-	WFLAGS+=-Wno-format
-	BIN:=$(BIN)/Dos
-else
 ifdef DUMMY
 	INTERFACE=dummy
 	OBJDIR:=$(OBJDIR)/dummy
@@ -412,7 +402,6 @@ endif
 endif
 endif
 endif
-endif
 
 ifdef ARCHNAME
 	OBJDIR:=$(OBJDIR)/$(ARCHNAME)
diff --git a/src/console.c b/src/console.c
index aac94d473c..6c3cbd8aba 100644
--- a/src/console.c
+++ b/src/console.c
@@ -1273,21 +1273,11 @@ void CONS_Printf(const char *fmt, ...)
 	// echo console prints to log file
 	DEBFILE(txt);
 
-	if (!con_started)
-	{
-#ifdef PC_DOS
-		CON_LogMessage(txt);
-		free(txt);
-		return;
-#endif
-	}
-	else
-		// write message in con text buffer
+	// write message in con text buffer
+	if (con_started)
 		CON_Print(txt);
 
-#ifndef PC_DOS
-	CON_LogMessage(txt);
-#endif
+	CON_LogMessage(txt);	
 
 	// make sure new text is visible
 	con_scrollup = 0;
diff --git a/src/d_main.c b/src/d_main.c
index 6bc42da14e..f7cbdfd262 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -24,12 +24,6 @@
 #include <unistd.h> // for getcwd
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-int	snprintf(char *str, size_t n, const char *fmt, ...);
-//int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 #ifdef _WIN32
 #include <direct.h>
 #include <malloc.h>
@@ -162,10 +156,6 @@ void D_PostEvent(const event_t *ev)
 	events[eventhead] = *ev;
 	eventhead = (eventhead+1) & (MAXEVENTS-1);
 }
-// just for lock this function
-#if defined (PC_DOS) && !defined (DOXYGEN)
-void D_PostEvent_end(void) {};
-#endif
 
 // modifier keys
 // Now handled in I_OsPolling
@@ -1088,64 +1078,6 @@ static void IdentifyVersion(void)
 #endif
 }
 
-#ifdef PC_DOS
-/* ======================================================================== */
-// Code for printing SRB2's title bar in DOS
-/* ======================================================================== */
-
-//
-// Center the title string, then add the date and time of compilation.
-//
-static inline void D_MakeTitleString(char *s)
-{
-	char temp[82];
-	char *t;
-	const char *u;
-	INT32 i;
-
-	for (i = 0, t = temp; i < 82; i++)
-		*t++=' ';
-
-	for (t = temp + (80-strlen(s))/2, u = s; *u != '\0' ;)
-		*t++ = *u++;
-
-	u = compdate;
-	for (t = temp + 1, i = 11; i-- ;)
-		*t++ = *u++;
-	u = comptime;
-	for (t = temp + 71, i = 8; i-- ;)
-		*t++ = *u++;
-
-	temp[80] = '\0';
-	strcpy(s, temp);
-}
-
-static inline void D_Titlebar(void)
-{
-	char title1[82]; // srb2 title banner
-	char title2[82];
-
-	strcpy(title1, "Sonic Robo Blast 2");
-	strcpy(title2, "Sonic Robo Blast 2");
-
-	D_MakeTitleString(title1);
-
-	// SRB2 banner
-	clrscr();
-	textattr((BLUE<<4)+WHITE);
-	clreol();
-	cputs(title1);
-
-	// standard srb2 banner
-	textattr((RED<<4)+WHITE);
-	clreol();
-	gotoxy((80-strlen(title2))/2, 2);
-	cputs(title2);
-	normvideo();
-	gotoxy(1,3);
-}
-#endif
-
 static void
 D_ConvertVersionNumbers (void)
 {
@@ -1189,7 +1121,7 @@ void D_SRB2Main(void)
 	"in this program.\n\n");
 
 	// keep error messages until the final flush(stderr)
-#if !defined (PC_DOS) && !defined(NOTERMIOS)
+#if !defined(NOTERMIOS)
 	if (setvbuf(stderr, NULL, _IOFBF, 1000))
 		I_OutputMsg("setvbuf didnt work\n");
 #endif
@@ -1227,10 +1159,6 @@ void D_SRB2Main(void)
 	dedicated = M_CheckParm("-dedicated") != 0;
 #endif
 
-#ifdef PC_DOS
-	D_Titlebar();
-#endif
-
 	if (devparm)
 		CONS_Printf(M_GetText("Development mode ON.\n"));
 
diff --git a/src/dehacked.c b/src/dehacked.c
index a856ab3524..89890d9e50 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -46,12 +46,6 @@
 #include "hardware/hw_light.h"
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-//int	snprintf(char *str, size_t n, const char *fmt, ...);
-int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 // Free slot names
 // The crazy word-reading stuff uses these.
 static char *FREE_STATES[NUMSTATEFREESLOTS];
diff --git a/src/djgppdos/Makefile.cfg b/src/djgppdos/Makefile.cfg
deleted file mode 100644
index 857a7267bc..0000000000
--- a/src/djgppdos/Makefile.cfg
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# djgppdos/makefile.cfg for SRB2/DOS
-#
-
-#
-#now for the DOS stuff, go DOS!
-#
-
-	# options
-	OPTS=-DPC_DOS
-	WFLAGS+=-Wno-cast-qual
-	NOHW=1
-	NOHS=1
-	PNG_CFLAGS=
-	PNG_LDFLAGS=-lpng -lz
-
-ifdef WATTCP
-	OPTS+=-DWATTCP
-	NOOBJDUMP=1
-endif
-
-#ifdef DEBUGMODE
-	LIBS=-lalld
-#else
-#	LIBS=-lalleg
-#endif
-
-ifndef NONET
-ifdef WATTCP
-	LIBS+=-lwatt
-else
-	LIBS+=-lsocket
-endif
-endif
-
-ifdef RDB
-	LIBS+=-lgdbst -ldzcom
-	OPTS+=-DREMOTE_DEBUGGING
-endif
-
-	OBJS=$(OBJDIR)/i_video.o $(OBJDIR)/vid_vesa.o
-
-	# name of the exefile
-ifdef WATTCP
-	EXENAME?=srb2dos.exe
-else
-	EXENAME?=srb2w16.exe
-endif
diff --git a/src/djgppdos/bcd.c b/src/djgppdos/bcd.c
deleted file mode 100644
index 6a91c707fa..0000000000
--- a/src/djgppdos/bcd.c
+++ /dev/null
@@ -1,755 +0,0 @@
-/* bcd.c -- Brennan's CD-ROM Audio Playing Library
-   by Brennan Underwood, http://brennan.home.ml.org/ */
-#include <dos.h>
-#include <dpmi.h>
-#include <go32.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <strings.h>
-#ifdef STANDALONE
-#include <conio.h> /* for getch() */
-#endif
-
-#include "bcd.h"
-
-typedef struct {
-  int is_audio;
-  int start, end, len;
-} Track;
-
-static int mscdex_version;
-static int first_drive;
-static int num_tracks;
-static int lowest_track, highest_track;
-static int audio_length;
-
-#ifdef STATIC_TRACKS
-static Track tracks[99];
-#else
-static Track *tracks;
-#endif
-
-static int dos_mem_segment, dos_mem_selector = -1;
-
-int _status, _error, _error_code;
-const char *_bcd_error = NULL;
-
-#define RESET_ERROR (_error = _error_code = 0)
-#define ERROR_BIT (1 << 15)
-#define BUSY_BIT (1 << 9)
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-#pragma pack(1)
-
-/* I know 'typedef struct {} bleh' is a bad habit, but... */
-typedef struct {
-  unsigned char len;
-  unsigned char unit;
-  unsigned char command;
-  unsigned short status;
-  unsigned char reserved[8];
-} ATTRPACK RequestHeader;
-
-typedef struct {
-  RequestHeader request_header;
-  unsigned char descriptor;
-  unsigned long address;
-  unsigned short len;
-  unsigned short secnum;
-  unsigned long ptr;
-} ATTRPACK IOCTLI;
-
-typedef struct {
-  unsigned char control;
-  unsigned char lowest;
-  unsigned char highest;
-  char total[4];
-} ATTRPACK DiskInfo;
-
-typedef struct {
-  unsigned char control;
-  unsigned char track_number;
-  char start[4];
-  unsigned char info;
-} ATTRPACK TrackInfo;
-
-typedef struct {
-  RequestHeader request;
-  unsigned char mode;
-  unsigned long start;
-  unsigned long len;
-} ATTRPACK PlayRequest;
-
-typedef struct {
-  RequestHeader request;
-} ATTRPACK StopRequest;
-
-typedef struct {
-  RequestHeader request;
-} ATTRPACK ResumeRequest;
-
-typedef struct {
-  unsigned char control;
-  unsigned char input0;
-  unsigned char volume0;
-  unsigned char input1;
-  unsigned char volume1;
-  unsigned char input2;
-  unsigned char volume2;
-  unsigned char input3;
-  unsigned char volume3;
-} ATTRPACK VolumeRequest;
-
-typedef struct {
-  unsigned char control;
-  unsigned char fn;
-} ATTRPACK LockRequest;
-
-typedef struct {
-  unsigned char control;
-  unsigned char mbyte;
-} ATTRPACK MediaChangedRequest;
-
-typedef struct {
-  unsigned char control;
-  unsigned long status;
-} ATTRPACK StatusRequest;
-
-typedef struct {
-  unsigned char control;
-  unsigned char mode;
-  unsigned long loc;
-} ATTRPACK PositionRequest;
-
-#pragma pack()
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-const char *bcd_error(void) {
-  static char retstr[132];
-  const char *errorcodes[] = {
-    "Write-protect violation",
-    "Unknown unit",
-    "Drive not ready",
-    "Unknown command",
-    "CRC error",
-    "Bad drive request structure length",
-    "Seek error",
-    "Unknown media",
-    "Sector not found",
-    "Printer out of paper: world coming to an end",/* I mean really, on a CD? */
-    "Write fault",
-    "Read fault",
-    "General failure",
-    "Reserved",
-    "Reserved",
-    "Invalid disk change"
-  };
-  *retstr = 0;
-  if (_error != 0) {
-    strcat(retstr, "Device error: ");
-    if (_error_code < 0 || _error_code > 0xf)
-      strcat(retstr, "Invalid error");
-    else
-      strcat(retstr, errorcodes[_error_code]);
-    strcat(retstr, "  ");
-  }
-  if (_bcd_error != NULL) {
-    if (*retstr) strcat(retstr, ", ");
-    strcat(retstr, "BCD error: ");
-    strcat(retstr, _bcd_error);
-  }
-  return retstr;
-}
-
-/* DOS IOCTL w/ command block */
-static void bcd_ioctl(IOCTLI *ioctli, void *command, int len) {
-  int ioctli_len = sizeof (IOCTLI);
-  unsigned long command_address = dos_mem_segment << 4;
-  __dpmi_regs regs;
-
-  memset(&regs, 0, sizeof regs);
-  regs.x.es = (__tb >> 4) & 0xffff;
-  regs.x.ax = 0x1510;
-  regs.x.bx = __tb & 0xf;
-  regs.x.cx = first_drive;
-  ioctli->address = dos_mem_segment << 16;
-  ioctli->len = len;
-  dosmemput(ioctli, ioctli_len, __tb);		/* put ioctl into dos area */
-  dosmemput(command, len, command_address);	/* and command too */
-  if (__dpmi_int(0x2f, &regs) == -1) {
-    _bcd_error = "__dpmi_int() failed";
-    return;
-  }
-  dosmemget(__tb, ioctli_len, ioctli);		/* retrieve results */
-  dosmemget(command_address, len, command);
-  _status = ioctli->request_header.status;
-  if (_status & ERROR_BIT) {
-    _error = TRUE;
-    _error_code = _status & 0xff;
-  } else {
-    _error = FALSE;
-    _error_code = 0;
-  }
-}
-
-/* no command block */
-FUNCINLINE static ATTRINLINE void bcd_ioctl2(void *cmd, int len) {
-  __dpmi_regs regs;
-  memset(&regs, 0, sizeof regs);
-  regs.x.es = (__tb >> 4) & 0xffff;
-  regs.x.ax = 0x1510;
-  regs.x.bx = __tb & 0xf;
-  regs.x.cx = first_drive;
-  dosmemput(cmd, len, __tb); /* put ioctl block in dos arena */
-  if (__dpmi_int(0x2f, &regs) == -1) {
-    _bcd_error = "__dpmi_int() failed";
-    return;
-  }
-  /* I hate to have no error capability for ioctl2 but the command block
-     doesn't necessarily have a status field */
-  RESET_ERROR;
-}
-
-FUNCINLINE static ATTRINLINE int red2hsg(char *r) {
-  return r[0] + r[1]*75 + r[2]*4500 - 150;
-}
-
-int bcd_now_playing(void) {
-  int i, loc = bcd_audio_position();
-  _bcd_error = NULL;
-  if (!bcd_audio_busy()) {
-    _bcd_error = "Audio not playing";
-    return 0;
-  }
-  if (
-#ifndef STATIC_TRACKS
-  tracks == NULL &&
-#endif
-   !bcd_get_audio_info())
-    return 0;
-  for (i = lowest_track; i <= highest_track; i++) {
-    if (loc >= tracks[i].start && loc <= tracks[i].end) return i;
-  }
-  /* some bizarre location? */
-  _bcd_error = "Head outside of bounds";
-  return 0;
-}
-
-/* handles the setup for CD-ROM audio interface */
-int bcd_open(void) {
-  __dpmi_regs regs;
-  _bcd_error = NULL;
-
-  /* disk I/O wouldn't work anyway if you set sizeof tb this low, but... */
-  if (_go32_info_block.size_of_transfer_buffer < 4096) {
-    _bcd_error = "Transfer buffer too small";
-    return 0;
-  }
-
-  memset(&regs, 0, sizeof regs);
-  regs.x.ax = 0x1500;
-  regs.x.bx = 0x0;
-  __dpmi_int(0x2f, &regs);
-  if (regs.x.bx == 0) {	/* abba no longer lives */
-    _bcd_error = "MSCDEX not found";
-    return 0;
-  }
-
-  first_drive = regs.x.cx; /* use the first drive */
-
-  /* check for mscdex at least 2.0 */
-  memset(&regs, 0, sizeof regs);
-  regs.x.ax = 0x150C;
-  __dpmi_int(0x2f, &regs);
-  if (regs.x.bx == 0) {
-    _bcd_error = "MSCDEX version < 2.0";
-    return 0;
-  }
-  mscdex_version = regs.x.bx;
-
-  /* allocate 256 bytes of dos memory for the command blocks */
-  if ((dos_mem_segment = __dpmi_allocate_dos_memory(16, &dos_mem_selector))<0) {
-    _bcd_error = "Could not allocate 256 bytes of DOS memory";
-    return 0;
-  }
-
-  return mscdex_version;
-}
-
-/* Shuts down CD-ROM audio interface */
-int bcd_close(void) {
-  _bcd_error = NULL;
-  if (dos_mem_selector != -1) {
-    __dpmi_free_dos_memory(dos_mem_selector);
-    dos_mem_selector = -1;
-  }
-#ifndef STATIC_TRACKS
-  if (tracks) free(tracks);
-  tracks = NULL;
-#endif
-  RESET_ERROR;
-  return 1;
-}
-
-int bcd_open_door(void) {
-  IOCTLI ioctli;
-  char eject = 0;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 12;
-  ioctli.len = 1;
-  bcd_ioctl(&ioctli, &eject, sizeof eject);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_close_door(void) {
-  IOCTLI ioctli;
-  char closeit = 5;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 12;
-  ioctli.len = 1;
-  bcd_ioctl(&ioctli, &closeit, sizeof closeit);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_lock(int fn) {
-  IOCTLI ioctli;
-  LockRequest req;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  memset(&req, 0, sizeof req);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 12;
-  ioctli.len = sizeof req;
-  req.control = 1;
-  req.fn = fn ? 1 : 0;
-  bcd_ioctl(&ioctli, &req, sizeof req);
-  if (_error) return 0;
-  return 1;
-}
-
-
-int bcd_disc_changed(void) {
-  IOCTLI ioctli;
-  MediaChangedRequest req;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  memset(&req, 0, sizeof req);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 3;
-  ioctli.len = sizeof req;
-  req.control = 9;
-  bcd_ioctl(&ioctli, &req, sizeof req);
-  return req.mbyte;
-}
-
-int bcd_reset(void) {
-  IOCTLI ioctli;
-  char reset = 2;
-  _bcd_error = NULL;
-
-  memset(&ioctli, 0, sizeof ioctli);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 12;
-  ioctli.len = 1;
-  bcd_ioctl(&ioctli, &reset, sizeof reset);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_device_status(void) {
-  IOCTLI ioctli;
-  StatusRequest req;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  memset(&req, 0, sizeof req);
-  ioctli.request_header.len = sizeof ioctli; // ok
-  ioctli.request_header.command = 3;
-  ioctli.len = sizeof req;
-  req.control = 6;
-  bcd_ioctl(&ioctli, &req, sizeof req);
-  return req.status;
-}
-
-static inline int bcd_get_status_word(void) {
-  IOCTLI ioctli;
-  DiskInfo disk_info;
-
-  /* get cd info as an excuse to get a look at the status word */
-  memset(&disk_info, 0, sizeof disk_info);
-  memset(&ioctli, 0, sizeof ioctli);
-
-  ioctli.request_header.len = 26;
-  ioctli.request_header.command = 3;
-  ioctli.len = 7;
-  disk_info.control = 10;
-  bcd_ioctl(&ioctli, &disk_info, sizeof disk_info);
-  return _status;
-}
-
-int bcd_audio_busy(void) {
-  _bcd_error = NULL;
-  /* If the door is open, then the head is busy, and so the busy bit is
-     on. It is not, however, playing audio. */
-  if (bcd_device_status() & BCD_DOOR_OPEN)
-    return 0;
-
-  bcd_get_status_word();
-  if (_error) return -1;
-  return (_status & BUSY_BIT) ? 1 : 0;
-}
-
-int bcd_audio_position(void) {
-  IOCTLI ioctli;
-  PositionRequest req;
-  _bcd_error = NULL;
-  memset(&ioctli, 0, sizeof ioctli);
-  memset(&req, 0, sizeof req);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 3;
-  ioctli.len = sizeof req;
-  req.control = 1;
-  bcd_ioctl(&ioctli, &req, sizeof req);
-  return req.loc;
-}
-
-/* Internal function to get track info */
-static inline void bcd_get_track_info(int n, Track *t) {
-  IOCTLI ioctli;
-  TrackInfo info;
-
-  memset(&ioctli, 0, sizeof ioctli);
-  memset(&info, 0, sizeof info);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 3;
-  info.control = 11;
-  info.track_number = n;
-  bcd_ioctl(&ioctli, &info, sizeof info);
-  t->start = red2hsg(info.start);
-  if (info.info & 64)
-    t->is_audio = 0;
-  else
-    t->is_audio = 1;
-}
-
-int bcd_get_audio_info(void) {
-  IOCTLI ioctli;
-  DiskInfo disk_info;
-  int i;
-
-
-  _bcd_error = NULL;
-#ifndef STATIC_TRACKS
-  if (tracks) free(tracks);
-  tracks = NULL;
-#endif
-
-  memset(&disk_info, 0, sizeof disk_info);
-  memset(&ioctli, 0, sizeof ioctli);
-
-  ioctli.request_header.len = 26;
-  ioctli.request_header.command = 3;
-  ioctli.len = 7;
-  disk_info.control = 10;
-  bcd_ioctl(&ioctli, &disk_info, sizeof disk_info);
-  if (_error) return 0;
-
-  lowest_track = disk_info.lowest;
-  highest_track = disk_info.highest;
-  num_tracks = disk_info.highest - disk_info.lowest + 1;
-
-#ifndef STATIC_TRACKS
-  //tracks = calloc(num_tracks, sizeof (Track));
-  /* alloc max space in order to attempt to avoid possible overrun bug */
-  tracks = calloc(highest_track+1, sizeof (Track));
-  if (tracks == NULL) {
-    _bcd_error = "Out of memory allocating tracks\n";
-    return 0;
-  }
-#endif
-
-  /* get track starts */
-  for (i = lowest_track; i <= highest_track; i++)
-    bcd_get_track_info(i, tracks+i);
-
-  /* figure out track ends */
-  for (i = lowest_track; i < highest_track; i++)
-    tracks[i].end = tracks[i+1].start-1;
-  audio_length = red2hsg(disk_info.total);
-  tracks[i].end = audio_length;
-  for (i = lowest_track; i <= highest_track; i++)
-    tracks[i].len = tracks[i].end - tracks[i].start;
-
-  return num_tracks;
-}
-
-int bcd_get_track_address(int trackno, int *start, int *len) {
-  _bcd_error = NULL;
-  //if (trackno >= num_tracks+1 || trackno <= 0) {
-  if (trackno < lowest_track || trackno > highest_track) {
-    _bcd_error  = "Track out of range";
-    *start = *len = 0;
-    return 0;
-  }
-  *start = tracks[trackno].start;
-  *len = tracks[trackno].len;
-  return 1;
-}
-
-int bcd_track_is_audio(int trackno) {
-  //if (trackno >= num_tracks+1 || trackno <= 0) {
-  if (trackno < lowest_track || trackno > highest_track) {
-    _bcd_error = "Track out of range";
-    return 0;
-  }
-  return tracks[trackno].is_audio;
-}
-
-int bcd_set_volume(int volume) {
-  IOCTLI ioctli;
-  VolumeRequest v;
-
-  _bcd_error = NULL;
-  if (volume > 255) volume = 255;
-  else if (volume < 0) volume = 0;
-  memset(&ioctli, 0, sizeof ioctli);
-  ioctli.request_header.len = sizeof ioctli;
-  ioctli.request_header.command = 12;
-  ioctli.len = sizeof v;
-  v.control = 3;
-  v.volume0 = volume;
-  v.input0 = 0;
-  v.volume1 = volume;
-  v.input1 = 1;
-  v.volume2 = volume;
-  v.input2 = 2;
-  v.volume3 = volume;
-  v.input3 = 3;
-
-  bcd_ioctl(&ioctli, &v, sizeof v);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_play(int location, int frames) {
-  PlayRequest cmd;
-  memset(&cmd, 0, sizeof cmd);
-
-  _bcd_error = NULL;
-  /* the following should be in user code, but it'll fail otherwise */
-  if (bcd_audio_busy())
-    bcd_stop();
-
-  cmd.request.len = sizeof cmd;
-  cmd.request.command = 132;
-  cmd.start = location;
-  cmd.len = frames;
-  bcd_ioctl2(&cmd, sizeof cmd);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_play_track(int trackno) {
-  _bcd_error = NULL;
-  if (!bcd_get_audio_info()) return 0;
-
-  if (trackno < lowest_track || trackno > highest_track) {
-    _bcd_error = "Track out of range";
-    return 0;
-  }
-
-  if (! tracks[trackno].is_audio) {
-    _bcd_error = "Not an audio track";
-    return 0;
-  }
-
-  return bcd_play(tracks[trackno].start, tracks[trackno].len);
-}
-
-int bcd_stop(void) {
-  StopRequest cmd;
-  _bcd_error = NULL;
-  memset(&cmd, 0, sizeof cmd);
-  cmd.request.len = sizeof cmd;
-  cmd.request.command = 133;
-  bcd_ioctl2(&cmd, sizeof cmd);
-  if (_error) return 0;
-  return 1;
-}
-
-int bcd_resume(void) {
-  ResumeRequest cmd;
-  _bcd_error = NULL;
-  memset(&cmd, 0, sizeof cmd);
-  cmd.request.len = sizeof cmd;
-  cmd.request.command = 136;
-  bcd_ioctl2(&cmd, sizeof cmd);
-  if (_error) return 0;
-  return 1;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef STANDALONE
-static char *card(int c) {
-  return c == 1 ? "" : "s";
-}
-
-static void print_hsg(int hsg) {
-  int hours, minutes, seconds;
-  seconds = hsg / 75;
-  minutes = seconds / 60;
-  seconds %= 60;
-  hours = minutes / 60;
-  minutes %= 60;
-  printf("%2d:%02d:%02d", hours, minutes, seconds);
-}
-
-static void print_binary(int v, int len) {
-  for (;len;len--)
-    printf("%d", (v & (1 << len)) ? 1 : 0);
-}
-
-int main(int argc, char *argv[]) {
-  int i, n1, n2, t;
-
-  if (!bcd_open()) {
-    fprintf(stderr, "Couldn't open CD-ROM drive. %s\n", bcd_error());
-    exit(0);
-  }
-
-  for (i = 1; i < argc; i++) {
-    if (*argv[i] == '-') strcpy(argv[i], argv[i]+1);
-    if (!strcmp(argv[i], "open") || !strcmp(argv[i], "eject")) {
-      bcd_open_door();
-    } else if (!strcmp(argv[i], "close")) {
-      bcd_close_door();
-    } else if (!strcmp(argv[i], "sleep")) {
-      if (++i >= argc) break;
-      sleep(atoi(argv[i]));
-    } else if (!strcmp(argv[i], "list")) {
-      int nd = 0, na = 0, audio_time = 0;
-      if (!bcd_get_audio_info()) {
-        printf("Error getting audio info\n");
-      } else if (lowest_track == 0) {
-        printf("No audio tracks\n");
-      } else {
-        for (t = lowest_track; t <= highest_track; t++) {
-          printf("Track %2d: ", t);
-          print_hsg(tracks[t].start);
-          printf(" -> ");
-          print_hsg(tracks[t].end);
-          printf(" (");
-          print_hsg(tracks[t].len);
-          if (tracks[t].is_audio) {
-            na++;
-            printf(") audio");
-            audio_time += tracks[t].len;
-          } else {
-            nd++;
-            printf(") data ");
-          }
-          printf(" (HSG: %06d->%06d)\n", tracks[t].start, tracks[t].end);
-        }
-        printf("%d audio track%s, %d data track%s\n", na, card(na), nd, card(nd));
-        if (audio_time) {
-          printf("Audio time: ");
-          print_hsg(audio_time);
-          printf("\n");
-        }
-      }
-    } else if (!strcmp(argv[i], "lock")) {
-      bcd_lock(1);
-    } else if (!strcmp(argv[i], "pladdr")) {
-      if (++i >= argc) break;
-      n1 = atoi(argv[i]);
-      if (++i >= argc) break;
-      n2 = atoi(argv[i]);
-      printf("Playing frame %d to frame %d\n", n1, n2);
-      bcd_play(n1, n2-n1);
-    } else if (!strcmp(argv[i], "play")) {
-      if (++i >= argc) break;
-      if (bcd_audio_busy()) {
-        bcd_stop();
-        delay(1000);
-      }
-      n1 = atoi(argv[i]);
-      printf("Playing track %d\n", n1);
-      bcd_play_track(n1);
-    } else if (!strcmp(argv[i], "reset")) {
-      bcd_reset();
-    } else if (!strcmp(argv[i], "resume")) {
-      bcd_resume();
-    } else if (!strcmp(argv[i], "status")) {
-      int s;
-      s = bcd_device_status();
-      printf("MSCDEX version %d.%d\n", mscdex_version >> 8,
-             mscdex_version & 0xff);
-      printf("Device status word '");
-      print_binary(s, 16);
-      printf("'\nDoor is %sopen\n", s & BCD_DOOR_OPEN ? "" : "not ");
-      printf("Door is %slocked\n", s & BCD_DOOR_UNLOCKED ? "not " : "");
-      printf("Audio is %sbusy\n", bcd_audio_busy() ? "" : "not ");
-      s = bcd_disc_changed();
-      if (s == BCD_DISC_UNKNOWN) printf("Media change status unknown\n");
-      else printf("Media has %schanged\n",
-           (s == BCD_DISC_CHANGED) ? "" : "not ");
-    } else if (!strcmp(argv[i], "stop")) {
-      bcd_stop();
-    } else if (!strcmp(argv[i], "unlock")) {
-      bcd_lock(0);
-    } else if (!strcmp(argv[i], "volume")) {
-      bcd_set_volume(atoi(argv[++i]));
-    } else if (!strcmp(argv[i], "wait")) {
-      while (bcd_audio_busy()) {
-        int n = bcd_now_playing();
-        if (n == 0) break;
-        printf("%2d: ", n);
-        print_hsg(bcd_audio_position() - tracks[n].start);
-        printf("\r");
-        fflush(stdout);
-        delay(100);
-        if (kbhit() && getch() == 27) break;
-      }
-      printf("\n");
-    } else if (!strcmp(argv[i], "help") || !strcmp(argv[i], "usage")) {
-      printf("BCD version %x.%x\n" \
-             "Usage: BCD {commands}\n" \
-             "Valid commands:\n" \
-             "\tclose		- close door/tray\n" \
-             "\tdelay {n}	- delay {n} seconds\n" \
-             "\tlist		- list track info\n" \
-             "\tlock		- lock door/tray\n" \
-             "\topen		- open door/tray\n" \
-             "\tpladdr {n1} {n2}- play frame {n1} to {n2}\n" \
-             "\tplay {n}	- play track {n}\n" \
-             "\treset		- reset the drive\n" \
-             "\tresume		- resume from last stop\n" \
-             "\tstatus		- show drive status\n" \
-             "\tstop		- stop audio playback\n" \
-             "\tunlock		- unlock door/tray\n" \
-             "\tvolume {n}	- set volume to {n} where 0 <= {n} <= 255\n",
-             BCD_VERSION >> 8, BCD_VERSION & 0xff);
-    } else
-      printf("Unknown command '%s'\n", argv[i]);
-    if (_error || _bcd_error) printf("%s\n", bcd_error());
-  }
-  bcd_close();
-  exit(0);
-}
-#endif
diff --git a/src/djgppdos/bcd.h b/src/djgppdos/bcd.h
deleted file mode 100644
index 3997128a27..0000000000
--- a/src/djgppdos/bcd.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* bcd.h -- header file for BCD, a CD-ROM audio playing library for DJGPP
-   by Brennan Underwood, http://brennan.home.ml.org/ */
-#ifndef _BCD_H
-#define _BCD_H
-
-#define BCD_VERSION 0x0103
-
-/* Installation and setup functions */
-/* Call this first! */
-int bcd_open(void);
-/* Call before exit. */
-int bcd_close(void);
-
-/* open door, unlocking first if necessary */
-int bcd_open_door(void);
-/* close door */
-int bcd_close_door(void);
-
-/* pass 1 to lock door, 0 to unlock */
-int bcd_lock(int);
-
-/* returns one of the following 3 #defined symbols */
-int bcd_disc_changed(void);
-#define BCD_DISC_CHANGED	0xff
-#define BCD_DISC_NOT_CHANGED	1
-#define BCD_DISC_UNKNOWN	0
-
-/* perform a device reset */
-int bcd_reset(void);
-
-/* compare the returned status int to the following bits */
-int bcd_device_status(void);
-#define BCD_DOOR_OPEN		1
-#define BCD_DOOR_UNLOCKED	2
-#define BCD_SUPPORT_COOKED	4
-#define BCD_READ_ONLY		8
-#define BCD_DATA_READ_ONLY	16
-#define BCD_SUPPORT_INTERLEAVE	32
-
-/* returns 1 if audio is currently playing, 0 otherwise. -1 on error */
-int bcd_audio_busy(void);
-/* current head position in frames */
-int bcd_audio_position(void);
-/* convenience function, if audio busy, returns track# playing now */
-int bcd_now_playing(void);
-
-/* query MSCDEX for track list when disc changed or just starting up */
-int bcd_get_audio_info(void);
-/* get a particular track's info */
-int bcd_get_track_address(int trackno, int *start, int *len);
-/* check for track's audio/data status */
-int bcd_track_is_audio(int trackno);
-/* play a particular track from beginning to end */
-int bcd_play_track(int tracknum);
-/* play an arbitrary section of audio for an arbitrary length of time */
-int bcd_play(int start, int len);
-/* set the output volume. pass a parameter from 0-255 */
-int bcd_set_volume(int);
-/* stop and pause are equivalent */
-int bcd_stop(void);
-#define bcd_pause bcd_stop
-int bcd_resume(void);
-
-/* Troubleshooting */
-/* Returns a human readable description of the last error encountered */
-const char *bcd_error(void);
-extern int _error_code;
-/* If you are mad enough play the Rach 3, I mean parse _error_code yourself */
-#define BCD_DE_WRITE_PROTECT	0
-#define BCD_DE_UNKNOWN_UNIT	1
-#define BCD_DE_DRIVE_NOT_READY	2
-#define BCD_DE_UNKNOWN_COMMAND	3
-#define BCD_DE_CRC_ERROR	4
-#define BCD_DE_STRUCT_LEN	5
-#define BCD_DE_SEEK_ERROR	6
-#define BCD_DE_UNKNOWN_MEDIA	7
-#define BCD_DE_SECTOR_NOT_FOUND	8
-#define BCD_DE_OUT_OF_PAPER	9
-#define BCD_DE_WRITE_FAULT	10
-#define BCD_DE_READ_FAULT	11
-#define BCD_DE_GENERAL_FAILURE	12
-#define BCD_DE_INVALID_DISK_CHANGE	15
-/* set by BCD itself, for stuff like "Out of memory" */
-extern const char *_bcd_error;
-
-/* uncomment this line to force BCD to use a statically allocated
-   Track array instead of using malloc */
-#define STATIC_TRACKS
-
-#endif
diff --git a/src/djgppdos/i_cdmus.c b/src/djgppdos/i_cdmus.c
deleted file mode 100644
index 2a629ca173..0000000000
--- a/src/djgppdos/i_cdmus.c
+++ /dev/null
@@ -1,445 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief cd music interface (uses bcd library)
-
-// Alam_GBC: I hate you, Brennan Underwood :)
-#include "../doomtype.h"
-#include "bcd.c"
-//#include "bcd.h"                // CD-Audio library by Brennan Underwood
-
-#include "../doomdef.h"
-#include "../i_sound.h"
-#include "../command.h"
-#include "../i_system.h"
-#include "../s_sound.h"
-
-// ------
-// protos
-// ------
-static void Command_Cd_f (void);
-
-
-//======================================================================
-//                   CD AUDIO MUSIC SUBSYSTEM
-//======================================================================
-
-UINT8  cdaudio_started=0;   // for system startup/shutdown
-
-#define MAX_CD_TRACKS 256
-static boolean cdPlaying = false;
-static int     cdPlayTrack;         // when cdPlaying is true
-static boolean cdLooping = false;
-static UINT8   cdRemap[MAX_CD_TRACKS];
-static boolean cdEnabled=true;      // cd info available
-static boolean cdValid;             // true when last cd audio info was ok
-static boolean wasPlaying;
-static int     cdVolume=0;          // current cd volume (0-31)
-
-// 0-31 like Music & Sfx, though CD hardware volume is 0-255.
-consvar_t cd_volume = {"cd_volume","18",CV_SAVE,soundvolume_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
-
-// allow Update for next/loop track
-// some crap cd drivers take up to
-// a second for a simple 'busy' check..
-// (on those Update can be disabled)
-consvar_t cdUpdate  = {"cd_update","1",CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
-
-
-// hour,minutes,seconds
-FUNCINLINE static ATTRINLINE char *hms(int hsg)
-{
-	int hours, minutes, seconds;
-	static char s[9];
-
-	seconds = hsg / 75;
-	minutes = seconds / 60;
-	seconds %= 60;
-	hours = minutes / 60;
-	minutes %= 60;
-	if (hours>0)
-		sprintf (s, "%d:%02d:%02d", hours, minutes, seconds);
-	else
-		sprintf (s, "%2d:%02d", minutes, seconds);
-	return s;
-}
-
-static void Command_Cd_f (void)
-{
-	const char *    s;
-	int       i,j;
-
-	if (!cdaudio_started)
-		return;
-
-	if (COM_Argc()<2)
-	{
-		CONS_Printf ("cd [on] [off] [remap] [reset] [open]\n"
-		             "   [info] [play <track>] [loop <track>]\n"
-		             "   [stop] [resume]\n");
-		return;
-	}
-
-	s = COM_Argv(1);
-
-	// activate cd music
-	if (!strncmp(s,"on",2))
-	{
-		cdEnabled = true;
-		return;
-	}
-
-	// stop/deactivate cd music
-	if (!strncmp(s,"off",3))
-	{
-		if (cdPlaying)
-			I_StopCD ();
-		cdEnabled = false;
-		return;
-	}
-
-	// remap tracks
-	if (!strncmp(s,"remap",5))
-	{
-		i = COM_Argc() - 2;
-		if (i <= 0)
-		{
-			CONS_Printf ("CD tracks remapped in that order :\n");
-			for (j = 1; j < MAX_CD_TRACKS; j++)
-				if (cdRemap[j] != j)
-					CONS_Printf (" %2d -> %2d\n", j, cdRemap[j]);
-			return;
-		}
-		for (j = 1; j <= i; j++)
-			cdRemap[j] = atoi (COM_Argv (j+1));
-		return;
-	}
-
-	// reset the CD driver, useful on some odd cd's
-	if (!strncmp(s,"reset",5))
-	{
-		cdEnabled = true;
-		if (cdPlaying)
-			I_StopCD ();
-		for (i = 0; i < MAX_CD_TRACKS; i++)
-			cdRemap[i] = i;
-		bcd_reset ();
-		cdValid = bcd_get_audio_info ();
-		return;
-	}
-
-	// any other command is not allowed until we could retrieve cd information
-	if (!cdValid)
-	{
-		CONS_Printf ("CD is not ready.\n");
-		return;
-	}
-
-	if (!strncmp(s,"open",4))
-	{
-		if (cdPlaying)
-			I_StopCD ();
-		bcd_open_door();
-		cdValid = false;
-		return;
-	}
-
-	if (!strncmp(s,"info",4))
-	{
-		int totaltime = 0;
-
-		if (!bcd_get_audio_info())
-		{
-			CONS_Printf ("Error getting audio info: %s\n",bcd_error());
-			cdValid = false;
-			return;
-		}
-
-		cdValid = true;
-
-		if (lowest_track == 0)
-			CONS_Printf ("No audio tracks\n");
-		else
-		{
-			// display list of tracks
-			// highlight current playing track
-			for (i=lowest_track; i <= highest_track; i++)
-			{
-				CONS_Printf    ("%s%2d. %s  %s\n",
-								cdPlaying && (cdPlayTrack == i) ? "\2 " : " ",
-								i, tracks[i].is_audio ? "audio" : "data ",
-								hms(tracks[i].len));
-				if (tracks[i].is_audio)
-					totaltime += tracks[i].len;
-			}
-
-			if (totaltime)
-				CONS_Printf ("\2Total time : %s\n", hms(totaltime));
-		}
-		if (cdPlaying)
-		{
-			CONS_Printf ("%s track : %d\n", cdLooping ? "looping" : "playing",
-			             cdPlayTrack);
-		}
-		return;
-	}
-
-	if (!strncmp(s,"play",4))
-	{
-		I_PlayCD ((UINT8)atoi (COM_Argv (2)), false);
-		return;
-	}
-
-	if (!strncmp(s,"stop",4))
-	{
-		I_StopCD ();
-		return;
-	}
-
-	if (!strncmp(s,"loop",4))
-	{
-		I_PlayCD ((UINT8)atoi (COM_Argv (2)), true);
-		return;
-	}
-
-	if (!strncmp(s,"resume",4))
-	{
-		I_ResumeCD ();
-		return;
-	}
-
-	CONS_Printf ("cd command '%s' unknown\n", s);
-}
-
-
-// pause cd music
-void I_StopCD (void)
-{
-	if (!cdaudio_started || !cdEnabled)
-		return;
-
-	bcd_stop();
-
-	wasPlaying = cdPlaying;
-	cdPlaying = false;
-}
-
-// continue after a pause
-void I_ResumeCD (void)
-{
-	if (!cdaudio_started || !cdEnabled)
-		return;
-
-	if (!cdValid)
-		return;
-
-	if (!wasPlaying)
-		return;
-
-	bcd_resume ();
-	cdPlaying = true;
-}
-
-
-void I_ShutdownCD (void)
-{
-	int rc;
-
-	if (!cdaudio_started)
-		return;
-
-	I_StopCD ();
-
-	rc = bcd_close ();
-	if (!rc)
-		CONS_Printf ("Error shuting down cd\n");
-}
-
-void I_InitCD (void)
-{
-	int rc;
-	int i;
-
-	rc = bcd_open ();
-
-	if (rc>=0x200)
-	{
-		CONS_Printf ("MSCDEX version %d.%d\n", rc>>8, rc&255);
-
-		I_AddExitFunc (I_ShutdownCD);
-		cdaudio_started = true;
-	}
-	else
-	{
-		if (!rc)
-			CONS_Printf ("%s\n", bcd_error() );
-
-		cdaudio_started = false;
-		return;
-	}
-
-	// last saved in config.cfg
-	i = cd_volume.value;
-	I_SetVolumeCD (0);   // initialize to 0 for some odd cd drivers
-	I_SetVolumeCD (i);   // now set the last saved volume
-
-	for (i = 0; i < MAX_CD_TRACKS; i++)
-		cdRemap[i] = i;
-
-	if (!bcd_get_audio_info())
-	{
-		CONS_Printf("\2CD Init: No CD in player.\n");
-		cdEnabled = false;
-		cdValid = false;
-	}
-	else
-	{
-		cdEnabled = true;
-		cdValid = true;
-	}
-
-	COM_AddCommand ("cd", Command_Cd_f);
-}
-
-
-
-// loop/go to next track when track is finished (if cd_update var is true)
-// update the volume when it has changed (from console/menu)
-/// \todo check for cd change and restart music ?
-
-void I_UpdateCD (void)
-{
-	int     newVolume;
-	int     now;
-	static  int last;     //game tics (35th of second)
-
-	if (!cdaudio_started)
-		return;
-
-	now = I_GetTime ();
-	if ((now - last) < 10)        // about 1/4 second
-		return;
-	last = now;
-
-	// update cd volume changed at console/menu
-	newVolume = cd_volume.value & 31;
-
-	if (cdVolume != newVolume)
-		I_SetVolumeCD (newVolume);
-
-	// slow drivers exit here
-	if (!cdUpdate.value)
-		return;
-
-	if (cdPlaying)
-	{
-		if (!bcd_audio_busy())
-		{
-			cdPlaying = false;
-			if (cdLooping)
-				I_PlayCD (cdPlayTrack, true);
-			else
-			{
-				// play the next cd track, or restart the first
-				cdPlayTrack++;
-				if (cdPlayTrack > highest_track)
-					cdPlayTrack = lowest_track;
-				while (!tracks[cdPlayTrack].is_audio && cdPlayTrack<highest_track)
-					cdPlayTrack++;
-				I_PlayCD (cdPlayTrack, true);
-			}
-		}
-	}
-
-}
-
-
-//
-void I_PlayCD (UINT8 track, UINT8 looping)
-{
-	if (!cdaudio_started || !cdEnabled)
-		return;
-
-	if (!cdValid)
-		return;
-
-	track = cdRemap[track];
-
-	if (cdPlaying)
-	{
-		if (cdPlayTrack == track)
-			return;
-		I_StopCD ();
-	}
-
-	if (track < lowest_track || track > highest_track)
-	{
-		//CONS_Printf ("\2CD Audio: wrong track number %d\n", track);
-		// suppose there are not enough tracks for game levels..
-		// then do a modulo so we always get something to hear
-		track = (track % (highest_track-lowest_track+1)) + 1;
-		//return;
-	}
-
-	cdPlayTrack = track;
-
-	if (!tracks[track].is_audio)
-	{
-		CONS_Printf ("\2CD Play: not an audio track\n");
-		return;
-	}
-
-	cdLooping = looping;
-
-	if (!bcd_play_track (track))
-	{
-		CONS_Printf ("CD Play: could not play track %d\n", track);
-		cdValid = false;
-		cdPlaying = false;
-		return;
-	}
-
-	cdPlaying = true;
-
-}
-
-
-// volume : logical cd audio volume 0-31 (hardware is 0-255)
-boolean I_SetVolumeCD (INT32 volume)
-{
-	int  hardvol;
-
-	if (!cdaudio_started || !cdEnabled)
-		return false;
-
-	// translate to hardware volume
-	volume &= 31;
-
-	hardvol = ((volume+1)<<3)-1;  //highest volume is 255
-	if (hardvol<=8)
-		hardvol=0;                //lowest volume is ZERO
-
-	cdVolume = volume;
-
-	if (bcd_set_volume (hardvol))
-	{
-		CV_SetValue (&cd_volume, volume);
-
-		return true;
-	}
-	else
-		return false;
-}
diff --git a/src/djgppdos/i_main.c b/src/djgppdos/i_main.c
deleted file mode 100644
index 1b8894470d..0000000000
--- a/src/djgppdos/i_main.c
+++ /dev/null
@@ -1,78 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1993-1996 by id Software, Inc.
-// Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief Main program, simply calls D_SRB2Main high level loop.
-
-#include "../doomdef.h"
-
-#include "../m_argv.h"
-#include "../d_main.h"
-
-#include "../i_system.h"
-
-#ifdef REMOTE_DEBUGGING
-#include <i386-stub.h>
-#include "rdb.h"
-#endif
-
-//### let's try with Allegro ###
-#define  alleg_mouse_unused
-#define  alleg_timer_unused
-#define  ALLEGRO_NO_KEY_DEFINES
-#define  alleg_keyboard_unused
-#define  alleg_joystick_unused
-#define  alleg_gfx_driver_unused
-#define  alleg_palette_unused
-#define  alleg_graphics_unused
-#define  alleg_vidmem_unused
-#define  alleg_flic_unused
-#define  alleg_sound_unused
-#define  alleg_file_unused
-#define  alleg_datafile_unused
-#define  alleg_math_unused
-#define  alleg_gui_unused
-#include <allegro.h>
-//### end of Allegro include ###
-
-int main (int argc, char **argv)
-{
-	myargc = argc;
-	myargv = argv;
-
-	{
-		//added:03-01-98:
-		//       Setup signal handlers and other stuff BEFORE ANYTHING ELSE!
-		I_StartupSystem();
-#ifdef REMOTE_DEBUGGING
-		/* Only setup if remote debugging  is to be done, Muhahahaha!*/
-		gdb_serial_init(DEBUG_COM_PORT,DEBUG_COM_PORT_SPEED);
-		gdb_target_init();
-		breakpoint();
-#endif
-
-		D_SRB2Main();
-		D_SRB2Loop();
-
-	}
-	//added:03-01-98:
-	//       hmmm... it will never go here.
-
-	return 0;
-}
-#if ALLEGRO_VERSION == 4
-END_OF_MAIN()
-#endif
diff --git a/src/djgppdos/i_net.c b/src/djgppdos/i_net.c
deleted file mode 100644
index 866aa8d8b9..0000000000
--- a/src/djgppdos/i_net.c
+++ /dev/null
@@ -1,113 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1993-1996 by id Software, Inc.
-// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief doomcom network interface
-
-
-#include <netinet/in.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <go32.h>
-#include <pc.h>
-#include <dpmi.h>
-#include <dos.h>
-#include <sys/nearptr.h>
-
-#include "../doomdef.h"
-
-#include "../i_system.h"
-#include "../d_event.h"
-#include "../d_net.h"
-#include "../m_argv.h"
-
-#include "../doomstat.h"
-#include "../z_zone.h"
-#include "../i_net.h"
-#include "../i_tcp.h"
-
-//
-// NETWORKING
-//
-
-typedef enum
-{
-	CMD_SEND     = 1,
-	CMD_GET      = 2,
-} command_t;
-
-static void External_Driver_Get(void);
-static void External_Driver_Send(void);
-static void External_Driver_FreeNode(INT32 nodenum);
-
-static inline boolean External_Driver_OpenSocket(void)
-{
-	I_NetGet  = External_Driver_Get;
-	I_NetSend = External_Driver_Send;
-	I_NetCloseSocket = NULL;
-	I_NetFreeNodenum = External_Driver_FreeNode;
-
-	return true;
-}
-
-//
-// I_InitNetwork
-//
-boolean I_InitNetwork (void)
-{
-	int netgamepar;
-
-	netgamepar = M_CheckParm ("-net");
-	if (!netgamepar)
-		return false;
-
-	// externals drivers specific
-
-	__djgpp_nearptr_enable();
-
-	// set up for network
-	doomcom=(doomcom_t *)(__djgpp_conventional_base+atoi(myargv[netgamepar+1]));
-	CONS_Printf("I_DosNet : Using int 0x%x for communication\n",doomcom->intnum);
-
-	server = (doomcom->consoleplayer == 0);
-	if (!server)
-		COM_BufAddText("connect any\n");
-
-	// ipx + time + 4 (padding)
-	packetheaderlength=30+4+4;
-
-	hardware_MAXPACKETLENGTH = 512;
-
-	I_NetOpenSocket = External_Driver_OpenSocket;
-	return true;
-}
-
-FUNCNORETURN static ATTRNORETURN void External_Driver_Get(void)
-{
-	I_Error("External_Driver_Get not supported at this time");
-}
-
-FUNCNORETURN static ATTRNORETURN void External_Driver_Send(void)
-{
-	I_Error("External_Driver_Send not supported at this time");
-}
-
-FUNCNORETURN static ATTRNORETURN void External_Driver_FreeNode(INT32 nodenum)
-{
-	nodenum = 0;
-	I_Error("External_Driver_FreeNode not supported at this time");
-}
diff --git a/src/djgppdos/i_sound.c b/src/djgppdos/i_sound.c
deleted file mode 100644
index 847853a89a..0000000000
--- a/src/djgppdos/i_sound.c
+++ /dev/null
@@ -1,620 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1993-1996 by id Software, Inc.
-// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief interface level code for sound
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include <math.h>
-
-#include "../doomdef.h"
-#include "../doomstat.h"
-#include "../i_system.h"
-#include "../i_sound.h"
-#include "../z_zone.h"
-#include "../m_argv.h"
-#include "../m_misc.h"
-#include "../w_wad.h"
-#include "../s_sound.h"
-#include "../console.h"
-
-//### let's try with Allegro ###
-#define  alleg_mouse_unused
-#define  alleg_timer_unused
-#define  ALLEGRO_NO_KEY_DEFINES
-#define  alleg_keyboard_unused
-#define  alleg_joystick_unused
-#define  alleg_gfx_driver_unused
-#define  alleg_palette_unused
-#define  alleg_graphics_unused
-#define  alleg_vidmem_unused
-#define  alleg_flic_unused
-//#define  alleg_sound_unused    we use it
-#define  alleg_file_unused
-#define  alleg_datafile_unused
-#define  alleg_math_unused
-#define  alleg_gui_unused
-#include <allegro.h>
-//### end of Allegro include ###
-
-//allegro has 256 virtual voices
-// warning should by a power of 2
-#define VIRTUAL_VOICES 256
-#define VOICESSHIFT 8
-
-// Needed for calling the actual sound output.
-#define SAMPLECOUNT    512
-
-
-
-//
-// this function converts raw 11khz, 8-bit data to a SAMPLE* that allegro uses
-// it is need cuz allegro only loads samples from wavs and vocs
-//added:11-01-98: now reads the frequency from the rawdata header.
-//   dsdata points a 4 UINT16 header:
-//    +0 : value 3 what does it mean?
-//    +2 : sample rate, either 11025 or 22050.
-//    +4 : number of samples, each sample is a single byte since it's 8bit
-//    +6 : value 0
-static inline SAMPLE *raw2SAMPLE(UINT8 *dsdata, size_t len)
-{
-	SAMPLE *spl;
-
-	spl=Z_Malloc(sizeof (SAMPLE),PU_SOUND,NULL);
-	if (spl==NULL)
-		I_Error("Raw2Sample : no more free mem");
-	spl->bits = 8;
-	spl->stereo = 0;
-	spl->freq = *((UINT16 *)dsdata+1);   //mostly 11025, but some at 22050.
-	spl->len = len-8;
-	spl->priority = 255;                //priority;
-	spl->loop_start = 0;
-	spl->loop_end = len-8;
-	spl->param = -1;
-	spl->data=(void *)(dsdata+8);       //skip the 8bytes header
-
-	return spl;
-}
-
-
-//  This function loads the sound data from the WAD lump,
-//  for single sound.
-//
-void *I_GetSfx (sfxinfo_t * sfx)
-{
-	UINT8 *dssfx;
-
-	if (sfx->lumpnum == LUMPERROR)
-		sfx->lumpnum = S_GetSfxLumpNum (sfx);
-
-	sfx->length = W_LumpLength (sfx->lumpnum);
-
-	dssfx = (UINT8 *) W_CacheLumpNum (sfx->lumpnum, PU_SOUND);
-	//_go32_dpmi_lock_data(dssfx,size);
-
-	// convert raw data and header from Doom sfx to a SAMPLE for Allegro
-	return (void *)raw2SAMPLE (dssfx, sfx->length);
-}
-
-
-void I_FreeSfx (sfxinfo_t *sfx)
-{
-	if (sfx->lumpnum == LUMPERROR)
-		return;
-
-	// free sample data
-	if ( sfx->data )
-		Z_Free((UINT8 *) ((SAMPLE *)sfx->data)->data - 8);
-	Z_Free(sfx->data); // Allegro SAMPLE structure
-	sfx->data = NULL;
-	sfx->lumpnum = LUMPERROR;
-}
-
-FUNCINLINE static ATTRINLINE int Volset(int vol)
-{
-	return (vol*255/31);
-}
-
-
-void I_SetSfxVolume(INT32 volume)
-{
-	if (sound_disabled)
-		return;
-
-	set_volume (Volset(volume),-1);
-}
-
-//
-// Starting a sound means adding it
-//  to the current list of active sounds
-//  in the internal channels.
-// As the SFX info struct contains
-//  e.g. a pointer to the raw data,
-//  it is ignored.
-// As our sound handling does not handle
-//  priority, it is ignored.
-// Pitching (that is, increased speed of playback)
-//  is set, but currently not used by mixing.
-//
-INT32 I_StartSound ( sfxenum_t     id,
-                   INT32         vol,
-                   INT32         sep,
-                   INT32         pitch,
-                   INT32         priority,
-				   INT32         channel)
-{
-	int voice;
-	(void)channel;
-
-	if (sound_disabled)
-	return 0;
-
-	// UNUSED
-	priority = 0;
-
-	pitch = (pitch-128)/2+128;
-	voice = play_sample(S_sfx[id].data,vol,sep,(pitch*1000)/128,0);
-
-	// Returns a handle
-	return (id<<VOICESSHIFT)+voice;
-}
-
-void I_StopSound (INT32 handle)
-{
-	// You need the handle returned by StartSound.
-	// Would be looping all channels,
-	//  tracking down the handle,
-	//  an setting the channel to zero.
-	int voice=handle & (VIRTUAL_VOICES-1);
-
-	if (sound_disabled)
-		return;
-
-	if (voice_check(voice)==S_sfx[handle>>VOICESSHIFT].data)
-		deallocate_voice(voice);
-}
-
-INT32 I_SoundIsPlaying(INT32 handle)
-{
-	if (sound_disabled)
-		return FALSE;
-
-	if (voice_check(handle & (VIRTUAL_VOICES-1))==S_sfx[handle>>VOICESSHIFT].data)
-		return TRUE;
-
-	return FALSE;
-}
-
-// cut and past from ALLEGRO he don't share it :(
-static inline int absolute_freq(int freq, SAMPLE *spl)
-{
-	if (freq == 1000)
-		return spl->freq;
-	else
-		return (spl->freq * freq) / 1000;
-}
-
-void I_UpdateSoundParams( INT32 handle,
-                          INT32 vol,
-                          INT32 sep,
-                          INT32 pitch)
-{
-	// I fail too see that this is used.
-	// Would be using the handle to identify
-	//  on which channel the sound might be active,
-	//  and resetting the channel parameters.
-	int voice=handle & (VIRTUAL_VOICES-1);
-	int numsfx=handle>>VOICESSHIFT;
-
-	if (sound_disabled)
-		return;
-
-	if (voice_check(voice)==S_sfx[numsfx].data)
-	{
-		voice_set_volume(voice, vol);
-		voice_set_pan(voice, sep);
-		voice_set_frequency(voice, absolute_freq(pitch*1000/128,
-		                    S_sfx[numsfx].data));
-	}
-}
-
-
-void I_ShutdownSound(void)
-{
-	// Wait till all pending sounds are finished.
-
-	//added:03-01-98:
-	if ( !sound_started )
-		return;
-
-	//added:08-01-98: remove_sound() explicitly because we don't use
-	//                Allegro's allegro_exit();
-	remove_sound();
-	sound_started = false;
-}
-
-static char soundheader[] = "sound";
-#if ALLEGRO_VERSION == 3
-static char soundvar[] = "sb_freq";
-#else
-static char soundvar[] = "sound_freq";
-#endif
-
-void I_StartupSound(void)
-{
-	int    sfxcard,midicard;
-#if ALLEGRO_VERSION == 3
-	char   err[255];
-#endif
-
-	if (sound_disabled)
-		sfxcard=DIGI_NONE;
-	else
-		sfxcard=DIGI_AUTODETECT;
-
-	if (midi_disabled)
-		midicard=MIDI_NONE;
-	else
-		midicard=MIDI_AUTODETECT; //DetectMusicCard();
-
-	digital_disabled=true; //Alam: No OGG/MP3/IT/MOD support
-
-	// Secure and configure sound device first.
-	CONS_Printf("I_StartupSound: ");
-
-	//Fab:25-04-98:note:install_sound will check for sound settings
-	//    in the sound.cfg or allegro.cfg, in the current directory,
-	//    or the directory pointed by 'ALLEGRO' env var.
-#if ALLEGRO_VERSION == 3
-	if (install_sound(sfxcard,midicard,NULL)!=0)
-	{
-		sprintf (err,"Sound init error : %s\n",allegro_error);
-		CONS_Error (err);
-		sound_disabled=true;
-		midi_disabled=true;
-	}
-	else
-	{
-		CONS_Printf(" configured audio device\n" );
-	}
-
-	//added:08-01-98:we use a similar startup/shutdown scheme as Allegro.
-	I_AddExitFunc(I_ShutdownSound);
-#endif
-	sound_started = true;
-	CV_SetValue(&cv_samplerate,get_config_int(soundheader,soundvar,cv_samplerate.value));
-}
-
-
-
-
-//
-// MUSIC API.
-// Still no music done.
-// Remains. Dummies.
-//
-
-static MIDI* currsong;   //im assuming only 1 song will be played at once
-static int      islooping=0;
-static int      musicdies=-1;
-UINT8           music_started=0;
-boolean         songpaused=false;
-
-/// ------------------------
-//  MUSIC SYSTEM
-/// ------------------------
-
-/* load_midi_mem:
- *  Loads a standard MIDI file from memory, returning a pointer to
- *  a MIDI structure, *  or NULL on error.
- *  It is the load_midi from Allegro modified to load it from memory
- */
-static MIDI *load_midi_mem(char *mempointer,int *e)
-{
-	int c = *e;
-	long data=0;
-	unsigned char *fp;
-	MIDI *midi;
-	int num_tracks=0;
-
-	fp = (void *)mempointer;
-	if (!fp)
-		return NULL;
-
-	midi = malloc(sizeof (MIDI));              /* get some memory */
-	if (!midi)
-		return NULL;
-
-	for (c=0; c<MIDI_TRACKS; c++)
-	{
-		midi->track[c].data = NULL;
-		midi->track[c].len = 0;
-	}
-
-	fp+=4+4;   // header size + 'chunk' size
-
-	swab(fp,&data,2);     // convert to intel-endian
-	fp+=2;                                      /* MIDI file type */
-	if ((data != 0) && (data != 1)) // only type 0 and 1 are suported
-		return NULL;
-
-	swab(fp,&num_tracks,2);                     /* number of tracks */
-	fp+=2;
-	if ((num_tracks < 1) || (num_tracks > MIDI_TRACKS))
-		return NULL;
-
-	swab(fp,&data,2);                          /* beat divisions */
-	fp+=2;
-	midi->divisions = ABS(data);
-
-	for (c=0; c<num_tracks; c++)
-	{            /* read each track */
-		if (memcmp(fp, "MTrk", 4))
-			return NULL;
-		fp+=4;
-
-		//swab(fp,&data,4);       don't work !!!!??
-		((char *)&data)[0]=fp[3];
-		((char *)&data)[1]=fp[2];
-		((char *)&data)[2]=fp[1];
-		((char *)&data)[3]=fp[0];
-		fp+=4;
-
-		midi->track[c].len = data;
-
-		midi->track[c].data = fp;
-		fp+=data;
-	}
-
-	lock_midi(midi);
-	return midi;
-}
-
-void I_InitMusic(void)
-{
-	if (midi_disabled)
-		return;
-
-	I_AddExitFunc(I_ShutdownMusic);
-	music_started = true;
-	songpaused = false;
-}
-
-void I_ShutdownMusic(void)
-{
-	if ( !music_started )
-		return;
-
-	I_StopSong();
-
-	music_started=false;
-}
-
-/// ------------------------
-//  MUSIC PROPERTIES
-/// ------------------------
-
-musictype_t I_SongType(void)
-{
-	if (currsong)
-		return MU_MID;
-	else
-		return MU_NONE;
-}
-
-boolean I_SongPlaying()
-{
-	return (boolean)currsong;
-}
-
-boolean I_SongPaused()
-{
-	return songpaused;
-}
-
-/// ------------------------
-//  MUSIC EFFECTS
-/// ------------------------
-
-boolean I_SetSongSpeed(float speed)
-{
-	(void)speed;
-	return false;
-}
-
-/// ------------------------
-// MUSIC SEEKING
-/// ------------------------
-
-UINT32 I_GetSongLength(void)
-{
-	return 0;
-}
-
-boolean I_SetSongLoopPoint(UINT32 looppoint)
-{
-        (void)looppoint;
-        return false;
-}
-
-UINT32 I_GetSongLoopPoint(void)
-{
-	return 0;
-}
-
-boolean I_SetSongPosition(UINT32 position)
-{
-    (void)position;
-    return false;
-}
-
-UINT32 I_GetSongPosition(void)
-{
-    return 0;
-}
-
-/// ------------------------
-//  MUSIC PLAYBACK
-/// ------------------------
-
-boolean I_LoadSong(char *data, size_t len)
-{
-	int e = len; //Alam: For error
-	if (midi_disabled)
-		return 0;
-
-	if (memcmp(data,"MThd",4)==0) // support mid file in WAD !!!
-	{
-		currsong=load_midi_mem(data,&e);
-	}
-	else
-	{
-		CONS_Printf("Music Lump is not a MIDI lump\n");
-		return 0;
-	}
-
-	if (currsong==NULL)
-	{
-		CONS_Printf("Not a valid mid file : %d\n",e);
-		return 0;
-	}
-
-	return 1;
-}
-
-void I_UnloadSong(void)
-{
-	handle = 0;
-	if (midi_disabled)
-		return;
-
-	//destroy_midi(currsong);
-}
-
-boolean I_PlaySong(boolean looping)
-{
-	handle = 0;
-	if (midi_disabled)
-		return false;
-
-	islooping = looping;
-	musicdies = gametic + NEWTICRATE*30;
-	if (play_midi(currsong,looping)==0)
-		return true;
-	return false;
-}
-
-void I_StopSong(void)
-{
-	handle = 0;
-	if (midi_disabled)
-		return;
-
-	islooping = 0;
-	musicdies = 0;
-	stop_midi();
-	songpaused = false;
-}
-
-void I_PauseSong (INT32 handle)
-{
-	handle = 0;
-	if (midi_disabled)
-		return;
-	midi_pause();
-	songpaused = true;
-}
-
-void I_ResumeSong (INT32 handle)
-{
-	handle = 0;
-	if (midi_disabled)
-		return;
-	midi_resume();
-	songpaused = false;
-}
-
-
-void I_SetMusicVolume(INT32 volume)
-{
-	if (midi_disabled)
-		return;
-
-	// Now set volume on output device.
-	set_volume (-1, Volset(volume));
-}
-
-boolean I_SetSongTrack(INT32 track)
-{
-	(void)track;
-	return false;
-}
-
-// Is the song playing?
-#if 0
-int I_QrySongPlaying(int handle)
-{
-	if (midi_disabled)
-		return 0;
-
-	//return islooping || musicdies > gametic;
-	return (midi_pos==-1);
-}
-#endif
-
-/// ------------------------
-// MUSIC FADING
-/// ------------------------
-
-void I_SetInternalMusicVolume(UINT8 volume)
-{
-	(void)volume;
-}
-
-void I_StopFadingSong(void)
-{
-}
-
-boolean I_FadeSongFromVolume(UINT8 target_volume, UINT8 source_volume, UINT32 ms, void (*callback)(void));
-{
-	(void)target_volume;
-	(void)source_volume;
-	(void)ms;
-	return false;
-}
-
-boolean I_FadeSong(UINT8 target_volume, UINT32 ms, void (*callback)(void));
-{
-	(void)target_volume;
-	(void)ms;
-	return false;
-}
-
-boolean I_FadeOutStopSong(UINT32 ms)
-{
-	(void)ms;
-	return false;
-}
-
-boolean I_FadeInPlaySong(UINT32 ms, boolean looping)
-{
-        (void)ms;
-        (void)looping;
-        return false;
-}
diff --git a/src/djgppdos/i_system.c b/src/djgppdos/i_system.c
deleted file mode 100644
index 9f6972fa67..0000000000
--- a/src/djgppdos/i_system.c
+++ /dev/null
@@ -1,1772 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1993-1996 by id Software, Inc.
-// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief Misc. stuff
-///
-///	Startup & Shutdown routines for music,sound,timer,keyboard,
-///	Signal handler to trap errors and exit cleanly.
-
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <io.h>
-#include <stdarg.h>
-#include <sys/time.h>
-#include <fcntl.h>
-
-#ifdef DJGPP
- #include <dpmi.h>
- #include <go32.h>
- #include <pc.h>
- #include <dos.h>
- #include <crt0.h>
- #include <sys/segments.h>
- #include <sys/nearptr.h>
-
- #include <keys.h>
-#endif
-
-
-#include "../doomdef.h"
-#include "../m_misc.h"
-#include "../i_video.h"
-#include "../i_sound.h"
-#include "../i_system.h"
-#include "../d_net.h"
-#include "../g_game.h"
-
-#include "../d_main.h"
-
-#include "../m_argv.h"
-
-#include "../w_wad.h"
-#include "../z_zone.h"
-#include "../g_input.h"
-
-#include "../console.h"
-
-#include "../m_menu.h"
-
-#ifdef __GNUG__
- #pragma implementation "../i_system.h"
-#endif
-
-#include "../i_joy.h"
-
-//### let's try with Allegro ###
-#define  alleg_mouse_unused
-//#define  alleg_timer_unused
-#define  alleg_keyboard_unused
-#define  ALLEGRO_NO_KEY_DEFINES
-//#define  alleg_joystick_unused
-#define  alleg_gfx_driver_unused
-#define  alleg_palette_unused
-#define  alleg_graphics_unused
-#define  alleg_vidmem_unused
-#define  alleg_flic_unused
-#define  alleg_sound_unused
-#define  alleg_file_unused
-#define  alleg_datafile_unused
-#define  alleg_math_unused
-#define  alleg_gui_unused
-#include <allegro.h>
-//### end of Allegro include ###
-
-#ifndef DOXYGEN
-
-#ifndef MAX_JOYSTICKS
-#define MAX_JOYSTICKS 4
-#endif
-
-#ifndef MAX_JOYSTICK_AXIS
-#define MAX_JOYSTICK_AXIS 3
-#endif
-
-#ifndef MAX_JOYSTICK_STICKS
-#define MAX_JOYSTICK_STICKS 4
-#endif
-
-#ifndef MAX_JOYSTICK_BUTTONS
-#define MAX_JOYSTICK_BUTTONS 12
-#endif
-
-#endif
-
-#if ALLEGRO_VERSION == 4
-static char JOYFILE[] = "allegro4.cfg";
-#elif ALLEGRO_VERSION == 3
-static char JOYFILE[] = "allegro.cfg";
-#endif
-
-/// \brief max number of joystick buttons
-#define JOYBUTTONS_MAX MAX_JOYSTICK_BUTTONS // <allegro/joystick.h>
-/// \brief max number of joystick button events
-#define JOYBUTTONS_MIN min((JOYBUTTONS),(JOYBUTTONS_MAX))
-
-/// \brief max number of joysick axies
-#define JOYAXISSET_MAX MAX_JOYSTICK_STICKS
-// \brief max number ofjoystick axis events
-#define JOYAXISSET_MIN min((JOYAXISSET),(JOYAXISSET_MAX))
-
-/// \brief max number of joystick hats
-#define JOYHATS_MAX MAX_JOYSTICK_STICKS
-/// \brief max number of joystick hat events
-#define JOYHATS_MIN min((JOYHATS),(JOYHATS_MAX))
-
-/// \brief max number of mouse buttons
-#define MOUSEBUTTONS_MAX 16 // 16 bit of BL
-/// \brief max number of muse button events
-#define MOUSEBUTTONS_MIN min((MOUSEBUTTONS),(MOUSEBUTTONS_MAX))
-
-// Do not execute cleanup code more than once. See Shutdown_xxx() routines.
-UINT8 graphics_started = false;
-UINT8 keyboard_started = false;
-UINT8 sound_started    = false;
-static UINT8 timer_started    = false;
-
-/* Mouse stuff */
-static UINT8 mouse_detected   = false;
-static UINT8 wheel_detected   = false;
-
-static volatile tic_t ticcount;   //returned by I_GetTime(), updated by timer interrupt
-
-
-void I_Tactile(FFType Type, const JoyFF_t *Effect)
-{
-	// UNUSED.
-	Type = EvilForce;
-	Effect = NULL;
-}
-
-void I_Tactile2(FFType Type, const JoyFF_t *Effect)
-{
-	// UNUSED.
-	Type = EvilForce;
-	Effect = NULL;
-}
-
-static ticcmd_t        emptycmd;
-ticcmd_t *      I_BaseTiccmd(void)
-{
-	return &emptycmd;
-}
-
-static ticcmd_t        emptycmd2;
-ticcmd_t *      I_BaseTiccmd2(void)
-{
-	return &emptycmd2;
-}
-
-void I_SetupMumble(void)
-{
-}
-
-#ifndef NOMUMBLE
-void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
-{
-	(void)mobj;
-	(void)listener;
-}
-#endif
-
-//
-//  Allocates the base zone memory,
-//  this function returns a valid pointer and size,
-//  else it should interrupt the program immediately.
-//
-//added:11-02-98: now checks if mem could be allocated, this is still
-//    prehistoric... there's a lot to do here: memory locking, detection
-//    of win95 etc...
-//
-
-#if ALLEGRO_VERSION == 3
-extern int os_type;
-extern int windows_version;
-extern int windows_sub_version;
-extern int i_love_bill;
-#elif ALLEGRO_VERSION == 4
-#endif
-
-static void I_DetectOS (void)
-{
-#if ALLEGRO_VERSION == 3
-	char buf[16];
-	__dpmi_regs r;
-	union REGS regs;
-
-	/* check which OS we are running under */
-	r.x.ax = 0x1600;
-	__dpmi_int(0x2F, &r);
-	if ((r.h.al != 0) && (r.h.al != 1) && (r.h.al != 0x80) && (r.h.al != 0xFF))
-	{
-		/* win 3.1 or 95 */
-		if (r.h.al == 4)
-		{
-			if (r.h.ah < 10)
-			{
-				os_type = OSTYPE_WIN95;
-			}
-			else
-			{
-				os_type = OSTYPE_WIN98;
-			}
-		}
-		else
-		{
-			os_type = OSTYPE_WIN3;
-		}
-
-		windows_version = r.h.al;
-		windows_sub_version = r.h.ah;
-		i_love_bill = TRUE;
-	}
-	else
-	{
-		if (_get_dos_version(1) == 0x0532)
-		{
-			/* win NT */
-			os_type = OSTYPE_WINNT;
-			windows_version = 0x100;
-			windows_sub_version = 0;
-			i_love_bill = TRUE;
-		}
-		else
-		{
-			/* see if OS/2 is present */
-			r.x.ax = 0x4010;
-			__dpmi_int(0x2F, &r);
-			if (r.x.ax != 0x4010)
-			{
-				if (r.x.ax == 0x0000)
-				{
-					/* OS/2 Warp 3 */
-					os_type = OSTYPE_WARP;
-					i_love_bill = TRUE;
-				}
-				else
-				{
-					/* no Warp, but previous OS/2 is available */
-					os_type = OSTYPE_OS2;
-					i_love_bill = TRUE;
-				}
-			}
-			else
-			{
-				/* check if running under Linux DOSEMU */
-				dosmemget(0xFFFF5, 10, buf);
-				buf[8] = 0;
-				if (!strcmp(buf, "02/25/93"))
-				{
-					regs.x.ax = 0;
-					int86(0xE6, &regs, &regs);
-					if (regs.x.ax == 0xAA55)
-					{
-						os_type = OSTYPE_DOSEMU;
-						windows_version = -1;
-						windows_sub_version = -1;
-						i_love_bill = TRUE;     /* (evil chortle) */
-					}
-				}
-				else
-				{
-					/* check if running under OpenDOS */
-					r.x.ax = 0x4452;
-					__dpmi_int(0x21, &r);
-					if ((r.x.ax >= 0x1072) && !(r.x.flags & 1))
-					{
-						os_type = OSTYPE_OPENDOS;
-						/* now check for OpenDOS EMM386.EXE */
-						r.x.ax = 0x12FF;
-						r.x.bx = 0x0106;
-						__dpmi_int(0x2F, &r);
-						if ((r.x.ax == 0x0) && (r.x.bx == 0xEDC0))
-						{
-							i_love_bill = TRUE;
-						}
-					}
-				}
-			}
-		}
-	}
-#elif ALLEGRO_VERSION == 4
-/// \todo: add Allegro 4 version
-#endif
-}
-
-UINT32 I_GetFreeMem(UINT32 *total)
-{
-	__dpmi_free_mem_info     info;
-
-	__dpmi_get_free_memory_information(&info);
-	if ( total )
-		*total = info.total_number_of_physical_pages<<12; // <<12 for convert page to byte
-	return info.total_number_of_free_pages<<12;
-}
-
-
-/*==========================================================================*/
-// I_GetTime ()
-/*==========================================================================*/
-tic_t I_GetTime (void)
-{
-	return ticcount;
-}
-
-
-void I_Sleep(void)
-{
-	if (cv_sleep.value > 0)
-		rest(cv_sleep.value);
-}
-
-
-static UINT8 joystick_detected = false;
-static UINT8 joystick2_detected = false;
-
-//
-// I_Init
-//
-
-
-FUNCINLINE static ATTRINLINE int I_WaitJoyButton (int js)
-{
-	CON_Drawer ();
-	I_FinishUpdate ();        // page flip or blit buffer
-
-	do
-	{
-		if (I_GetKey())
-			return false;
-		poll_joystick();
-	} while (!(joy[js].button[0].b || joy[js].button[1].b));
-
-	return true;
-}
-
-/**	\brief Joystick 1 buttons states
-*/
-static INT64 lastjoybuttons = 0;
-/**	\brief Joystick 1 hats state
-*/
-static INT64 lastjoyhats = 0;
-
-void I_InitJoystick (void)
-{
-	//init the joystick
-	if (joystick_detected && !joystick2_detected)
-		remove_joystick();
-	joystick_detected=0;
-	if (M_CheckParm("-nojoy"))
-		return;
-	load_joystick_data(JOYFILE);
-	if (cv_usejoystick.value)
-	{
-		if (cv_usejoystick.value > MAX_JOYSTICKS)
-			cv_usejoystick.value = MAX_JOYSTICKS;
-		if (install_joystick(JOY_TYPE_AUTODETECT) == 0)
-		{
-			int js = cv_usejoystick.value -1;
-			// only gamepadstyle joysticks
-			if (joy[js].stick[0].flags & JOYFLAG_DIGITAL) Joystick.bGamepadStyle=true;
-
-			while (joy[js].flags & JOYFLAG_CALIBRATE)
-			{
-				const char *msg = calibrate_joystick_name(js);
-				CONS_Printf("%s, and press a button\n", msg);
-				if (I_WaitJoyButton(js))
-					calibrate_joystick(js);
-				else
-				{
-					if (joystick_detected && !joystick2_detected)
-						remove_joystick();
-					joystick_detected=0;
-					CV_SetValue(&cv_usejoystick, 0);
-					return;
-				}
-			}
-			joystick_detected=1;
-			save_joystick_data(JOYFILE);
-		}
-		else
-		{
-			CONS_Printf("\2No Joystick detected.\n");
-		}
-	}
-	else
-	{
-		int i;
-		event_t event;
-		event.type=ev_keyup;
-		event.data2 = 0;
-		event.data3 = 0;
-
-		lastjoybuttons = lastjoyhats = 0;
-
-		// emulate the up of all joystick buttons
-		for (i=0;i<JOYBUTTONS;i++)
-		{
-			event.data1=KEY_JOY1+i;
-			D_PostEvent(&event);
-		}
-
-		// emulate the up of all joystick hats
-		for (i=0;i<JOYHATS*4;i++)
-		{
-			event.data1=KEY_HAT1+i;
-			D_PostEvent(&event);
-		}
-
-		// reset joystick position
-		event.type = ev_joystick;
-		for (i=0;i<JOYAXISSET; i++)
-		{
-			event.data1 = i;
-			D_PostEvent(&event);
-		}
-	}
-}
-
-/**	\brief Joystick 2 buttons states
-*/
-static INT64 lastjoy2buttons = 0;
-/**	\brief Joystick 2 hats state
-*/
-static INT64 lastjoy2hats = 0;
-
-void I_InitJoystick2 (void)
-{
-	//init the joystick
-	if (joystick2_detected && !joystick_detected)
-		remove_joystick();
-	joystick2_detected=0;
-	if (M_CheckParm("-nojoy"))
-		return;
-	if (cv_usejoystick2.value)
-	{
-		if (cv_usejoystick2.value > MAX_JOYSTICKS)
-			cv_usejoystick2.value = MAX_JOYSTICKS;
-		if (install_joystick(JOY_TYPE_AUTODETECT) == 0)
-		{
-			int js = cv_usejoystick2.value -1;
-			// only gamepadstyle joysticks
-			load_joystick_data(JOYFILE);
-			if (joy[js].stick[0].flags & JOYFLAG_DIGITAL) Joystick2.bGamepadStyle=true;
-
-			while (joy[js].flags & JOYFLAG_CALIBRATE)
-			{
-				const char *msg = calibrate_joystick_name(js);
-				CONS_Printf("%s, and press a button\n", msg);
-				if (I_WaitJoyButton(js))
-					calibrate_joystick(js);
-				else
-				{
-					if (joystick2_detected && !joystick_detected)
-						remove_joystick();
-					joystick2_detected=0;
-					CV_SetValue(&cv_usejoystick2, 0);
-					return;
-				}
-			}
-			joystick2_detected=1;
-			save_joystick_data(JOYFILE);
-		}
-		else
-		{
-			CONS_Printf("\2No Joystick detected.\n");
-		}
-	}
-	else
-	{
-		int i;
-		event_t event;
-		event.type=ev_keyup;
-		event.data2 = 0;
-		event.data3 = 0;
-
-		lastjoy2buttons = lastjoy2hats = 0;
-
-		// emulate the up of all joystick buttons
-		for (i=0;i<JOYBUTTONS;i++)
-		{
-			event.data1=KEY_2JOY1+i;
-			D_PostEvent(&event);
-		}
-
-		// emulate the up of all joystick hats
-		for (i=0;i<JOYHATS*4;i++)
-		{
-			event.data1=KEY_2HAT1+i;
-			D_PostEvent(&event);
-		}
-
-		// reset joystick position
-		event.type = ev_joystick2;
-		for (i=0;i<JOYAXISSET; i++)
-		{
-			event.data1 = i;
-			D_PostEvent(&event);
-		}
-	}
-}
-
-//added:18-02-98: put an error message (with format) on stderr
-void I_OutputMsg (const char *error, ...)
-{
-	va_list     argptr;
-
-	va_start (argptr,error);
-	vfprintf (stderr,error,argptr);
-	va_end (argptr);
-
-	// dont flush the message!
-}
-
-static int errorcount=0; // fuck recursive errors
-static int shutdowning=false;
-
-//
-// I_Error
-//
-//added 31-12-97 : display error messy after shutdowngfx
-void I_Error (const char *error, ...)
-{
-	va_list     argptr;
-	// added 11-2-98 recursive error detecting
-
-	M_SaveConfig (NULL);   //save game config, cvars..
-#ifndef NONET
-	D_SaveBan(); // save the ban list
-#endif
-	G_SaveGameData(); // Tails 12-08-2002
-	if (demorecording)
-		G_CheckDemoStatus();
-	D_QuitNetGame ();
-	M_FreePlayerSetupColors();
-
-	if (shutdowning)
-	{
-		errorcount++;
-		if (errorcount==5)
-			I_ShutdownGraphics();
-		if (errorcount==6)
-			I_ShutdownSystem();
-		if (errorcount>7)
-			exit(-1);       // recursive errors detected
-	}
-	shutdowning=true;
-
-	//added:18-02-98: save one time is enough!
-	if (!errorcount)
-	{
-		M_SaveConfig (NULL);   //save game config, cvars..
-		G_SaveGameData(); // Tails 12-08-2002
-	}
-
-	//added:16-02-98: save demo, could be useful for debug
-	//                NOTE: demos are normally not saved here.
-	I_ShutdownMusic();
-	I_ShutdownSound();
-	I_ShutdownCD();
-	I_ShutdownGraphics();
-	I_ShutdownSystem();
-
-	// put message to stderr
-	va_start (argptr,error);
-	fprintf (stderr, "Error: ");
-	vfprintf (stderr,error,argptr);
-#ifdef DEBUGFILE
-	if (debugfile)
-	{
-		fprintf (debugfile,"I_Error :");
-		vfprintf (debugfile,error,argptr);
-	}
-#endif
-
-	va_end (argptr);
-
-	fprintf (stderr, "\nPress ENTER");
-	fflush( stderr );
-	getchar();
-	W_Shutdown();
-	exit(-1);
-}
-
-
-//
-// I_Quit : shutdown everything cleanly, in reverse order of Startup.
-//
-void I_Quit (void)
-{
-	UINT8 *endoom = NULL;
-
-	//added:16-02-98: when recording a demo, should exit using 'q' key,
-	//        but sometimes we forget and use 'F10'.. so save here too.
-	M_SaveConfig (NULL);   //save game config, cvars..
-#ifndef NONET
-	D_SaveBan(); // save the ban list
-#endif
-	G_SaveGameData(); // Tails 12-08-2002
-	if (demorecording)
-		G_CheckDemoStatus();
-	D_QuitNetGame ();
-	M_FreePlayerSetupColors();
-	I_ShutdownMusic();
-	I_ShutdownSound();
-	I_ShutdownCD();
-	I_ShutdownGraphics();
-	I_ShutdownSystem();
-
-	if (W_CheckNumForName("ENDOOM")!=LUMPERROR) endoom = W_CacheLumpName("ENDOOM",PU_CACHE);
-
-
-	//added:03-01-98: maybe it needs that the ticcount continues,
-	// or something else that will be finished by ShutdownSystem()
-	// so I do it before.
-
-	if (endoom)
-	{
-		puttext(1,1,80,25,endoom);
-		gotoxy(1,24);
-		Z_Free(endoom);
-	}
-
-	if (shutdowning || errorcount)
-		I_Error("Error detected (%d)",errorcount);
-
-	fflush(stderr);
-	W_Shutdown();
-	exit(0);
-}
-
-
-//added:12-02-98: does want to work!!!! rhaaahahha
-void I_WaitVBL(INT32 count)
-{
-	while (count-->0);
-	{
-		do { } while (inportb(0x3DA) & 8);
-		do { } while (!(inportb(0x3DA) & 8));
-	}
-}
-
-//  Fab: this is probably to activate the 'loading' disc icon
-//       it should set a flag, that I_FinishUpdate uses to know
-//       whether it draws a small 'loading' disc icon on the screen or not
-//
-//  also it should explicitly draw the disc because the screen is
-//  possibly not refreshed while loading
-//
-void I_BeginRead (void)
-{
-}
-
-//  Fab: see above, end the 'loading' disc icon, set the flag false
-//
-void I_EndRead (void)
-{
-}
-
-#define MOUSE2
-/* Secondary Mouse*/
-#ifdef MOUSE2
-static _go32_dpmi_seginfo oldmouseinfo,newmouseinfo;
-static boolean mouse2_started=0;
-static UINT16  mouse2port;
-static UINT8   mouse2irq;
-static volatile int     handlermouse2buttons;
-static volatile int     handlermouse2x,handlermouse2y;
-// internal use
-static volatile int     bytenum;
-static volatile UINT8   combytes[8];
-
-//
-// support a secondary mouse without mouse driver !
-//
-// take from the PC-GPE by Mark Feldman
-static void I_MicrosoftMouseIntHandler(void)
-{
-	char   dx,dy;
-	UINT8  inbyte;
-
-	// Get the port byte
-	inbyte = inportb(mouse2port);
-
-	// Make sure we are properly "synched"
-	if ((inbyte & 64)== 64 || bytenum>7)
-		bytenum = 0;
-
-	// Store the byte and adjust bytenum
-	combytes[bytenum] = inbyte;
-	bytenum++;
-
-	// Have we received all 3 bytes?
-	if (bytenum==3)
-	{
-		// Yes, so process them
-		dx = ((combytes[0] & 3) << 6) + combytes[1];
-		dy = ((combytes[0] & 12) << 4) + combytes[2];
-		handlermouse2x+= dx;
-		handlermouse2y+= dy;
-		handlermouse2buttons = (combytes[0] & (32+16)) >>4;
-	}
-	else if (bytenum==4) // for logitech 3 buttons
-	{
-		if (combytes[3] & 32)
-			handlermouse2buttons |= 4;
-		else
-			handlermouse2buttons &= ~4;
-	}
-
-	// Acknowledge the interrupt
-	outportb(0x20,0x20);
-}
-#ifndef DOXYGEN
-static END_OF_FUNCTION(I_MicrosoftMouseIntHandler);
-#endif
-
-// wait ms milliseconde
-FUNCINLINE static ATTRINLINE void I_Delay(int ms)
-{
-	tic_t  starttime;
-
-	if (timer_started)
-	{
-		starttime=I_GetTime()+(NEWTICRATE*ms)/1000;
-		while (starttime>=I_GetTime())
-			I_Sleep();
-	}
-	else
-		delay(ms);
-}
-
-//
-//  Removes the mouse2 handler.
-//
-static void I_ShutdownMouse2(void)
-{
-	event_t event;
-	int i;
-
-	if ( !mouse2_started )
-		return;
-
-	outportb(mouse2port+4,0x00);   // shutdown mouse (DTR & RTS = 0)
-	I_Delay(1);
-	outportb(mouse2port+1,0x00);   // disable COM interuption
-
-	asm("cli");
-	_go32_dpmi_set_protected_mode_interrupt_vector(mouse2irq, &oldmouseinfo);
-	_go32_dpmi_free_iret_wrapper(&newmouseinfo);
-	asm("sti");
-
-	handlermouse2x=handlermouse2y=handlermouse2buttons=0;
-	// emulate the up of all mouse buttons
-	for (i=0;i<MOUSEBUTTONS;i++)
-	{
-		event.type=ev_keyup;
-		event.data1=KEY_2MOUSE1+i;
-		D_PostEvent(&event);
-	}
-
-	mouse2_started=false;
-}
-
-static UINT8  ComIrq[4]={0x0c,0x0b,0x0c,0x0b};
-static UINT16 ComPort[4]={0x3F8,0x2F8,0x3E8,0x2E8};
-//
-//  Installs the mouse2 handler.
-//
-void I_StartupMouse2(void)
-{
-	tic_t i;
-	boolean  found;
-	__dpmi_regs r;
-
-	if ( mouse2_started )
-		I_ShutdownMouse2();
-
-	if (!cv_usemouse2.value)
-		return;
-
-	handlermouse2x=handlermouse2y=handlermouse2buttons=0;
-
-	mouse2irq =ComIrq[cv_mouse2port.value-1];
-	mouse2port=ComPort[cv_mouse2port.value-1];
-	CONS_Printf("Using %s (irq %d, port 0x%x)\n",cv_mouse2port.string,mouse2irq-8,mouse2port);
-	r.x.ax=0x24;
-	__dpmi_int(0x33,&r);
-	if (r.h.cl+8==mouse2irq)
-	{
-		CONS_Printf("Irq conflict with mouse 1\n"
-					"Use mouse2port to change the port\n");
-		return;
-	}
-
-	// install irq wrapper
-	asm("cli");
-	_go32_dpmi_get_protected_mode_interrupt_vector(mouse2irq, &oldmouseinfo);
-	newmouseinfo.pm_selector=_go32_my_cs();
-	newmouseinfo.pm_offset=(int)I_MicrosoftMouseIntHandler;
-	_go32_dpmi_allocate_iret_wrapper(&newmouseinfo);
-	_go32_dpmi_set_protected_mode_interrupt_vector(mouse2irq, &newmouseinfo);
-
-	LOCK_VARIABLE(bytenum);
-	LOCK_VARIABLE(handlermouse2x);
-	LOCK_VARIABLE(handlermouse2y);
-	LOCK_VARIABLE(handlermouse2buttons);
-	LOCK_VARIABLE(mouse2port);
-	_go32_dpmi_lock_data(&combytes,sizeof (combytes));
-	LOCK_FUNCTION(I_MicrosoftMouseIntHandler);
-	asm("sti");
-
-	outportb(mouse2port+4,0   );   // shutdown mouse (DTR & RTS = 0)
-	I_Delay(1);
-	outportb(mouse2port+1,0   );   // disable COM interuption
-	I_Delay(1);
-	outportb(mouse2port+3,0x80);   // change status of port +0 et +1
-	I_Delay(1);                    // for baudrate programmation
-	outportb(mouse2port  ,0x60);   // 1200 LSB
-	I_Delay(1);
-	outportb(mouse2port+1,0   );   // 1200 MSB
-	I_Delay(1);
-	outportb(mouse2port+3,0x02);   // set port protocol 7N1
-	I_Delay(1);
-	outportb(mouse2port+1,0x01);   // enable COM interuption
-	I_Delay(1);
-	outportb(0x21,0x0);
-
-	// wait to be sure the mouse have shutdown
-	I_Delay(100);
-
-	outportb(mouse2port+4,0x0b);   // restart mouse
-	i=I_GetTime()+NEWTICRATE;
-	found=cv_usemouse2.value==2;
-	while (I_GetTime()<i || !found)
-		if (combytes[0]!='M')
-			found=true;
-
-	if (found || cv_usemouse2.value==2)
-	{
-		CONS_Printf("Microsoft compatible Secondary Mouse detected\n");
-
-		//register shutdown mouse2 code.
-		I_AddExitFunc(I_ShutdownMouse2);
-		mouse2_started = true;
-	}
-	else
-	{
-		CONS_Printf("Secondary Mouse not found\n");
-		// remove irq wraper
-		I_ShutdownMouse2();
-	}
-}
-#endif
-
-//  Initialise the mouse. Doesnt need to be shutdown.
-//
-void I_StartupMouse (void)
-{
-	__dpmi_regs r;
-
-	// mouse detection may be skipped by setting usemouse false
-	if (cv_usemouse.value == 0)
-	{
-		mouse_detected=false;
-		I_ShutdownMouse2();
-		return;
-	}
-
-	//detect mouse presence
-	r.x.ax=0;
-	__dpmi_int(0x33,&r);
-
-	//added:03-01-98:
-	if ( r.x.ax == 0 && cv_usemouse.value != 2)
-	{
-		mouse_detected=false;
-		CONS_Printf("\2I_StartupMouse: mouse not present.\n");
-	}
-	else
-	{
-		mouse_detected=true;
-
-		// Check for CTMOUSE wheel
-		r.x.ax = 0x11;
-		__dpmi_int(0x33,&r);
-		if ( r.x.ax == 0x574D && r.x.cx & 0x1) // check for "MW" in AX and wheel mouse in CX
-		{
-			wheel_detected=true;
-		}
-
-		//hide cursor
-		r.x.ax=0x02;
-		__dpmi_int(0x33,&r);
-
-		//reset mickey count
-		r.x.ax=0x0b;
-		__dpmi_int(0x33,&r);
-	}
-}
-
-void I_GetJoystickEvents(void)
-{
-	event_t event;
-	INT64 joybuttons = 0;
-	INT64 joyhats = 0;
-	int s = 0, i;
-	int js = cv_usejoystick.value - 1;
-
-	if (!joystick_detected)
-		return;
-
-	// I assume that true is 1
-	for (i = JOYBUTTONS_MIN - 1; i >= 0; i--)
-	{
-		joybuttons <<= 1;
-		if (joy[js].button[i].b)
-			joybuttons |= 1;
-	}
-
-	for (i = JOYHATS_MIN -1; i >=0;)
-	{
-		if (joy[js].stick[s].flags &  JOYFLAG_DIGITAL)
-		{
-			if (joy[js].stick[s].axis[1].d1) joyhats |= 1<<(0 + 4*i);
-			if (joy[js].stick[s].axis[1].d2) joyhats |= 1<<(1 + 4*i);
-			if (joy[js].stick[s].axis[0].d1) joyhats |= 1<<(2 + 4*i);
-			if (joy[js].stick[s].axis[0].d2) joyhats |= 1<<(3 + 4*i);
-			i--;
-		}
-		if (s == JOYHATS_MAX) i = -1;
-		s++;
-	}
-
-	// post key event for buttons
-	if (joybuttons!=lastjoybuttons)
-	{
-		INT64 j = 1; // only changed bit to 1
-		INT64 k = (joybuttons ^ lastjoybuttons);
-		lastjoybuttons=joybuttons;
-
-		for (i=0;i<JOYBUTTONS && i<JOYBUTTONS_MAX;i++,j<<=1)
-			if (k & j)          // test the eatch bit and post the corresponding event
-			{
-				if (joybuttons & j)
-					event.type=ev_keydown;
-				else
-					event.type=ev_keyup;
-				event.data1=KEY_JOY1+i;
-				D_PostEvent(&event);
-			}
-	}
-
-	// post key event for hats
-	if (joyhats!=lastjoyhats)
-	{
-		INT64 j = 1; // only changed bit to 1
-		INT64 k = (joyhats ^ lastjoyhats);
-		lastjoyhats=joyhats;
-
-		for (i=0;i<JOYHATS && i<JOYHATS_MAX;i++,j<<=1)
-			if (k & j)          // test the eatch bit and post the corresponding event
-			{
-				if (joyhats & j)
-					event.type=ev_keydown;
-				else
-					event.type=ev_keyup;
-				event.data1=KEY_HAT1+i;
-				D_PostEvent(&event);
-			}
-	}
-
-	event.type=ev_joystick;
-	s = 0;
-
-	for (i = JOYAXISSET_MIN -1; i >=0;)
-	{
-		event.data1 = i;
-		event.data2 = event.data3 = 0;
-		if (joy[js].stick[s].flags &  JOYFLAG_DIGITAL)
-		{
-			if (joy[js].stick[s].axis[0].d1)
-				event.data2=-1;
-			if (joy[js].stick[s].axis[0].d2)
-				event.data2=1;
-			if (joy[js].stick[s].axis[1].d1)
-				event.data3=-1;
-			if (joy[js].stick[s].axis[1].d2)
-				event.data3=1;
-			D_PostEvent(&event);
-			i++;
-		}
-		else if (joy[js].stick[s].flags &  JOYFLAG_ANALOGUE)
-		{
-			event.data2 = joy[js].stick[s].axis[0].pos*32;
-			event.data3 = joy[js].stick[s].axis[1].pos*32;
-			D_PostEvent(&event);
-			i++;
-		}
-		if (s == JOYAXISSET_MAX*2) i = -1;
-		s++;
-	}
-}
-
-void I_GetJoystick2Events(void)
-{
-	event_t event;
-	INT64 joybuttons= 0;
-	INT64 joyhats = 0;
-	int s = 0, i;
-	int js = cv_usejoystick2.value - 1;
-
-	if (!joystick2_detected)
-		return;
-
-	// I assume that true is 1
-	for (i = JOYBUTTONS_MIN - 1; i >= 0; i--)
-	{
-		joybuttons <<= 1;
-		if (joy[js].button[i].b)
-			joybuttons |= 1;
-	}
-
-	for (i = JOYHATS_MIN -1; i >=0;)
-	{
-		if (joy[js].stick[s].flags &  JOYFLAG_DIGITAL)
-		{
-			if (joy[js].stick[s].axis[1].d1) joyhats |= 1<<(0 + 4*i);
-			if (joy[js].stick[s].axis[1].d2) joyhats |= 1<<(1 + 4*i);
-			if (joy[js].stick[s].axis[0].d1) joyhats |= 1<<(2 + 4*i);
-			if (joy[js].stick[s].axis[0].d2) joyhats |= 1<<(3 + 4*i);
-			i--;
-		}
-		if (s == JOYHATS_MAX) i = -1;
-		s++;
-	}
-
-	// post key event for buttons
-	if (joybuttons!=lastjoy2buttons)
-	{
-		INT64 j = 1; // only changed bit to 1
-		INT64 k = (joybuttons ^ lastjoy2buttons);
-		lastjoy2buttons=joybuttons;
-
-		for (i=0;i<JOYBUTTONS && i<JOYBUTTONS_MAX;i++,j<<=1)
-			if (k & j)          // test the eatch bit and post the corresponding event
-			{
-				if (joybuttons & j)
-					event.type=ev_keydown;
-				else
-					event.type=ev_keyup;
-				event.data1=KEY_2JOY1+i;
-				D_PostEvent(&event);
-			}
-	}
-
-	// post key event for hats
-	if (joyhats!=lastjoy2hats)
-	{
-		INT64 j=1; // only changed bit to 1
-		INT64 k = (joyhats ^ lastjoy2hats);
-		lastjoy2hats=joyhats;
-
-		for (i=0;i<JOYHATS && i<JOYHATS_MAX;i++,j<<=1)
-			if (k & j)          // test the eatch bit and post the corresponding event
-			{
-				if (joyhats & j)
-					event.type=ev_keydown;
-				else
-					event.type=ev_keyup;
-				event.data1=KEY_2HAT1+i;
-				D_PostEvent(&event);
-			}
-	}
-
-	event.type=ev_joystick2;
-	s = 0;
-
-	for (i = JOYAXISSET_MIN - 1; i >=0;)
-	{
-		event.data1 = i;
-		event.data2 = event.data3 = 0;
-		if (joy[js].stick[s].flags &  JOYFLAG_DIGITAL)
-		{
-			if (joy[js].stick[s].axis[0].d1)
-				event.data2=-1;
-			if (joy[js].stick[s].axis[0].d2)
-				event.data2=1;
-			if (joy[js].stick[s].axis[1].d1)
-				event.data3=-1;
-			if (joy[js].stick[s].axis[1].d2)
-				event.data3=1;
-			D_PostEvent(&event);
-			i++;
-		}
-		else if (joy[js].stick[s].flags &  JOYFLAG_ANALOGUE)
-		{
-			event.data2 = joy[js].stick[s].axis[0].pos*32;
-			event.data3 = joy[js].stick[s].axis[1].pos*32;
-			D_PostEvent(&event);
-			i++;
-		}
-		if (s == JOYAXISSET_MAX*2) i = -1;
-		s++;
-	}
-}
-
-void I_GetMouseEvents(void)
-{
-	//mouse movement
-	event_t event;
-	int xmickeys,ymickeys,buttons,wheels = 0;
-	static int lastbuttons=0;
-	__dpmi_regs r;
-
-	if (!mouse_detected)
-		return;
-
-	r.x.ax=0x0b;           // ask the mouvement not the position
-	__dpmi_int(0x33,&r);
-	xmickeys=(INT16)r.x.cx;
-	ymickeys=(INT16)r.x.dx;
-	r.x.ax=0x03;
-	__dpmi_int(0x33,&r);
-	buttons=r.h.bl;
-	if (wheel_detected)
-		wheels=(signed char)r.h.bh;
-
-	// post key event for buttons
-	if (buttons!=lastbuttons)
-	{
-		int j=1,k,i;
-		k=(buttons ^ lastbuttons); // only changed bit to 1
-		lastbuttons=buttons;
-
-		for (i=0;i<MOUSEBUTTONS;i++,j<<=1)
-			if (k & j)
-			{
-				if (buttons & j)
-					event.type=ev_keydown;
-				else
-					event.type=ev_keyup;
-				event.data1=KEY_MOUSE1+i;
-				D_PostEvent(&event);
-			}
-	}
-
-	event.type=ev_keyup;
-	event.data1 = 0;
-	if (wheels > 0)
-		event.data1 = KEY_MOUSEWHEELUP;
-	else if (wheels < 0)
-		event.data1 = KEY_MOUSEWHEELDOWN;
-	if (event.data1)
-			D_PostEvent(&event);
-
-
-	if ((xmickeys!=0)||(ymickeys!=0))
-	{
-		event.type=ev_mouse;
-		event.data1=0;
-		//event.data1=buttons;    // not needed
-		event.data2=xmickeys;
-		event.data3=-ymickeys;
-
-		D_PostEvent(&event);
-	}
-
-	//reset wheel like in win32, I don't understand it but works
-	gamekeydown[KEY_MOUSEWHEELDOWN] = gamekeydown[KEY_MOUSEWHEELUP] = 0;
-
-}
-
-void I_GetEvent (void)
-{
-#ifdef MOUSE2
-	// mouse may be disabled during the game by setting usemouse false
-	if (mouse2_started)
-	{
-		event_t event;
-		//mouse movement
-		static UINT8 lastbuttons2=0;
-
-		// post key event for buttons
-		if (handlermouse2buttons!=lastbuttons2)
-		{
-			int j=1,k,i;
-			k=(handlermouse2buttons ^ lastbuttons2); // only changed bit to 1
-			lastbuttons2=handlermouse2buttons;
-
-			for (i=0;i<MOUSEBUTTONS;i++,j<<=1)
-				if (k & j)
-				{
-					if (handlermouse2buttons & j)
-						event.type=ev_keydown;
-					else
-						event.type=ev_keyup;
-					event.data1=KEY_2MOUSE1+i;
-					D_PostEvent(&event);
-				}
-		}
-
-		if ((handlermouse2x!=0)||(handlermouse2y!=0))
-		{
-			event.type=ev_mouse2;
-			event.data1=0;
-			//event.data1=buttons;    // not needed
-			event.data2=handlermouse2x<<1;
-			event.data3=-handlermouse2y<<1;
-
-			D_PostEvent(&event);
-			handlermouse2x=0;
-			handlermouse2y=0;
-		}
-
-	}
-#endif
-
-	//mouse
-	I_GetMouseEvents();
-
-	//joystick
-	if (joystick_detected || joystick2_detected)
-		poll_joystick();
-
-	//joystick1
-	I_GetJoystickEvents();
-
-	//joystick2
-	I_GetJoystick2Events();
-}
-
-INT32 I_NumJoys(void)
-{
-	return MAX_JOYSTICKS;
-}
-
-const char *I_GetJoyName(INT32 joyindex)
-{
-#if MAX_JOYSTICKS > 8
-"More Joystick Names?"
-#endif
-
-	     if (joyindex == 1) return "Joystick A";
-	else if (joyindex == 2) return "Joystick B";
-	else if (joyindex == 3) return "Joystick C";
-	else if (joyindex == 4) return "Joystick D";
-	else if (joyindex == 5) return "Joystick E";
-	else if (joyindex == 6) return "Joystick F";
-	else if (joyindex == 7) return "Joystick G";
-	else if (joyindex == 8) return "Joystick H";
-	else return NULL;
-
-}
-
-//
-//  Timer user routine called at ticrate.
-//
-static void I_TimerISR (void)
-{
-	//  IO_PlayerInput();      // old doom did that
-	ticcount++;
-
-}
-#ifndef DOXYGEN
-static END_OF_FUNCTION(I_TimerISR);
-#endif
-
-
-//added:08-01-98: we don't use allegro_exit() so we have to do it ourselves.
-static inline void I_ShutdownTimer (void)
-{
-	if ( !timer_started )
-		return;
-	remove_timer();
-}
-
-
-//
-//  Installs the timer interrupt handler with timer speed as NEWTICRATE.
-//
-void I_StartupTimer(void)
-{
-	ticcount = 0;
-
-	//lock this from being swapped to disk! BEFORE INSTALLING
-	LOCK_VARIABLE(ticcount);
-	LOCK_FUNCTION(I_TimerISR);
-
-	if ( install_timer() != 0 )
-		I_Error("I_StartupTimer: could not install timer.");
-
-	if ( install_int_ex( I_TimerISR, BPS_TO_TIMER(NEWTICRATE) ) != 0 )
-		//should never happen since we use only one.
-		I_Error("I_StartupTimer: no room for callback routine.");
-
-	//added:08-01-98: remove the timer explicitly because we don't use
-	//                Allegro 's allegro_exit() shutdown code.
-	I_AddExitFunc(I_ShutdownTimer);
-	timer_started = true;
-}
-
-
-//added:07-02-98:
-//
-//
-static UINT8 ASCIINames[128] =
-{
-//        0           1              2            3
-//        4           5              6            7
-//        8           9              A            B
-//        C           D              E            F
-          0,         27,           '1',         '2',
-        '3',        '4',           '5',         '6',
-        '7',        '8',           '9',         '0',
-  KEY_MINUS, KEY_EQUALS, KEY_BACKSPACE,     KEY_TAB,
-        'q',        'w',           'e',        'r',
-        't',        'y',           'u',        'i',
-        'o',        'p',           '[',        ']',
-  KEY_ENTER,  KEY_LCTRL,           'a',        's',
-        'd',        'f',           'g',        'h',
-        'j',        'k',           'l',        ';',
-       '\'',        '`',    KEY_LSHIFT,       '\\',
-        'z',        'x',           'c',        'v',
-        'b',        'n',           'm',        ',',
-        '.',        '/',    KEY_RSHIFT,        '*',
-   KEY_LALT,  KEY_SPACE,  KEY_CAPSLOCK,     KEY_F1,
-     KEY_F2,     KEY_F3,        KEY_F4,     KEY_F5,
-     KEY_F6,     KEY_F7,        KEY_F8,     KEY_F9,
-    KEY_F10,KEY_NUMLOCK,KEY_SCROLLLOCK,KEY_KEYPAD7,
-KEY_KEYPAD8,KEY_KEYPAD9,  KEY_MINUSPAD,KEY_KEYPAD4,
-KEY_KEYPAD5,KEY_KEYPAD6,   KEY_PLUSPAD,KEY_KEYPAD1,
-KEY_KEYPAD2,KEY_KEYPAD3,   KEY_KEYPAD0,KEY_KPADDEL,
-          0,          0,             0,    KEY_F11,
-    KEY_F12,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0,
-          0,          0,             0,          0
-};
-
-static volatile int pausepressed=0;
-static volatile char nextkeyextended;
-
-static void I_KeyboardHandler(void)
-{
-	UINT8 ch;
-	event_t       event;
-
-	ch=inportb(0x60);
-
-	if (pausepressed>0)
-		pausepressed--;
-	else if (ch==0xE1) // pause key
-	{
-		event.type=ev_keydown;
-		event.data1=KEY_PAUSE;
-		D_PostEvent(&event);
-		pausepressed=5;
-	}
-	else if (ch==0xE0) // extended key handled at next call
-	{
-		nextkeyextended=1;
-	}
-	else
-	{
-		if ((ch&0x80)==0)
-			event.type=ev_keydown;
-		else
-			event.type=ev_keyup;
-
-		ch&=0x7f;
-
-		if (nextkeyextended)
-		{
-			nextkeyextended=0;
-
-			if (ch==70)  // crtl-break
-			{
-				asm ("movb $0x79, %%al\ncall ___djgpp_hw_exception"
-				     : : :"%eax","%ebx","%ecx","%edx","%esi","%edi","memory");
-			}
-
-			// remap lonely keypad slash
-			if (ch==53)
-				event.data1 = KEY_KPADSLASH;
-			else if (ch>=91 && ch<=93) // remap the bill gates keys...
-				event.data1 = ch + 0x80;    // leftwin, rightwin, menu
-			else if (ch>=71 && ch<=83) // remap non-keypad extended keys to a value<128, but
-				event.data1 = 0x80 + ch + 30; // make them different than the KEYPAD keys.
-			else if (ch==28)
-				event.data1 = KEY_ENTER;    // keypad enter -> return key
-			else if (ch==29)
-				event.data1 = KEY_RCTRL;     // rctrl -> lctrl
-			else if (ch==56)
-				event.data1 = KEY_RALT;      // ralt -> lalt
-			else
-				ch = 0;
-			if (ch)
-				D_PostEvent(&event);
-		}
-		else
-		{
-			if (ASCIINames[ch]!=0)
-				event.data1=ASCIINames[ch];
-			else
-				event.data1=ch+0x80;
-			D_PostEvent(&event);
-		}
-	}
-
-	outportb(0x20,0x20);
-}
-#ifndef DOXYGEN
-static END_OF_FUNCTION(I_KeyboardHandler);
-#endif
-
-//  Return a key that has been pushed, or 0
-//  (replace getchar() at game startup)
-//
-INT32 I_GetKey (void)
-{
-	int rc=0;
-	if ( keyboard_started )
-	{
-		event_t   *ev;
-
-		// return the first keypress from the event queue
-		for ( ; eventtail != eventhead ; eventtail = (eventtail+1)&(MAXEVENTS-1) )
-		{
-			ev = &events[eventtail];
-			if (ev->type == ev_keydown || ev->type == ev_console)
-			{
-				rc = ev->data1;
-				continue;
-			}
-		}
-		return rc;
-	}
-
-	// keyboard not started use the bios call trouth djgpp
-	if (_conio_kbhit())
-	{
-		rc=getch();
-		if (rc==0) rc=getch()+256;
-	}
-	else
-		rc = 0;
-
-	return rc;
-}
-
-/* Keyboard handler stuff */
-static _go32_dpmi_seginfo oldkeyinfo,newkeyinfo;
-
-//
-//  Removes the keyboard handler.
-//
-static inline void I_ShutdownKeyboard(void)
-{
-	if ( !keyboard_started )
-		return;
-
-	asm("cli");
-	_go32_dpmi_set_protected_mode_interrupt_vector(9, &oldkeyinfo);
-	_go32_dpmi_free_iret_wrapper(&newkeyinfo);
-	asm("sti");
-
-	keyboard_started=false;
-}
-
-//
-//  Installs the keyboard handler.
-//
-void I_StartupKeyboard(void)
-{
-	if (keyboard_started)
-		return;
-
-	nextkeyextended=0;
-
-	asm("cli");
-	_go32_dpmi_get_protected_mode_interrupt_vector(9, &oldkeyinfo);
-	newkeyinfo.pm_offset=(int)I_KeyboardHandler;
-	newkeyinfo.pm_selector=_go32_my_cs();
-	_go32_dpmi_allocate_iret_wrapper(&newkeyinfo);
-	_go32_dpmi_set_protected_mode_interrupt_vector(9, &newkeyinfo);
-
-	LOCK_VARIABLE(nextkeyextended);
-	LOCK_VARIABLE(pausepressed);
-	_go32_dpmi_lock_data(ASCIINames,sizeof (ASCIINames));
-	LOCK_FUNCTION(I_KeyboardHandler);
-
-	_go32_dpmi_lock_data(events,sizeof (events));
-	LOCK_VARIABLE(eventhead);
-	LOCK_FUNCTION(D_PostEvent);
-
-	asm("sti");
-
-	//added:08-01-98:register shutdown keyboard code.
-	I_AddExitFunc(I_ShutdownKeyboard);
-	keyboard_started = true;
-}
-
-
-
-
-//added:08-01-98:
-//
-//  Clean Startup & Shutdown handling, as does Allegro.
-//  We need this services for ourselves too, and we don't want to mix
-//  with Allegro, because someone might not use Allegro.
-//  (all 'exit' was renamed to 'quit')
-//
-#define MAX_QUIT_FUNCS     16
-static quitfuncptr quit_funcs[MAX_QUIT_FUNCS] =
-			{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-			  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
-
-
-//added:08-01-98:
-//
-//  Adds a function to the list that need to be called by I_SystemShutdown().
-//
-void I_AddExitFunc(void (*func)())
-{
-	int c;
-
-	for (c=0; c<MAX_QUIT_FUNCS; c++)
-	{
-		if (!quit_funcs[c])
-		{
-			quit_funcs[c] = func;
-			break;
-		}
-	}
-}
-
-
-//added:08-01-98:
-//
-//  Removes a function from the list that need to be called by
-//   I_SystemShutdown().
-//
-void I_RemoveExitFunc(void (*func)())
-{
-	int c;
-
-	for (c=0; c<MAX_QUIT_FUNCS; c++)
-	{
-		if (quit_funcs[c] == func)
-		{
-			while (c<MAX_QUIT_FUNCS-1)
-			{
-				quit_funcs[c] = quit_funcs[c+1];
-				c++;
-			}
-			quit_funcs[MAX_QUIT_FUNCS-1] = NULL;
-			break;
-		}
-	}
-}
-
-
-
- //added:03-01-98:
-//
-// signal_handler:
-//  Used to trap various signals, to make sure things get shut down cleanly.
-//
-static inline void exception_handler(int num)
-{
-	static char msg[255];
-	sprintf(msg,"Sonic Robo Blast 2 "VERSIONSTRING"\r\n"
-	        "This is a error of SRB2, try to send the following info to programmers\r\n");
-
-	//D_QuitNetGame ();  //say 'byebye' to other players when your machine
-						// crashes?... hmm... do they have to die with you???
-
-	I_ShutdownSystem();
-
-	_write(STDERR_FILENO, msg, strlen(msg));
-
-	signal(num, SIG_DFL);
-	raise(num);
-	/// \todo write it in a log !!
-}
-
-static inline void break_handler(int num)
-{
-static char msg[] = "Oh no! Back to reality!\r\n";
-
-	//D_QuitNetGame ();  //say 'byebye' to other players when your machine
-						// crashes?... hmm... do they have to die with you???
-
-	I_ShutdownSystem();
-
-	_write(STDERR_FILENO, msg, sizeof (msg)-1);
-
-	signal(num, SIG_DFL);
-	raise(num);
-}
-
-
-//added:08-01-98: now this replaces allegro_init()
-//
-// REMEMBER: THIS ROUTINE MUST BE STARTED IN i_main.c BEFORE D_SRB2Main()
-//
-// This stuff should get rid of the exception and page faults when
-// SRB2 bugs out with an error. Now it should exit cleanly.
-//
-INT32 I_StartupSystem(void)
-{
-	I_DetectOS();
-	check_cpu();
-
-	// some 'more globals than globals' things to initialize here ?
-	graphics_started = false;
-	keyboard_started = false;
-	sound_started = false;
-	timer_started = false;
-	cdaudio_started = false;
-
-	// check for OS type and version here ?
-
-
-	signal(SIGABRT, exception_handler);
-	signal(SIGFPE , exception_handler);
-	signal(SIGILL , exception_handler);
-	signal(SIGSEGV, exception_handler);
-	signal(SIGINT , break_handler);
-	signal(SIGKILL, break_handler);
-	signal(SIGQUIT, break_handler);
-
-	return 0;
-}
-
-
-//added:08-01-98:
-//
-//  Closes down everything. This includes restoring the initial
-//  pallete and video mode, and removing whatever mouse, keyboard, and
-//  timer routines have been installed.
-//
-//  NOTE : Shutdown user funcs. are effectively called in reverse order.
-//
-void I_ShutdownSystem(void)
-{
-	int c;
-
-	for (c=MAX_QUIT_FUNCS-1; c>=0; c--)
-		if (quit_funcs[c])
-			(*quit_funcs[c])();
-}
-
-void I_GetDiskFreeSpace(INT64 *freespace)
-{
-	struct diskfree_t df;
-	if (_dos_getdiskfree(0,&df))
-		*freespace = (unsigned long)df.avail_clusters *
-		             (unsigned long)df.bytes_per_sector *
-		             (unsigned long)df.sectors_per_cluster;
-	else
-		*freespace = INT32_MAX;
-}
-
-char *I_GetUserName(void)
-{
-	static char username[MAXPLAYERNAME];
-	char  *p;
-	if ((p=getenv("USER"))==NULL)
-		if ((p=getenv("user"))==NULL)
-			if ((p=getenv("USERNAME"))==NULL)
-				if ((p=getenv("username"))==NULL)
-					return NULL;
-	strncpy(username,p,MAXPLAYERNAME);
-
-	if (strcmp(username,"")==0 )
-		return NULL;
-	return username;
-}
-
-INT32 I_mkdir(const char *pdirname, INT32 unixright)
-{
-	return mkdir(pdirname, unixright);
-}
-
-char * I_GetEnv(const char *name)
-{
-	return getenv(name);
-}
-
-INT32 I_PutEnv(char *variable)
-{
-	return putenv(variable);
-}
-
-INT32 I_ClipboardCopy(const char *data, size_t size)
-{
-	(void)data;
-	(void)size;
-	return -1;
-}
-
-char *I_ClipboardPaste(void)
-{
-	return NULL;
-}
-
-const CPUInfoFlags *I_CPUInfo(void)
-{
-	static CPUInfoFlags DOS_CPUInfo;
-	memset(&DOS_CPUInfo,0,sizeof (DOS_CPUInfo));
-#if ALLEGRO_VERSION == 3
-	if (!cpu_cpuid) return NULL;
-	DOS_CPUInfo.CPUID       = true;
-	DOS_CPUInfo.MMX         = cpu_mmx;
-	DOS_CPUInfo.AMD3DNow    = cpu_3dnow;
-#else
-	DOS_CPUInfo.CPUID       = ((cpu_capabilities&CPU_ID)       ==       CPU_ID);
-	DOS_CPUInfo.FPU         = ((cpu_capabilities&CPU_FPU)      ==      CPU_FPU);
-#ifdef CPU_IA64
-	DOS_CPUInfo.IA64        = ((cpu_capabilities&CPU_IA64)     ==     CPU_IA64);
-#endif
-#ifdef CPU_AMD64
-	DOS_CPUInfo.AMD64       = ((cpu_capabilities&CPU_AMD64)    ==    CPU_AMD64);
-#endif
-	DOS_CPUInfo.MMX         = ((cpu_capabilities&CPU_MMX)      ==      CPU_MMX);
-	DOS_CPUInfo.MMXExt      = ((cpu_capabilities&CPU_MMXPLUS)  ==  CPU_MMXPLUS);
-	DOS_CPUInfo.SSE         = ((cpu_capabilities&CPU_SSE)      ==      CPU_SSE);
-	DOS_CPUInfo.SSE2        = ((cpu_capabilities&CPU_SSE2)     ==     CPU_SSE2);
-#ifdef CPU_SEE3
-	DOS_CPUInfo.SSE3        = ((cpu_capabilities&CPU_SSE3)     ==     CPU_SSE3);
-#endif
-	DOS_CPUInfo.AMD3DNow    = ((cpu_capabilities&CPU_3DNOW)    ==    CPU_3DNOW);
-	DOS_CPUInfo.AMD3DNowExt = ((cpu_capabilities&CPU_ENH3DNOW) == CPU_ENH3DNOW);
-	DOS_CPUInfo.CMOV        = ((cpu_capabilities&CPU_CMOV)     ==     CPU_CMOV);
-#endif
-	return &DOS_CPUInfo;
-}
-
-void I_RegisterSysCommands(void) {}
diff --git a/src/djgppdos/i_video.c b/src/djgppdos/i_video.c
deleted file mode 100644
index d2483e3186..0000000000
--- a/src/djgppdos/i_video.c
+++ /dev/null
@@ -1,345 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1993-1996 by id Software, Inc.
-// Portions Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief hardware and software level, screen and video i/o, refresh,
-///	setup ... a big mess. Got to clean that up!
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <sys/time.h>
-#include <sys/types.h>
-//#include <sys/socket.h>
-
-#include <netinet/in.h>
-//#include <errnos.h>
-#include <signal.h>
-
-#include <go32.h>
-#include <pc.h>
-#include <dpmi.h>
-#include <dos.h>
-#include <sys/nearptr.h>
-
-#include "../doomdef.h"
-#include "../i_system.h"
-#include "../v_video.h"
-#include "../m_argv.h"
-#include "vid_vesa.h"
-#include "../i_video.h"
-
-
-//dosstuff -newly added
-static unsigned long dascreen;
-static int gfx_use_vesa1;
-
-boolean    highcolor;
-
-#define SCREENDEPTH   1     // bytes per pixel, do NOT change.
-
-rendermode_t    rendermode=render_soft;
-
-//
-// I_OsPolling
-//
-void I_OsPolling(void)
-{
-	I_GetEvent();
-	//i dont think i have to do anything else here
-}
-
-
-//
-// I_UpdateNoBlit
-//
-void I_UpdateNoBlit (void)
-{
-	// what is this?
-}
-
-
-//profile stuff ---------------------------------------------------------
-//added:16-01-98:wanted to profile the VID_BlitLinearScreen() asm code.
-//#define TIMING      //uncomment this to enable profiling
-#ifdef TIMING
-#include "../p5prof.h"
-static   INT64 mycount;
-static   INT64 mytotal = 0;
-static   unsigned long  nombre = NEWTICRATE*10;
-//static   char runtest[10][80];
-#endif
-//profile stuff ---------------------------------------------------------
-
-//
-// I_FinishUpdate
-//
-static void I_BlitScreenVesa1(void);   //see later
-void I_FinishUpdate (void)
-{
-	if (marathonmode)
-		SCR_DisplayMarathonInfo();
-
-	// draw captions if enabled
-	if (cv_closedcaptioning.value)
-		SCR_ClosedCaptions();
-
-	// draw FPS if enabled
-	if (cv_ticrate.value)
-		SCR_DisplayTicRate();
-
-	if (cv_showping.value && netgame && consoleplayer != serverplayer)
-		SCR_DisplayLocalPing();
-
-	//blast it to the screen
-	// this code sucks
-	//memcpy(dascreen,screens[0],screenwidth*screenheight);
-
-	//added:03-01-98: I tried to I_WaitVBL(1) here, but it slows down
-	//  the game when the view becomes complicated, it looses ticks
-	if (cv_vidwait.value)
-		I_WaitVBL(1);
-
-
-//added:16-01-98:profile screen blit.
-#ifdef TIMING
-	ProfZeroTimer();
-#endif
-	//added:08-01-98: support vesa1 bank change, without Allegro's BITMAP screen.
-	if ( gfx_use_vesa1 )
-	{
-		I_Error("Banked screen update not finished for dynamic res\n");
-		I_BlitScreenVesa1();    //blast virtual to physical screen.
-	}
-	else
-	{
-		//added:16-01-98:use quickie asm routine, last 2 args are
-		//                   src and dest rowbytes
-		//                   (memcpy is as fast as this one...)
-		VID_BlitLinearScreen(screens[0], vid.direct,
-		                     vid.width*vid.bpp, vid.height,
-		                     vid.width*vid.bpp, vid.rowbytes );
-	}
-#ifdef TIMING
-	RDMSR(0x10,&mycount);
-	mytotal += mycount;   //64bit add
-
-	if (nombre--==0)
-		I_Error("ScreenBlit CPU Spy reports: 0x%d %d\n", *((int *)&mytotal+1),
-		        (int)mytotal );
-#endif
-
-}
-
-//
-// I_UpdateNoVsync
-//
-void I_UpdateNoVsync(void)
-{
-	int real_vidwait = cv_vidwait.value;
-	cv_vidwait.value = 0;
-	I_FinishUpdate();
-	cv_vidwait.value = real_vidwait;
-}
-
-//
-// I_ReadScreen
-//
-void I_ReadScreen (UINT8 *scr)
-{
-	VID_BlitLinearScreen(screens[0], scr,
-	                     vid.width*vid.bpp, vid.height,
-	                     vid.width*vid.bpp, vid.rowbytes );
-}
-
-
-void I_SetPalette (RGBA_t *palette)
-{
-	int i;
-
-	outportb(0x3c8,0);
-	for (i=0;i<256;i++,palette++)
-	{
-		outportb(0x3c9,palette->s.red>>2);
-		outportb(0x3c9,palette->s.green>>2);
-		outportb(0x3c9,palette->s.blue>>2);
-	}
-}
-
-
-//added 29-12-1997
-/*==========================================================================*/
-// I_BlastScreen : copy the virtual screen buffer to the physical screen mem
-//                 using bank switching if needed.
-/*==========================================================================*/
-static void I_BlitScreenVesa1(void)
-{
-#define VIDBANKSIZE     (1<<16)
-#define VIDBANKSIZEMASK (VIDBANKSIZE-1)   // defines ahoy!
-
-	__dpmi_regs r;
-	UINT8 *p_src;
-	long     i;
-	long     virtualsize;
-
-	// virtual screen buffer size
-	virtualsize = vid.rowbytes * vid.height * SCREENDEPTH;
-
-	p_src  = screens[0];
-
-	for (i=0; virtualsize > 0; i++ )
-	{
-		r.x.ax = 0x4f05;
-		r.x.bx = 0x0;
-		r.x.cx = 0x0;
-		r.x.dx = i;
-		__dpmi_int(0x10,&r);      //set bank
-
-		M_Memcpy((UINT8 *)dascreen,p_src,(virtualsize < VIDBANKSIZE) ? virtualsize : VIDBANKSIZE );
-
-		p_src += VIDBANKSIZE;
-		virtualsize -= VIDBANKSIZE;
-	}
-
-}
-
-
-//added:08-01-98: now we use Allegro's set_gfx_mode, but we want to
-//                restore the exact text mode that was before.
-static INT16  myOldVideoMode;
-static inline void I_SaveOldVideoMode(void)
-{
-	__dpmi_regs r;
-	r.x.ax = 0x4f03;                 // Return current video mode
-	__dpmi_int(0x10,&r);
-	if ( r.x.ax != 0x4f )
-		myOldVideoMode = -1;
-	else
-		myOldVideoMode = r.x.bx;
-}
-
-
-//
-//  Close the screen, restore previous video mode.
-//
-void I_ShutdownGraphics (void)
-{
-	__dpmi_regs r;
-
-	rendermode = render_none;
-	if ( !graphics_started )
-		return;
-
-	// free the last video mode screen buffers
-	if (vid.buffer)
-		free (vid.buffer);
-
-	/* Restore old video mode */
-	if (myOldVideoMode!=-1)
-	{
-		/* Restore old video mode */
-		r.x.ax = 0x4f02;                 // Set Super VGA video mode
-		r.x.bx = myOldVideoMode;
-		__dpmi_int(0x10,&r);
-
-		// Boris: my s3 don't do a cls because "win95" :<
-		clrscr();
-	}
-	else  // no vesa put the normal video mode
-	{
-		r.x.ax = 0x03;
-		__dpmi_int(0x10,&r);
-	}
-
-	graphics_started = false;
-}
-
-
-//added:08-01-98:
-//  Set VESA1 video mode, coz Allegro set_gfx_mode a larger screenwidth...
-//
-#if 0
-int set_vesa1_mode( int width, int height )
-{
-	__dpmi_regs r;
-
-	// setup video mode.
-	r.x.ax = 0x4f02;
-	if ( ( width==320 )&&( height==200 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x13;                             // 320x 200x1 (256 colors)
-	else
-	if ( ( width==320 )&&( height==240 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x154;                            // 320x 240x1 (256 colors)
-	else
-	if ( ( width==320 )&&( height==400 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x155;                            // 320x 400x1 (256 colors)
-	else
-	if ( ( width==640 )&&( height==400 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x100;                            // 640x 400x1 (256 colors)
-	else
-	if ( ( width==640 )&&( height==480 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x101;                            // 640x 480x1 (256 colors)
-	else
-	if ( ( width==800 )&&( height==600 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x103;                            // 800x 600x1 (256 colors)
-	else
-	if ( ( width==1024)&&( height==768 ) && ( SCREENDEPTH==1 ) )
-		r.x.bx   = 0x105;                            //1024x 768x1 (256 colors)
-	else
-		I_Error("I_SetVesa1Mode: video mode not supported.");
-
-	// enter graphics mode.
-	__dpmi_int(0x10,&r);
-
-	if ( r.x.ax != 0x4f )
-		I_Error("I_SetVesa1Mode: init video mode failed !");
-
-	return 0;
-}
-#endif
-
-
-//added:08-01-98: now uses Allegro to setup Linear Frame Buffer video modes.
-//
-//  Initialize video mode, setup dynamic screen size variables,
-//  and allocate screens.
-//
-void I_StartupGraphics(void)
-{
-	//added:26-01-98: VID_Init() must be done only once,
-	//                use VID_SetMode() to change vid mode while in the game.
-	if ( graphics_started )
-		return;
-
-	// remember the exact screen mode we were...
-	I_SaveOldVideoMode();
-
-	CONS_Printf("Vid_Init...");
-
-	// 0 for 256 color, else use highcolor modes
-	highcolor = M_CheckParm ("-highcolor");
-
-	VID_Init();
-
-	//gfx_use_vesa1 = false;
-
-	//added:03-01-98: register exit code for graphics
-	I_AddExitFunc(I_ShutdownGraphics);
-	graphics_started = true;
-
-}
-
-void VID_StartupOpenGL(void) {}
diff --git a/src/djgppdos/internal.h b/src/djgppdos/internal.h
deleted file mode 100644
index 94c1a052b4..0000000000
--- a/src/djgppdos/internal.h
+++ /dev/null
@@ -1,773 +0,0 @@
-/*         ______   ___    ___ 
- *        /\  _  \ /\_ \  /\_ \ 
- *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___ 
- *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
- *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
- *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
- *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
- *                                           /\____/
- *                                           \_/__/
- *
- *      Some definitions for internal use by the library code.
- *      This should not be included by user programs.
- *
- *      By Shawn Hargreaves.
- *
- *      See readme.txt for copyright information.
- */
-
-
-#ifndef INTERNAL_H
-#define INTERNAL_H
-
-#include "allegro.h"
-
-/*         ______   ___    ___ 
- *        /\  _  \ /\_ \  /\_ \ 
- *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___ 
- *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
- *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
- *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
- *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
- *                                           /\____/
- *                                           \_/__/
- *
- *      Some definitions for internal use by the library code.
- *      This should not be included by user programs.
- *
- *      By Shawn Hargreaves.
- *
- *      See readme.txt for copyright information.
- */
-
-
-#ifndef INTERNDJ_H
-#define INTERNDJ_H
-
-#ifndef DJGPP
-#error This file should only be used by the djgpp version of Allegro
-#endif
-
-
-#include <dos.h>
-
-
-/* file access macros */
-#define FILE_OPEN(filename, handle)             handle = open(filename, O_RDONLY | O_BINARY, S_IRUSR | S_IWUSR)
-#define FILE_CREATE(filename, handle)           handle = open(filename, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)
-#define FILE_CLOSE(handle)                      close(handle)
-#define FILE_READ(handle, buf, size, sz)        sz = read(handle, buf, size)
-#define FILE_WRITE(handle, buf, size, sz)       sz = write(handle, buf, size) 
-#define FILE_SEARCH_STRUCT                      struct ffblk
-#define FILE_FINDFIRST(filename, attrib, dta)   findfirst(filename, dta, attrib)
-#define FILE_FINDNEXT(dta)                      findnext(dta)
-#define FILE_ATTRIB                             ff_attrib
-#define FILE_SIZE                               ff_fsize
-#define FILE_NAME                               ff_name
-#define FILE_TIME                               ff_ftime
-#define FILE_DATE                               ff_fdate
-
-
-/* macros to enable and disable interrupts */
-#define DISABLE()   asm volatile ("cli")
-#define ENABLE()    asm volatile ("sti")
-
-
-__INLINE__ void enter_critical(void) 
-{
-   if (windows_version >= 3) {
-      __dpmi_regs r;
-      r.x.ax = 0x1681; 
-      __dpmi_int(0x2F, &r);
-   }
-
-   DISABLE();
-}
-
-
-__INLINE__ void exit_critical(void) 
-{
-   if (windows_version >= 3) {
-      __dpmi_regs r;
-      r.x.ax = 0x1682; 
-      __dpmi_int(0x2F, &r);
-   }
-
-   ENABLE();
-}
-
-
-/* interrupt hander stuff */
-#define _map_irq(irq)   (((irq)>7) ? ((irq)+104) : ((irq)+8))
-
-int _install_irq(int num, int (*handler)(void));
-void _remove_irq(int num);
-void _restore_irq(int irq);
-void _enable_irq(int irq);
-void _disable_irq(int irq);
-
-#define _eoi(irq) { outportb(0x20, 0x20); if ((irq)>7) outportb(0xA0, 0x20); }
-
-typedef struct _IRQ_HANDLER
-{
-   int (*handler)(void);         /* our C handler */
-   int number;                   /* irq number */
-   __dpmi_paddr old_vector;      /* original protected mode vector */
-} _IRQ_HANDLER;
-
-
-/* DPMI memory mapping routines */
-int _create_physical_mapping(unsigned long *linear, int *segment, unsigned long physaddr, int size);
-void _remove_physical_mapping(unsigned long *linear, int *segment);
-int _create_linear_mapping(unsigned long *linear, unsigned long physaddr, int size);
-void _remove_linear_mapping(unsigned long *linear);
-int _create_selector(int *segment, unsigned long linear, int size);
-void _remove_selector(int *segment);
-void _unlock_dpmi_data(void *addr, int size);
-
-
-/* bank switching routines */
-void _accel_bank_stub(void);
-void _accel_bank_stub_end(void);
-
-void _accel_bank_switch (void);
-void _accel_bank_switch_end(void);
-
-void _vesa_window_1(void);
-void _vesa_window_1_end(void);
-void _vesa_window_2(void);
-void _vesa_window_2_end(void);
-
-void _vesa_pm_window_1(void);
-void _vesa_pm_window_1_end(void);
-void _vesa_pm_window_2(void);
-void _vesa_pm_window_2_end(void);
-
-void _vesa_pm_es_window_1(void);
-void _vesa_pm_es_window_1_end(void);
-void _vesa_pm_es_window_2(void);
-void _vesa_pm_es_window_2_end(void);
-
-
-/* stuff for the VESA and VBE/AF drivers */
-extern __dpmi_regs _dpmi_reg;
-
-extern int _window_2_offset;
-
-extern void (*_pm_vesa_switcher)(void);
-extern void (*_pm_vesa_scroller)(void);
-extern void (*_pm_vesa_pallete)(void);
-
-extern int _mmio_segment;
-
-extern void *_accel_driver;
-
-extern int _accel_active;
-
-extern void *_accel_set_bank;
-extern void *_accel_idle;
-
-void _fill_vbeaf_libc_exports(void *ptr);
-void _fill_vbeaf_pmode_exports(void *ptr);
-
-
-/* sound lib stuff */
-extern int _fm_port;
-extern int _mpu_port;
-extern int _mpu_irq;
-extern int _sb_freq;
-extern int _sb_port; 
-extern int _sb_dma; 
-extern int _sb_irq; 
-
-int _sb_read_dsp_version(void);
-int _sb_reset_dsp(int data);
-void _sb_voice(int state);
-int _sb_set_mixer(int digi_volume, int midi_volume);
-
-void _mpu_poll(void);
-
-int _dma_allocate_mem(int bytes, int *sel, unsigned long *phys);
-void _dma_start(int channel, unsigned long addr, int size, int auto_init, int input);
-void _dma_stop(int channel);
-unsigned long _dma_todo(int channel);
-void _dma_lock_mem(void);
-
-
-#endif          /* ifndef INTERNDJ_H */
-
-
-/* flag for how many times we have been initialised */
-extern int _allegro_count;
-
-
-/* some Allegro functions need a block of scratch memory */
-extern void *_scratch_mem;
-extern int _scratch_mem_size;
-
-__INLINE__ void _grow_scratch_mem(int size)
-{
-   if (size > _scratch_mem_size) {
-      size = (size+1023) & 0xFFFFFC00;
-      _scratch_mem = realloc(_scratch_mem, size);
-      _scratch_mem_size = size;
-   }
-}
-
-
-/* list of functions to call at program cleanup */
-void _add_exit_func(void (*func)(void));
-void _remove_exit_func(void (*func)(void));
-
-
-/* reads a translation file into memory */
-void _load_config_text(void);
-
-
-/* various bits of mouse stuff */
-void _set_mouse_range(void);
-extern BITMAP *_mouse_screen;
-extern BITMAP *_mouse_sprite, *_mouse_pointer;
-extern int _mouse_x_focus, _mouse_y_focus;
-extern int _mouse_width, _mouse_height;
-
-
-/* various bits of timer stuff */
-extern int _timer_use_retrace;
-extern volatile int _retrace_hpp_value;
-
-
-/* caches and tables for svga bank switching */
-extern int _last_bank_1, _last_bank_2; 
-extern int *_gfx_bank; 
-
-
-/* bank switching routines */
-void _stub_bank_switch (void);
-void _stub_bank_switch_end(void);
-
-
-/* stuff for setting up bitmaps */
-void _check_gfx_virginity(void);
-BITMAP *_make_bitmap(int w, int h, unsigned long addr, GFX_DRIVER *driver, int color_depth, int bpl);
-void _sort_out_virtual_width(int *width, GFX_DRIVER *driver);
-
-GFX_VTABLE *_get_vtable(int color_depth);
-
-extern GFX_VTABLE _screen_vtable;
-
-extern int _sub_bitmap_id_count;
-
-extern int _textmode;
-
-#define BYTES_PER_PIXEL(bpp)     (((int)(bpp) + 7) / 8)
-
-int _color_load_depth(int depth);
-
-extern int _color_conv;
-
-BITMAP *_fixup_loaded_bitmap(BITMAP *bmp, PALETTE pal, int bpp);
-
-
-/* VGA register access routines */
-void _vga_vsync(void);
-void _vga_set_pallete_range(PALLETE p, int from, int to, int vsync);
-
-extern int _crtc;
-
-
-/* _read_vga_register:
- *  Reads the contents of a VGA register.
- */
-__INLINE__ int _read_vga_register(int port, int index)
-{
-   if (port==0x3C0)
-      inportb(_crtc+6); 
-
-   outportb(port, index);
-   return inportb(port+1);
-}
-
-
-/* _write_vga_register:
- *  Writes a byte to a VGA register.
- */
-__INLINE__ void _write_vga_register(int port, int index, int v) 
-{
-   if (port==0x3C0) {
-      inportb(_crtc+6);
-      outportb(port, index);
-      outportb(port, v);
-   }
-   else {
-      outportb(port, index);
-      outportb(port+1, v);
-   }
-}
-
-
-/* _alter_vga_register:
- *  Alters specific bits of a VGA register.
- */
-__INLINE__ void _alter_vga_register(int port, int index, int mask, int v)
-{
-   int temp;
-   temp = _read_vga_register(port, index);
-   temp &= (~mask);
-   temp |= (v & mask);
-   _write_vga_register(port, index, temp);
-}
-
-
-/* _vsync_out_h:
- *  Waits until the VGA is not in either a vertical or horizontal retrace.
- */
-__INLINE__ void _vsync_out_h(void)
-{
-   do {
-   } while (inportb(0x3DA) & 1);
-}
-
-
-/* _vsync_out_v:
- *  Waits until the VGA is not in a vertical retrace.
- */
-__INLINE__ void _vsync_out_v(void)
-{
-   do {
-   } while (inportb(0x3DA) & 8);
-}
-
-
-/* _vsync_in:
- *  Waits until the VGA is in the vertical retrace period.
- */
-__INLINE__ void _vsync_in(void)
-{
-   if (_timer_use_retrace) {
-      int t = retrace_count; 
-
-      do {
-      } while (t == retrace_count);
-   }
-   else {
-      do {
-      } while (!(inportb(0x3DA) & 8));
-   }
-}
-
-
-/* _write_hpp:
- *  Writes to the VGA pelpan register.
- */
-__INLINE__ void _write_hpp(int value)
-{
-   if (_timer_use_retrace) {
-      _retrace_hpp_value = value;
-
-      do {
-      } while (_retrace_hpp_value == value);
-   }
-   else {
-      do {
-      } while (!(inportb(0x3DA) & 8));
-
-      _write_vga_register(0x3C0, 0x33, value);
-   }
-}
-
-
-void _set_vga_virtual_width(int old_width, int new_width);
-
-
-/* current drawing mode */
-extern int _drawing_mode;
-extern BITMAP *_drawing_pattern;
-extern int _drawing_x_anchor;
-extern int _drawing_y_anchor;
-extern unsigned int _drawing_x_mask;
-extern unsigned int _drawing_y_mask;
-
-
-/* graphics drawing routines */
-void _normal_line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
-void _normal_rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
-
-int  _linear_getpixel8(struct BITMAP *bmp, int x, int y);
-void _linear_putpixel8(struct BITMAP *bmp, int x, int y, int color);
-void _linear_vline8(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _linear_hline8(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _linear_draw_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_v_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_h_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_vh_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_trans_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_lit_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_draw_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_trans_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_lit_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-void _linear_draw_character8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_textout_fixed8(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
-void _linear_blit8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_blit_backward8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_masked_blit8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_clear_to_color8(struct BITMAP *bitmap, int color);
-
-#ifdef ALLEGRO_COLOR16
-
-void _linear_putpixel15(struct BITMAP *bmp, int x, int y, int color);
-void _linear_vline15(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _linear_hline15(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _linear_draw_trans_sprite15(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_lit_sprite15(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_draw_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_trans_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_lit_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-
-int  _linear_getpixel16(struct BITMAP *bmp, int x, int y);
-void _linear_putpixel16(struct BITMAP *bmp, int x, int y, int color);
-void _linear_vline16(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _linear_hline16(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _linear_draw_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_256_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_v_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_h_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_vh_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_trans_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_lit_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_draw_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_trans_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_lit_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-void _linear_draw_character16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_textout_fixed16(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
-void _linear_blit16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_blit_backward16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_masked_blit16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_clear_to_color16(struct BITMAP *bitmap, int color);
-
-#endif
-
-#ifdef ALLEGRO_COLOR24
-
-int  _linear_getpixel24(struct BITMAP *bmp, int x, int y);
-void _linear_putpixel24(struct BITMAP *bmp, int x, int y, int color);
-void _linear_vline24(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _linear_hline24(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _linear_draw_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_256_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_v_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_h_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_vh_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_trans_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_lit_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_draw_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_trans_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_lit_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-void _linear_draw_character24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_textout_fixed24(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
-void _linear_blit24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_blit_backward24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_masked_blit24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_clear_to_color24(struct BITMAP *bitmap, int color);
-
-#endif
-
-#ifdef ALLEGRO_COLOR32
-
-int  _linear_getpixel32(struct BITMAP *bmp, int x, int y);
-void _linear_putpixel32(struct BITMAP *bmp, int x, int y, int color);
-void _linear_vline32(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _linear_hline32(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _linear_draw_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_256_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_v_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_h_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_sprite_vh_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_trans_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _linear_draw_lit_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_draw_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_trans_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _linear_draw_lit_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-void _linear_draw_character32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _linear_textout_fixed32(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
-void _linear_blit32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_blit_backward32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_masked_blit32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _linear_clear_to_color32(struct BITMAP *bitmap, int color);
-
-#endif
-
-int  _x_getpixel(struct BITMAP *bmp, int x, int y);
-void _x_putpixel(struct BITMAP *bmp, int x, int y, int color);
-void _x_vline(struct BITMAP *bmp, int x, int y1, int y2, int color);
-void _x_hline(struct BITMAP *bmp, int x1, int y, int x2, int color);
-void _x_draw_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _x_draw_sprite_v_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _x_draw_sprite_h_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _x_draw_sprite_vh_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _x_draw_trans_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
-void _x_draw_lit_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _x_draw_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _x_draw_trans_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
-void _x_draw_lit_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
-void _x_draw_character(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
-void _x_textout_fixed(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
-void _x_blit_from_memory(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_blit_to_memory(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_blit(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_blit_forward(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_blit_backward(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_masked_blit(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
-void _x_clear_to_color(struct BITMAP *bitmap, int color);
-
-
-/* asm helper for stretch_blit() */
-void _do_stretch(BITMAP *source, BITMAP *dest, void *drawer, int sx, fixed sy, fixed syd, int dx, int dy, int dh, int color_depth);
-
-
-/* number of fractional bits used by the polygon rasteriser */
-#define POLYGON_FIX_SHIFT     18
-
-
-/* bitfield specifying which polygon attributes need interpolating */
-#define INTERP_FLAT           1
-#define INTERP_1COL           2
-#define INTERP_3COL           4
-#define INTERP_FIX_UV         8
-#define INTERP_Z              16
-#define INTERP_FLOAT_UV       32
-#define OPT_FLOAT_UV_TO_FIX   64
-#define COLOR_TO_RGB          128
-
-
-/* information for polygon scanline fillers */
-typedef struct POLYGON_SEGMENT
-{
-   fixed u, v, du, dv;              /* fixed point u/v coordinates */
-   fixed c, dc;                     /* single color gouraud shade values */
-   fixed r, g, b, dr, dg, db;       /* RGB gouraud shade values */
-   float z, dz;                     /* polygon depth (1/z) */
-   float fu, fv, dfu, dfv;          /* floating point u/v coordinates */
-   unsigned char *texture;          /* the texture map */
-   int umask, vmask, vshift;        /* texture map size information */
-   int seg;                         /* destination bitmap selector */
-} POLYGON_SEGMENT;
-
-
-/* an active polygon edge */
-typedef struct POLYGON_EDGE 
-{
-   int top;                         /* top y position */
-   int bottom;                      /* bottom y position */
-   fixed x, dx;                     /* fixed point x position and gradient */
-   fixed w;                         /* width of line segment */
-   POLYGON_SEGMENT dat;             /* texture/gouraud information */
-   struct POLYGON_EDGE *prev;       /* doubly linked list */
-   struct POLYGON_EDGE *next;
-} POLYGON_EDGE;
-
-
-/* prototype for the scanline filler functions */
-typedef void (*SCANLINE_FILLER)(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-
-/* polygon helper functions */
-extern SCANLINE_FILLER _optim_alternative_drawer;
-POLYGON_EDGE *_add_edge(POLYGON_EDGE *list, POLYGON_EDGE *edge, int sort_by_x);
-POLYGON_EDGE *_remove_edge(POLYGON_EDGE *list, POLYGON_EDGE *edge);
-void _fill_3d_edge_structure(POLYGON_EDGE *edge, V3D *v1, V3D *v2, int flags, BITMAP *bmp);
-void _fill_3d_edge_structure_f(POLYGON_EDGE *edge, V3D_f *v1, V3D_f *v2, int flags, BITMAP *bmp);
-SCANLINE_FILLER _get_scanline_filler(int type, int *flags, POLYGON_SEGMENT *info, BITMAP *texture, BITMAP *bmp);
-void _clip_polygon_segment(POLYGON_SEGMENT *info, int gap, int flags);
-
-
-/* polygon scanline filler functions */
-void _poly_scanline_gcol8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_grgb8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit8(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb8x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit15(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb15x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit15x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit15x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit15x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit15x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_ptex_lit15d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit15d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit16(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb16x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit16x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit16x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit16x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit16x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_ptex_lit16d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit16d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit24(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb24x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit24x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit24x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit24x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit24x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_ptex_lit24d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit24d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit32(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_grgb32x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_lit32x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_lit32x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_atex_mask_lit32x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit32x(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-void _poly_scanline_ptex_lit32d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-void _poly_scanline_ptex_mask_lit32d(unsigned long addr, int w, POLYGON_SEGMENT *info);
-
-
-/* sound lib stuff */
-extern int _digi_volume;
-extern int _midi_volume;
-extern int _flip_pan; 
-extern int _sound_hq;
-
-extern int (*_midi_init)(void);
-extern void (*_midi_exit)(void);
-
-int _midi_allocate_voice(int min, int max);
-
-extern volatile long _midi_tick;
-
-int _digmid_find_patches(char *dir, char *file);
-
-#define VIRTUAL_VOICES  256
-
-
-typedef struct          /* a virtual (as seen by the user) soundcard voice */
-{
-   SAMPLE *sample;      /* which sample are we playing? (NULL = free) */
-   int num;             /* physical voice number (-1 = been killed off) */
-   int autokill;        /* set to free the voice when the sample finishes */
-   long time;           /* when we were started (for voice allocation) */
-   int priority;        /* how important are we? */
-} VOICE;
-
-extern VOICE _voice[VIRTUAL_VOICES];
-
-
-typedef struct          /* a physical (as used by hardware) soundcard voice */
-{
-   int num;             /* the virtual voice currently using me (-1 = free) */
-   int playmode;        /* are we looping? */
-   int vol;             /* current volume (fixed point .12) */
-   int dvol;            /* volume delta, for ramping */
-   int target_vol;      /* target volume, for ramping */
-   int pan;             /* current pan (fixed point .12) */
-   int dpan;            /* pan delta, for sweeps */
-   int target_pan;      /* target pan, for sweeps */
-   int freq;            /* current frequency (fixed point .12) */
-   int dfreq;           /* frequency delta, for sweeps */
-   int target_freq;     /* target frequency, for sweeps */
-} PHYS_VOICE;
-
-extern PHYS_VOICE _phys_voice[DIGI_VOICES];
-
-
-#define MIXER_DEF_SFX               8
-#define MIXER_MAX_SFX               64
-
-int _mixer_init(int bufsize, int freq, int stereo, int is16bit, int *voices);
-void _mixer_exit(void);
-void _mix_some_samples(unsigned long buf, unsigned short seg, int issigned);
-
-void _mixer_init_voice(int voice, SAMPLE *sample);
-void _mixer_release_voice(int voice);
-void _mixer_start_voice(int voice);
-void _mixer_stop_voice(int voice);
-void _mixer_loop_voice(int voice, int loopmode);
-int  _mixer_get_position(int voice);
-void _mixer_set_position(int voice, int position);
-int  _mixer_get_volume(int voice);
-void _mixer_set_volume(int voice, int volume);
-void _mixer_ramp_volume(int voice, int time, int endvol);
-void _mixer_stop_volume_ramp(int voice);
-int  _mixer_get_frequency(int voice);
-void _mixer_set_frequency(int voice, int frequency);
-void _mixer_sweep_frequency(int voice, int time, int endfreq);
-void _mixer_stop_frequency_sweep(int voice);
-int  _mixer_get_pan(int voice);
-void _mixer_set_pan(int voice, int pan);
-void _mixer_sweep_pan(int voice, int time, int endpan);
-void _mixer_stop_pan_sweep(int voice);
-void _mixer_set_echo(int voice, int strength, int delay);
-void _mixer_set_tremolo(int voice, int rate, int depth);
-void _mixer_set_vibrato(int voice, int rate, int depth);
-
-/* dummy functions for the NoSound drivers */
-int  _dummy_detect(int input);
-int  _dummy_init(int input, int voices);
-void _dummy_exit(int input);
-int  _dummy_mixer_volume(int volume);
-void _dummy_init_voice(int voice, SAMPLE *sample);
-void _dummy_noop1(int p);
-void _dummy_noop2(int p1, int p2);
-void _dummy_noop3(int p1, int p2, int p3);
-int  _dummy_get_position(int voice);
-int  _dummy_get(int voice);
-void _dummy_raw_midi(unsigned char data);
-int  _dummy_load_patches(char *patches, char *drums);
-void _dummy_adjust_patches(char *patches, char *drums);
-void _dummy_key_on(int inst, int note, int bend, int vol, int pan);
-
-
-/* from djgpp's libc, needed to find which directory we were run from */
-extern int __crt0_argc;
-extern char **__crt0_argv;
-
-
-#endif          /* ifndef INTERNAL_H */
diff --git a/src/djgppdos/rdb-s.h b/src/djgppdos/rdb-s.h
deleted file mode 100644
index 2d460c9357..0000000000
--- a/src/djgppdos/rdb-s.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 2005-2020 by Sonic Team Junior.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief Set Com port and speed for GDBStubs for DJGGP
-///
-///	copy and rename as rdb.h and set the defines below as needed
-
-#define DEBUG_COM_PORT 2
-#define  DEBUG_COM_PORT_SPEED 9600
diff --git a/src/djgppdos/vid_vesa.c b/src/djgppdos/vid_vesa.c
deleted file mode 100644
index 61ed18e4b6..0000000000
--- a/src/djgppdos/vid_vesa.c
+++ /dev/null
@@ -1,903 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief extended vesa VESA2.0 video modes i/o
-
-#include <stdlib.h>
-
-#include "../i_system.h"        //I_Error()
-#include "vid_vesa.h"
-#include "../doomdef.h"         //MAXVIDWIDTH, MAXVIDHEIGHT
-#include "../screen.h"
-
-#include <dpmi.h>
-#include <go32.h>
-#include <sys/farptr.h>
-#include <sys/movedata.h>
-#include <sys/segments.h>
-#include <sys/nearptr.h>
-
-#include "../console.h"
-#include "../command.h"            //added:21-03-98: vid_xxx commands
-#include "../i_video.h"
-
-
-// PROTOS
-static vmode_t *VID_GetModePtr (int modenum);
-static int  VID_VesaGetModeInfo (int modenum);
-static void VID_VesaGetExtraModes (void);
-static INT32  VID_VesaInitMode (viddef_t *lvid, vmode_t *pcurrentmode);
-
-static void VID_Command_NumModes_f (void);
-static void VID_Command_ModeInfo_f (void);
-static void VID_Command_ModeList_f (void);
-static void VID_Command_Mode_f (void);
-
-consvar_t cv_vidwait = {"vid_wait", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
-static consvar_t cv_stretch = {"stretch", "On", CV_SAVE|CV_NOSHOWHELP, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
-
-#define VBEVERSION      2       // we need vesa2 or higher
-
-// -----------------------------------------------------
-#define MASK_LINEAR(addr)     (addr & 0x000FFFFF)
-#define RM_TO_LINEAR(addr)    (((addr & 0xFFFF0000) >> 12) + (addr & 0xFFFF))
-#define RM_OFFSET(addr)       (addr & 0xF)
-#define RM_SEGMENT(addr)      ((addr >> 4) & 0xFFFF)
-// -----------------------------------------------------
-
-static int totalvidmem;
-
-static vmode_t      vesa_modes[MAX_VESA_MODES] = {{NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, NULL, 0}};
-static vesa_extra_t vesa_extra[MAX_VESA_MODES];
-
-//this is the only supported non-vesa mode : standard 320x200x256c.
-#define NUMVGAVIDMODES  1
-static INT32 VGA_InitMode (viddef_t *lvid, vmode_t *pcurrentmode);
-static char vgamode1[] ="320x200";
-static vmode_t      vgavidmodes[NUMVGAVIDMODES] = {
-  {
-	NULL,
-	vgamode1,
-	320, 200,  //(200.0/320.0)*(320.0/240.0),
-	320, 1,    // rowbytes, bytes per pixel
-	0, 1,
-	NULL,
-	VGA_InitMode, 0
-  }
-};
-
-static char         names[MAX_VESA_MODES][10];
-
-//----------------------------i_video.c------------------------------------
-// these ones should go to i_video.c, but I prefer keep them away from the
-// doom sources until the vesa stuff is ok.
-static int     numvidmodes;   //total number of video modes, vga, vesa1, vesa2.
-static vmode_t *pvidmodes;    //start of videomodes list.
-static vmode_t *pcurrentmode; // the current active videomode.
-//----------------------------i_video.c------------------------------------
-
-
-
-// table des modes videos.
-// seul le mode 320x200x256c standard VGA est support‚ sans le VESA.
-// ce mode est le mode num‚ro 0 dans la liste.
-typedef struct
-{
-	int modenum;            // vesa vbe2.0 modenum
-	int mode_attributes;
-	int winasegment;
-	int winbsegment;
-	int bytes_per_scanline; // bytes per logical scanline (+16)
-	int win;                // window number (A=0, B=1)
-	int win_size;           // window size (+6)
-	int granularity;        // how finely i can set the window in vid mem (+4)
-	int width, height;      // displayed width and height (+18, +20)
-	int bits_per_pixel;     // er, better be 8, 15, 16, 24, or 32 (+25)
-	int bytes_per_pixel;    // er, better be 1, 2, or 4
-	int memory_model;       // and better be 4 or 6, packed or direct color (+27)
-	int num_pages;          // number of complete frame buffer pages (+29)
-	int red_width;          // the # of bits in the red component (+31)
-	int red_pos;            // the bit position of the red component (+32)
-	int green_width;        // etc.. (+33)
-	int green_pos;          // (+34)
-	int blue_width;         // (+35)
-	int blue_pos;           // (+36)
-	int pptr;
-	int pagesize;
-	int numpages;
-} modeinfo_t;
-
-static vbeinfoblock_t vesainfo;
-static vesamodeinfo_t vesamodeinfo;
-
-// ------------------------------------------------------------------------
-// DOS stuff
-// ------------------------------------------------------------------------
-static unsigned long conventional_memory = (unsigned long)-1;
-
-FUNCINLINE static ATTRINLINE void map_in_conventional_memory(void)
-{
-	if (conventional_memory == (unsigned long)-1)
-	{
-		if (__djgpp_nearptr_enable())
-		{
-			conventional_memory = __djgpp_conventional_base;
-		}
-	}
-}
-
-// Converts a flat 32 bit ptr to a realmode 0x12345 type ptr (seg<<4 + offs)
-#if 0
-unsigned int ptr2real(void *ptr)
-{
-	map_in_conventional_memory();
-	return (int)ptr - conventional_memory;
-}
-#endif
-
-// Converts 0x12345 (seg<<4+offs) realmode ptr to a flat 32bit ptr
-FUNCINLINE static ATTRINLINE void *real2ptr(unsigned int real)
-{
-	map_in_conventional_memory();
-	return (void *) (real + conventional_memory);
-}
-
-// ------------------------------------------------------------------------
-
-
-/* ======================================================================== */
-// Add the standard VGA video modes (only one now) to the video modes list.
-/* ======================================================================== */
-static inline void VGA_Init(void)
-{
-	vgavidmodes[NUMVGAVIDMODES-1].pnext = pvidmodes;
-	pvidmodes = &vgavidmodes[0];
-	numvidmodes += NUMVGAVIDMODES;
-}
-
-
-//added:30-01-98: return number of video modes in pvidmodes list
-INT32 VID_NumModes(void)
-{
-	return numvidmodes;
-}
-
-//added:21-03-98: return info on video mode
-FUNCINLINE static ATTRINLINE const char *VID_ModeInfo (int modenum, char **ppheader)
-{
-	static const char *badmodestr = "Bad video mode number\n";
-	vmode_t     *pv;
-
-	pv = VID_GetModePtr (modenum);
-
-	if (!pv)
-	{
-		if (ppheader)
-			*ppheader = NULL;
-		return badmodestr;
-	}
-	else
-	{
-		//if (ppheader)
-		//    *ppheader = pv->header;
-		return pv->name;
-	}
-}
-
-
-
-//added:03-02-98: return a video mode number from the dimensions
-INT32 VID_GetModeForSize( INT32 w, INT32 h)
-{
-	vmode_t *pv;
-	int modenum;
-
-	pv = pvidmodes;
-	for (modenum=0; pv!=NULL; pv=pv->pnext,modenum++ )
-	{
-		if ( pv->width==(unsigned)w && pv->height==(unsigned)h )
-			return modenum;
-	}
-
-	return 0;
-}
-
-
-/* ======================================================================== */
-//
-/* ======================================================================== */
-void    VID_Init (void)
-{
-	COM_AddCommand ("vid_nummodes", VID_Command_NumModes_f);
-	COM_AddCommand ("vid_modeinfo", VID_Command_ModeInfo_f);
-	COM_AddCommand ("vid_modelist", VID_Command_ModeList_f);
-	COM_AddCommand ("vid_mode", VID_Command_Mode_f);
-	CV_RegisterVar (&cv_vidwait);
-	CV_RegisterVar (&cv_stretch);
-
-	//setup the videmodes list,
-	// note that mode 0 must always be VGA mode 0x13
-	pvidmodes = NULL;
-	pcurrentmode = NULL;
-	numvidmodes = 0;
-	// setup the vesa_modes list
-	VID_VesaGetExtraModes ();
-
-	// the game boots in 320x200 standard VGA, but
-	// we need a highcolor mode to run the game in highcolor
-	if (highcolor && numvidmodes==0)
-		I_Error ("No 15bit highcolor VESA2 video mode found, cannot run in highcolor.\n");
-
-	// add the vga modes at the start of the modes list
-	VGA_Init();
-
-
-#ifdef DEBUG
-	CONS_Printf("VID_SetMode(%d)\n",vid.modenum);
-#endif
-	VID_SetMode (0); //vid.modenum);
-
-
-#ifdef DEBUG
-	CONS_Printf("after VID_SetMode\n");
-	CONS_Printf("vid.width    %d\n",vid.width);
-	CONS_Printf("vid.height   %d\n",vid.height);
-	CONS_Printf("vid.buffer   %x\n",vid.buffer);
-	CONS_Printf("vid.rowbytes %d\n",vid.rowbytes);
-	CONS_Printf("vid.numpages %d\n",vid.numpages);
-	CONS_Printf("vid.recalc   %d\n",vid.recalc);
-	CONS_Printf("vid.direct   %x\n",vid.direct);
-#endif
-
-}
-
-
-// ========================================================================
-// Returns a vmode_t from the video modes list, given a video mode number.
-// ========================================================================
-vmode_t *VID_GetModePtr (int modenum)
-{
-	vmode_t *pv;
-
-	pv = pvidmodes;
-	if (!pv)
-		I_Error ("VID_error 1\n");
-
-	while (modenum--)
-	{
-		pv = pv->pnext;
-		if (!pv)
-			I_Error ("VID_error 2\n");
-	}
-
-	return pv;
-}
-
-
-//added:30-01-98:return the name of a video mode
-const char *VID_GetModeName (INT32 modenum)
-{
-	return (VID_GetModePtr(modenum))->name;
-}
-
-
-// ========================================================================
-// Sets a video mode
-// ========================================================================
-INT32 VID_SetMode (INT32 modenum)  //, UINT8 *palette)
-{
-	int     vstat;
-	vmode_t *pnewmode, *poldmode;
-
-	if ((modenum >= numvidmodes) || (modenum < 0))
-	{
-		if (pcurrentmode == NULL)
-		{
-			modenum = 0;    // mode hasn't been set yet, so initialize to base
-							//  mode since they gave us an invalid initial mode
-		}
-		else
-		{
-			//nomodecheck = true;
-			I_Error ("Unknown video mode: %d\n", modenum);
-			//nomodecheck = false;
-			return 0;
-		}
-	}
-
-	pnewmode = VID_GetModePtr (modenum);
-
-	if (pnewmode == pcurrentmode)
-		return 1;   // already in the desired mode
-
-	// initialize the new mode
-	poldmode = pcurrentmode;
-	pcurrentmode = pnewmode;
-
-	// initialize vidbuffer size for setmode
-	vid.width  = pcurrentmode->width;
-	vid.height = pcurrentmode->height;
-	//vid.aspect = pcurrentmode->aspect;
-	vid.rowbytes = pcurrentmode->rowbytes;
-	vid.bpp      = pcurrentmode->bytesperpixel;
-
-	//debug
-	//if (vid.rowbytes != vid.width)
-	//    I_Error("vidrowbytes (%d) <> vidwidth(%d)\n",vid.rowbytes,vid.width);
-
-	vstat = (*pcurrentmode->setmode) (&vid, pcurrentmode);
-
-	if (vstat < 1)
-	{
-		if (vstat == 0)
-		{
-			// harware could not setup mode
-			//if (!VID_SetMode (vid.modenum))
-			//    I_Error ("VID_SetMode: couldn't set video mode (hard failure)");
-			I_Error("Couldn't set video mode %d\n", modenum);
-		}
-		else
-		if (vstat == -1)
-		{
-			CONS_Printf ("Not enough mem for VID_SetMode...\n");
-
-			// not enough memory; just put things back the way they were
-			pcurrentmode = poldmode;
-			vid.width = pcurrentmode->width;
-			vid.height = pcurrentmode->height;
-			vid.rowbytes = pcurrentmode->rowbytes;
-			vid.bpp      = pcurrentmode->bytesperpixel;
-			return 0;
-		}
-	}
-
-	vid.modenum = modenum;
-
-	//printf ("%s\n", VID_ModeInfo (vid.modenum, NULL));
-
-	//added:20-01-98: recalc all tables and realloc buffers based on
-	//                vid values.
-	vid.recalc = 1;
-
-	if (!cv_stretch.value && (float)vid.width/vid.height != ((float)BASEVIDWIDTH/BASEVIDHEIGHT))
-		vid.height = (int)(vid.width * ((float)BASEVIDHEIGHT/BASEVIDWIDTH));// Adjust the height to match
-
-	return 1;
-}
-
-void VID_CheckRenderer(void) {}
-void VID_CheckGLLoaded(rendermode_t oldrender) {}
-
-
-
-// converts a segm:offs 32bit pair to a 32bit flat ptr
-#if 0
-void *VID_ExtraFarToLinear (void *ptr)
-{
-	int     temp;
-
-	temp = (int)ptr;
-	return real2ptr (((temp & 0xFFFF0000) >> 12) + (temp & 0xFFFF));
-}
-#endif
-
-
-
-// ========================================================================
-// Helper function for VID_VesaGetExtraModes
-// In:  vesa mode number, from the vesa videomodenumbers list
-// Out: false, if no info for given modenum
-// ========================================================================
-int VID_VesaGetModeInfo (int modenum)
-{
-	int     bytes_per_pixel;
-	unsigned int          i;
-	__dpmi_regs regs;
-
-	for (i=0; i<sizeof (vesamodeinfo_t); i++)
-		_farpokeb(_dos_ds, MASK_LINEAR(__tb)+i, 0);
-
-	regs.x.ax = 0x4f01;
-	regs.x.di = RM_OFFSET(__tb);
-	regs.x.es = RM_SEGMENT(__tb);
-	regs.x.cx = modenum;
-	__dpmi_int(0x10, &regs);
-	if (regs.h.ah)
-		return false;
-	else
-	{
-		dosmemget (MASK_LINEAR(__tb), sizeof (vesamodeinfo_t), &vesamodeinfo);
-
-		bytes_per_pixel = (vesamodeinfo.BitsPerPixel+1)/8;
-
-		// we add either highcolor or lowcolor video modes, not the two
-		if (highcolor && (vesamodeinfo.BitsPerPixel != 15))
-			return false;
-		if (!highcolor && (vesamodeinfo.BitsPerPixel != 8))
-			return false;
-
-		if ((bytes_per_pixel > 2) ||
-			(vesamodeinfo.XResolution > MAXVIDWIDTH) ||
-			(vesamodeinfo.YResolution > MAXVIDHEIGHT))
-		{
-			return false;
-		}
-
-		// we only want color graphics modes that are supported by the hardware
-		if ((vesamodeinfo.ModeAttributes &
-			(MODE_SUPPORTED_IN_HW | COLOR_MODE | GRAPHICS_MODE) ) !=
-			 (MODE_SUPPORTED_IN_HW | COLOR_MODE | GRAPHICS_MODE))
-		{
-			return false;
-		}
-
-		// we only work with linear frame buffers, except for 320x200,
-		// which is linear when banked at 0xA000
-		if (!(vesamodeinfo.ModeAttributes & LINEAR_FRAME_BUFFER))
-		{
-			if ((vesamodeinfo.XResolution != 320) ||
-				(vesamodeinfo.YResolution != 200))
-			{
-				return false;
-			}
-		}
-
-		// pagesize
-		if ((vesamodeinfo.BytesPerScanLine * vesamodeinfo.YResolution)
-		    > totalvidmem)
-		{
-			return false;
-		}
-
-		vesamodeinfo.NumberOfImagePages = 1;
-
-
-#ifdef DEBUG
-		CONS_Printf("VID: (VESA) info for mode 0x%x\n", modeinfo.modenum);
-		CONS_Printf("  mode attrib = 0x%0x\n", modeinfo.mode_attributes);
-		CONS_Printf("  win a attrib = 0x%0x\n", *(UINT8 *)(infobuf+2));
-		CONS_Printf("  win b attrib = 0x%0x\n", *(UINT8 *)(infobuf+3));
-		CONS_Printf("  win a seg 0x%0x\n", (int) modeinfo.winasegment);
-		CONS_Printf("  win b seg 0x%0x\n", (int) modeinfo.winbsegment);
-		CONS_Printf("  bytes per scanline = %d\n",
-				modeinfo.bytes_per_scanline);
-		CONS_Printf("  width = %d, height = %d\n", modeinfo.width,
-				modeinfo.height);
-		CONS_Printf("  win = %c\n", 'A' + modeinfo.win);
-		CONS_Printf("  win granularity = %d\n", modeinfo.granularity);
-		CONS_Printf("  win size = %d\n", modeinfo.win_size);
-		CONS_Printf("  bits per pixel = %d\n", modeinfo.bits_per_pixel);
-		CONS_Printf("  bytes per pixel = %d\n", modeinfo.bytes_per_pixel);
-		CONS_Printf("  memory model = 0x%x\n", modeinfo.memory_model);
-		CONS_Printf("  num pages = %d\n", modeinfo.num_pages);
-		CONS_Printf("  red width = %d\n", modeinfo.red_width);
-		CONS_Printf("  red pos = %d\n", modeinfo.red_pos);
-		CONS_Printf("  green width = %d\n", modeinfo.green_width);
-		CONS_Printf("  green pos = %d\n", modeinfo.green_pos);
-		CONS_Printf("  blue width = %d\n", modeinfo.blue_width);
-		CONS_Printf("  blue pos = %d\n", modeinfo.blue_pos);
-		CONS_Printf("  phys mem = %x\n", modeinfo.pptr);
-#endif
-	}
-
-	return true;
-}
-
-
-// ========================================================================
-// Get extended VESA modes information, keep the ones that we support,
-// so they'll be available in the game Video menu.
-// ========================================================================
-#define MAXVESADESC 100
-static char vesadesc[MAXVESADESC] = "";
-
-void VID_VesaGetExtraModes (void)
-{
-	unsigned int    i;
-	unsigned long   addr;
-	int             nummodes;
-	__dpmi_meminfo  phys_mem_info;
-	unsigned long   mode_ptr;
-	__dpmi_regs     regs;
-
-	// make a copy of the video modes list! else trash in __tb
-	UINT16          vmode[MAX_VESA_MODES+1];
-	int             numvmodes;
-	UINT16          vesamode;
-
-	// new ugly stuff...
-	for (i=0; i<sizeof (vbeinfoblock_t); i++)
-		_farpokeb(_dos_ds, MASK_LINEAR(__tb)+i, 0);
-
-	dosmemput("VBE2", 4, MASK_LINEAR(__tb));
-
-	// see if VESA support is available
-	regs.x.ax = 0x4f00;
-	regs.x.di = RM_OFFSET(__tb);
-	regs.x.es = RM_SEGMENT(__tb);
-	__dpmi_int(0x10, &regs);
-	if (regs.h.ah)
-		goto no_vesa;
-
-	dosmemget(MASK_LINEAR(__tb), sizeof (vbeinfoblock_t), &vesainfo);
-
-	if (strncmp((void *)vesainfo.VESASignature, "VESA", 4) != 0)
-	{
-no_vesa:
-		CONS_Printf ("No VESA driver\n");
-		return;
-	}
-
-	if (vesainfo.VESAVersion < (VBEVERSION<<8))
-	{
-		CONS_Printf ("VESA VBE %d.0 not available\n", VBEVERSION);
-		return;
-	}
-
-	//
-	// vesa version number
-	//
-	CONS_Printf ("%4.4s %d.%d (", vesainfo.VESASignature,
-	             vesainfo.VESAVersion>>8,
-	             vesainfo.VESAVersion&0xFF);
-
-	//
-	// vesa description string
-	//
-	i = 0;
-	addr = RM_TO_LINEAR(vesainfo.OemStringPtr);
-	_farsetsel(_dos_ds);
-	while (_farnspeekb(addr) != 0)
-	{
-		vesadesc[i++] = _farnspeekb(addr++);
-		if (i == MAXVESADESC-1)
-			break;
-	}
-	vesadesc[i]=0;
-	CONS_Printf ("%s)\n",vesadesc);
-
-	totalvidmem = vesainfo.TotalMemory << 16;
-
-   //
-   // find 8 bit modes
-   //
-	numvmodes = 0;
-	mode_ptr = RM_TO_LINEAR(vesainfo.VideoModePtr);
-	while ((vmode[numvmodes] = _farpeekw(_dos_ds, mode_ptr)) != 0xFFFF)
-	{
-		numvmodes++;
-		if ( numvmodes == MAX_VESA_MODES )
-			break;
-		mode_ptr += 2;
-	}
-	vmode[numvmodes] = 0xffff;
-
-	nummodes = 0;       // number of video modes accepted for the game
-
-	numvmodes=0;  // go again through vmodes table
-	while ( ((vesamode=vmode[numvmodes++]) != 0xFFFF) && (nummodes < MAX_VESA_MODES) )
-	{
-		//fill the modeinfo struct.
-		if (VID_VesaGetModeInfo (vesamode))
-		{
-			vesa_modes[nummodes].pnext = &vesa_modes[nummodes+1];
-			if (vesamodeinfo.XResolution > 999)
-			{
-				if (vesamodeinfo.YResolution > 999)
-				{
-					sprintf (&names[nummodes][0], "%4dx%4d", vesamodeinfo.XResolution,
-					         vesamodeinfo.YResolution);
-					names[nummodes][9] = 0;
-				}
-				else
-				{
-					sprintf (&names[nummodes][0], "%4dx%3d", vesamodeinfo.XResolution,
-					         vesamodeinfo.YResolution);
-					names[nummodes][8] = 0;
-				}
-			}
-			else
-			{
-				if (vesamodeinfo.YResolution > 999)
-				{
-					sprintf (&names[nummodes][0], "%3dx%4d", vesamodeinfo.XResolution,
-					         vesamodeinfo.YResolution);
-					names[nummodes][8] = 0;
-				}
-				else
-				{
-					sprintf (&names[nummodes][0], "%3dx%3d", vesamodeinfo.XResolution,
-					         vesamodeinfo.YResolution);
-					names[nummodes][7] = 0;
-				}
-			}
-
-			vesa_modes[nummodes].name = &names[nummodes][0];
-			vesa_modes[nummodes].width = vesamodeinfo.XResolution;
-			vesa_modes[nummodes].height = vesamodeinfo.YResolution;
-
-			//added:20-01-98:aspect ratio to be implemented...
-			vesa_modes[nummodes].rowbytes = vesamodeinfo.BytesPerScanLine;
-			vesa_modes[nummodes].windowed = 0;
-			vesa_modes[nummodes].pextradata = &vesa_extra[nummodes];
-			vesa_modes[nummodes].setmode = VID_VesaInitMode;
-
-			if (vesamodeinfo.ModeAttributes & LINEAR_FRAME_BUFFER)
-			{
-			// add linear bit to mode for linear modes
-				vesa_extra[nummodes].vesamode = vesamode | LINEAR_MODE;
-				vesa_modes[nummodes].numpages = 1; //vesamodeinfo.NumberOfImagePages;
-
-				phys_mem_info.address = (int)vesamodeinfo.PhysBasePtr;
-				phys_mem_info.size = 0x400000;
-
-				// returns -1 on error
-				if (__dpmi_physical_address_mapping(&phys_mem_info))
-				{
-					//skip this mode, it doesnt work
-					continue;
-				}
-
-				// if physical mapping was ok... convert the selector:offset
-				vesa_extra[nummodes].plinearmem =
-				 real2ptr (phys_mem_info.address);
-
-				// lock the region
-				__dpmi_lock_linear_region (&phys_mem_info);
-			}
-			else
-			{
-			// banked at 0xA0000
-				vesa_extra[nummodes].vesamode = vesamode;
-				//vesa_extra[nummodes].pages[0] = 0;
-				vesa_extra[nummodes].plinearmem =
-				 real2ptr (vesamodeinfo.WinASegment<<4);
-
-				vesa_modes[nummodes].numpages = 1; //modeinfo.numpages;
-			}
-
-			vesa_modes[nummodes].bytesperpixel = (vesamodeinfo.BitsPerPixel+1)/8;
-
-			nummodes++;
-		}
-	}
-
-// add the VESA modes at the start of the mode list (if there are any)
-	if (nummodes)
-	{
-		vesa_modes[nummodes-1].pnext = NULL; //pvidmodes;
-		pvidmodes = &vesa_modes[0];
-		numvidmodes += nummodes;
-	}
-
-}
-
-
-// ========================================================================
-// Free the video buffer of the last video mode,
-// allocate a new buffer for the video mode to set.
-// ========================================================================
-static boolean VID_FreeAndAllocVidbuffer (viddef_t *lvid)
-{
-	int  vidbuffersize;
-
-	vidbuffersize = (lvid->width * lvid->height * lvid->bpp * NUMSCREENS);  //status bar
-
-	// free allocated buffer for previous video mode
-	if (lvid->buffer!=NULL)
-	{
-		free(lvid->buffer);
-	}
-
-	// allocate the new screen buffer
-	if ( (lvid->buffer = (UINT8 *) malloc(vidbuffersize))==NULL )
-		return false;
-
-	// initially clear the video buffer
-	memset (lvid->buffer, 0x00, vidbuffersize);
-
-#ifdef DEBUG
-	CONS_Printf("VID_FreeAndAllocVidbuffer done, vidbuffersize: %x\n",vidbuffersize);
-#endif
-	return true;
-}
-
-
-// ========================================================================
-// Set video mode routine for STANDARD VGA MODES (NO HIGHCOLOR)
-// Out: 1 ok,
-//      0 hardware could not set mode,
-//     -1 no mem
-// ========================================================================
-static INT32 VGA_InitMode (viddef_t *lvid, vmode_t *currentmodep)
-{
-	__dpmi_regs   regs;
-
-	if (!VID_FreeAndAllocVidbuffer (lvid))
-		return -1;                  //no mem
-
-	//added:26-01-98: should clear video mem here
-
-	//set mode 0x13
-	regs.h.ah = 0;
-	regs.h.al = 0x13;
-	__dpmi_int(0x10, &regs);
-
-	// here it is the standard VGA 64k window, not an LFB
-	// (you could have 320x200x256c with LFB in the vesa modes)
-	lvid->direct = (UINT8 *) real2ptr (0xa0000);
-	lvid->u.numpages = 1;
-	lvid->bpp = currentmodep->bytesperpixel;
-
-	return 1;
-}
-
-
-// ========================================================================
-// Set video mode routine for VESA video modes, see VID_SetMode()
-// Out: 1 ok,
-//      0 hardware could not set mode,
-//     -1 no mem
-// ========================================================================
-INT32 VID_VesaInitMode (viddef_t *lvid, vmode_t *currentmodep)
-{
-	vesa_extra_t    *pextra;
-	__dpmi_regs     regs;
-
-	pextra = currentmodep->pextradata;
-
-#ifdef DEBUG
-	CONS_Printf("VID_VesaInitMode...\n");
-	CONS_Printf(" currentmodep->name %s\n",currentmodep->name);
-	CONS_Printf("               width %d\n",currentmodep->width);
-	CONS_Printf("               height %d\n",currentmodep->height);
-	CONS_Printf("               rowbytes %d\n",currentmodep->rowbytes);
-	CONS_Printf("               windowed %d\n",currentmodep->windowed);
-	CONS_Printf("               numpages %d\n",currentmodep->numpages);
-	CONS_Printf(" currentmodep->pextradata :\n");
-	CONS_Printf("                ->vesamode %x\n",pextra->vesamode);
-	CONS_Printf("                ->plinearmem %x\n\n",pextra->plinearmem);
-#endif
-
-	//added:20-01-98:no page flipping now... TO DO!!!
-	lvid->u.numpages = 1;
-
-	// clean up any old vid buffer lying around, alloc new if needed
-	if (!VID_FreeAndAllocVidbuffer (lvid))
-		return -1;                  //no mem
-
-
-	//added:20-01-98: should clear video mem here
-
-
-	// set the mode
-	regs.x.ax = 0x4f02;
-	regs.x.bx = pextra->vesamode;
-	__dpmi_int (0x10, &regs);
-
-	if (regs.x.ax != 0x4f)
-		return 0;               // could not set mode
-
-//added:20-01-98: should setup wait_vsync flag, currentpage here...
-//                plus check for display_enable bit
-
-//added:20-01-98: here we should set the page if page flipping...
-
-	// points to LFB, or the start of VGA mem.
-	lvid->direct = pextra->plinearmem;
-	lvid->bpp    = currentmodep->bytesperpixel;
-
-	return 1;
-}
-
-// ========================================================================
-//                     VIDEO MODE CONSOLE COMMANDS
-// ========================================================================
-
-
-//  vid_nummodes
-//
-//added:21-03-98:
-void VID_Command_NumModes_f (void)
-{
-	int     nummodes;
-
-	nummodes = VID_NumModes ();
-	CONS_Printf ("%d video mode(s) available(s)\n", nummodes);
-}
-
-
-//  vid_modeinfo <modenum>
-//
-void VID_Command_ModeInfo_f (void)
-{
-	vmode_t     *pv;
-	int         modenum;
-
-	if (COM_Argc()!=2)
-		modenum = vid.modenum;          // describe the current mode
-	else
-		modenum = atoi (COM_Argv(1));   //    .. the given mode number
-
-	if (modenum >= VID_NumModes())
-	{
-		CONS_Printf ("No such video mode\n");
-		return;
-	}
-
-	pv = VID_GetModePtr (modenum);
-
-	CONS_Printf ("%s\n", VID_ModeInfo (modenum, NULL));
-	CONS_Printf ("width : %d\n"
-	             "height: %d\n"
-	             "bytes per scanline: %d\n"
-	             "bytes per pixel: %d\n"
-	             "numpages: %d\n",
-	             pv->width,
-	             pv->height,
-	             pv->rowbytes,
-	             pv->bytesperpixel,
-	             pv->numpages );
-}
-
-
-//  vid_modelist
-//
-void VID_Command_ModeList_f (void)
-{
-	int         i, nummodes;
-	const char  *pinfo;
-	char        *pheader;
-	vmode_t     *pv;
-	boolean     na;
-
-	na = false;
-
-	nummodes = VID_NumModes ();
-	for (i=0 ; i<nummodes ; i++)
-	{
-		pv = VID_GetModePtr (i);
-		pinfo = VID_ModeInfo (i, &pheader);
-
-		if (i==0 || pv->bytesperpixel==1)
-			CONS_Printf ("%d: %s\n", i, pinfo);
-		else
-			CONS_Printf ("%d: %s (hicolor)\n", i, pinfo);
-	}
-
-}
-
-
-//  vid_mode <modenum>
-//
-void VID_Command_Mode_f (void)
-{
-	int         modenum;
-
-	if (COM_Argc()!=2)
-	{
-		CONS_Printf ("vid_mode <modenum> : set video mode\n");
-		return;
-	}
-
-	modenum = atoi(COM_Argv(1));
-
-	if (modenum >= VID_NumModes())
-		CONS_Printf ("No such video mode\n");
-	else
-		// request vid mode change
-		setmodeneeded = modenum+1;
-}
diff --git a/src/djgppdos/vid_vesa.h b/src/djgppdos/vid_vesa.h
deleted file mode 100644
index b704336e8f..0000000000
--- a/src/djgppdos/vid_vesa.h
+++ /dev/null
@@ -1,109 +0,0 @@
-// Emacs style mode select   -*- C++ -*-
-//-----------------------------------------------------------------------------
-//
-// Copyright (C) 1998-2000 by DooM Legacy Team.
-//
-// 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.
-//-----------------------------------------------------------------------------
-/// \file
-/// \brief VESA extra modes.
-
-#include "../doomdef.h"
-#include "../screen.h"
-
-
-
-#define MODE_SUPPORTED_IN_HW    0x0001
-#define COLOR_MODE              0x0008
-#define GRAPHICS_MODE           0x0010
-#define VGA_INCOMPATIBLE        0x0020
-#define LINEAR_FRAME_BUFFER     0x0080
-#define LINEAR_MODE             0x4000
-
-#define MAX_VESA_MODES          30  // we'll just take the first 30 if there
-
-
-// VESA information block structure
-typedef struct vbeinfoblock_s
-{
-	UINT8          VESASignature[4];
-	UINT16         VESAVersion;
-	unsigned long  OemStringPtr;
-	UINT8          Capabilities[4];
-	unsigned long  VideoModePtr;
-	UINT16         TotalMemory;
-	UINT8          OemSoftwareRev[2];
-	UINT8          OemVendorNamePtr[4];
-	UINT8          OemProductNamePtr[4];
-	UINT8          OemProductRevPtr[4];
-	UINT8          Reserved[222];
-	UINT8          OemData[256];
-}  ATTRPACK vbeinfoblock_t;
-
-
-// VESA information for a specific mode
-typedef struct vesamodeinfo_s
-{
-	UINT16         ModeAttributes;
-	UINT8          WinAAttributes;
-	UINT8          WinBAttributes;
-	UINT16         WinGranularity;
-	UINT16         WinSize;
-	UINT16         WinASegment;
-	UINT16         WinBSegment;
-	unsigned long  WinFuncPtr;
-	UINT16         BytesPerScanLine;
-	UINT16         XResolution;
-	UINT16         YResolution;
-	UINT8          XCharSize;
-	UINT8          YCharSize;
-	UINT8          NumberOfPlanes;
-	UINT8          BitsPerPixel;
-	UINT8          NumberOfBanks;
-	UINT8          MemoryModel;
-	UINT8          BankSize;
-	UINT8          NumberOfImagePages;
-	UINT8          Reserved_page;
-	UINT8          RedMaskSize;
-	UINT8          RedMaskPos;
-	UINT8          GreenMaskSize;
-	UINT8          GreenMaskPos;
-	UINT8          BlueMaskSize;
-	UINT8          BlueMaskPos;
-	UINT8          ReservedMaskSize;
-	UINT8          ReservedMaskPos;
-	UINT8          DirectColorModeInfo;
-
-	/* VBE 2.0 extensions */
-	unsigned long  PhysBasePtr;
-	unsigned long  OffScreenMemOffset;
-	UINT16         OffScreenMemSize;
-
-	/* VBE 3.0 extensions */
-	UINT16         LinBytesPerScanLine;
-	UINT8          BnkNumberOfPages;
-	UINT8          LinNumberOfPages;
-	UINT8          LinRedMaskSize;
-	UINT8          LinRedFieldPos;
-	UINT8          LinGreenMaskSize;
-	UINT8          LinGreenFieldPos;
-	UINT8          LinBlueMaskSize;
-	UINT8          LinBlueFieldPos;
-	UINT8          LinRsvdMaskSize;
-	UINT8          LinRsvdFieldPos;
-	unsigned long  MaxPixelClock;
-
-	UINT8          Reserved[190];
-} ATTRPACK vesamodeinfo_t;
-
-
-// setup standard VGA + VESA modes list, activate the default video mode.
-void VID_Init (void);
diff --git a/src/doomdef.h b/src/doomdef.h
index fab83d38c1..31dd2bcdae 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -110,10 +110,6 @@
 #include <io.h>
 #endif
 
-#ifdef PC_DOS
-#include <conio.h>
-#endif
-
 //#define NOMD5
 
 // Uncheck this to compile debugging code
@@ -558,8 +554,8 @@ INT32 I_GetKey(void);
 #endif
 
 // The character that separates pathnames. Forward slash on
-// most systems, but reverse solidus (\) on Windows and DOS.
-#if defined (PC_DOS) || defined (_WIN32)
+// most systems, but reverse solidus (\) on Windows.
+#if defined (_WIN32)
 	#define PATHSEP "\\"
 #else
 	#define PATHSEP "/"
diff --git a/src/m_menu.c b/src/m_menu.c
index ddadec7997..634bc48ca8 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -74,12 +74,6 @@
 #endif
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-int	snprintf(char *str, size_t n, const char *fmt, ...);
-//int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 #if defined (__GNUC__) && (__GNUC__ >= 4)
 #define FIXUPO0
 #endif
diff --git a/src/m_misc.c b/src/m_misc.c
index 216fde056c..42890cb08a 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -793,8 +793,6 @@ static void M_PNGText(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png
 	 "SDL";
 #elif defined (_WINDOWS)
 	 "DirectX";
-#elif defined (PC_DOS)
-	 "Allegro";
 #else
 	 "Unknown";
 #endif
diff --git a/src/r_skins.c b/src/r_skins.c
index a1484a2b3d..a4fe1982f7 100644
--- a/src/r_skins.c
+++ b/src/r_skins.c
@@ -31,12 +31,6 @@
 #include "hardware/hw_md2.h"
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-int	snprintf(char *str, size_t n, const char *fmt, ...);
-//int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 INT32 numskins = 0;
 skin_t skins[MAXSKINS];
 
diff --git a/src/w_wad.c b/src/w_wad.c
index e6dedba227..a3a20a11a1 100644
--- a/src/w_wad.c
+++ b/src/w_wad.c
@@ -70,12 +70,6 @@
 #include "hardware/hw_glob.h"
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-int	snprintf(char *str, size_t n, const char *fmt, ...);
-//int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 #ifdef _DEBUG
 #include "console.h"
 #endif
diff --git a/src/y_inter.c b/src/y_inter.c
index 58e0c4a885..78628e41dd 100644
--- a/src/y_inter.c
+++ b/src/y_inter.c
@@ -43,12 +43,6 @@
 #include "hardware/hw_main.h"
 #endif
 
-#ifdef PC_DOS
-#include <stdio.h> // for snprintf
-int	snprintf(char *str, size_t n, const char *fmt, ...);
-//int	vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
-#endif
-
 typedef struct
 {
 	char patch[9];
-- 
GitLab