X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fbakapee.c;h=49b9fa00a89c1830016778bc84b48ee3030f6249;hb=6021fc3f27b895d382fbd30488ead35657e39196;hp=cf1dd90403c0aaa74af0520248c3f184a71bc216;hpb=23c4d02d9d36e5c5aa030fa5d1413d1558fc8af0;p=16.git diff --git a/src/lib/bakapee.c b/src/lib/bakapee.c index cf1dd904..49b9fa00 100755 --- a/src/lib/bakapee.c +++ b/src/lib/bakapee.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. * @@ -22,10 +22,9 @@ #include "src/lib/bakapee.h" -struct glob_game_vars *ggvv; //static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */ -char global_temp_status_text[512]; -char global_temp_status_text2[512]; +//char global_temp_status_text[512]; +//char global_temp_status_text2[512]; //========================================================================== @@ -43,28 +42,167 @@ char global_temp_status_text2[512]; #define PIXPOSX gvar->video.page[0].sw/2 #define PIXPOSY gvar->video.page[0].sh/2 -boolean baka_FizzleFade (page_t *source, page_t *dest, unsigned frames, boolean abortable, global_game_variables_t *gvar) +/* +=================== += += FizzleFade += += returns true if aborted += +=================== +*/ + +//extern ControlInfo c; +//#define PIXPOSX gvar->video.page[0].sw/2 +//#define PIXPOSY gvar->video.page[0].sh/2 +#ifdef BAKAFIZZUNSIGNED +boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) { - dword p,pixperframe; + word p,pixperframe; unsigned drawofs,pagedelta; byte mask,maskb[8] = {1,2,4,8}; - unsigned x,y,frame ,esorig; + 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;//64000/(dword)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 && kbhit())//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); +/* +sprintf(global_temp_status_text, "draw - %Fp", drawofs); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; +*/ + + // + // 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 (TimeCountdata); dest = ((word)destpage->data); - pagedelta = (word)dest->sw*dest->sh;//(word)(source->data - dest->data);//(dest->data - source->data) - rndval = 1; esorig = 0; - x = y = dest->dx; + pagedelta = dest-source; + rndval = 1; esorig = 0; q = 16; + x = y = 0;//destpage->dx; pixperframe = 76800/(dword)frames; // IN_StartAck (); -// VL_ShowPage(dest, 1, 0); -// VL_ShowPage(source, 1, 0); +// VL_ShowPage(&(gvar->video.page[0]), 1, 0); +// VL_ShowPage(&(gvar->video.page[1]), 1, 0); -// modexClearRegion(dest, 0, 0, (dest->width), (dest->height), 12); - modexClearRegion(source, 0, 0, (source->width), (source->height), 64); +// 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); +// VL_SetLineWidth(80, gvar); __asm { mov [esorig],es @@ -74,7 +212,7 @@ boolean baka_FizzleFade (page_t *source, page_t *dest, unsigned frames, boolean do // while (1) { sprintf(global_temp_status_text, "%u", frame); -modexprint(dest, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); +modexprint(destpage, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); if (abortable && kbhit())//IN_CheckAck () ) return true; @@ -116,25 +254,36 @@ noxor: mov [WORD PTR rndval+2],dx } - if (x>dest->sw || y>dest->sh) +// if (x>destpage->width || y>destpage->height) +// if (xsw || ysh) + if ((x>width || y>height) && (xdata)+gvar->video.ofs.ylookup[y] + (x>>2); + drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2); sprintf(global_temp_status_text, "draw - %Fp", drawofs); -modexprint(dest, PIXPOSX, 16+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); -modexprint(dest, PIXPOSX, 24+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); -sprintf(global_temp_status_text, "srce - %Fp", source->data); -modexprint(dest, PIXPOSX, 32+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); -sprintf(global_temp_status_text, "dest - %Fp", dest->data); -modexprint(dest, PIXPOSX, 40+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "desp - %Fp", destpage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; // // copy one pixel // +/* mask = x&3; VGAREADMAP(mask); mask = maskb[mask]; VGAMAPMASK(mask); +/*/ +// modexputPixel(&(gvar->video.page[0]), x, y, rand()); +// VL_Plot (x, y, 15, &(gvar->video.ofs)); + modexCopyPageRegion(destpage, sourcepage, x, y, x, y, 4, 4); __asm { mov di,[drawofs] @@ -154,31 +303,44 @@ modexprint(dest, PIXPOSX, 40+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); } return false; } +#endif + #if 0 -boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width,unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) +boolean baka_FizzleFade (page_t *sourcepage, page_t *destpage, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) { - int pixperframe; + word p,pixperframe; unsigned drawofs,pagedelta; byte mask,maskb[8] = {1,2,4,8}; - unsigned x,y,p,frame; + unsigned x,y,frame ,esorig,q; dword rndval; - word TimeCount = *clockw; + unsigned source,dest; +// word TimeCount = *clockw; word screenseg = SCREENSEG; + source = ((word)sourcepage->data); dest = ((word)destpage->data); - pagedelta = dest-source; - rndval = 1; - x = y = 0; - pixperframe = 64000/frames; + pagedelta = dest-source;//(word)(source->data - dest->data);//(dest->data - source->data) + rndval = 1; esorig = 0; q = 16; + x = y = destpage->dx; + pixperframe = /*76800*/64000/(dword)frames; - VGAmodeX(0, 0, gvar); // IN_StartAck (); -// VL_ShowPage((page_t *)dest, 1, 0); - VGAmodeX(1, 0, gvar); - TimeCount=frame=0; +// VL_ShowPage(destpage, 1, 0); +// VL_ShowPage(sourcepage, 1, 0); + +// modexClearRegion(destpage, 0, 0, (destpage->width), (destpage->height), 12); + modexClearRegion(sourcepage, 0, 0, (sourcepage->width), (sourcepage->height), 64); + + __asm { + mov [esorig],es + } +// TimeCount= + frame=0; do // while (1) { - if (abortable && !kbhit())//IN_CheckAck () ) +sprintf(global_temp_status_text, "%u", frame); +modexprint(destpage, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); + if (abortable && kbhit())//IN_CheckAck () ) return true; __asm { @@ -191,31 +353,51 @@ boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width,unsigned // // seperate random value into x/y pair // - mov ax,[WORD PTR rndval] - mov dx,[WORD PTR rndval+2] - mov bx,ax - dec bl - mov [BYTE PTR y],bl // low 8 bits - 1 = y xoordinate - mov bx,ax - mov cx,dx - mov [BYTE PTR x],ah // next 9 bits = x xoordinate - mov [BYTE PTR x+1],dl + mov ax,[WORD PTR rndval] + mov dx,[WORD PTR rndval+2] + mov bx,ax + dec bl + mov [BYTE PTR y],bl // low 8 bits - 1 = y xoordinate + mov bx,ax + mov cx,dx + mov [BYTE PTR x],ah // next 9 bits = x xoordinate + mov [BYTE PTR x+1],dl // // advance to next random element // - shr dx,1 - rcr ax,1 - jnc noxor - xor dx,0x0001 - xor ax,0x2000 + shr dx,1 + rcr ax,1 + jnc noxor + xor dx,0x0001 + xor ax,0x2000 +#ifdef __BORLANDC__ + } +#endif noxor: - mov [WORD PTR rndval],ax - mov [WORD PTR rndval+2],dx +#ifdef __BORLANDC__ + __asm { +#endif + mov [WORD PTR rndval],ax + mov [WORD PTR rndval+2],dx } +// if (x>destpage->width || y>destpage->height) +// if (xsw || ysh) if (x>width || y>height) continue; - drawofs = source+gvar->video.ofs.ylookup[y] + (x>>2); + drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2); +sprintf(global_temp_status_text, "draw - %Fp", drawofs); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "desp - %Fp", destpage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; // // copy one pixel @@ -236,18 +418,61 @@ noxor: return false; } frame++; -// while (TimeCountDLStarted) + return; + + // 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; + } + + textInit(); + gvar->DLStarted = true; +} + //color ‚Ä‚·‚Æ void colortest(page_t *page, bakapee_t *pee) { @@ -517,11 +742,15 @@ void ding(page_t *page, bakapee_t *pee, word q) colorz(page, pee); modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi"); break; - case 9: - //baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, page->sw, page->sh, false, ggvv); -// modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi start"); -// if(!baka_FizzleFade ((unsigned)page, (unsigned)page, page->width, page->height, 70, false, ggvv)) - break; +/* case 9: + modexClearRegion(&(ggvv->video.page[0]), 0, 0, ggvv->video.page[0].width/2, ggvv->video.page[0].height/2, 15); +#ifdef BAKAFIZZUNSIGNED +// baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, vga_state.vga_width, vga_state.vga_height, 70, true, ggvv); + baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, ggvv->video.page[0].width, ggvv->video.page[0].height, 70, true, ggvv); +#else + baka_FizzleFade (&ggvv->video.page[1], &ggvv->video.page[0], vga_state.vga_width, vga_state.vga_height, 70, true, ggvv); +#endif + break;*/ case 10: ssd(page, pee, q); /*printf("%d\n", pee->coor);*/ break;