www.pudn.com > NESgameReader.rar > MainForm.cpp
//--------------------------------------------------------------------------- #include#pragma hdrstop #include "MainForm.h" #include "PrnPort.h" #include "time.h" #include #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //status #define mcuready 0x80; //s7 = ~BUSY #define mcuack 0x40; //s6 = ACK // conctrol #define pcready 0x02; //c1 = ~AutoLF #define pcack 0x08; //c3 = ~SelectIn #define power 0x04; //c2 = Init void set_pcready(void); void clear_pcready(void); void set_pcack(void); void clear_pcack(void); void mcu_power_on(void); void mcu_power_off(void); void mcu_reset(void); void delay(int ms); bool check_mcuack(void); bool check_mcuready(void); void set_pc_output_data(void); void set_pc_input_data(void); void writeData(unsigned char data); unsigned char readData(void); unsigned char pc_conctrol,pc_conctrol1; unsigned char mcu_status,mcu_status1; unsigned char output_data,input_data; unsigned char file_temp[0x200000]; long int counter=0; FILE *outfile; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { char c[MAX_PATH]; //初始化,程序现在目录 if(::GetCurrentDirectory(MAX_PATH,c)) { ::SetCurrentDirectory(c); SaveDialog1->FileName=AnsiString(c)+"\\readcard.prg"; SaveDialog2->FileName=AnsiString(c)+"\\readcard.chr"; SaveDialog3->FileName=AnsiString(c)+"\\readcard.tst"; ePrgFilename->Text=AnsiString(c)+"\\readcard.prg"; eChrFilename->Text=AnsiString(c)+"\\readcard.chr"; eTestFilename->Text=AnsiString(c)+"\\readcard.tst"; } if(!WinIo.IsValid) { Application->MessageBox("无法装载 WinIo 驱动程序!", "错误信息", MB_OK|MB_ICONSTOP); Application->Terminate(); } Timer1->Enabled = false; ParallelPort.Base = 0x378; //默认为 0x378 pc_conctrol=0; pc_conctrol1=0x0ff; ParallelPort.Ctrl=pc_conctrol; cbPrgLength->ItemIndex=cbPrgSize->ItemIndex + 2; cbChrLength->ItemIndex=cbChrSize->ItemIndex + 4; mcu_power_on(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btReadPRGClick(TObject *Sender) { long int length; unsigned char data; char *filename; mcu_reset(); stStatus1->Caption = "Card Reader Reset\n"; data=0x80; writeData(data); //1 选择PRG stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data = cbC3Type->ItemIndex + 1; writeData(data); //2 选择游戏卡类型 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data = cbPrgSize->ItemIndex + 8; writeData(data); //3 容量 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbPrgFull->Checked) data=0x00; else data= cbPrgStart->ItemIndex * 0x20 / 0x100 ; writeData(data); //4 起始地址:高地址 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbPrgFull->Checked) data=0x00; else data= cbPrgStart->ItemIndex * 0x20 % 0x100 ; writeData(data); //5 起始地址:低地址 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbPrgFull->Checked) data= cbPrgSize->ItemIndex + 5; else data= cbPrgLength->ItemIndex + 3; writeData(data); //6 长度 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; length = powl(2,data)*1024; data=0x00; writeData(data); //7 保留 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data=0x00; writeData(data); //8 保留 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; for(counter=0;counter Text.Length() + 1 ]; strcpy(filename,ePrgFilename->Text.c_str()); outfile=fopen(filename,"wb"); for(counter=0;counter Caption = "Card Reader Reset\n"; data=0x90; writeData(data); //1 选择CHR stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data = cbC3Type->ItemIndex + 1; writeData(data); //2 选择游戏卡类型 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data = cbChrSize->ItemIndex + 8; writeData(data); //3 容量 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbChrFull->Checked) data=0x00; else data= cbChrStart->ItemIndex * 0x20 / 0x100 ; writeData(data); //4 起始地址:高地址 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbChrFull->Checked) data=0x00; else data= cbChrStart->ItemIndex * 0x20 % 0x100 ; writeData(data); //5 起始地址:低地址 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; if(rbChrFull->Checked) data= cbChrSize->ItemIndex + 5; else data= cbChrLength->ItemIndex + 1; writeData(data); //6 长度 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; length = powl(2,data)*1024; data=0x00; writeData(data); //7 保留 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; data=0x00; writeData(data); //8 保留 stStatus1->Caption = stStatus1->Caption + "0x"+IntToHex((int)data,2) + " "; for(counter=0;counter Text.Length() + 1 ]; strcpy(filename,eChrFilename->Text.c_str()); outfile=fopen(filename,"wb"); for(counter=0;counter Execute()) ePrgFilename->Text = SaveDialog1->FileName; } //--------------------------------------------------------------------------- void __fastcall TForm1::chrsavebtnClick(TObject *Sender) { if(SaveDialog2->Execute()) eChrFilename->Text = SaveDialog2->FileName; } //--------------------------------------------------------------------------- void __fastcall TForm1::testsavebutClick(TObject *Sender) { if(SaveDialog3->Execute()) eTestFilename->Text = SaveDialog3->FileName; } //--------------------------------------------------------------------------- void __fastcall TForm1::rbPrgPartClick(TObject *Sender) { Label5->Enabled=true; Label6->Enabled=true; cbPrgLength->Enabled=true; cbPrgStart->Enabled=true; cbPrgLength->ItemIndex=cbPrgSize->ItemIndex + 2; stStatus1->Caption = "Partial Read PRG ROM"; } //--------------------------------------------------------------------------- void __fastcall TForm1::rbPrgFullClick(TObject *Sender) { Label5->Enabled=false; Label6->Enabled=false; cbPrgLength->Enabled=false; cbPrgStart->Enabled=false; cbPrgLength->ItemIndex= cbPrgSize->ItemIndex + 2; cbPrgStart->ItemIndex=0; stStatus1->Caption = "Full Read PRG ROM"; } //--------------------------------------------------------------------------- void __fastcall TForm1::rbChrFullClick(TObject *Sender) { Label8->Enabled=false; Label9->Enabled=false; cbChrLength->Enabled=false; cbChrStart->Enabled=false; cbChrLength->ItemIndex= cbChrSize->ItemIndex + 4; cbChrStart->ItemIndex=0; stStatus1->Caption = "Full Read CHR ROM"; } //--------------------------------------------------------------------------- void __fastcall TForm1::rbChrPartClick(TObject *Sender) { Label8->Enabled=true; Label9->Enabled=true; cbChrLength->Enabled=true; cbChrStart->Enabled=true; cbChrLength->ItemIndex=cbChrSize->ItemIndex + 4; cbChrStart->ItemIndex=0; stStatus1->Caption = "Partial Read CHR ROM"; } //--------------------------------------------------------------------------- void __fastcall TForm1::rbPowerOffClick(TObject *Sender) { mcu_power_off(); } //--------------------------------------------------------------------------- void __fastcall TForm1::rbPowerOnClick(TObject *Sender) { mcu_power_on(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btResetClick(TObject *Sender) { mcu_reset(); } //--------------------------------------------------------------------------- void __fastcall TForm1::cbPrgSizeChange(TObject *Sender) { cbPrgLength->ItemIndex=cbPrgSize->ItemIndex + 2; cbPrgStart->ItemIndex=0; } //--------------------------------------------------------------------------- void __fastcall TForm1::cbChrSizeChange(TObject *Sender) { cbChrLength->ItemIndex=cbChrSize->ItemIndex + 4; cbChrStart->ItemIndex=0; } //--------------------------------------------------------------------------- void __fastcall TForm1::cbC3TypeChange(TObject *Sender) { if (cbC3Type->ItemIndex == 3) { cbPrgSize->ItemIndex = 4 ; cbPrgLength->ItemIndex=cbPrgSize->ItemIndex + 2; cbPrgStart->ItemIndex=0; btReadCHR->Enabled=false; } else { btReadCHR->Enabled=true; } } //---------------------------------------------------------------------------