X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_tail.c;h=6b08e0fb9180cd4e7fac221625cc7aba8ecf455b;hb=243e22dc4fb6ae069348ac984f79ae7827747be1;hp=ece035e2a59980447a6dad7c4d2330e8e3c5a725;hpb=701917b90fcc490c3c8ab645be369a7aad5c1b45;p=16.git diff --git a/src/lib/16_tail.c b/src/lib/16_tail.c index ece035e2..6b08e0fb 100755 --- a/src/lib/16_tail.c +++ b/src/lib/16_tail.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * This file is part of Project 16. * @@ -20,7 +20,7 @@ * */ /* - * 16 library + * 16 tail library */ #include "src/lib/16_tail.h" @@ -38,40 +38,8 @@ void Startup16(global_game_variables_t *gvar) { -#ifdef __WATCOMC__ - start_timer(gvar); - - // 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; - } - - if (_DEBUG_INIT() == 0) { -#ifdef DEBUGSERIAL - printf("WARNING: Failed to initialize DEBUG output\n"); -#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); - - textInit(); -#endif + gvar->video.VL_Started=0; + TL_VidInit(gvar); gvar->mm.mmstarted=0; gvar->pm.PMStarted=0; MM_Startup(gvar); @@ -81,8 +49,11 @@ void Startup16(global_game_variables_t *gvar) #endif IN_Startup(gvar); #endif +#ifdef __16_PM__ PM_Startup(gvar); + PM_CheckMainMem(gvar); PM_UnlockMainMem(gvar); +#endif CA_Startup(gvar); } @@ -100,7 +71,9 @@ void Startup16(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) @@ -109,9 +82,12 @@ void Shutdown16(global_game_variables_t *gvar) #endif CA_Shutdown(gvar); MM_Shutdown(gvar); +#ifdef __WATCOMC__ + if(gvar->video.VL_Started) + VL_Shutdown (gvar);//VGAmodeX(0, 1, gvar); +#endif } - //=========================================================================== /* @@ -124,10 +100,10 @@ void Shutdown16(global_game_variables_t *gvar) /*void ReadConfig(void) { - int file; - SDMode sd; - SMMode sm; - SDSMode sds; + int file; + SDMode sd; + SMMode sm; + SDSMode sds; if ( (file = open(configname,O_BINARY | O_RDONLY)) != -1) @@ -226,7 +202,7 @@ void Shutdown16(global_game_variables_t *gvar) /*void WriteConfig(void) { - int file; + int file; file = open(configname,O_CREAT | O_BINARY | O_WRONLY, S_IREAD | S_IWRITE | S_IFREG); @@ -259,6 +235,128 @@ void Shutdown16(global_game_variables_t *gvar) //=========================================================================== +/* +=================== += += FizzleFade += +=================== +*/ + +boolean FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) +{ + 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; + 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 [esorig],es + } +#endif +// TimeCount= + frame=0; + do // while (1) + { + 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]) + (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 di,[drawofs] + mov al,[es:di] + add di,[pagedelta] + mov [es:di],al + } + + if (rndval == 1) // entire sequence has been completed + return false; + } + frame++; +//-- while (TimeCount 0; z >>= 1) + { + strcat(b, ((x & z) == z) ? "1" : "0"); + } + return b; } const char *nibble_to_binary(nibble x)