From 0d48d4c8339598f83d3b4d0bdf5f38c782e6a271 Mon Sep 17 00:00:00 2001 From: Steel Titanium Date: Sat, 25 Jul 2020 18:55:51 -0400 Subject: [PATCH 1/2] 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 42c6dc2c6..000000000 --- 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 42c6dc2c6..000000000 --- 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 42c6dc2c6..000000000 --- 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 42c6dc2c6..000000000 --- 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 9ea1ea239..5fe41248d 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 4a2c0687b..7eca76d9d 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 aac94d473..6c3cbd8ab 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 6bc42da14..f7cbdfd26 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -24,12 +24,6 @@ #include // for getcwd #endif -#ifdef PC_DOS -#include // 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 #include @@ -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 a856ab352..89890d9e5 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -46,12 +46,6 @@ #include "hardware/hw_light.h" #endif -#ifdef PC_DOS -#include // 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 857a7267b..000000000 --- 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 6a91c707f..000000000 --- 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 -#include -#include -#include -#include -#include -#include -#include -#ifdef STANDALONE -#include /* 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(®s, 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, ®s) == -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(®s, 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, ®s) == -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(®s, 0, sizeof regs); - regs.x.ax = 0x1500; - regs.x.bx = 0x0; - __dpmi_int(0x2f, ®s); - 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(®s, 0, sizeof regs); - regs.x.ax = 0x150C; - __dpmi_int(0x2f, ®s); - 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 3997128a2..000000000 --- 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 2a629ca17..000000000 --- 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 ] [loop ]\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) - { - //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 1b8894470..000000000 --- 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 -#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 -//### 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 866aa8d8b..000000000 --- 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 -#include -#include - -#include -#include -#include -#include -#include - -#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 847853a89..000000000 --- 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 -#include -#include - -#include - -#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 -//### 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].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; ctrack[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; ctrack[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 9f6972fa6..000000000 --- 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef DJGPP - #include - #include - #include - #include - #include - #include - #include - - #include -#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 -//### 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 // -/// \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, ®s, ®s); - 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 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;i7) - 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= 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=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=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 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 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=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 d2483e318..000000000 --- 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 -#include -#include -#include -#include -//#include - -#include -//#include -#include - -#include -#include -#include -#include -#include - -#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 94c1a052b..000000000 --- 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 - - -/* 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 2d460c935..000000000 --- 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 61ed18e4b..000000000 --- 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 - -#include "../i_system.h" //I_Error() -#include "vid_vesa.h" -#include "../doomdef.h" //MAXVIDWIDTH, MAXVIDHEIGHT -#include "../screen.h" - -#include -#include -#include -#include -#include -#include - -#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 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>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, ®s); - - // 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, ®s); - - 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 -// -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 ; ibytesperpixel==1) - CONS_Printf ("%d: %s\n", i, pinfo); - else - CONS_Printf ("%d: %s (hicolor)\n", i, pinfo); - } - -} - - -// vid_mode -// -void VID_Command_Mode_f (void) -{ - int modenum; - - if (COM_Argc()!=2) - { - CONS_Printf ("vid_mode : 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 b704336e8..000000000 --- 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 fab83d38c..31dd2bcda 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -110,10 +110,6 @@ #include #endif -#ifdef PC_DOS -#include -#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 ddadec799..634bc48ca 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -74,12 +74,6 @@ #endif #endif -#ifdef PC_DOS -#include // 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 216fde056..42890cb08 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 a1484a2b3..a4fe1982f 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 // 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 e6dedba22..a3a20a11a 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 // 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 58e0c4a88..78628e41d 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 // 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]; From 492ca3cea3a9b3f811f33e1a88f315f7bd158f89 Mon Sep 17 00:00:00 2001 From: Steel Titanium Date: Sat, 25 Jul 2020 19:09:21 -0400 Subject: [PATCH 2/2] Remove some more DOS related stuff --- Doxyfile | 5 +---- src/s_sound.c | 4 ---- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Doxyfile b/Doxyfile index d11fa2bbc..eb8c6ae9e 100644 --- a/Doxyfile +++ b/Doxyfile @@ -109,13 +109,10 @@ FILE_PATTERNS = *.c \ *.mm \ *.dox RECURSIVE = YES -EXCLUDE = ./src/djgppdos/internal.h \ - ./src/djgppdos/setup.c \ - ./src/sdl/IMG_xpm.c \ +EXCLUDE = ./src/sdl/IMG_xpm.c \ ./src/sdl/SRB2DC/scramble.c EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */src/hardware/*/* \ - */src/djgppdos/bcd.? \ */src/sdl/SDL_main/* \ */src/*/*_private.h \ */src/sdl/*/*help.? \ diff --git a/src/s_sound.c b/src/s_sound.c index 5ed9fd83a..bac3b4753 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2469,10 +2469,6 @@ void S_SetMusicVolume(INT32 digvolume, INT32 seqvolume) CV_SetValue(&cv_midimusicvolume, seqvolume&31); actualmidimusicvolume = cv_midimusicvolume.value; //check for change of var -#ifdef DJGPPDOS - digvolume = seqvolume = 31; -#endif - switch(I_SongType()) { case MU_MID: