📄 emu.cpp
字号:
void __fastcall TEmuWnd::FormDeactivate(TObject *Sender)
{
if ((Fullscreenview1->Checked)&&(minimizeOnDeactivate))
Application->Minimize();
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::Enterdebugmode1Click(TObject *Sender)
{
/* debug=1; run=0;
debugStartPC=regPC;//R.PC.D;
DebugWnd->Show();
DebugWnd->Update();*/
GBC_EnterDebug();
}
void __fastcall TEmuWnd::Savestateimage1Click(TObject *Sender)
{
/* PauseStart();
TSaveDialog *dlog=new TSaveDialog(this);
dlog->DefaultExt="sav";
char str[256];
strcpy(str,romImage[currentROM].file);
str[strlen(str)-3]='s';
str[strlen(str)-2]='a';
str[strlen(str)-1]='v';
dlog->FileName=str;
dlog->Options.Clear();
dlog->Filter="State files (*.sav)|*.sav";
dlog->FilterIndex=1;
char cwd[256];
getcwd(cwd,256);
dlog->InitialDir=cwd;
if (dlog->Execute())
SaveState(dlog->FileName.c_str());
delete dlog;
PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::Loadstateimage1Click(TObject *Sender)
{
// PauseStart();
TOpenDialog *dlog=new TOpenDialog(this);
dlog->DefaultExt="sav";
dlog->FileName="*.sav";
dlog->Options.Clear();
dlog->Options << ofFileMustExist << ofPathMustExist;
dlog->Filter="State files (*.sav)|*.sav";
dlog->FilterIndex=1;
char cwd[256];
getcwd(cwd,256);
dlog->InitialDir=cwd;
if (dlog->Execute())
{
/* FILE *fp=fopen(dlog->FileName.c_str(),"rb");
char str[9],romName[56];
fread(str,8,1,fp);
fread(romName,56,1,fp);
fclose(fp);
str[8]=0;
if (strcmp(str,"VTIv2.0 "))
{
MessageBox(NULL,"Unrecognized file format","State Load Error",MB_OK|MB_ICONSTOP);
PauseEnd();
chdir(old);
return;
}
if (!strcmp(romName,romImage[currentROM].name))
hw->LoadState(dlog->FileName.c_str());
else
{
SaveState();
int newROM=-1;
for (int i=0;i<romImageCount;i++)
{
if (!strcmp(romImage[i].name,romName))
{
newROM=i;
break;
}
}
if (newROM==-1)
{
MessageBox(NULL,"Required ROM not present","State Load Error",MB_OK|MB_ICONSTOP);
PauseEnd();
chdir(old);
return;
}
CloseSkin();
CloseEmu();
InitEmu(newROM);
TRegistry *reg=new TRegistry;
reg->RootKey=HKEY_LOCAL_MACHINE;
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 (reg->ValueExists(keyName))
{
char skinName[32];
strcpy(skinName,reg->ReadString(keyName).c_str());
int found=-1;
for (int i=0;i<skinCount;i++)
{
if (!strcmp(skinName,skin[i].file))
{
found=i;
break;
}
}
if (found!=-1)
LoadSkin(found);
}
else
{
for (int i=0;i<skinCount;i++)
{
if ((calc==skin[i].calc)||
((calc>=92)&&(skin[i].calc>=92)))
{
LoadSkin(i);
break;
}
}
}
reg->CloseKey();
delete reg;
hw->LoadState(dlog->FileName.c_str());
Make();
AboutDlg->UpdateText();
}*/
}
delete dlog;
// PauseEnd();
}
void __fastcall TEmuWnd::FormKeyDown(TMessage &Msg)
{
int Key;
Key=Msg.WParam;
if ((Key==VK_F11)&&(Enterdebugger1->Enabled))
Enterdebugmode1Click(NULL);
else if (Key==VK_F10)
SendFile1Click(NULL);
else if (Key==VK_F12)
EnableDebugWarnings1Click(NULL);
else if (Key=='Z')
GBC_KeyDown(KEY_B);
else if (Key=='X')
GBC_KeyDown(KEY_A);
else if (Key==13)
GBC_KeyDown(KEY_START);
else if (Key=='S')
GBC_KeyDown(KEY_SELECT);
else if (Key==VK_LEFT)
GBC_KeyDown(KEY_LEFT);
else if (Key==VK_RIGHT)
GBC_KeyDown(KEY_RIGHT);
else if (Key==VK_UP)
GBC_KeyDown(KEY_UP);
else if (Key==VK_DOWN)
GBC_KeyDown(KEY_DOWN);
Msg.Result=0;
}
//---------------------------------------------------------------------------void __fastcall TEmuWnd::FormKeyUp(TObject *Sender, WORD &Key,
void __fastcall TEmuWnd::FormKeyUp(TMessage &Msg)
{
int Key;
Key=Msg.WParam;
if (Key=='Z')
GBC_KeyUp(KEY_B);
else if (Key=='X')
GBC_KeyUp(KEY_A);
else if (Key==13)
GBC_KeyUp(KEY_START);
else if (Key=='S')
GBC_KeyUp(KEY_SELECT);
else if (Key==VK_LEFT)
GBC_KeyUp(KEY_LEFT);
else if (Key==VK_RIGHT)
GBC_KeyUp(KEY_RIGHT);
else if (Key==VK_UP)
GBC_KeyUp(KEY_UP);
else if (Key==VK_DOWN)
GBC_KeyUp(KEY_DOWN);
}
void __fastcall TEmuWnd::Large2xcalculatorimage1Click(TObject *Sender)
{
if (Fullscreenview1->Checked)
{
Fullscreenview1->Checked=false;
Top=5; Left=100;
Enterdebugger1->Enabled=true;
Showpercentageofactualspeed1->Enabled=true;
Stayontop1->Enabled=true;
FormStyle=(Stayontop1->Checked)?fsStayOnTop:fsNormal;
}
Normal1xview1->Checked=false;
Large2xview1->Checked=true;
scaleFact=2;
GBC_LCDScaleFact(2);
Make();
Speed->Left=442-Speed->Width;
Speed->Top=90-Speed->Height;
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::Showpercentageofactualspeed1Click(
TObject *Sender)
{
showSpeed=!showSpeed;
Speed->Visible=showSpeed;
Showpercentageofactualspeed1->Checked=showSpeed;
Caption="";
Application->Title=Caption;
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::LCDonlyblackwhiteBMP1Click(TObject *Sender)
{
/*// PauseStart();
TSaveDialog *dlog=new TSaveDialog(this);
dlog->DefaultExt="bmp";
dlog->FileName="screen.bmp";
dlog->Options.Clear();
dlog->Options << ofOverwritePrompt << ofPathMustExist
<< ofNoChangeDir;
dlog->Filter="Bitmap files (*.bmp)|*.bmp";
dlog->FilterIndex=1;
char cwd[256];
getcwd(cwd,256);
dlog->InitialDir=cwd;
if (dlog->Execute())
{
Graphics::TBitmap *bmp=GetLCD_BW();
bmp->SaveToStream(&TFileStream(dlog->FileName,
fmCreate));
delete bmp;
}
delete dlog;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::LCDonlytruecolorsBMP1Click(TObject *Sender)
{
/*// PauseStart();
TSaveDialog *dlog=new TSaveDialog(this);
dlog->DefaultExt="bmp";
dlog->FileName="screen.bmp";
dlog->Options.Clear();
dlog->Options << ofOverwritePrompt << ofPathMustExist
<< ofNoChangeDir;
dlog->Filter="Bitmap files (*.bmp)|*.bmp";
dlog->FilterIndex=1;
char cwd[256];
getcwd(cwd,256);
dlog->InitialDir=cwd;
if (dlog->Execute())
{
Graphics::TBitmap *bmp=GetLCD_True();
bmp->SaveToStream(&TFileStream(dlog->FileName,
fmCreate));
delete bmp;
}
delete dlog;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::LCDonlyblackwhiteClipboard1Click(
TObject *Sender)
{
/*// PauseStart();
Graphics::TBitmap *bmp=GetLCD_BW();
int DataHandle;
HPALETTE APalette;
unsigned short format;
bmp->SaveToClipboardFormat(format,DataHandle,APalette);
Clipboard()->SetAsHandle(format,DataHandle);
delete bmp;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::LCDonlytruecolorsClipboard1Click(
TObject *Sender)
{
/*// PauseStart();
Graphics::TBitmap *bmp=GetLCD_True();
int DataHandle;
HPALETTE APalette;
unsigned short format;
bmp->SaveToClipboardFormat(format,DataHandle,APalette);
Clipboard()->SetAsHandle(format,DataHandle);
delete bmp;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::CalculatorimageBMP1Click(TObject *Sender)
{
/*// PauseStart();
TSaveDialog *dlog=new TSaveDialog(this);
dlog->DefaultExt="bmp";
dlog->FileName="screen.bmp";
dlog->Options.Clear();
dlog->Options << ofOverwritePrompt << ofPathMustExist
<< ofNoChangeDir;
dlog->Filter="Bitmap files (*.bmp)|*.bmp";
dlog->FilterIndex=1;
char cwd[256];
getcwd(cwd,256);
dlog->InitialDir=cwd;
if (dlog->Execute())
{
Graphics::TBitmap *bmp=GetLCD_Calc(calcImage);
bmp->SaveToStream(&TFileStream(dlog->FileName,
fmCreate));
delete bmp;
}
delete dlog;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::CalculatorimageClipboard1Click(TObject *Sender)
{
/*// PauseStart();
Graphics::TBitmap *bmp=GetLCD_Calc(calcImage);
int DataHandle;
HPALETTE APalette;
unsigned short format;
bmp->SaveToClipboardFormat(format,DataHandle,APalette);
Clipboard()->SetAsHandle(format,DataHandle);
delete bmp;
// PauseEnd();*/
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::Normal1xview1Click(TObject *Sender)
{
if (Fullscreenview1->Checked)
{
Fullscreenview1->Checked=false;
Top=5; Left=100;
Enterdebugger1->Enabled=true;
Showpercentageofactualspeed1->Enabled=true;
Stayontop1->Enabled=true;
FormStyle=(Stayontop1->Checked)?fsStayOnTop:fsNormal;
}
Normal1xview1->Checked=true;
Large2xview1->Checked=false;
scaleFact=1;
GBC_LCDScaleFact(1);
Make();
Speed->Left=221-Speed->Width;
Speed->Top=45-Speed->Height;
}
void __fastcall TEmuWnd::OnKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
TMessage msg;
msg.WParam=Key;
msg.LParam=0;
FormKeyDown(msg);
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::OnKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
TMessage msg;
msg.WParam=Key;
msg.LParam=0;
FormKeyUp(msg);
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TEmuWnd::OnSkinSelect(TObject *Sender)
{
/* int indx=((TMenuItem*)Sender)->Parent->
IndexOf((TMenuItem*)Sender);
for (int i=0;i<skinCount;i++)
{
if ((calc==skin[i].calc)||((calc>=92)&&
(skin[i].calc>=92)))
{
indx--;
if (!indx)
{
PauseStart();
LoadSkin(i);
PauseEnd();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -