?? rom.cpp
字號(hào):
if (calc==89)
cl=contrast;
else if (calc>=92)
cl=31-contrast;
else if ((calc==82)||(calc==85))
cl=contrast+((calc==85)?4:0);
else if (calc==83)
cl=((contrast-12)*32)/52;
else
cl=contrast;
if (cpuCompleteStop) cl+=6;
if (romErase)
{
if (calc!=89)
cl+=contrastDelta[romErasePhase>>3];
romErasePhase++;
if (romErasePhase==64)
{
romErasePhase=0;
romErase=0;
}
}
if (cl>31) cl=31;
if (cl<0) cl=0;
if (cl>16)
{
rv[0]=irv[0]; rv[6]=irv[0]+((irv[6]-irv[0])*(32-cl))/16;
gv[0]=igv[0]; gv[6]=igv[0]+((igv[6]-igv[0])*(32-cl))/16;
bv[0]=ibv[0]; bv[6]=ibv[0]+((ibv[6]-ibv[0])*(32-cl))/16;
rv[1]=rv[0]+(rv[6]-rv[0])/6;
rv[2]=rv[0]+((rv[6]-rv[0])*2)/6;
rv[3]=rv[0]+((rv[6]-rv[0])*3)/6;
rv[4]=rv[0]+((rv[6]-rv[0])*4)/6;
rv[5]=rv[0]+((rv[6]-rv[0])*5)/6;
gv[1]=gv[0]+(gv[6]-gv[0])/6;
gv[2]=gv[0]+((gv[6]-gv[0])*2)/6;
gv[3]=gv[0]+((gv[6]-gv[0])*3)/6;
gv[4]=gv[0]+((gv[6]-gv[0])*4)/6;
gv[5]=gv[0]+((gv[6]-gv[0])*5)/6;
bv[1]=bv[0]+(bv[6]-bv[0])/6;
bv[2]=bv[0]+((bv[6]-bv[0])*2)/6;
bv[3]=bv[0]+((bv[6]-bv[0])*3)/6;
bv[4]=bv[0]+((bv[6]-bv[0])*4)/6;
bv[5]=bv[0]+((bv[6]-bv[0])*5)/6;
}
else
{
rv[6]=irv[6]; rv[0]=irv[6]-((irv[6]-irv[0])*cl)/16;
gv[6]=igv[6]; gv[0]=igv[6]-((igv[6]-igv[0])*cl)/16;
bv[6]=ibv[6]; bv[0]=ibv[6]-((ibv[6]-ibv[0])*cl)/16;
rv[1]=rv[0]+(rv[6]-rv[0])/6;
rv[2]=rv[0]+((rv[6]-rv[0])*2)/6;
rv[3]=rv[0]+((rv[6]-rv[0])*3)/6;
rv[4]=rv[0]+((rv[6]-rv[0])*4)/6;
rv[5]=rv[0]+((rv[6]-rv[0])*5)/6;
gv[1]=gv[0]+(gv[6]-gv[0])/6;
gv[2]=gv[0]+((gv[6]-gv[0])*2)/6;
gv[3]=gv[0]+((gv[6]-gv[0])*3)/6;
gv[4]=gv[0]+((gv[6]-gv[0])*4)/6;
gv[5]=gv[0]+((gv[6]-gv[0])*5)/6;
bv[1]=bv[0]+(bv[6]-bv[0])/6;
bv[2]=bv[0]+((bv[6]-bv[0])*2)/6;
bv[3]=bv[0]+((bv[6]-bv[0])*3)/6;
bv[4]=bv[0]+((bv[6]-bv[0])*4)/6;
bv[5]=bv[0]+((bv[6]-bv[0])*5)/6;
}
for (j=0;j<7;j++)
rgbv[j]=bv[j]|(gv[j]<<8)|(rv[j]<<16);
{
bmp=new Graphics::TBitmap;
bmp->Width=calcImage->Width;
bmp->Height=calcImage->Height;
bmp->PixelFormat=pf32bit;
lcd=new Graphics::TBitmap;
lcd->Width=lcdWidth<<1;
lcd->Height=lcdHeight<<1;
lcd->PixelFormat=pf32bit;
for (int i=0;i<(lcdHeight<<1);i++)
ScreenLine[i]=(unsigned long *)lcd->ScanLine[i];
for (y=0,lofs=0;y<lcdHeight;y++,lofs+=lcdLineBytes)
{
ofs=lofs;
for (x=0,sptr1=(unsigned long*)ScreenLine[y<<1],sptr2=
(unsigned long*)ScreenLine[(y<<1)+1];x<lcdWidth;x+=8,
ofs++)
{
v0=oldScreen[0][ofs];
v1=oldScreen[1][ofs];
v2=oldScreen[2][ofs];
v3=oldScreen[3][ofs];
v4=oldScreen[4][ofs];
v5=oldScreen[5][ofs];
for (i=7,b=0x80;i>=0;i--,b>>=1)
{
j=6-(((v0&b)+(v1&b)+(v2&b)+(v3&b)+(v4&b)+(v5&b))>>i);
unsigned long v=rgbv[j];
*(sptr1++)=v; *(sptr1++)=v;
*(sptr2++)=v; *(sptr2++)=v;
}
}
}
if (calcImage)
bmp->Canvas->Draw(0,0,calcImage);
bmp->Canvas->Draw(skinLcd.left,skinLcd.top,lcd);
delete lcd;
}
return bmp;*/
return NULL;
}
void AddSkin(char *name,int size)
{
/* FILE *fp=fopen(name,"rb");
if (!fp) return;
char str[9];
fread(str,8,1,fp);
str[8]=0;
if (strcmp(str,"VTIv2.1 "))
{
fclose(fp);
return;
}
strcpy(skin[skinCount].file,name);
fread(skin[skinCount].name,64,1,fp);
fread(&skin[skinCount].calc,4,1,fp);
fseek(fp,0,SEEK_SET);
skin[skinCount].csum=0;
for (int i=0;i<size;i++)
skin[skinCount].csum+=fgetc(fp)&0xff;
TRegistry *reg=new TRegistry;
reg->RootKey=HKEY_LOCAL_MACHINE;
reg->OpenKey("\\Software\\ACZ\\Virtual TI\\Skins",true);
char keyName[96];
sprintf(keyName,"%s",name);
skin[skinCount].defW=0;
skin[skinCount].defH=0;
if (reg->OpenKey(keyName,false))
{
if (reg->ValueExists("Checksum"))
{
if (reg->ReadInteger("Checksum")==
skin[skinCount].csum)
{
if ((reg->ValueExists("Width"))&&
(reg->ValueExists("Height")))
{
skin[skinCount].defW=reg->ReadInteger("Width");
skin[skinCount].defH=reg->ReadInteger("Height");
}
}
}
}
reg->CloseKey();
delete reg;
fclose(fp);
skinCount++;*/
}
void AnalyzeSkins()
{
ffblk ff;
int done;
skinCount=0;
/* done=findfirst("*.skn",&ff,FA_RDONLY|FA_ARCH);
while (!done)
{
AddSkin(ff.ff_name,ff.ff_fsize);
done=findnext(&ff);
}*/
}
void LoadSkin(int n)
{
/* char filename[256];
if (initPath[0])
{
sprintf(filename,"%s%s%s",initPath,(initPath[strlen(
initPath)-1]=='\\')?"":"\\",skin[n].file);
}
else
strcpy(filename,skin[n].file);
FILE *fp=fopen(filename,"rb");
if (!fp) return;
fseek(fp,80,SEEK_SET);
TColor white,black;
fread(&white,4,1,fp);
fread(&black,4,1,fp);
irvC[0]=((int)black)&0xff; irvC[1]=((int)white)&0xff;
igvC[0]=(((int)black)>>8)&0xff; igvC[1]=(((int)white)>>8)&0xff;
ibvC[0]=(((int)black)>>16)&0xff; ibvC[1]=(((int)white)>>16)&0xff;
fread(&skinLcd,sizeof(RECT),1,fp);
fread(skinKey,sizeof(RECT),80,fp);
Screen->Cursor=crHourGlass;
if (!skinImageLg) skinImageLg=new Graphics::TBitmap;
skinImageLg->PixelFormat=pf24bit;
ReadJPEG(fp,skinImageLg);
if (!skinImageSm) skinImageSm=new Graphics::TBitmap;
skinImageSm->Width=skinImageLg->Width>>1;
skinImageSm->Height=skinImageLg->Height>>1;
skinImageSm->PixelFormat=pf24bit;
TRect r;
r.Left=0; r.Right=skinImageSm->Width;
r.Top=0; r.Bottom=skinImageSm->Height;
skinImageSm->Canvas->StretchDraw(r,skinImageLg);
Screen->Cursor=crDefault;
fclose(fp);
currentSkin=n;*/
}
void CloseSkin(int saveSkin)
{
/* if (saveSkin)
{
TRegistry *reg=new TRegistry;
reg->RootKey=HKEY_LOCAL_MACHINE;
if ((currentSkin!=-1)&&(!EmuWnd->Fullscreenview1->Checked))
{
reg->OpenKey("\\Software\\ACZ\\Virtual TI\\Skins",true);
char keyName[96];
sprintf(keyName,"%s",skin[currentSkin].file);
reg->OpenKey(keyName,true);
reg->WriteInteger("Checksum",(int)((unsigned long)
skin[currentSkin].csum));
reg->WriteInteger("Width",EmuWnd->Image->Width);
reg->WriteInteger("Height",EmuWnd->Image->Height);
skin[currentSkin].defW=EmuWnd->Image->Width;
skin[currentSkin].defH=EmuWnd->Image->Height;
reg->CloseKey();
}
reg->OpenKey("\\Software\\ACZ\\Virtual TI\\Skins",true);
char keyName[24];
switch (calc)
{
case 73: strcpy(keyName,"DefaultSkin73"); break;
case 82: strcpy(keyName,"DefaultSkin82"); break;
case 83: strcpy(keyName,"DefaultSkin83"); break;
case 84: strcpy(keyName,"DefaultSkin83Plus"); break;
case 85: strcpy(keyName,"DefaultSkin85"); break;
case 86: strcpy(keyName,"DefaultSkin86"); break;
case 89: strcpy(keyName,"DefaultSkin89"); break;
case 92: case 93: strcpy(keyName,"DefaultSkin92"); break;
case 94: strcpy(keyName,"DefaultSkin92Plus"); break;
}
if (currentSkin!=-1)
reg->WriteString(keyName,skin[currentSkin].file);
else
reg->WriteString(keyName,"");
reg->CloseKey();
delete reg;
}
if (skinImageLg) { delete skinImageLg; skinImageLg=NULL; }
if (skinImageSm) { delete skinImageSm; skinImageSm=NULL; }
skinLcd.left=0; skinLcd.right=lcdWidth<<1;
skinLcd.top=0; skinLcd.bottom=lcdHeight<<1;
currentSkin=-1;
irvC[0]=0; irvC[1]=255;
igvC[0]=0; igvC[1]=255;
ibvC[0]=0; ibvC[1]=255;*/
}
unsigned char getmem_direct(unsigned short addr)
{
if (addr<0xf000)
{
if (!mem[addr>>12])
return 0;
return mem[addr>>12][addr&0xfff];
}
return getmem(addr);
}
unsigned char getmem(unsigned short addr)
{
if ((dmaClk)&&(addr<0xff00))
{
if (addr<0x8000)
{
if (dmaType==0)
{
if (debugWarn[DBW_DMA])
DebugWarn(DBW_DMA);
return 0;
}
}
else if (addr<0xa000)
{
if (dmaType==1)
{
if (debugWarn[DBW_DMA])
DebugWarn(DBW_DMA);
return 0;
}
}
else
{
if (dmaType==2)
{
if (debugWarn[DBW_DMA])
DebugWarn(DBW_DMA);
return 0;
}
}
}
if (addr<0x8000)
{
if (!mem[addr>>12])
{
if (debugWarn[DBW_INVALIDMEM])
DebugWarn(DBW_INVALIDMEM);
return 0;
}
return mem[addr>>12][addr&0xfff];
}
else if (addr<0xa000)
{
if ((lcdMode==3)&&(hiRam[0x40]&0x80))
{
if (debugWarn[DBW_VIDMEM])
DebugWarn(DBW_VIDMEM);
return 0;
}
return vidRam[(vidPage<<13)+(addr&0x1fff)];
}
else if (addr<0xf000)
{
if (!mem[addr>>12])
{
if ((addr<0xc000)&&(!ramEnable)&&
(debugWarn[DBW_RAMDISABLED]))
DebugWarn(DBW_RAMDISABLED);
else if (debugWarn[DBW_INVALIDMEM])
DebugWarn(DBW_INVALIDMEM);
return 0;
}
return mem[addr>>12][addr&0xfff];
}
else if (addr<0xfe00)
return intRam[(hiRam[0x70]<<12)+(addr&0xfff)];
if (addr<0xfea0)
{
if ((lcdMode>=2)&&(hiRam[0x40]&2)&&(hiRam[0x40]&0x80))
{
if (debugWarn[DBW_VIDMEM])
DebugWarn(DBW_VIDMEM);
return 0;
}
return oam[addr&0xff];
}
else if (addr<0xff00)
return 0;
else if (addr==0xff00)
{
hiRam[0]=(hiRam[0]&0xf0)|(((hiRam[0]&0x10)?15:(keys&0xf))&
((hiRam[0]&0x20)?15:((keys>>4)&0xf)));
return hiRam[0];
}
else if (addr==0xff0f)
{
hiRam[0xf]=intReq;
return hiRam[0xf];
}
else if (addr==0xff26)
{
hiRam[0x26]=(hiRam[0x26]&0xf0)|(snd4Enable<<3)|
(snd3Enable<<2)|(snd2Enable<<1)|snd1Enable;
return hiRam[0x26];
}
else if ((addr>=0xff30)&&(addr<0xff40))
{
// if ((!(hiRam[0x26]&0x80))||(!(hiRam[0x1a]&0x80)))
return hiRam[addr&0xff];
// return rand()&0xff;
}
else if (addr==0xff41)
{
hiRam[0x41]=(hiRam[0x41]&0xf8)|((lcdY==
hiRam[0x45])?4:0)|lcdMode;
// hiRam[0x41]=(hiRam[0x41]&0xf8)|(hiRam[0x41]&4)|lcdMode;
int v=hiRam[0x41];
// if (lcdY!=hiRam[0x45])
// hiRam[0x41]&=~4;
return v;
}
else if (addr==0xff44)
{
hiRam[0x44]=lcdY;
return hiRam[0x44];
}
else if (addr==0xff69)
{
unsigned char v;
if (hiRam[0x68]&1)
v=(bgPalGB[(hiRam[0x68]>>1)&31]>>8)&0xff;
else
v=bgPalGB[(hiRam[0x68]>>1)&31]&0xff;
if (hiRam[0x68]&0x80)
hiRam[0x68]=((hiRam[0x68]+1)&63)|0x80;
return v;
}
else if (addr==0xff6b)
{
unsigned char v;
if (hiRam[0x6a]&1)
v=(objPalGB[(hiRam[0x6a]>>1)&31]>>8)&0xff;
else
v=objPalGB[(hiRam[0x6a]>>1)&31]&0xff;
if (hiRam[0x6a]&0x80)
hiRam[0x6a]=((hiRam[0x6a]+1)&63)|0x80;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -