X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_tail.c;h=50cd2e8240169a5d8f48657fe56d2bb13503e933;hb=6021fc3f27b895d382fbd30488ead35657e39196;hp=2e045c58ebd2ae354972ec65347fa87308b1d7c6;hpb=60484e959995accd95933e7f119fafe3a42897c5;p=16.git diff --git a/src/lib/16_tail.c b/src/lib/16_tail.c index 2e045c58..50cd2e82 100755 --- a/src/lib/16_tail.c +++ b/src/lib/16_tail.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * Copyright (C) 2012-2018 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * This file is part of Project 16. * @@ -26,8 +26,6 @@ #include "src/lib/16_tail.h" #include "src/lib/16text.h" -static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */ - /* ========================== = @@ -38,28 +36,19 @@ static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */ ========================== */ -void Startup16(global_game_variables_t *gvar) +void Startup16 (global_game_variables_t *gvar) { -#ifdef __WATCOMC__ - start_timer(gvar); -#endif gvar->video.VL_Started=0; TL_VidInit(gvar); gvar->mm.mmstarted=0; gvar->pm.PMStarted=0; - MM_Startup(gvar); + StartupCAMMPM(gvar); #ifdef __WATCOMC__ #ifdef __DEBUG_InputMgr__ if(!dbg_nointest) #endif IN_Startup(gvar); #endif -#ifdef __16_PM__ - PM_Startup(gvar); - PM_CheckMainMem(gvar); - PM_UnlockMainMem(gvar); -#endif - CA_Startup(gvar); } //=========================================================================== @@ -74,69 +63,188 @@ void Startup16(global_game_variables_t *gvar) ========================== */ -void Shutdown16(global_game_variables_t *gvar) +void Shutdown16 (global_game_variables_t *gvar) { -#ifdef __16_PM__ - PM_Shutdown(gvar); -#endif #ifdef __WATCOMC__ #ifdef __DEBUG_InputMgr__ if(!dbg_nointest) #endif IN_Shutdown(gvar); #endif - CA_Shutdown(gvar); - MM_Shutdown(gvar); + ShutdownCAMMPM(gvar); #ifdef __WATCOMC__ if(gvar->video.VL_Started) - VGAmodeX(0, 1, gvar); + VL_Shutdown (gvar);//VGAmodeX(0, 1, gvar); #endif } -void TL_VidInit(global_game_variables_t *gvar) +//=========================================================================== + +/* +========================== += += StartupCAMMPM += +========================== +*/ + +void StartupCAMMPM (global_game_variables_t *gvar) { -#ifdef __WATCOMC__ - // DOSLIB: check our environment - probe_dos(); - - // DOSLIB: what CPU are we using? - // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS. - // So this code by itself shouldn't care too much what CPU it's running on. Except that other - // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for - // the CPU to carry out tasks. --J.C. - cpu_probe(); - - // DOSLIB: check for VGA - if (!probe_vga()) { - printf("VGA probe failed\n"); - return; - } - // hardware must be VGA or higher! - if (!(vga_state.vga_flags & VGA_IS_VGA)) { - printf("This program requires VGA or higher graphics hardware\n"); - return; - } +/* + MM_Startup (); // so the signon screen can be freed + + SignonScreen (); - if (_DEBUG_INIT() == 0) { -#ifdef DEBUGSERIAL - //printf("WARNING: Failed to initialize DEBUG output\n"); + VW_Startup (); + IN_Startup (); + PM_Startup (); + PM_UnlockMainMem (); + SD_Startup (); + CA_Startup (); + US_Startup (); +*/ + MM_Startup(gvar); +#ifdef __16_PM__ + PM_Startup(gvar); +//???? PM_CheckMainMem(gvar); + PM_UnlockMainMem(gvar); #endif - } - _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log - _DEBUGF("Serial debug output printf test %u %u %u\n",1U,2U,3U); + CA_Startup(gvar); +} - textInit(); +//=========================================================================== + +/* +========================== += += ShutdownCAMMPM += +========================== +*/ - // get old video mode - //in.h.ah = 0xf; - //int86(0x10, &in, &out); - if(!gvar->video.old_mode) gvar->video.old_mode = vgaGetMode();//out.h.al; -#else - gvar->video.old_mode = 3; +void ShutdownCAMMPM (global_game_variables_t *gvar) +{ +/* + US_Shutdown (); + SD_Shutdown (); + PM_Shutdown (); + IN_Shutdown (); + VW_Shutdown (); + CA_Shutdown (); + MM_Shutdown () +*/ +#ifdef __16_PM__ + PM_Shutdown(gvar); #endif - gvar->video.VL_Initiated = 1; + CA_Shutdown(gvar); + MM_Shutdown(gvar); } +//=========================================================================== + +//////////////////////////////////////////////////////////////////// +// +// HANDLE INTRO SCREEN (SYSTEM CONFIG) +// +//////////////////////////////////////////////////////////////////// +void MU_IntroScreen(global_game_variables_t *gvar) +{ +#define MAINCOLOR 0x6c +#define EMSCOLOR 0x6c +#define XMSCOLOR 0x6c + +#define FILLCOLOR 14 + + long memory,emshere,xmshere; + int i,num,ems[10]={100,200,300,400,500,600,700,800,900,1000}, + xms[10]={100,200,300,400,500,600,700,800,900,1000}, + main[10]={32,64,96,128,160,192,224,256,288,320}; + + gvar->video.print.t=1; + gvar->video.print.tlsw=1; + gvar->video.print.bgcolor=8; + gvar->video.print.color=5; + + // + // DRAW MAIN MEMORY + // + num=32; + gvar->video.print.x=49-32; + + memory=(1023l+gvar->mmi.nearheap+gvar->mmi.farheap)/1024l; + for (i=0;i<10;i++) + if (memory>=main[i]) + { + gvar->video.print.y=163-8*i; + sprintf(global_temp_status_text, "% 4u", num); VL_print(global_temp_status_text, 0, gvar); + VL_Bar(49,163-8*i,6,5,MAINCOLOR-i,gvar); + num+=32; + } + gvar->video.print.y=171; + VL_print("MAIN", 0, gvar); + + + // + // DRAW EMS MEMORY + // + if (gvar->pm.emm.EMSPresent) + { + num=100; + gvar->video.print.x=89-32; + + emshere=4l*gvar->pm.emm.EMSPagesAvail; + for (i=0;i<10;i++) + if (emshere>=ems[i]) + { + gvar->video.print.y=163-8*i; + sprintf(global_temp_status_text, "% 4u", num); VL_print(global_temp_status_text, 0, gvar); + VL_Bar(89,163-8*i,6,5,EMSCOLOR-i,gvar); + num+=100; + } + gvar->video.print.y=171; + VL_print(" EMS", 0, gvar); + } + + // + // DRAW XMS MEMORY + // + if (gvar->pm.xmm.XMSPresent) + { + num=100; + gvar->video.print.x=129-32; + + xmshere=4l*gvar->pm.xmm.XMSPagesAvail; + for (i=0;i<10;i++) + if (xmshere>=xms[i]) + { + gvar->video.print.y=163-8*i; + sprintf(global_temp_status_text, "% 4u", num); VL_print(global_temp_status_text, 0, gvar); + VL_Bar(129,163-8*i,6,5,XMSCOLOR-i,gvar); + num+=100; + } + gvar->video.print.y=171; + VL_print(" XMS", 0, gvar); + } + + // + // FILL BOXES + // + if (gvar->in.MousePresent) + VL_Bar(164,82,12,2,FILLCOLOR,gvar); + + if (gvar->in.JoysPresent[0] || gvar->in.JoysPresent[1]) + VL_Bar(164,105,12,2,FILLCOLOR,gvar); + +//++++ if (gvar->sd.AdLibPresent)//SB && !SoundBlasterPresent) +//++++ VL_Bar(164,128,12,2,FILLCOLOR,gvar); + +//SB if (SoundBlasterPresent) +//SB VL_Bar(164,151,12,2,FILLCOLOR,gvar); + +//SS if (SoundSourcePresent) +//SS VL_Bar(164,174,12,2,FILLCOLOR,gvar); + IN_Ack (gvar); +} //=========================================================================== @@ -147,29 +255,28 @@ void TL_VidInit(global_game_variables_t *gvar) = ==================== */ - -/*void ReadConfig(void) +#if 0 +void ReadConfig(void) { int file; - SDMode sd; - SMMode sm; - SDSMode sds; +// SDMode sd; +// SMMode sm; +// SDSMode sds; - if ( (file = open(configname,O_BINARY | O_RDONLY)) != -1) + if ( (file = open(CONFIGNAME,O_BINARY | O_RDONLY)) != -1) { // // valid config file // - read(file,Scores,sizeof(HighScore) * MaxScores); +// read(file,Scores,sizeof(HighScore) * MaxScores); - read(file,&sd,sizeof(sd)); - read(file,&sm,sizeof(sm)); - read(file,&sds,sizeof(sds)); +// read(file,&sd,sizeof(sd)); +// read(file,&sm,sizeof(sm)); +// read(file,&sds,sizeof(sds)); read(file,&mouseenabled,sizeof(mouseenabled)); read(file,&joystickenabled,sizeof(joystickenabled)); - read(file,&joypadenabled,sizeof(joypadenabled)); read(file,&joystickprogressive,sizeof(joystickprogressive)); read(file,&joystickport,sizeof(joystickport)); @@ -183,7 +290,7 @@ void TL_VidInit(global_game_variables_t *gvar) close(file); - if (sd == sdm_AdLib && !AdLibPresent && !SoundBlasterPresent) + /*if (sd == sdm_AdLib && !AdLibPresent && !SoundBlasterPresent) { sd = sdm_PC; sd = smm_Off; @@ -191,7 +298,7 @@ void TL_VidInit(global_game_variables_t *gvar) if ((sds == sds_SoundBlaster && !SoundBlasterPresent) || (sds == sds_SoundSource && !SoundSourcePresent)) - sds = sds_Off; + sds = sds_Off;*/ if (!MousePresent) mouseenabled = false; @@ -206,7 +313,7 @@ void TL_VidInit(global_game_variables_t *gvar) // // no config file, so select by hardware // - if (SoundBlasterPresent || AdLibPresent) +/* if (SoundBlasterPresent || AdLibPresent) { sd = sdm_AdLib; sm = smm_AdLib; @@ -222,13 +329,12 @@ void TL_VidInit(global_game_variables_t *gvar) else if (SoundSourcePresent) sds = sds_SoundSource; else - sds = sds_Off; + sds = sds_Off;*/ if (MousePresent) mouseenabled = true; joystickenabled = false; - joypadenabled = false; joystickport = 0; joystickprogressive = false; @@ -239,7 +345,7 @@ void TL_VidInit(global_game_variables_t *gvar) SD_SetMusicMode (sm); SD_SetSoundMode (sd); SD_SetDigiDevice (sds); -}*/ +} /* @@ -250,24 +356,23 @@ void TL_VidInit(global_game_variables_t *gvar) ==================== */ -/*void WriteConfig(void) +void WriteConfig(void) { int file; - file = open(configname,O_CREAT | O_BINARY | O_WRONLY, + file = open(CONFIGNAME,O_CREAT | O_BINARY | O_WRONLY, S_IREAD | S_IWRITE | S_IFREG); if (file != -1) { - write(file,Scores,sizeof(HighScore) * MaxScores); +// write(file,Scores,sizeof(HighScore) * MaxScores); - write(file,&SoundMode,sizeof(SoundMode)); - write(file,&MusicMode,sizeof(MusicMode)); - write(file,&DigiMode,sizeof(DigiMode)); +// write(file,&SoundMode,sizeof(SoundMode)); +// write(file,&MusicMode,sizeof(MusicMode)); +// write(file,&DigiMode,sizeof(DigiMode)); write(file,&mouseenabled,sizeof(mouseenabled)); write(file,&joystickenabled,sizeof(joystickenabled)); - write(file,&joypadenabled,sizeof(joypadenabled)); write(file,&joystickprogressive,sizeof(joystickprogressive)); write(file,&joystickport,sizeof(joystickport)); @@ -276,13 +381,13 @@ void TL_VidInit(global_game_variables_t *gvar) write(file,&buttonmouse,sizeof(buttonmouse)); write(file,&buttonjoy,sizeof(buttonjoy)); - write(file,&viewsize,sizeof(viewsize)); +// write(file,&viewsize,sizeof(viewsize)); write(file,&mouseadjustment,sizeof(mouseadjustment)); close(file); } -}*/ - +} +#endif //=========================================================================== /* @@ -293,70 +398,66 @@ void TL_VidInit(global_game_variables_t *gvar) =================== */ -#define PIXPERFRAME 1600 - -void FizzleFade (unsigned source, unsigned dest, - unsigned width,unsigned height, boolean abortable, global_game_variables_t *gv) +boolean FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) { - unsigned drawofs,pagedelta; - unsigned char maskb[8] = {1,2,4,8,16,32,64,128}; - unsigned x,y,p,frame; - long rndval; - word TimeCount = *clockw; - word screenseg = SCREENSEG; + word p,pixperframe; + unsigned drawofs,pagedelta; + byte mask,maskb[8] = {1,2,4,8}; + unsigned x,y,frame; + long rndval; + word screenseg; +#ifdef __WATCOMC__ + unsigned esorig;//,q; +#endif pagedelta = dest-source; -//++++ VL_SetScreen (dest,0); rndval = 1; +#ifdef __WATCOMC__ + esorig = 0;// q = 16; +#endif x = y = 0; + pixperframe = (dword)(gvar->video.page[0].width*gvar->video.page[0].height)/frames; + screenseg = SCREENSEG; + + IN_StartAck (gvar); +// modexClearRegion(&(gvar->video.page[0]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 0); +// modexClearRegion(&(gvar->video.page[1]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 15); + +#ifdef __WATCOMC__ __asm { - mov es,[screenseg] - mov dx,SC_INDEX - mov al,SC_MAPMASK - out dx,al + mov [esorig],es } - - TimeCount=frame=0; - do // while (1) +#endif +// TimeCount= + frame=0; + do // while (1) { - if (abortable) - { - IN_ReadControl(0,gv); - if (gv->player[0].info.button0 || gv->player[0].info.button1 || gv->in.inst->Keyboard[sc_Space] - || gv->in.inst->Keyboard[sc_Enter]) - { -//++++ VW_ScreenToScreen (source,dest,width/8,height); - return; - } + if (abortable && IN_CheckAck (gvar) ) + return true; + + __asm { + mov es,[screenseg] } - for (p=0;pwidth || y>height) +// if ((x>width || y>height) && (xvideo.ofs.ylookup[y]; +// drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2); + drawofs = source+(y*gvar->video.page[0].stridew) + (x>>2); + + // + // copy one pixel + // + mask = x&3; + VGAREADMAP(mask); + mask = maskb[mask]; + VGAMAPMASK(mask); __asm { - mov cx,[x] - mov si,cx - and si,7 - mov dx,GC_INDEX - mov al,GC_BITMASK - mov ah,BYTE PTR [maskb+si] - out dx,ax - - mov si,[drawofs] - shr cx,1 - shr cx,1 - shr cx,1 - add si,cx - mov di,si + mov di,[drawofs] + mov al,[es:di] add di,[pagedelta] - - mov dx,GC_INDEX - mov al,GC_READMAP // leave GC_INDEX set to READMAP - out dx,al - - mov dx,SC_INDEX+1 - mov al,1 - out dx,al - mov dx,GC_INDEX+1 - mov al,0 - out dx,al - - mov bl,[es:si] - xchg [es:di],bl - - mov dx,SC_INDEX+1 - mov al,2 - out dx,al - mov dx,GC_INDEX+1 - mov al,1 - out dx,al - - mov bl,[es:si] - xchg [es:di],bl - - mov dx,SC_INDEX+1 - mov al,4 - out dx,al - mov dx,GC_INDEX+1 - mov al,2 - out dx,al - - mov bl,[es:si] - xchg [es:di],bl - - mov dx,SC_INDEX+1 - mov al,8 - out dx,al - mov dx,GC_INDEX+1 - mov al,3 - out dx,al - - mov bl,[es:si] - xchg [es:di],bl + mov [es:di],al } if (rndval == 1) // entire sequence has been completed - { -//++++ VGABITMASK(255); -//++++ VGAMAPMASK(15); - return; - } + return false; } frame++; -//++++ while (TimeCount=STARTTILE8) + sprite = STARTTILE8-1; + else if (spritewidth);US_Print ("\n");PrintX=hx; + US_PrintUnsigned (spr->height);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->orgx);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->orgy);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->xl);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->yl);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->xh);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->yh);US_Print ("\n");PrintX=hx; + US_PrintSigned (spr->shifts);US_Print ("\n");PrintX=hx; + if (!block) + { + US_Print ("-----"); + } + else + { + mem = block->sourceoffset[3]+5*block->planesize[3]; + mem = (mem+15)&(~15); // round to paragraphs + US_PrintUnsigned (mem); + } + + oldsprite = sprite; + do + { + // + // draw the current shift, then wait for key + // + VL_Bar(topx,hy,DISPWIDTH,bottomy-hy,WHITE); + if (block) + { + PrintX = topx; + PrintY = hy; + US_Print ("Shift:"); + US_PrintUnsigned (shift); + US_Print ("\n"); + VWB_DrawSprite (topx+16+shift*2,PrintY,sprite); + } + + VW_UpdateScreen(); + + scan = IN_WaitForKey (); + + switch (scan) + { + case sc_UpArrow: + sprite++; + break; + case sc_DownArrow: + sprite--; + break; + case sc_LeftArrow: + if (--shift == -1) + shift = 3; + break; + case sc_RightArrow: + if (++shift == 4) + shift = 0; + break; + case sc_Escape: + return; + } + + } while (sprite == oldsprite); + + } while (1); + + +} + +#endif + /* ========================== = @@ -509,7 +688,7 @@ void ClearMemory (global_game_variables_t *gvar) #ifdef __16_PM__ PM_UnlockMainMem(gvar); #endif - //snd + //sd MM_SortMem (gvar); } @@ -570,10 +749,7 @@ void Quit (global_game_variables_t *gvar, char *error) //=========================================================================== -#ifndef __WATCOMC__ -char global_temp_status_text[512]; -char global_temp_status_text2[512]; -#else +#ifdef __WATCOMC__ // // for mary4 (XT) // this is from my XT's BIOS @@ -677,13 +853,3 @@ void booleantest() printf(" sizeof(boolean)=%s\n", boolean_to_binary(sizeof(boolean))); printf("end of boolean test\n"); } - -#ifdef __BORLANDC__ -word modexPalOverscan(word col) -{ - //modexWaitBorder(); - outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ - outp(PAL_DATA_REG, col); - return col; -} -#endif