⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bung.cpp

📁 bung.cpp bung.dfm bung.h DbgWarn.cpp DbgWarn.dfm DbgWarn.h Debug.cpp Debug.dfm Debug.h Emu.cpp Emu
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//      printf("open error !!!\07\n");
      return(-1);
      }
   if (write_file_xxk(length)!=0){
      fclose(fptr);
      return(-1);
   }
      fclose(fptr);
   return(0);
}


char read_all_sram_to_file(void)
{
   enable_sram_bank();
   if((fptr=fopen(file_name,"w+b"))==NULL)
      {/* open error */
//      printf("open error !!!\07\n");
      return(-1);
      }

   for (bank=0;bank<bank_size;bank++){
      if ((bank & 3)==0) idx=0;
      set_sram_bank(bank);
      for (j=0;j<0x20;j++){	// 32 x 256 = 8192(8kbytes)
	 set_ai_data(1,(0xa0+j));	// sram at 0xa000~bfff
	 set_ai_data(0,0);      // a[7..0]=0
	 set_ai_data(2,0x81);	// enable inc
	 set_ai(3);		// point to data r/w port
	 set_data_read
	 for (i=0;i<256;i++){
	    mix.buffer[i+idx]=read_data();
//	    mix.buffer[i+idx]=inportb(data);
	 }
	 set_ai_data(2,0x80);	// disable inc
	 idx=idx+256;
      }
      if ((bank & 3)==3){
	 if (write_file_xxk(0x8000)!=0){
//	    printf("write file error\07\n");
	    fclose(fptr);
	    return(-1);
	 }
      }
   }
   fclose(fptr);

//   if (bank_size==4)
//      printf("sram 256kbits saved\n");
//   if (bank_size==16)
//      printf("sram 1Mbits saved\n");

   return(0);
}

char read_8k_sram_to_file(void)
{
   if (bank_size==4){
      if (sram_bank_num>3){
//	 printf("bank number error!!!\07\n");
	 return(-1);
      }
   }
   else{
      if (sram_bank_num>15){
//	 printf("bank number error!!!\07\n");
	 return(-1);
      }
   }

   enable_sram_bank();

   idx=0;
   bank=sram_bank_num;
   {
      set_sram_bank(bank);
      for (j=0;j<0x20;j++){	// 32 x 256 = 8192(8kbytes)
	 set_ai_data(1,(0xa0+j));	// sram at 0xa000~bfff
	 set_ai_data(0,0);      // a[7..0]=0
	 set_ai_data(2,0x81);	// enable inc
	 set_ai(3);		// point to data r/w port
	 set_data_read
	 for (i=0;i<256;i++){
	    mix.buffer[i+idx]=read_data();
//	    mix.buffer[i+idx]=inportb(data);
	 }
	 set_ai_data(2,0x80);	// disable inc
	 idx=idx+256;
      }
   }

   if (write_sram_xxk(0x2000)!=0){
//      printf("write file 64kbits error\07\n");
      return(-1);
   }
//   else
//      printf("sram 64kbits saved from bank %d\n",sram_bank_num);
   return(0);
}


char write_all_sram_from_file(void)
{
   enable_sram_bank();
   if (open_read_sram()!=0)	// read sram data from file to buffer
      return(-1);
   for (bank=0;bank<bank_size;bank++){
      if ((bank & 3)==0){
	 idx=0;
	 if (read_32k_file()!=0){
//	    printf("load file error\n");
	    fclose(fptr);
	    return(-1);
	 }

      }
//      printf("w");
      set_sram_bank(bank);
//      disp_buffer(0x10);
      for (j=0;j<0x20;j++){	// 32 x 256 = 8192(8kbytes)
	 set_ai_data(1,(0xa0+j));	// sram at 0xa000~bfff
	 set_ai_data(0,0);      // a[7..0]=0
	 set_ai_data(2,0x81);	// enable inc
	 set_ai(3);		// point to data r/w port
	 set_data_write
	 for (i=0;i<256;i++){
	    write_data(mix.buffer[i+idx]);
//	    outportb(data,mix.buffer[i+idx]);
	 }
	 set_ai_data(2,0x80);	// disable inc
	 idx=idx+256;
      }
   }
   fclose(fptr);

//   if (bank_size==4)
//      printf("write sram 256kbits ok\n");
//   if (bank_size==16)
//      printf("write sram 1Mbits ok\n");
   return(0);
}

