convert newlines to unix for sake of consistency

This commit is contained in:
punkrockguy318 2015-09-13 18:32:42 +00:00
parent 2bb7eb0696
commit 7ee8ca0bb2
1 changed files with 438 additions and 438 deletions

View File

@ -1,79 +1,79 @@
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2002,2003 Xodnizel
*
* 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 2 of the License, or
* (at your option) any later version.
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "types.h"
#include "file.h"
#include "fceu.h"
#include "driver.h"
#include "boards/mapinc.h"
#ifdef _S9XLUA_H
#include "fceulua.h"
#endif
#include "palette.h"
#include "palettes/palettes.h"
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
bool force_grayscale = false;
pal palette_game[64*8]; //custom palette for an individual game. (formerly palettei)
pal palette_user[64*8]; //user's overridden palette (formerly palettec)
pal palette_ntsc[64*8]; //mathematically generated NTSC palette (formerly paletten)
static bool palette_game_available; //whether palette_game is available
static bool palette_user_available; //whether palette_user is available
//ntsc parameters:
bool ntsccol_enable = false; //whether NTSC palette is selected
static int ntsctint = 46+10;
static int ntschue = 72;
//the default basic palette
int default_palette_selection = 0;
//library of default palettes
static pal *default_palette[8]=
{
palette,
rp2c04001,
rp2c04002,
rp2c04003,
rp2c05004,
};
static void CalculatePalette(void);
static void ChoosePalette(void);
static void WritePalette(void);
//points to the actually selected current palette
pal *palo;
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2002,2003 Xodnizel
*
* 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 2 of the License, or
* (at your option) any later version.
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "types.h"
#include "file.h"
#include "fceu.h"
#include "driver.h"
#include "boards/mapinc.h"
#ifdef _S9XLUA_H
#include "fceulua.h"
#endif
#include "palette.h"
#include "palettes/palettes.h"
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
bool force_grayscale = false;
pal palette_game[64*8]; //custom palette for an individual game. (formerly palettei)
pal palette_user[64*8]; //user's overridden palette (formerly palettec)
pal palette_ntsc[64*8]; //mathematically generated NTSC palette (formerly paletten)
static bool palette_game_available; //whether palette_game is available
static bool palette_user_available; //whether palette_user is available
//ntsc parameters:
bool ntsccol_enable = false; //whether NTSC palette is selected
static int ntsctint = 46+10;
static int ntschue = 72;
//the default basic palette
int default_palette_selection = 0;
//library of default palettes
static pal *default_palette[8]=
{
palette,
rp2c04001,
rp2c04002,
rp2c04003,
rp2c05004,
};
static void CalculatePalette(void);
static void ChoosePalette(void);
static void WritePalette(void);
//points to the actually selected current palette
pal *palo;
static float rtmul[] = { 1.239f, 0.794f, 1.019f, 0.905f, 1.023f, 0.741f, 0.75f };
static float gtmul[] = { 0.915f, 1.086f, 0.98f, 1.026f, 0.908f, 0.987f, 0.75f };
static float btmul[] = { 0.743f, 0.882f, 0.653f, 1.277f, 0.979f, 0.101f, 0.75f };
@ -93,10 +93,10 @@ static void ApplyDeemphasis(u8& r, u8& g, u8& b, int deemph_bits)
g = (u8)ng;
b = (u8)nb;
}
static void ApplyDeemphasisComplete(pal* pal512)
{
//for each deemph level beyond 0
static void ApplyDeemphasisComplete(pal* pal512)
{
//for each deemph level beyond 0
for(int i=1,idx=64;i<8;i++)
{
//for each palette entry
@ -104,363 +104,363 @@ static void ApplyDeemphasisComplete(pal* pal512)
{
pal512[idx] = pal512[p];
ApplyDeemphasis(pal512[idx].r,pal512[idx].g,pal512[idx].b,i);
}
}
}
void FCEUI_SetUserPalette(uint8 *pal, int nEntries)
{
if(!pal)
{
palette_user_available = false;
return;
}
palette_user_available = true;
memcpy(palette_user,pal,nEntries*3);
//if palette is incomplete, generate deemph entries
if(nEntries != 512)
ApplyDeemphasisComplete(palette_user);
FCEU_ResetPalette();
}
void FCEU_LoadGamePalette(void)
{
palette_game_available = false;
std::string path = FCEU_MakeFName(FCEUMKF_PALETTE,0,0);
FILE* fp = FCEUD_UTF8fopen(path,"rb");
if(fp)
{
int readed = fread(palette_game,1,64*8*3,fp);
int nEntries = readed/3;
fclose(fp);
}
}
}
void FCEUI_SetUserPalette(uint8 *pal, int nEntries)
{
if(!pal)
{
palette_user_available = false;
return;
}
palette_user_available = true;
memcpy(palette_user,pal,nEntries*3);
//if palette is incomplete, generate deemph entries
if(nEntries != 512)
ApplyDeemphasisComplete(palette_user);
FCEU_ResetPalette();
}
void FCEU_LoadGamePalette(void)
{
palette_game_available = false;
std::string path = FCEU_MakeFName(FCEUMKF_PALETTE,0,0);
FILE* fp = FCEUD_UTF8fopen(path,"rb");
if(fp)
{
int readed = fread(palette_game,1,64*8*3,fp);
int nEntries = readed/3;
fclose(fp);
//if palette is incomplete, generate deemph entries
if(nEntries != 512)
ApplyDeemphasisComplete(palette_game);
palette_game_available = true;
}
//not sure whether this is needed
FCEU_ResetPalette();
}
void FCEUI_SetNTSCTH(bool en, int tint, int hue)
{
ntsctint=tint;
ntschue=hue;
ntsccol_enable = en;
FCEU_ResetPalette();
}
//this prepares the 'deemph' palette which was a horrible idea to jam a single deemph palette into 0xC0-0xFF of the 8bpp palette.
//its needed for GUI and lua and stuff, so we're leaving it, despite having a newer codepath for applying deemph
static uint8 lastd=0;
void SetNESDeemph_OldHacky(uint8 d, int force)
{
static uint16 rtmul[]={
static_cast<uint16>(32768*1.239),
static_cast<uint16>(32768*.794),
static_cast<uint16>(32768*1.019),
static_cast<uint16>(32768*.905),
static_cast<uint16>(32768*1.023),
static_cast<uint16>(32768*.741),
static_cast<uint16>(32768*.75)
};
static uint16 gtmul[]={
static_cast<uint16>(32768*.915),
static_cast<uint16>(32768*1.086),
static_cast<uint16>(32768*.98),
static_cast<uint16>(32768*1.026),
static_cast<uint16>(32768*.908),
static_cast<uint16>(32768*.987),
static_cast<uint16>(32768*.75)
};
static uint16 btmul[]={
static_cast<uint16>(32768*.743),
static_cast<uint16>(32768*.882),
static_cast<uint16>(32768*.653),
static_cast<uint16>(32768*1.277),
static_cast<uint16>(32768*.979),
static_cast<uint16>(32768*.101),
static_cast<uint16>(32768*.75)
};
uint32 r,g,b;
int x;
/* If it's not forced(only forced when the palette changes),
don't waste cpu time if the same deemphasis bits are set as the last call.
*/
if(!force)
{
if(d==lastd)
return;
}
else /* Only set this when palette has changed. */
{
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
r=rtmul[6];
g=rtmul[6];
b=rtmul[6];
for(x=0;x<0x40;x++)
{
uint32 m,n,o;
m=palo[x].r;
n=palo[x].g;
o=palo[x].b;
m=(m*r)>>15;
n=(n*g)>>15;
o=(o*b)>>15;
if(m>0xff) m=0xff;
if(n>0xff) n=0xff;
if(o>0xff) o=0xff;
FCEUD_SetPalette(x|0xC0,m,n,o);
}
}
if(!d) return; /* No deemphasis, so return. */
r=rtmul[d-1];
g=gtmul[d-1];
b=btmul[d-1];
for(x=0;x<0x40;x++)
{
uint32 m,n,o;
m=palo[x].r;
n=palo[x].g;
o=palo[x].b;
m=(m*r)>>15;
n=(n*g)>>15;
o=(o*b)>>15;
if(m>0xff) m=0xff;
if(n>0xff) n=0xff;
if(o>0xff) o=0xff;
FCEUD_SetPalette(x|0x40,m,n,o);
}
lastd=d;
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
}
// Converted from Kevin Horton's qbasic palette generator.
static void CalculatePalette(void)
{
//PRECONDITION: ntsc palette is enabled
if(!ntsccol_enable)
return;
int x,z;
int r,g,b;
double s,luma,theta;
static uint8 cols[16]={0,24,21,18,15,12,9,6,3,0,33,30,27,0,0,0};
static uint8 br1[4]={6,9,12,12};
static double br2[4]={.29,.45,.73,.9};
static double br3[4]={0,.24,.47,.77};
for(x=0;x<=3;x++)
for(z=0;z<16;z++)
{
s=(double)ntsctint/128;
luma=br2[x];
if(z==0) {s=0;luma=((double)br1[x])/12;}
if(z>=13)
{
s=luma=0;
if(z==13)
luma=br3[x];
}
theta=(double)M_PI*(double)(((double)cols[z]*10+ (((double)ntschue/2)+300) )/(double)180);
r=(int)((luma+s*sin(theta))*256);
g=(int)((luma-(double)27/53*s*sin(theta)+(double)10/53*s*cos(theta))*256);
b=(int)((luma-s*cos(theta))*256);
if(r>255) r=255;
if(g>255) g=255;
if(b>255) b=255;
if(r<0) r=0;
if(g<0) g=0;
if(b<0) b=0;
palette_ntsc[(x<<4)+z].r=r;
palette_ntsc[(x<<4)+z].g=g;
palette_ntsc[(x<<4)+z].b=b;
}
//can't call FCEU_ResetPalette(), it would be re-entrant
//see precondition for this function
WritePalette();
}
void FCEU_ResetPalette(void)
{
if(GameInfo)
{
ChoosePalette();
WritePalette();
}
}
static void ChoosePalette(void)
{
//if it's an NSF, there's NO palette? that's right, only the 'unvarying' palette will get used
if(GameInfo->type==GIT_NSF)
palo = NULL;
//user palette takes priority over others
else if(palette_user_available)
palo = palette_user;
//NTSC takes priority next, if it's appropriate
else if(ntsccol_enable && !PAL && GameInfo->type!=GIT_VSUNI)
{
//for NTSC games, we can actually use the NTSC palette
palo = palette_ntsc;
CalculatePalette();
}
//select the game's overridden palette if available
else if(palette_game_available)
palo = palette_game;
//finally, use a default built-in palette
else
{
palo = default_palette[default_palette_selection];
//need to calcualte a deemph on the fly.. sorry. maybe support otherwise later
ApplyDeemphasisComplete(palo);
}
}
void WritePalette(void)
{
int x;
//set the 'unvarying' palettes to low < 128 palette entries
for(x=0;x<7;x++)
FCEUD_SetPalette(x,palette_unvarying[x].r,palette_unvarying[x].g,palette_unvarying[x].b);
if(GameInfo->type==GIT_NSF)
{
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
}
else
{
//sets palette entries >= 128 with the 64 selected main colors
for(x=0;x<64;x++)
FCEUD_SetPalette(128+x,palo[x].r,palo[x].g,palo[x].b);
SetNESDeemph_OldHacky(lastd,1);
}
}
void FCEUI_GetNTSCTH(int *tint, int *hue)
{
*tint = ntsctint;
*hue = ntschue;
}
static int controlselect=0;
static int controllength=0;
void FCEUI_NTSCDEC(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI &&!PAL && GameInfo->type!=GIT_NSF)
{
int which;
if(controlselect)
{
if(controllength)
{
which=controlselect==1?ntschue:ntsctint;
which--;
if(which<0) which=0;
if(controlselect==1)
ntschue=which;
else ntsctint=which;
CalculatePalette();
}
controllength=360;
}
}
}
void FCEUI_NTSCINC(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF)
if(controlselect)
{
if(controllength)
{
switch(controlselect)
{
case 1:ntschue++;
if(ntschue>128) ntschue=128;
CalculatePalette();
break;
case 2:ntsctint++;
if(ntsctint>128) ntsctint=128;
CalculatePalette();
break;
}
}
controllength=360;
}
}
void FCEUI_NTSCSELHUE(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF){controlselect=1;controllength=360;}
}
void FCEUI_NTSCSELTINT(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF){controlselect=2;controllength=360;}
}
void FCEU_DrawNTSCControlBars(uint8 *XBuf)
{
uint8 *XBaf;
int which=0;
int x,x2;
if(!controllength) return;
controllength--;
if(!XBuf) return;
if(controlselect==1)
{
DrawTextTrans(XBuf+128-12+180*256, 256, (uint8 *)"Hue", 0x85);
which=ntschue<<1;
}
else if(controlselect==2)
{
DrawTextTrans(XBuf+128-16+180*256, 256, (uint8 *)"Tint", 0x85);
which=ntsctint<<1;
}
XBaf=XBuf+200*256;
for(x=0;x<which;x+=2)
{
for(x2=6;x2>=-6;x2--)
{
XBaf[x-256*x2]=0x85;
}
}
for(;x<256;x+=2)
{
for(x2=2;x2>=-2;x2--)
XBaf[x-256*x2]=0x85;
}
}
ApplyDeemphasisComplete(palette_game);
palette_game_available = true;
}
//not sure whether this is needed
FCEU_ResetPalette();
}
void FCEUI_SetNTSCTH(bool en, int tint, int hue)
{
ntsctint=tint;
ntschue=hue;
ntsccol_enable = en;
FCEU_ResetPalette();
}
//this prepares the 'deemph' palette which was a horrible idea to jam a single deemph palette into 0xC0-0xFF of the 8bpp palette.
//its needed for GUI and lua and stuff, so we're leaving it, despite having a newer codepath for applying deemph
static uint8 lastd=0;
void SetNESDeemph_OldHacky(uint8 d, int force)
{
static uint16 rtmul[]={
static_cast<uint16>(32768*1.239),
static_cast<uint16>(32768*.794),
static_cast<uint16>(32768*1.019),
static_cast<uint16>(32768*.905),
static_cast<uint16>(32768*1.023),
static_cast<uint16>(32768*.741),
static_cast<uint16>(32768*.75)
};
static uint16 gtmul[]={
static_cast<uint16>(32768*.915),
static_cast<uint16>(32768*1.086),
static_cast<uint16>(32768*.98),
static_cast<uint16>(32768*1.026),
static_cast<uint16>(32768*.908),
static_cast<uint16>(32768*.987),
static_cast<uint16>(32768*.75)
};
static uint16 btmul[]={
static_cast<uint16>(32768*.743),
static_cast<uint16>(32768*.882),
static_cast<uint16>(32768*.653),
static_cast<uint16>(32768*1.277),
static_cast<uint16>(32768*.979),
static_cast<uint16>(32768*.101),
static_cast<uint16>(32768*.75)
};
uint32 r,g,b;
int x;
/* If it's not forced(only forced when the palette changes),
don't waste cpu time if the same deemphasis bits are set as the last call.
*/
if(!force)
{
if(d==lastd)
return;
}
else /* Only set this when palette has changed. */
{
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
r=rtmul[6];
g=rtmul[6];
b=rtmul[6];
for(x=0;x<0x40;x++)
{
uint32 m,n,o;
m=palo[x].r;
n=palo[x].g;
o=palo[x].b;
m=(m*r)>>15;
n=(n*g)>>15;
o=(o*b)>>15;
if(m>0xff) m=0xff;
if(n>0xff) n=0xff;
if(o>0xff) o=0xff;
FCEUD_SetPalette(x|0xC0,m,n,o);
}
}
if(!d) return; /* No deemphasis, so return. */
r=rtmul[d-1];
g=gtmul[d-1];
b=btmul[d-1];
for(x=0;x<0x40;x++)
{
uint32 m,n,o;
m=palo[x].r;
n=palo[x].g;
o=palo[x].b;
m=(m*r)>>15;
n=(n*g)>>15;
o=(o*b)>>15;
if(m>0xff) m=0xff;
if(n>0xff) n=0xff;
if(o>0xff) o=0xff;
FCEUD_SetPalette(x|0x40,m,n,o);
}
lastd=d;
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
}
// Converted from Kevin Horton's qbasic palette generator.
static void CalculatePalette(void)
{
//PRECONDITION: ntsc palette is enabled
if(!ntsccol_enable)
return;
int x,z;
int r,g,b;
double s,luma,theta;
static uint8 cols[16]={0,24,21,18,15,12,9,6,3,0,33,30,27,0,0,0};
static uint8 br1[4]={6,9,12,12};
static double br2[4]={.29,.45,.73,.9};
static double br3[4]={0,.24,.47,.77};
for(x=0;x<=3;x++)
for(z=0;z<16;z++)
{
s=(double)ntsctint/128;
luma=br2[x];
if(z==0) {s=0;luma=((double)br1[x])/12;}
if(z>=13)
{
s=luma=0;
if(z==13)
luma=br3[x];
}
theta=(double)M_PI*(double)(((double)cols[z]*10+ (((double)ntschue/2)+300) )/(double)180);
r=(int)((luma+s*sin(theta))*256);
g=(int)((luma-(double)27/53*s*sin(theta)+(double)10/53*s*cos(theta))*256);
b=(int)((luma-s*cos(theta))*256);
if(r>255) r=255;
if(g>255) g=255;
if(b>255) b=255;
if(r<0) r=0;
if(g<0) g=0;
if(b<0) b=0;
palette_ntsc[(x<<4)+z].r=r;
palette_ntsc[(x<<4)+z].g=g;
palette_ntsc[(x<<4)+z].b=b;
}
//can't call FCEU_ResetPalette(), it would be re-entrant
//see precondition for this function
WritePalette();
}
void FCEU_ResetPalette(void)
{
if(GameInfo)
{
ChoosePalette();
WritePalette();
}
}
static void ChoosePalette(void)
{
//if it's an NSF, there's NO palette? that's right, only the 'unvarying' palette will get used
if(GameInfo->type==GIT_NSF)
palo = NULL;
//user palette takes priority over others
else if(palette_user_available)
palo = palette_user;
//NTSC takes priority next, if it's appropriate
else if(ntsccol_enable && !PAL && GameInfo->type!=GIT_VSUNI)
{
//for NTSC games, we can actually use the NTSC palette
palo = palette_ntsc;
CalculatePalette();
}
//select the game's overridden palette if available
else if(palette_game_available)
palo = palette_game;
//finally, use a default built-in palette
else
{
palo = default_palette[default_palette_selection];
//need to calcualte a deemph on the fly.. sorry. maybe support otherwise later
ApplyDeemphasisComplete(palo);
}
}
void WritePalette(void)
{
int x;
//set the 'unvarying' palettes to low < 128 palette entries
for(x=0;x<7;x++)
FCEUD_SetPalette(x,palette_unvarying[x].r,palette_unvarying[x].g,palette_unvarying[x].b);
if(GameInfo->type==GIT_NSF)
{
#ifdef _S9XLUA_H
FCEU_LuaUpdatePalette();
#endif
}
else
{
//sets palette entries >= 128 with the 64 selected main colors
for(x=0;x<64;x++)
FCEUD_SetPalette(128+x,palo[x].r,palo[x].g,palo[x].b);
SetNESDeemph_OldHacky(lastd,1);
}
}
void FCEUI_GetNTSCTH(int *tint, int *hue)
{
*tint = ntsctint;
*hue = ntschue;
}
static int controlselect=0;
static int controllength=0;
void FCEUI_NTSCDEC(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI &&!PAL && GameInfo->type!=GIT_NSF)
{
int which;
if(controlselect)
{
if(controllength)
{
which=controlselect==1?ntschue:ntsctint;
which--;
if(which<0) which=0;
if(controlselect==1)
ntschue=which;
else ntsctint=which;
CalculatePalette();
}
controllength=360;
}
}
}
void FCEUI_NTSCINC(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF)
if(controlselect)
{
if(controllength)
{
switch(controlselect)
{
case 1:ntschue++;
if(ntschue>128) ntschue=128;
CalculatePalette();
break;
case 2:ntsctint++;
if(ntsctint>128) ntsctint=128;
CalculatePalette();
break;
}
}
controllength=360;
}
}
void FCEUI_NTSCSELHUE(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF){controlselect=1;controllength=360;}
}
void FCEUI_NTSCSELTINT(void)
{
if(ntsccol_enable && GameInfo->type!=GIT_VSUNI && !PAL && GameInfo->type!=GIT_NSF){controlselect=2;controllength=360;}
}
void FCEU_DrawNTSCControlBars(uint8 *XBuf)
{
uint8 *XBaf;
int which=0;
int x,x2;
if(!controllength) return;
controllength--;
if(!XBuf) return;
if(controlselect==1)
{
DrawTextTrans(XBuf+128-12+180*256, 256, (uint8 *)"Hue", 0x85);
which=ntschue<<1;
}
else if(controlselect==2)
{
DrawTextTrans(XBuf+128-16+180*256, 256, (uint8 *)"Tint", 0x85);
which=ntsctint<<1;
}
XBaf=XBuf+200*256;
for(x=0;x<which;x+=2)
{
for(x2=6;x2>=-6;x2--)
{
XBaf[x-256*x2]=0x85;
}
}
for(;x<256;x+=2)
{
for(x2=2;x2>=-2;x2--)
XBaf[x-256*x2]=0x85;
}
}