Exemple #1
0
void dma_pi_read()
{
   int i;

   if (pi_register.pi_cart_addr_reg >= 0x08000000 &&
       pi_register.pi_cart_addr_reg < 0x08010000)
     {
	if (use_flashram != 1)
	  {

	     sramWritten = TRUE;

	     for (i=0; i<(pi_register.pi_rd_len_reg & 0xFFFFFF)+1; i++)
	       sram[((pi_register.pi_cart_addr_reg-0x08000000)+i)^S8]=
	       ((unsigned char*)rdram)[(pi_register.pi_dram_addr_reg+i)^S8];

	     use_flashram = -1;
	  }
	else
	  dma_write_flashram();
     }
 //  else
 //    printf("unknown dma read\n");

   pi_register.read_pi_status_reg |= 1;
   update_count();
   add_interupt_event(PI_INT, 0x1000/*pi_register.pi_rd_len_reg*/);
}
Exemple #2
0
void dma_pi_read()
{
   int i;
   
   if (pi_register.pi_cart_addr_reg >= 0x08000000 &&
       pi_register.pi_cart_addr_reg < 0x08010000)
     {
	if (use_flashram != 1)
	  {
	     char *filename;
	     FILE *f;
	     filename = (char*)malloc(strlen(get_savespath())+
			       strlen(ROM_SETTINGS.goodname)+4+1);
	     strcpy(filename, get_savespath());
	     strcat(filename, ROM_SETTINGS.goodname);
	     strcat(filename, ".sra");
	     f = fopen(filename, "rb");
	     if (f)
	       {
		  fread(sram, 1, 0x8000, f);
		  fclose(f);
	       }
	     else for (i=0; i<0x8000; i++) sram[i] = 0;
	     for (i=0; i<(pi_register.pi_rd_len_reg & 0xFFFFFF)+1; i++)
	       sram[((pi_register.pi_cart_addr_reg-0x08000000)+i)^S8]=
	       ((unsigned char*)rdram)[(pi_register.pi_dram_addr_reg+i)^S8];
	     f = fopen(filename, "wb");
	     fwrite(sram, 1, 0x8000, f);
	     fclose(f);
	     free(filename);
	     use_flashram = -1;
	  }
	else
	  dma_write_flashram();
     }
   else
     printf("unknown dma read\n");
   
   pi_register.read_pi_status_reg |= 1;
   update_count();
   add_interupt_event(PI_INT, 0x1000/*pi_register.pi_rd_len_reg*/);
}