char write_8k_sram_from_file(void)
{
   if (bank_size==4){
      if (sram_bank_num>3){
//	 printf("bank number error!!!\07\n");
	 return(-1);
      }

   }
   else{
      if (sram_bank_num>15){
//	 printf("bank number error!!!\07\n");
	 return(-1);
      }

   }

   enable_sram_bank();
   if (open_read_sram()!=0)	// read sram data from file to buffer
      return(-1);

   idx=0;
   bank=sram_bank_num;
   {
//      printf("w");
      set_sram_bank(bank);
//      disp_buffer(0x10);
      for (j=0;j<0x20;j++){	// 32 x 256 = 8192(8kbytes)
	 set_ai_data(1,(0xa0+j));	// sram at 0xa000~bfff
	 set_ai_data(0,0);      // a[7..0]=0
	 set_ai_data(2,0x81);	// enable inc
	 set_ai(3);		// point to data r/w port
	 set_data_write
	 for (i=0;i<256;i++){
	    write_data(mix.buffer[i+idx]);
//	    outportb(data,mix.buffer[i+idx]);
	 }
	 set_ai_data(2,0x80);	// disable inc
	 idx=idx+256;
      }
   }
//   printf("write sram 64kbits at bank %d ok\n",sram_bank_num);
   return(0);
}

void try_read(void)
{
   set_ai_data(0,0);      // a[7..0]=0
   set_ai_data(1,0x40);
   set_ai_data(2,0x81);	// enable inc
   set_ai(3);		// point to data r/w port
   for (i=0;i<16;i++)
//      mix.buffer[i]=inportb(data);
      mix.buffer[i]=read_data();
   disp_buffer(16);
}


void try_read0(void)
{

   set_rom_bank(1);
   for (j=0;j<4;j++){
      set_sram_bank(j);
      try_read();
   }
   set_bank(0x6000,1);
//   printf("6000:1\n");
   for (j=0;j<4;j++){
      set_sram_bank(j);
      try_read();
   }
   set_bank(0x6000,0);
//   printf("6000:0\n");
   for (j=0;j<4;j++){
      set_sram_bank(j);
      try_read();
   }
}


int SendToBung(char *filename)
{
   char card_present;
   unsigned char ch,i;	// single key function

   BungSendWnd->ProgressBar1->Position=0;
   BungSendWnd->Show();
   BungSendWnd->Update();

    file_name=filename;

   pocket_camera=0;
   mbc1_exp=0;		// 0=4M, 1=8M/16M expand mode
   eeprom_type=0;	// unknown type
   maxfilesize=524288*4;	// 16M files

    try
    {
   init_port();
//   printf("\n--- Parallel EPP/SPP Port to GB Xchanger program version 1.4 ---\n");
   port[0]=0x378; 		// lpt1 base address
   port[1]=0x278;		// lpt2 base address
   if (port[0]==0){
//      printf("No Printer Port Avialable!\07\n");
   BungSendWnd->Hide();
      return 0;
   }
   if (port[1]==0)
      port_no=1;		// only one printer port
   else
      port_no=2;		// two printer port
   card_present=0;
   for (i=0;i<port_no;i++){
      port_8=port[i];
      port_9=port_8+1;
      port_a=port_9+1;
      port_b=port_a+1;
      port_c=port_b+1;
      if (check_port()==0){
	 card_present=1;
	 break;
      }
   }

      if (card_present==0){
   end_port();
   BungSendWnd->Hide();
//	 printf("\nNo GBX card present!!!\07\n\n");
	 return 0;
      }
      else{
// 	 printf("GBX card found at port%d",port_no);
//	 if (port_type)
//	    printf("(SPP)\n");
//	 else{
//	    if (epp_spp==1)
//	       printf("(EPP and SPP)\n");
//	    else
//	       printf("(EPP)\n");
//	 }
      }
      init_port();

   check_eeprom();	// check 4M/16M
   if (eeprom_type==4)
      maxfilesize=524288;	// 4M files
   if (eeprom_type==16)
      maxfilesize=524288*4;	// 16M files
   check_eeprom();

   SetSramBank();	// set bank_size=4/16 banks of 8k
      if (write_cart_from_file()!=0)
      {
       BungSendWnd->Hide();
        MessageBox(NULL,"Error sending ROM","Error",MB_OK);
       }
   end_port();
   BungSendWnd->Hide();
   }
   catch (...)
   {
       BungSendWnd->Hide();
        MessageBox(NULL,"Error sending ROM","Error",MB_OK);
    return 0;
   }
   return 1;
}

