From 3e67fca24b59811ced65929a140f6c242b161d90 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sun, 23 Apr 2017 15:44:22 -0500 Subject: [PATCH] reverted --- src/lib/16_ca.c | 20 +++--- src/lib/16_dbg.h | 2 +- src/lib/16_mm.c | 165 +++++++++++++--------------------------------- src/lib/16_mm.h | 32 ++++----- src/lib/16_pm.c | 70 ++++++++++---------- src/lib/16_tail.c | 7 +- src/lib/16_tail.h | 5 +- src/lib/16_tdef.h | 7 +- src/lib/doslib | 2 +- src/sountest.c | 2 +- src/xcroll.c | 4 +- 11 files changed, 120 insertions(+), 196 deletions(-) diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index d69989c3..d55ac7f0 100755 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -1159,7 +1159,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #ifndef MAPHEADERLINKED if ((handle = open("maphead.mph", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open maphead.mph"); + Quit (gvar, "Can't open maphead.mph"); length = filelength(handle); MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar); CA_FarRead(handle, gvar->ca.tinf, length,gvar); @@ -1176,7 +1176,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) //TODO: multiple files if ((gvar->ca.file.maphandle = open("data/test.map", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open data/test.map!"); + Quit (gvar, "Can't open data/test.map!"); /*#ifdef MAPHEADERLINKED if ((maphandle = open("GAMEMAPS.16"ENSION, O_RDONLY | O_BINARY, S_IREAD)) == -1) @@ -1210,7 +1210,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #ifndef AUDIOHEADERLINKED if ((handle = open("AUDIOHED.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIOHED.16""!"); + Quit (gvar, "Can't open AUDIOHED.16""!"); length = filelength(handle); MM_GetPtr (MEMPTRCONV audiostarts,length); CA_FarRead(handle, (byte far *)audiostarts, length); @@ -1227,11 +1227,11 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) #ifndef AUDIOHEADERLINKED if ((audiohandle = open("AUDIOT.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIOT.16""!"); + Quit (gvar, "Can't open AUDIOT.16""!"); #else if ((audiohandle = open("AUDIO.16", O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIO.16""!"); + Quit (gvar, "Can't open AUDIO.16""!"); #endif }*/ @@ -1343,7 +1343,7 @@ void CA_CacheAudioChunk (int chunk) // MDM begin - (GAMERS EDGE) // if (!FindFile("AUDIO.16",NULL,2)) - Quit ("CA_CacheAudioChunk(): Can't find audio files."); + Quit (gvar, "CA_CacheAudioChunk(): Can't find audio files."); // // MDM end @@ -1705,7 +1705,7 @@ void CAL_CacheSprite (int chunk, byte far *compressed) break; default: - Quit ("CAL_CacheSprite: Bad shifts number!"); + Quit (gvar, "CAL_CacheSprite: Bad shifts number!"); } #endif @@ -1864,7 +1864,7 @@ void CA_CacheGrChunk (int chunk) // MDM begin - (GAMERS EDGE) // if (!FindFile("EGAGRAPH.16",NULL,2)) - Quit ("CA_CacheGrChunk(): Can't find graphics files."); + Quit (gvar, "CA_CacheGrChunk(): Can't find graphics files."); // // MDM end @@ -2331,7 +2331,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) // MDM begin - (GAMERS EDGE) // // if (!FindFile("EGAGRAPH.16",NULL,2)) -// Quit ("CA_CacheMarks(): Can't find graphics files."); +// Quit (gvar, "CA_CacheMarks(): Can't find graphics files."); // // MDM end @@ -2443,5 +2443,5 @@ void CA_CannotOpen(char *string, global_game_variables_t *gvar) strcpy(str,"Can't open "); strcat(str,string); strcat(str,"!\n"); - Quit (str); + Quit (gvar, str); } diff --git a/src/lib/16_dbg.h b/src/lib/16_dbg.h index 295b7146..31666821 100755 --- a/src/lib/16_dbg.h +++ b/src/lib/16_dbg.h @@ -12,7 +12,7 @@ //#define __DEBUG_2__ //#define __DEBUG_CA__ //#define __DEBUG_PM__ -//#define __DEBUG_MM__ +#define __DEBUG_MM__ //#define __DEBUG_RF__ #define __DEBUG_SPRI__ diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index c14632ab..b6d2a267 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -1,23 +1,19 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover +/* Catacomb Apocalypse Source Code + * Copyright (C) 1993-2014 Flat Rock Software * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify + * 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 3 of the License, or + * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * - * Project 16 is distributed in the hope that it will be useful, + * 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. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // NEWMM.C @@ -32,7 +28,7 @@ Primary coder: John Carmack RELIES ON --------- -Quit (char *error) function +Quit (global_game_variables_t *gvar, char *error) function WORK TO DO @@ -58,37 +54,6 @@ Open Watcom port by sparky4 #pragma warn -pro #pragma warn -use -/* -============================================================================= - - LOCAL INFO - -============================================================================= -*/ - -#define LOCKBIT 0x80 // if set in attributes, block cannot be moved -#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first -#define PURGEMASK 0xfffc -#define BASEATTRIBUTES 0 // unlocked, non purgable - -//#define MAXUMBS 10 - -/*typedef struct mmblockstruct -{ - unsigned start,length; - unsigned attributes; - memptr *useptr; // pointer to the segment start - struct mmblockstruct far *next; -} mmblocktype;*/ - - -//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;} -// - -#define GETNEWBLOCK {if(!gvar->mm.mmfree)MML_ClearBlock(gvar);gvar->mm.mmnew=gvar->mm.mmfree;gvar->mm.mmfree=gvar->mm.mmfree->next;} - -#define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;} - /* ============================================================================= @@ -97,12 +62,9 @@ Open Watcom port by sparky4 ============================================================================= */ -/*mminfotype mminfo; -memptr bufferseg; -boolean mmerror;*/ - void (* beforesort) (void); void (* aftersort) (void); +void (* XMSaddr) (void); // far pointer to XMS driver /* ============================================================================= @@ -111,38 +73,6 @@ void (* aftersort) (void); ============================================================================= */ - -/*boolean mmstarted; - -void far *farheap; -void *nearheap; - -mmblocktype far mmblocks[MAXBLOCKS] - ,far *mmhead,far *mmfree,far *mmrover,far *mmnew; - -boolean bombonerror;*/ - -//unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; - -void (* XMSaddr) (void); // far pointer to XMS driver - -/*unsigned numUMBs,UMBbase[MAXUMBS];*/ - -//========================================================================== - -// -// local prototypes -// - -boolean MML_CheckForEMS (void); -void MML_ShutdownEMS (void); -void MM_MapEMS (void); -boolean MML_CheckForXMS (void); -void MML_ShutdownXMS (void); -//void MML_UseSpace (unsigned segstart, unsigned seglength); -//void MML_ClearBlock (void); - -//========================================================================== #ifndef __16_PM__ #if 0 static char *ParmStringsexmm[] = {"noems","noxms",""}; @@ -389,7 +319,7 @@ void MML_ShutdownEMS(global_game_variables_t *gvar) } #endif if(errorflag==true) - Quit ("MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something + Quit (gvar, "MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something } /* @@ -694,10 +624,10 @@ void MML_ShutdownXMS(global_game_variables_t *gvar) } //++++todo: linked list of segment! */ -void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_t *gvar) +void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar) { mmblocktype far *scan,far *last; - unsigned oldend; + word oldend; sdword extra; //word segm=1; @@ -726,9 +656,8 @@ void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_ // take the given range out of the block // oldend = scan->start + scan->length; - extra = oldend - (segstart+seglength); + extra = oldend - (segstart+((unsigned)seglength)); if (extra < 0) -#ifdef __DEBUG_MM__ { printf("========================================\n"); printf("start=%x ", scan->start); @@ -742,9 +671,6 @@ void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_ printf("========================================\n"); //return; } -#else - Quit ("MML_UseSpace: Segment spans two blocks!"); -#endif if (segstart == scan->start) { @@ -781,7 +707,7 @@ void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_ ==================== */ -void MML_ClearBlock (global_game_variables_t *gvar) +void MML_ClearBlock(global_game_variables_t *gvar) { mmblocktype far *scan;//,far *last; @@ -797,7 +723,7 @@ void MML_ClearBlock (global_game_variables_t *gvar) scan = scan->next; } - Quit ("MM_ClearBlock: No purgable blocks!\n"); + printf("MM_ClearBlock: No purgable blocks!\n"); } @@ -814,24 +740,26 @@ void MML_ClearBlock (global_game_variables_t *gvar) =================== */ -void MM_Startup (global_game_variables_t *gvar) +void MM_Startup(global_game_variables_t *gvar) { int i; - dword length; + //dword length,seglength; + dword length; word seglength; void far *start; - unsigned segstart,seglength;//,endfree; + word segstart;//,endfree; if(gvar->mm.mmstarted) - MM_Shutdown (gvar); + MM_Shutdown(gvar); gvar->mm.mmstarted = true; gvar->mm.bombonerror = true; + // // set up the linked list (everything in the free list; // gvar->mm.mmhead = NULL; gvar->mm.mmfree = &(gvar->mm.mmblocks[0]); - for (i=0;imm.mmblocks[i].next = &(gvar->mm.mmblocks[i+1]); gvar->mm.mmblocks[i].next = NULL; @@ -846,7 +774,6 @@ void MM_Startup (global_game_variables_t *gvar) gvar->mm.mmnew->next = NULL; gvar->mm.mmrover = gvar->mm.mmhead; - // // get all available near conventional memory segments // @@ -866,7 +793,7 @@ void MM_Startup (global_game_variables_t *gvar) length -= SAVENEARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace (segstart,seglength, gvar); + MML_UseSpace(segstart,seglength, gvar); gvar->mmi.nearheap = length; //0000printf("near: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length); @@ -887,7 +814,7 @@ void MM_Startup (global_game_variables_t *gvar) length -= SAVEFARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace (segstart,seglength, gvar); + MML_UseSpace(segstart,seglength, gvar); gvar->mmi.farheap = length; //0000printf("far: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length); @@ -942,7 +869,7 @@ xmsskip: // gvar->mm.mmrover = gvar->mm.mmhead; // start looking for space after low block - MM_GetPtr (&(gvar->mm.bufferseg),BUFFERSIZE, gvar); + MM_GetPtr(&(gvar->mm.bufferseg),BUFFERSIZE, gvar); } //========================================================================== @@ -957,7 +884,7 @@ xmsskip: ==================== */ -void MM_Shutdown (global_game_variables_t *gvar) +void MM_Shutdown(global_game_variables_t *gvar) { if(!(gvar->mm.mmstarted)) return; @@ -995,10 +922,10 @@ void MM_Shutdown (global_game_variables_t *gvar) ==================== */ -void MM_GetPtr (memptr *baseptr,dword size, global_game_variables_t *gvar) +void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) { mmblocktype far *scan,far *lastscan,far *endscan - ,far *purge,far *next; + ,far *purge,far *next; int search; unsigned needed,startseg; @@ -1007,7 +934,6 @@ void MM_GetPtr (memptr *baseptr,dword size, global_game_variables_t *gvar) GETNEWBLOCK; // fill in start and next after a spot is found gvar->mm.mmnew->length = needed; gvar->mm.mmnew->useptr = baseptr; - gvar->mm.mmnew->attributes = BASEATTRIBUTES; //if(gvar->mm.mmnew->useptr==NULL){ #ifdef __DEBUG_MM__ printf("MM_GetPtr\n"); @@ -1020,6 +946,7 @@ void MM_GetPtr (memptr *baseptr,dword size, global_game_variables_t *gvar) printf(" size is %lu\n", size); #endif //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); } + gvar->mm.mmnew->attributes = BASEATTRIBUTES; //tryagain: for (search = 0; search<3; search++) @@ -1097,7 +1024,7 @@ void MM_GetPtr (memptr *baseptr,dword size, global_game_variables_t *gvar) //heapdump(); #endif printf(OUT_OF_MEM_MSG,(size-gvar->mmi.nearheap)); - Quit("for stability reasons the program will shut down! wwww\n"); + Quit(gvar, "for stability reasons the program will shut down! wwww\n"); } else gvar->mm.mmerror = true; @@ -1125,14 +1052,14 @@ void MM_FreePtr (memptr *baseptr, global_game_variables_t *gvar) if (baseptr == gvar->mm.mmrover->useptr) // removed the last allocated block gvar->mm.mmrover = gvar->mm.mmhead; - while (scan->useptr != baseptr && scan) + while(scan->useptr != baseptr && scan) { last = scan; scan = scan->next; } - if (!scan) - Quit ("MM_FreePtr: Block not found!"); + if(!scan) + Quit (gvar, "MM_FreePtr: Block not found!"); last->next = scan->next; @@ -1166,9 +1093,9 @@ void MM_SetPurge (memptr *baseptr, int purge, global_game_variables_t *gvar) if (!gvar->mm.mmrover) gvar->mm.mmrover = gvar->mm.mmhead; else if (gvar->mm.mmrover == start) - Quit ("MM_SetPurge: Block not found!"); + Quit (gvar, "MM_SetPurge: Block not found!"); - } while (1); + } while(1); gvar->mm.mmrover->attributes &= ~PURGEBITS; gvar->mm.mmrover->attributes |= purge; @@ -1202,7 +1129,7 @@ void MM_SetLock (memptr *baseptr, boolean locked, global_game_variables_t *gvar) if (!gvar->mm.mmrover) gvar->mm.mmrover = gvar->mm.mmhead; else if (gvar->mm.mmrover == start) - Quit ("MM_SetLock: Block not found!"); + Quit (gvar, "MM_SetLock: Block not found!"); } while(1); @@ -1243,7 +1170,7 @@ void MM_SortMem (global_game_variables_t *gvar) playing += STARTADLIBSOUNDS; break; } - MM_SetLock(MEMPTRCONV audiosegs[playing],true); + MM_SetLock((memptr *)&audiosegs[playing],true); } @@ -1251,16 +1178,16 @@ void MM_SortMem (global_game_variables_t *gvar) oldborder = gvar->video.bordercolor; gvar->video.bordercolor = modexPalOverscan(15); - if (beforesort) + if(beforesort) beforesort(); scan = gvar->mm.mmhead; last = NULL; // shut up compiler warning - while (scan) + while(scan) { - if (scan->attributes & LOCKBIT) + if(scan->attributes & LOCKBIT) { // // block is locked, so try to pile later blocks right after it @@ -1269,7 +1196,7 @@ void MM_SortMem (global_game_variables_t *gvar) } else { - if (scan->attributes & PURGEBITS) + if(scan->attributes & PURGEBITS) { // // throw out the purgable block @@ -1285,12 +1212,12 @@ void MM_SortMem (global_game_variables_t *gvar) // // push the non purgable block on top of the last moved block // - if (scan->start != start) + if(scan->start != start) { length = scan->length; source = scan->start; dest = start; - while (length > 0xf00) + while(length > 0xf00) { movedata(source,0,dest,0,0xf00*16); length -= 0xf00; @@ -1312,7 +1239,7 @@ void MM_SortMem (global_game_variables_t *gvar) gvar->mm.mmrover = gvar->mm.mmhead; - if (aftersort) + if(aftersort) aftersort(); VL_ColorBorder (oldborder, &gvar->video); @@ -1385,7 +1312,7 @@ void MM_ShowMemory (global_game_variables_t *gvar) ultoa (scan->start,str,10); strcat (scratch,str); write(gvar->handle.debughandle,scratch,strlen(scratch)); - Quit ("MM_ShowMemory: Memory block order currupted!"); + Quit (gvar, "MM_ShowMemory: Memory block order currupted!"); } end = scan->length-1; y = scan->start/width; diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index 4516571d..c5e89a2b 100755 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -1,23 +1,19 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover +/* Catacomb Apocalypse Source Code + * Copyright (C) 1993-2014 Flat Rock Software * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify + * 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 3 of the License, or + * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * - * Project 16 is distributed in the hope that it will be useful, + * 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. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // ID_MM.H @@ -41,8 +37,8 @@ #define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;} -#define SAVENEARHEAP 0x400 // space to leave in data segment -#define SAVEFARHEAP 0 // space to leave in far heap +#define SAVENEARHEAP 0x200 // space to leave in data segment +#define SAVEFARHEAP 0x400 // space to leave in far heap #define BUFFERSIZE 0x1000 // miscelanious, allways available buffer @@ -106,7 +102,7 @@ extern void (* beforesort) (void); extern void (* aftersort) (void); -//extern void (* XMSaddr) (void); // far pointer to XMS driver +extern void (* XMSaddr) (void); // far pointer to XMS driver extern dword XMSDriver; extern word XMSVer; @@ -182,13 +178,13 @@ typedef struct boolean MML_CheckForEMS(void); //byte MML_SetupEMS(mminfo_t *mm); //void MML_ShutdownEMS(mminfo_t *mm); -//byte MM_MapEMS(global_game_variables_t *gvar); +byte MM_MapEMS(global_game_variables_t *gvar); //byte MM_MapXEMS(global_game_variables_t *gvar); boolean MML_CheckForXMS(void); //void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi); //void MML_ShutdownXMS(mminfo_t *mm); - void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_t *gvar); - void MML_ClearBlock (global_game_variables_t *gvar); +void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar); +void MML_ClearBlock(global_game_variables_t *gvar); void MM_Startup(global_game_variables_t *gvar); void MM_Shutdown(global_game_variables_t *gvar); diff --git a/src/lib/16_pm.c b/src/lib/16_pm.c index 55a7d371..858bd4b9 100755 --- a/src/lib/16_pm.c +++ b/src/lib/16_pm.c @@ -139,7 +139,7 @@ PML_MapEMS(word logical, byte physical, global_game_variables_t *gvar) strcpy(str,"MM_MapEMS: EMS error "); MM_EMSerr(str, err); printf("%s\n",str); - Quit ("PML_MapEMS: Page mapping failed\n"); + Quit (gvar, "PML_MapEMS: Page mapping failed\n"); return err; } return 0; @@ -326,7 +326,7 @@ PML_ShutdownEMS(global_game_variables_t *gvar) strcpy(str,"PML_ShutdownEMS: Error freeing EMS "); MM_EMSerr(str, err); printf("%s\n",str); - Quit ("PML_ShutdownEMS: Error freeing EMS\n"); + Quit (gvar, "PML_ShutdownEMS: Error freeing EMS\n"); //return; } } @@ -506,7 +506,7 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length, global_game_v if (!addr) { - Quit ("PML_XMSCopy: zero address\n"); + Quit (gvar, "PML_XMSCopy: zero address\n"); } xoffset = (dword)xmspage * PMPageSize; @@ -527,7 +527,7 @@ PML_XMSCopy(boolean toxms,byte far *addr,word xmspage,word length, global_game_v } if (!_AX) { - Quit ("PML_XMSCopy: Error on copy"); + Quit (gvar, "PML_XMSCopy: Error on copy"); //return; } } @@ -594,7 +594,7 @@ PML_ShutdownXMS(global_game_variables_t *gvar) #endif if(errorflag==true) { - Quit ("PML_ShutdownXMS: Error freeing XMS"); + Quit (gvar, "PML_ShutdownXMS: Error freeing XMS"); //return; } } @@ -631,7 +631,7 @@ PM_SetMainMemPurge(int level, global_game_variables_t *gvar) else { - Quit ("MainPresent IS NULL\n"); + Quit (gvar, "MainPresent IS NULL\n"); } } @@ -740,7 +740,7 @@ PML_StartupMainMem(global_game_variables_t *gvar) gvar->mm.mmerror = false; if (gvar->pm.mm.MainPagesAvail < PMMinMainMem) { - Quit ("PM_SetupMainMem: Not enough main memory"); + Quit (gvar, "PM_SetupMainMem: Not enough main memory"); //return; } gvar->pm.mm.MainPresent = true; @@ -776,22 +776,22 @@ PML_ReadFromFile(byte far *buf,long offset,word length, global_game_variables_t { if (!buf) { - Quit ("PML_ReadFromFile: Null pointer"); + Quit (gvar, "PML_ReadFromFile: Null pointer"); //return; } if (!offset) { - Quit ("PML_ReadFromFile: Zero offset"); + Quit (gvar, "PML_ReadFromFile: Zero offset"); //return; } if (lseek(gvar->pm.fi.PageFile,offset,SEEK_SET) != offset) { - Quit ("PML_ReadFromFile: Seek failed"); + Quit (gvar, "PML_ReadFromFile: Seek failed"); //return; } if (!CA_FarRead(gvar->pm.fi.PageFile,buf,length, gvar)) { - Quit ("PML_ReadFromFile: Read failed"); + Quit (gvar, "PML_ReadFromFile: Read failed"); //return; } } @@ -812,7 +812,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) gvar->pm.fi.PageFile = open(gvar->pm.fi.PageFileName,O_RDONLY + O_BINARY); if (gvar->pm.fi.PageFile == -1) { - Quit ("PML_OpenPageFile: Unable to open page file"); + Quit (gvar, "PML_OpenPageFile: Unable to open page file"); //return; } @@ -833,7 +833,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) MM_GetPtr((memptr *)&buf, size, gvar); if (!CA_FarRead(gvar->pm.fi.PageFile,(byte far *)buf,size, gvar)) { - Quit ("PML_OpenPageFile: Offset read failed"); + Quit (gvar, "PML_OpenPageFile: Offset read failed"); //return; } offsetptr = (dword far *)buf; @@ -846,7 +846,7 @@ PML_OpenPageFile(global_game_variables_t *gvar) MM_GetPtr(&buf,size, gvar); if (!CA_FarRead(gvar->pm.fi.PageFile,(byte far *)buf,size, gvar)) { - Quit ("PML_OpenPageFile: Length read failed"); + Quit (gvar, "PML_OpenPageFile: Length read failed"); //return; } lengthptr = (word far *)buf; @@ -923,7 +923,7 @@ PML_GetEMSAddress(int page,PMLockType lock, global_game_variables_t *gvar) } if (emspage == -1) - Quit ("PML_GetEMSAddress: EMS find failed"); + Quit (gvar, "PML_GetEMSAddress: EMS find failed"); gvar->pm.emm.EMSList[emspage].lastHit = gvar->pm.PMFrameCount; offset = emspage * EMSPageSizeSeg; @@ -992,7 +992,7 @@ PML_GiveLRUPage(boolean mainonly, global_game_variables_t *gvar) } if (lru == -1) - Quit ("PML_GiveLRUPage: LRU Search failed"); + Quit (gvar, "PML_GiveLRUPage: LRU Search failed"); return(lru); } @@ -1047,7 +1047,7 @@ PML_PutPageInXMS(int pagenum, global_game_variables_t *gvar) { usexms = PML_GiveLRUXMSPage(gvar); if (usexms == -1) - Quit ("PML_PutPageInXMS: No XMS LRU"); + Quit (gvar, "PML_PutPageInXMS: No XMS LRU"); page->xmsPage = gvar->pm.PMPages[usexms].xmsPage; gvar->pm.PMPages[usexms].xmsPage = -1; } @@ -1065,16 +1065,16 @@ PML_TransferPageSpace(int orig,int new, global_game_variables_t *gvar) PageListStruct far *origpage,far *newpage; if (orig == new) - Quit ("PML_TransferPageSpace: Identity replacement"); + Quit (gvar, "PML_TransferPageSpace: Identity replacement"); origpage = &gvar->pm.PMPages[orig]; newpage = &gvar->pm.PMPages[new]; if (origpage->locked != pml_Unlocked) - Quit ("PML_TransferPageSpace: Killing locked page"); + Quit (gvar, "PML_TransferPageSpace: Killing locked page"); if ((origpage->emsPage == -1) && (origpage->mainPage == -1)) - Quit ("PML_TransferPageSpace: Reusing non-existent page"); + Quit (gvar, "PML_TransferPageSpace: Reusing non-existent page"); // Copy page that's about to be purged into XMS PML_PutPageInXMS(orig, gvar); @@ -1090,7 +1090,7 @@ PML_TransferPageSpace(int orig,int new, global_game_variables_t *gvar) origpage->mainPage = origpage->emsPage = -1; if (!addr) - Quit ("PML_TransferPageSpace: Zero replacement"); + Quit (gvar, "PML_TransferPageSpace: Zero replacement"); return(addr); } @@ -1131,10 +1131,10 @@ PML_GetAPageBuffer(int pagenum,boolean mainonly, global_game_variables_t *gvar) } } if (n == -1) - Quit ("PML_GetPageBuffer: MainPagesAvail lied"); + Quit (gvar, "PML_GetPageBuffer: MainPagesAvail lied"); addr = gvar->pm.mm.MainMemPages[n]; if (!addr) - Quit ("PML_GetPageBuffer: Purged main block"); + Quit (gvar, "PML_GetPageBuffer: Purged main block"); page->mainPage = n; gvar->pm.MainPagesUsed++; } @@ -1142,7 +1142,7 @@ PML_GetAPageBuffer(int pagenum,boolean mainonly, global_game_variables_t *gvar) addr = PML_TransferPageSpace(PML_GiveLRUPage(mainonly, gvar),pagenum, gvar); if (!addr) - Quit ("PML_GetPageBuffer: Search failed"); + Quit (gvar, "PML_GetPageBuffer: Search failed"); return(addr); } @@ -1168,7 +1168,7 @@ PML_GetPageFromXMS(int pagenum,boolean mainonly, global_game_variables_t *gvar) gvar->pm.xmm.XMSProtectPage = pagenum; checkaddr = PML_GetAPageBuffer(pagenum,mainonly, gvar); if (FP_OFF(checkaddr)) - Quit ("PML_GetPageFromXMS: Non segment pointer"); + Quit (gvar, "PML_GetPageFromXMS: Non segment pointer"); addr = (memptr)FP_SEG(checkaddr); PML_CopyFromXMS(addr,page->xmsPage,page->length, gvar); gvar->pm.xmm.XMSProtectPage = -1; @@ -1206,7 +1206,7 @@ PM_GetPage(int pagenum, global_game_variables_t *gvar) memptr result; if (pagenum >= gvar->pm.fi.ChunksInFile) - Quit ("PM_GetPage: Invalid page request"); + Quit (gvar, "PM_GetPage: Invalid page request"); //#ifdef __DEBUG_2__ // for debugging __asm { @@ -1224,7 +1224,7 @@ PM_GetPage(int pagenum, global_game_variables_t *gvar) { boolean mainonly = (pagenum >= gvar->pm.fi.PMSoundStart); if (!gvar->pm.PMPages[pagenum].offset) // JDC: sparse page - Quit ("Tried to load a sparse page!"); + Quit (gvar, "Tried to load a sparse page!"); if (!(result = PML_GetPageFromXMS(pagenum,mainonly, gvar))) { if (gvar->pm.PMPages[pagenum].lastHit == gvar->pm.PMFrameCount) @@ -1265,7 +1265,7 @@ void PM_SetPageLock(int pagenum,PMLockType lock, global_game_variables_t *gvar) { if (pagenum < gvar->pm.fi.PMSoundStart) - Quit ("PM_SetPageLock: Locking/unlocking non-sound page"); + Quit (gvar, "PM_SetPageLock: Locking/unlocking non-sound page"); gvar->pm.PMPages[pagenum].locked = lock; } @@ -1332,7 +1332,7 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * page++; if (page >= gvar->pm.fi.ChunksInFile) - Quit ("PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); + Quit (gvar, "PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); PM_GetPage(page, gvar); @@ -1351,7 +1351,7 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * ; addr = PM_GetPage(oogypage, gvar); if (!addr) - Quit ("PM_Preload: XMS buffer failed"); + Quit (gvar, "PM_Preload: XMS buffer failed"); while (xmstotal) { @@ -1359,15 +1359,15 @@ PM_Preload(boolean (*update)(word current,word total), global_game_variables_t * page++; if (page >= gvar->pm.fi.ChunksInFile) - Quit ("PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); + Quit (gvar, "PM_Preload: Pages>=gvar->pm.fi.ChunksInFile"); p = &gvar->pm.PMPages[page]; p->xmsPage = gvar->pm.XMSPagesUsed++; if (gvar->pm.XMSPagesUsed > gvar->pm.xmm.XMSPagesAvail) - Quit ("PM_Preload: Exceeded XMS pages"); + Quit (gvar, "PM_Preload: Exceeded XMS pages"); if (p->length > PMPageSize) - Quit ("PM_Preload: Page too long"); + Quit (gvar, "PM_Preload: Page too long"); PML_ReadFromFile((byte far *)addr,p->offset,p->length, gvar); PML_CopyToXMS((byte far *)addr,p->xmsPage,p->length, gvar); @@ -1420,7 +1420,7 @@ PM_NextFrame(global_game_variables_t *gvar) { char buf[40]; sprintf(buf,"PM_NextFrame: Page %d is locked",i); - Quit (buf); + Quit(gvar, buf); } } //#endif @@ -1511,7 +1511,7 @@ PM_Startup(global_game_variables_t *gvar) if (!gvar->pm.mm.MainPresent && !gvar->pm.emm.EMSPresent && !gvar->pm.xmm.XMSPresent) { - Quit ("PM_Startup: No main or EMS\n"); + Quit (gvar, "PM_Startup: No main or EMS\n"); //return; } diff --git a/src/lib/16_tail.c b/src/lib/16_tail.c index e9b0be9a..742e1132 100755 --- a/src/lib/16_tail.c +++ b/src/lib/16_tail.c @@ -475,13 +475,12 @@ void ClearMemory (global_game_variables_t *gvar) ========================== */ -void Quit (char *error) +void Quit (global_game_variables_t *gvar, char *error) { - //unsigned finscreen; memptr screen=0; - ClearMemory (ggvv); + ClearMemory (gvar); if (!*error) { // #ifndef JAPAN @@ -495,7 +494,7 @@ void Quit (char *error) // CA_CacheGrChunk (ERRORSCREEN); // screen = grsegs[ERRORSCREEN]; } - Shutdown16(ggvv); + Shutdown16(gvar); if (error && *error) { diff --git a/src/lib/16_tail.h b/src/lib/16_tail.h index ef3b9066..93022c26 100755 --- a/src/lib/16_tail.h +++ b/src/lib/16_tail.h @@ -41,8 +41,7 @@ #include #endif -extern struct glob_game_vars *ggvv; - +//gvar.video.ofs.bufferofs,gvar.video.ofs.displayofs, #define FIZZLEFADEFUNCTION \ if(gvar.in.inst->Keyboard[sc_F]){ FizzleFade(\ atoi(gvar.video.page[0].data),atoi(gvar.video.page[1].data),\ @@ -136,7 +135,7 @@ void TL_VidInit(global_game_variables_t *gvar); boolean FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar); void DebugMemory_(global_game_variables_t *gvar, boolean q); void ClearMemory (global_game_variables_t *gvar); -void Quit (char *error); +void Quit (global_game_variables_t *gvar, char *error); void turboXT(byte bakapee); void nibbletest(); void booleantest(); diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 3fa1feb3..1aa8b53f 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -468,11 +468,14 @@ typedef struct //from 16_mm //========================================================================== -#define MAXBLOCKS 800//kd=1300 wolf3d=700 cata=600 +#define MAXBLOCKS 1024//kd=1300 wolf3d=700 cata=600 +//----#define MAXUMBS 12 typedef struct mmblockstruct { - unsigned start,length; + word start,length; + //word start; dword length; +//++++ word blob; //for data larger than 64k unsigned attributes; memptr *useptr; // pointer to the segment start struct mmblockstruct far *next; diff --git a/src/lib/doslib b/src/lib/doslib index 638c985b..059ad77f 160000 --- a/src/lib/doslib +++ b/src/lib/doslib @@ -1 +1 @@ -Subproject commit 638c985bf9cf640e2dfc70dda473ca4f6fbfca31 +Subproject commit 059ad77f65a48b9501eca26c0d4811960ada9e54 diff --git a/src/sountest.c b/src/sountest.c index e734a8c7..d15a5462 100755 --- a/src/sountest.c +++ b/src/sountest.c @@ -70,7 +70,7 @@ void main(int argc, char near *argv[]) //FMSetVoice(0, &testInst); if(!init_adlib()) { - Quit ("Cannot init library"); + Quit(&gvar, "Cannot init library"); } if (adlib_fm_voices > 9) diff --git a/src/xcroll.c b/src/xcroll.c index 189746da..9e968ae5 100755 --- a/src/xcroll.c +++ b/src/xcroll.c @@ -138,7 +138,7 @@ void main(int argc, char *argv[]) #ifdef FADE modexFadeOff(4, &gvar.video.palette); #endif - Quit ("Wrong ID for sprite"); + Quit (&gvar, "Wrong ID for sprite"); #ifdef FADE modexFadeOn(4, &gvar.video.dpal); #endif @@ -219,7 +219,7 @@ void main(int argc, char *argv[]) #endif if(gvar.in.inst->Keyboard[sc_R]){ modexPalOverscan(rand()%56); } //r - if((gvar.player[0].enti.q==1) && !(gvar.player[0].enti.x%TILEWH==0 && gvar.player[0].enti.y%TILEWH==0)) Quit ("PLAYER OFF THE RAILS!");//break; //incase things go out of sync! + if((gvar.player[0].enti.q==1) && !(gvar.player[0].enti.x%TILEWH==0 && gvar.player[0].enti.y%TILEWH==0)) Quit (&gvar, "PLAYER OFF THE RAILS!");//break; //incase things go out of sync! } /* fade back to text mode */ -- 2.39.2