From adb425e17c32e33e71670dd69c909717f1d65acb Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sat, 22 Apr 2017 09:09:26 -0500 Subject: [PATCH] 16_ca needs huge amounts of work and I should remember what needs to be done soon[going to port rest of code to borland c some time so we can use the core components of id engine here ][going to add 16_us.c eventually but the debug system and CA_ PM_ and MM_ usage is priority now]older zcroll renamed to xcroll][zcroll is now the pre menu game loop system with PROPER data usage with CAMMPM] added 1st scroll back [i work on CA] --- BCWOLF.LOG | 25 ++++++++++++++ makefile | 2 +- src/16.c | 2 +- src/exmmtest.c | 2 +- src/lib/16_ca.c | 75 ++++++++++++++++++++++------------------- src/lib/16_dbg.h | 2 +- src/lib/16_mm.c | 3 +- src/lib/16_mm.h | 2 +- src/lib/16_sd.c | 4 +-- src/lib/16_t.h | 21 +++++++++++- src/lib/16_tdef.h | 9 ++--- src/lib/vgmsnd/vgmSnd.c | 4 +-- src/xcroll.c | 4 +-- 13 files changed, 103 insertions(+), 52 deletions(-) create mode 100755 BCWOLF.LOG diff --git a/BCWOLF.LOG b/BCWOLF.LOG new file mode 100755 index 00000000..f1a3abc0 --- /dev/null +++ b/BCWOLF.LOG @@ -0,0 +1,25 @@ +VL_MungePic==================================== +4EC3:FFAE (memptr *)&temp +4EC3:FFAE (memptr)temp +460A:4628 &temp +4628:3DC2 temp +=============================================== + SDL_SetDS(): OK +CAL_SetupGrFile: + chunkcomplen size is 350 +CalcHeight() +heightnumerator +211968 15360 828 0 +a 6234 +b 12 +d 8734 +d 8 +ax 4 +al 5 + nx 0 +pee 2408 +gxt gyt nx gx gy +0 0 22528 0 0 +0 0 0 0 22528 +ch 14 +compiled on Apr 19 2017 12:39:47 diff --git a/makefile b/makefile index 5c21b2ad..575e318f 100755 --- a/makefile +++ b/makefile @@ -119,7 +119,7 @@ UPXQ=-qqq # # compile flags # -S_FLAGS=-sg -st -of+ -zu -zdf -zff -zgf -k32768#24576 +S_FLAGS=-sg -st -of+ -zu -zdp -zff -zgf -k32768#24576 Z_FLAGS=-zk0 -zc -zm#### -zp4 -ei O_FLAGS=-opnr -oe=24 -oil+ -outback -ohm T_FLAGS=-bt=dos -wx -m$(MEMORYMODE) -0 -fpi87 -d1 -fo=.$(OBJ)## -e=65536 diff --git a/src/16.c b/src/16.c index 7f22e1b6..eb64dde7 100755 --- a/src/16.c +++ b/src/16.c @@ -54,6 +54,6 @@ main(int argc, char *argv[]) //++++ DemoLoop();//to be defined in 16_tail -//++++ Quit("Demo loop exited???"); +//++++ Quit(gvar, "Demo loop exited???"); } diff --git a/src/exmmtest.c b/src/exmmtest.c index 8742c046..ea73aa99 100755 --- a/src/exmmtest.c +++ b/src/exmmtest.c @@ -57,7 +57,7 @@ #define BBUFNAME gvar.mm.bufferseg//bigbuffer //#define INITBBUF static memptr BBUFNAME; -#define BBUFPTR MEMPTR BBUFNAME +#define BBUFPTR MEMPTRCONV BBUFNAME #ifdef __BORLANDC__ #define BBUF (memptr *)BBUFPTR diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index 8dd2da0a..d55ac7f0 100755 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -36,7 +36,7 @@ loaded into the data segment #pragma warn -pro #pragma warn -use -//#define THREEBYTEGRSTARTS +#define THREEBYTEGRSTARTS //https://github.com/open-watcom/open-watcom-v2/issues/279#issuecomment-244587566 for _seg //http://www.shikadi.net/moddingwiki/GameMaps_Format for info on the code /* @@ -121,9 +121,9 @@ huffnode audiohuffman[255]; int grhandle; // handle to EGAGRAPH int maphandle; // handle to MAPTEMP / GAMEMAPS int audiohandle; // handle to AUDIOT / AUDIO - -long c hunkcomplen,c hunkexplen; - +*/ +long chunkcomplen,chunkexplen; +/* SDMode oldsoundmode; @@ -138,14 +138,14 @@ void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, #ifdef THREEBYTEGRSTARTS #define FILEPOSSIZE 3 //#define GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff) -long GRFILEPOS(int c, global_game_variables_t *gvar) +CASVT GRFILEPOS(int c, global_game_variables_t *gvar) { - long value; + CASVT value; int offset; offset = c*3; - value = *(long far *)(((byte far *)gvar->ca.grstarts)+offset); + value = *(CASVT far *)(((byte far *)gvar->ca.grstarts)+offset); value &= 0x00ffffffl; @@ -156,7 +156,11 @@ long GRFILEPOS(int c, global_game_variables_t *gvar) }; #else #define FILEPOSSIZE 4 -#define GRFILEPOS(c) (gvar->ca.grstarts[c]) +//#define GRFILEPOS(c) (gvar->ca.grstarts[c]) +CASVT GRFILEPOS(int c, global_game_variables_t *gvar) +{ + return gvar->ca.grstarts[c]; +} #endif /* @@ -208,9 +212,9 @@ void CA_CloseDebug(global_game_variables_t *gvar) void CAL_GetGrChunkLength (int chunk,global_game_variables_t *gvar) { - lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk),SEEK_SET); + lseek(gvar->ca.file.grhandle,GRFILEPOS(chunk,gvar),SEEK_SET); read(gvar->ca.file.grhandle,&gvar->ca.chunkexplen,sizeof(gvar->ca.chunkexplen)); - gvar->ca.chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4; + gvar->ca.chunkcomplen = GRFILEPOS(chunk+1,gvar)-GRFILEPOS(chunk,gvar)-4; } @@ -1069,7 +1073,7 @@ void CAL_SetupGrFile (global_game_variables_t *gvar) // // load the data offsets from ???head.ext // - MM_GetPtr (MEMPTR gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar); + MM_GetPtr (MEMPTRCONV gvar->ca.grstarts,(NUMCHUNKS+1)*FILEPOSSIZE, gvar); strcpy(fname,GHEADNAME); strcat(fname,EXTENSION); @@ -1100,16 +1104,19 @@ void CAL_SetupGrFile (global_game_variables_t *gvar) // load the pic and sprite headers into the arrays in the data segment // #if NUMPICS>0 - MM_GetPtr(MEMPTR gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar); + MM_GetPtr(MEMPTRCONV gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar); CAL_GetGrChunkLength(STRUCTPIC,gvar); // position file pointer - MM_GetPtr(&compseg,gvar->ca.chunkcomplen, gvar); + printf("CAL_SetupGrFile:\n"); + printf(" gvar->ca.chunkcomplen size is %lu\n", gvar->ca.chunkcomplen); + MM_GetPtr(&compseg,gvar->ca.chunkcomplen,gvar); + IN_Ack(gvar); CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen,gvar); CAL_HuffExpand (compseg, (byte far *)gvar->video.pictable,NUMPICS*sizeof(pictabletype),gvar->ca.grhuffman); MM_FreePtr(&compseg,gvar); #endif #if NUMPICM>0 - MM_GetPtr(MEMPTR picmtable,NUMPICM*sizeof(pictabletype)); + MM_GetPtr(MEMPTRCONV picmtable,NUMPICM*sizeof(pictabletype)); CAL_GetGrChunkLength(STRUCTPICM); // position file pointer MM_GetPtr(&compseg,gvar->ca.chunkcomplen); CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen); @@ -1118,7 +1125,7 @@ void CAL_SetupGrFile (global_game_variables_t *gvar) #endif #if NUMSPRITES>0 - MM_GetPtr(MEMPTR spritetable,NUMSPRITES*sizeof(spritetabletype)); + MM_GetPtr(MEMPTRCONV spritetable,NUMSPRITES*sizeof(spritetabletype)); CAL_GetGrChunkLength(STRUCTSPRITE); // position file pointer MM_GetPtr(&compseg,gvar->ca.chunkcomplen); CA_FarRead (gvar->ca.file.grhandle,compseg,gvar->ca.chunkcomplen); @@ -1154,7 +1161,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) O_RDONLY | O_BINARY, S_IREAD)) == -1) Quit (gvar, "Can't open maphead.mph"); length = filelength(handle); - MM_GetPtr (MEMPTR gvar->ca.tinf,length,gvar); + MM_GetPtr (MEMPTRCONV gvar->ca.tinf,length,gvar); CA_FarRead(handle, gvar->ca.tinf, length,gvar); close(handle); //#else @@ -1205,7 +1212,7 @@ void CAL_SetupMapFile (global_game_variables_t *gvar) O_RDONLY | O_BINARY, S_IREAD)) == -1) Quit (gvar, "Can't open AUDIOHED.16""!"); length = filelength(handle); - MM_GetPtr (MEMPTR audiostarts,length); + MM_GetPtr (MEMPTRCONV audiostarts,length); CA_FarRead(handle, (byte far *)audiostarts, length); close(handle); #else @@ -1329,7 +1336,7 @@ void CA_CacheAudioChunk (int chunk) if (audiosegs[chunk]) { - MM_SetPurge (MEMPTR audiosegs[chunk],0); + MM_SetPurge (MEMPTRCONV audiosegs[chunk],0); return; // allready in memory } @@ -1351,7 +1358,7 @@ void CA_CacheAudioChunk (int chunk) #ifndef AUDIOHEADERLINKED - MM_GetPtr (MEMPTR audiosegs[chunk],compressed); + MM_GetPtr (MEMPTRCONV audiosegs[chunk],compressed); if (mmerror) return; @@ -1376,7 +1383,7 @@ void CA_CacheAudioChunk (int chunk) expanded = *(long far *)source; source += 4; // skip over length - MM_GetPtr (MEMPTR audiosegs[chunk],expanded); + MM_GetPtr (MEMPTRCONV audiosegs[chunk],expanded); if (mmerror) goto done; CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman); @@ -1417,7 +1424,7 @@ void CA_LoadAllSounds (void) for (i=0;ica.file.grhandle,pos,SEEK_SET); @@ -1865,7 +1872,7 @@ void CA_CacheGrChunk (int chunk) // load the chunk into a buffer, either the miscbuffer if it fits, or allocate // a larger buffer // - pos = GRFILEPOS(chunk); + pos = GRFILEPOS(chunk,gvar); if (pos<0) // $FFFFFFFF start is a sparse tile return; @@ -1873,7 +1880,7 @@ void CA_CacheGrChunk (int chunk) while (GRFILEPOS(next) == -1) // skip past any sparse tiles next++; - compressed = GRFILEPOS(next)-pos; + compressed = GRFILEPOS(next,gvar)-pos; lseek(gvar->ca.file.grhandle,pos,SEEK_SET); @@ -1945,12 +1952,12 @@ void CA_CacheMap (global_game_variables_t *gvar) // if (pos<0) // $FFFFFFFF start is a sparse map // printf("CA_CacheMap: Tried to load a non existent map!"); -// MM_GetPtr(MEMPTR gvar->ca.camapheaderseg[mapnum],sizeof(maptype)); +// MM_GetPtr(MEMPTRCONV gvar->ca.camapheaderseg[mapnum],sizeof(maptype)); // lseek(maphandle,pos,SEEK_SET); // CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype)); // } // else -// MM_SetPurge (MEMPTR mapheaderseg[mapnum], 0, &(gvar->mm)); +// MM_SetPurge (MEMPTRCONV mapheaderseg[mapnum], 0, &(gvar->mm)); // // load the planes in @@ -1968,7 +1975,7 @@ void CA_CacheMap (global_game_variables_t *gvar) if (!compressed) continue; // the plane is not used in this game - dest = MEMPTR mapsegs[plane]; + dest = MEMPTRCONV mapsegs[plane]; MM_GetPtr(dest,size); lseek(maphandle,pos,SEEK_SET); @@ -2352,7 +2359,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (dialog && updatecachebox) updatecachebox (); - pos = GRFILEPOS(i); + pos = GRFILEPOS(i,gvar); if (pos<0) continue; @@ -2360,7 +2367,7 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) while (GRFILEPOS(next) == -1) // skip past any sparse tiles next++; - compressed = GRFILEPOS(next)-pos; + compressed = GRFILEPOS(next,gvar)-pos; endpos = pos+compressed; if (compressed<=BUFFERSIZE) @@ -2383,10 +2390,10 @@ void CAL_CacheMarks (char *title, global_game_variables_t *gvar) if (next == NUMCHUNKS) continue; - nextpos = GRFILEPOS(next); - while (GRFILEPOS(++next) == -1) // skip past any sparse tiles + nextpos = GRFILEPOS(next,gvar); + while (GRFILEPOS(++next,gvar) == -1) // skip past any sparse tiles ; - nextendpos = GRFILEPOS(next); + nextendpos = GRFILEPOS(next,gvar); if (nextpos - endpos <= MAXEMPTYREAD && nextendpos-pos <= BUFFERSIZE) endpos = nextendpos; 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 d43432fe..b6d2a267 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -936,13 +936,14 @@ void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar) gvar->mm.mmnew->useptr = baseptr; //if(gvar->mm.mmnew->useptr==NULL){ #ifdef __DEBUG_MM__ + printf("MM_GetPtr\n"); if(dbg_debugmm>0){ - printf("MM_GetPtr\n"); //%04x printf(" baseptr=%Fp ", baseptr); printf("useptr=%Fp\n", gvar->mm.mmnew->useptr); printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr)); printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr)); } + printf(" size is %lu\n", size); #endif //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); } gvar->mm.mmnew->attributes = BASEATTRIBUTES; diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index f890a3bb..c5e89a2b 100755 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -29,7 +29,7 @@ #ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final #define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes\n" #else -#define OUT_OF_MEM_MSG "\npee\n" +#define OUT_OF_MEM_MSG "\n" #endif //#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;} diff --git a/src/lib/16_sd.c b/src/lib/16_sd.c index b82ff3e8..610f7ed0 100755 --- a/src/lib/16_sd.c +++ b/src/lib/16_sd.c @@ -226,7 +226,7 @@ void SD_Initimf(global_game_variables_t *gvar) void SD_imf_free_music(global_game_variables_t *gvar) { // if (gvar->ca.sd.imf_music) free(gvar->ca.sd.imf_music); - MM_FreePtr(MEMPTR gvar->ca.audiosegs[0], gvar); //TODO make behave like id engine + MM_FreePtr(MEMPTRCONV gvar->ca.audiosegs[0], gvar); //TODO make behave like id engine gvar->ca.sd.imf_music = gvar->ca.sd.imf_play_ptr = gvar->ca.sd.imf_music_end = NULL; gvar->ca.sd.imf_delay_countdown = 0; } @@ -256,7 +256,7 @@ int SD_imf_load_music(const char *path, global_game_variables_t *gvar) } len -= len & 3; - MM_GetPtr(MEMPTR gvar->ca.audiosegs[0],len, gvar); + MM_GetPtr(MEMPTRCONV gvar->ca.audiosegs[0],len, gvar); gvar->ca.sd.imf_music = (struct imf_entry *)gvar->ca.audiosegs[0]; if (gvar->ca.sd.imf_music == NULL) { close(fd); diff --git a/src/lib/16_t.h b/src/lib/16_t.h index ce881ae8..764bf51e 100755 --- a/src/lib/16_t.h +++ b/src/lib/16_t.h @@ -65,9 +65,28 @@ MK_FP(segment value, 0)*/ typedef void _seg * memptr; -#define MEMPTR (memptr *)&//old is &(memptr) +#define MEMPTRCONV (memptr *)& +//bcc +#ifdef __BORLANDC__ +#define MEMPTRANDPERCONV & +//#define BYTEFARPTRCONV (unsigned char far *) +//#define SMDPTRANDPERCONV & +//#define SDFPTRANDPERCONV & +//#define OBTPTRANDPERCONV & +//#define SDTPTRANDPERCONV & +#endif +// + +//wcc #ifdef __WATCOMC__ //functions found in borland c but not watcom c +#define MEMPTRANDPERCONV +//#define BYTEFARPTRCONV +//#define SMDPTRANDPERCONV (void *)& +//#define SDFPTRANDPERCONV (struct diskfree_t *)& +//#define OBTPTRANDPERCONV (void const *)& +//#define SDTPTRANDPERCONV (struct dostime_t *)& + #define _argv __argv #define _argc __argc #define geninterrupt(n) int86(n,&CPURegs,&CPURegs); diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index f45195d6..1aa8b53f 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -660,9 +660,10 @@ typedef struct #define NUMMAPS 4//39 #define NUMSNDCHUNKS 4//3 -//#define NUMPICS 132//wolf3d wl6 +//#define NUMPICS 4//132//wolf3d wl6 #define STRUCTPIC 0 +#define CASVT dword //*start var type #define DATADIR "data/" @@ -718,8 +719,8 @@ typedef struct //TODO: USE THIS!!!! byte far grneeded[NUMCHUNKS]; word _seg *audiosegs[NUMSNDCHUNKS];//long - word _seg *grstarts; // array of offsets in egagraph, -1 for sparse//long - word _seg *audiostarts; // array of offsets in audio / audiot//long + CASVT _seg *grstarts; // array of offsets in egagraph, -1 for sparse//long + CASVT _seg *audiostarts; // array of offsets in audio / audiot//long #ifdef GRHEADERLINKED huffnode *grhuffman; @@ -733,7 +734,7 @@ typedef struct //TODO: USE THIS!!!! huffnode audiohuffman[255]; #endif - long chunkcomplen,chunkexplen; + CASVT chunkcomplen,chunkexplen;//long sd_t sd; //TODO: extend! and learn from keen/wolf/catacomb's code wwww diff --git a/src/lib/vgmsnd/vgmSnd.c b/src/lib/vgmsnd/vgmSnd.c index 30d3a383..2cfd8690 100755 --- a/src/lib/vgmsnd/vgmSnd.c +++ b/src/lib/vgmsnd/vgmSnd.c @@ -172,7 +172,7 @@ UINT8 OpenVGMFile(const char* FileName, VGM_FILE* vgmFile, global_game_variables vgmFile->dataLen = vgmBaseHdr.lngEOFOffset + 0x04; //vgmFile->data = (UINT8*)malloc(vgmFile->dataLen); - MM_GetPtr(MEMPTR gvar->ca.audiosegs[0], vgmFile->dataLen, gvar); + MM_GetPtr(MEMPTRCONV gvar->ca.audiosegs[0], vgmFile->dataLen, gvar); vgmFile->data = (UINT8*)gvar->ca.audiosegs[0]; if (vgmFile->data == NULL) { @@ -217,7 +217,7 @@ UINT8 OpenVGMFile(const char* FileName, VGM_FILE* vgmFile, global_game_variables void FreeVGMFile(VGM_FILE* vgmFile, global_game_variables_t *gvar) { //if(vgmFile->data){ free(vgmFile->data); vgmFile->data = NULL; } - MM_FreePtr(MEMPTR gvar->ca.audiosegs[0], gvar); + MM_FreePtr(MEMPTRCONV gvar->ca.audiosegs[0], gvar); if(vgmFile->data) free(vgmFile->data); vgmFile->dataLen = 0; diff --git a/src/xcroll.c b/src/xcroll.c index ed02457e..9e968ae5 100755 --- a/src/xcroll.c +++ b/src/xcroll.c @@ -121,9 +121,7 @@ void main(int argc, char *argv[]) modexFadeOn(4, &gvar.video.palette); #endif - IN_StartAck (&gvar); - MM_ShowMemory(&gvar); - while (!IN_CheckAck (&gvar)){} +// IN_StartAck (&gvar); MM_ShowMemory(&gvar); while (!IN_CheckAck (&gvar)){} #ifdef FADE modexPalBlack(); //so player will not see loadings~ #endif -- 2.39.2