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*/); }
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*/); }