/*************************************************
*                  MAIN ENTRY                    *
*************************************************/
/*void main(int argc, char *argv[])
{
   char card_present;
   unsigned char ch,i;	// single key function
   char *progname=argv[0];

   pocket_camera=0;
   mbc1_exp=0;		// 0=4M, 1=8M/16M expand mode
   eeprom_type=0;	// unknown type
   maxfilesize=524288*4;	// 16M files

   init_port();
//   printf("\n--- Parallel EPP/SPP Port to GB Xchanger program version 1.4 ---\n");
   port[0]=peek(0x40,8); 		// lpt1 base address
   port[1]=peek(0x40,10);		// lpt2 base address
   if (port[0]==0){
//      printf("No Printer Port Avialable!\07\n");
      return;
   }
   if (port[1]==0)
      port_no=1;		// only one printer port
   else
      port_no=2;		// two printer port
   card_present=0;
   for (i=0;i<port_no;i++){
      port_8=port[i];
      port_9=port_8+1;
      port_a=port_9+1;
      port_b=port_a+1;
      port_c=port_b+1;
      if (check_port()==0){
	 card_present=1;
	 break;
      }
   }




   cmd=NULL;
   if (argc==1) usage(progname);

//    file_name = argv[2];
//    printf("%s\n",file_name);
   cmd='w';		// default write mode
   for( i=1; i<argc; i++ ) {
      if( argv[i][0] == '-' ) {
	 char *c = argv[i]+1;
	 char cmd_l = strlen(argv[i]);

	 if(*c=='l'){
	    if (cmd_l==2)
	       continue;			// cmd='w'
	    if( *(c+1)=='s'&& *(c+2)=='a' && cmd_l==4){	// -lsa
	       cmd='L';			// cmd='L'
	       continue;		// check next cmd
	    }
	    if( *(c+1)=='s'&& *(c+2)=='c' && cmd_l==4){	// -lsc
	       pocket_camera=1;			// sram size=1Mbits
	       cmd='L';			// cmd='L'
	       continue;		// check next cmd
	    }
	    if( *(c+1)=='s' && cmd_l>3){	// -lsn

	       if( *(c+2)>='0' && *(c+2)<':'){	// 0,1..8,9,:
		  sram_bank_num=*(c+2)-'0';
		  if( *(c+3)>='0' && *(c+3)<':'){	// 0,1..8,9,:
		     sram_bank_num=sram_bank_num*10 + (*(c+3)-'0');
		  }
	       }
	       cmd='l';
//	       printf("cmd=%c %d\n",cmd,sram_bank_num);
	       continue;		// check next cmd
	    }
	 }else if(*c=='b'){
	    if (cmd_l==2){			// -b
	       cmd='b';
	       continue;			// cmd='b'
	    }
	    if(*(c+1)=='a' && cmd_l==3){	// -ba
	       cmd='B';				// cmd='B'
	       continue;			// check next cmd
	    }
	    if(*(c+1)=='s' && *(c+2)=='a' && cmd_l==4){	// -bsa
	       cmd='R';				// cmd='R'
	       continue;			// check next cmd
	    }
	    if(*(c+1)=='s' && *(c+2)=='c' && cmd_l==4){	// -bsc
	       pocket_camera=1;			// sram size=1Mbits
	       cmd='R';				// cmd='R'
	       continue;			// check next cmd
	    }
	    if( *(c+1)=='s' && cmd_l>3){	// -bsn
	       if( *(c+2)>='0' && *(c+2)<':'){	// 0,1..8,9,:
		  sram_bank_num=*(c+2)-'0';
		  if( *(c+3)>='0' && *(c+3)<':'){	// 0,1..8,9,:
		     sram_bank_num=sram_bank_num*10 + (*(c+3)-'0');
		  }
	       }
	       cmd='r';				// cmd='r'
//	       printf("cmd=%c %d\n",cmd,sram_bank_num);
	       continue;		// check next cmd
	    }

	 }else if(*c=='t'){
	    if(*(c+1)=='s' && cmd_l==3){	// -ts
	       cmd='t';				// cmd='t'
	       continue;			// check next cmd
	    }
	    if(*(c+1)=='a' && cmd_l==3){	// -ta
	       cmd='A';				// cmd='A'
	       continue;			// check next cmd
	    }
	    if(*(c+1)=='s' && *(c+2)=='f' && cmd_l==4){	// -tsf
	       cmd='T';				// cmd='T'
	       continue;			// check next cmd
	    }
	 }

	 if( *(c+1) != '\0' ) usage(progname);
	 switch( *c ) {
	    case 'v' : cmd='v'; break;
	    case 'i' : cmd='i';break;
	    case 'e' : cmd='e';break;
	    case 'c' : cmd='c'; break;
	    default:
	       usage(progname);
	  }
      }
      else {
	 if( file_name == NULL ) {
	     file_name = argv[i];
	 }
	 else {
	     usage(progname);
	  }
      }
   }



//   try_read0();
//   exit(0);



//   if (cmd=='c'){
//      if (check_header(0)==0)
//	 exit(chk_gcrc());
//      exit(0);
//   }
   else {
      if (card_present==0){
//	 printf("\nNo GBX card present!!!\07\n\n");
	 return;
      }
      else{
//	 printf("GBX card found at port%d",port_no);
//	 if (port_type)
//	    printf("(SPP)\n");
//	 else{
//	    if (epp_spp==1)
//	       printf("(EPP and SPP)\n");
//	    else
//	       printf("(EPP)\n");
//	 }
      }
      init_port();
   }

   check_eeprom();	// check 4M/16M
   if (eeprom_type==4)
      maxfilesize=524288;	// 4M files
   if (eeprom_type==16)
      maxfilesize=524288*4;	// 16M files

   if (cmd=='b' || cmd=='B'){
      backup();
      end_port();
      return;
   }
   if (cmd=='v'){
      verify_cart_from_file();
      end_port();
      return;
   }

   if (check_eeprom()){
      bank_size=4;		// 4x8k=32k sram
      SetSramBank();	// set bank_size=4/16 banks of 8k
      switch(cmd) {		// for game cart only
	 case 'R' : read_all_sram_to_file(); break;
	 case 'r' : read_8k_sram_to_file(); break;
	 case 'L' : write_all_sram_from_file(); break;
	 case 'l' : write_8k_sram_from_file(); break;

      case 'w' :
      case 'i' :
      case 'e' :
//      printf("Flash memory not present!!!\07\n");
      break;

      }
      end_port();
      return;
   }

//   if (check_eeprom()){
//      printf("Flash memory not present!!!\07\n");
//      end_port();
//      exit(0);
//   }


   SetSramBank();	// set bank_size=4/16 banks of 8k
   switch(cmd) {	// for GB card only
      case 'w' : write_cart_from_file(); break;
      case 'R' : read_all_sram_to_file(); break;
      case 'r' : read_8k_sram_to_file(); break;
      case 'L' : write_all_sram_from_file(); break;
      case 'l' : write_8k_sram_from_file(); break;
//      case 'r' : read_eeprom_16k(0); break;
      case 'i' : disp_id();break;
      case 'e' : erase();break;
      case 't' : test_sram_v();break;
      case 'T' : test_sram_wv();break;
      case 'A' : test_all();break;
   }
   end_port();
}*/
//---------------------------------------------------------------------------
__fastcall TBungSendWnd::TBungSendWnd(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -