diff --git a/desmume/src/mc.c b/desmume/src/mc.c index acdaa19d3..20188cd53 100644 --- a/desmume/src/mc.c +++ b/desmume/src/mc.c @@ -1,5 +1,4 @@ #include -#include "MMU.h" #include "debug.h" #include "types.h" #include "mc.h" @@ -60,13 +59,6 @@ u8 *mc_alloc(memory_chip_t *mc, u32 size) u8 *buffer; buffer = malloc(size); - //Experimental code - /* - if(sizetype=MC_TYPE_EEPROM1; mc->addr_size = 1; - else if((size>MC_SIZE_64KBITS)&&(size<=MC_SIZE_512KBITS)) mc->type=MC_TYPE_EEPROM2; mc->addr_size = 2; - else if((size>MC_SIZE_1MBITS)&&(sizetype=MC_TYPE_FLASH; mc->addr_size = 3; - */ - if(!buffer) { return NULL; } mc->data = buffer; mc->size = size; @@ -84,11 +76,11 @@ void mc_reset_com(memory_chip_t *mc) mc->com = 0; } -void mc_realloc(int type, u32 size) +void mc_realloc(memory_chip_t *mc, int type, u32 size) { - if(MMU.bupmem.data) free(MMU.bupmem.data); - mc_init(&MMU.bupmem, type); - mc_alloc(&MMU.bupmem, size); + if(mc->data) free(mc->data); + mc_init(mc, type); + mc_alloc(mc, size); } void mc_read_file(memory_chip_t *mc, char* filename) @@ -188,7 +180,7 @@ u8 fw_transfer(memory_chip_t *mc, u8 data) u8 bm_transfer(memory_chip_t *mc, u8 data) { - mc_read_file(mc,"test.sav"); +// mc_read_file(mc,"test.sav"); if(mc->com == BM_CMD_READLOW || mc->com == BM_CMD_READHIGH || mc->com == BM_CMD_WRITELOW || mc->com == BM_CMD_WRITEHIGH) /* check if we are in a command that needs multiple byte address */ { @@ -264,7 +256,7 @@ u8 bm_transfer(memory_chip_t *mc, u8 data) case BM_CMD_WRITEHIGH: /* write command that's only available on ST M95040-W that I know of */ if(mc->write_enable) { - mc->addr = 0x1; + mc->addr = 0x100; mc->addr_shift = mc->addr_size; mc->com = BM_CMD_WRITELOW; } @@ -272,9 +264,10 @@ u8 bm_transfer(memory_chip_t *mc, u8 data) break; case BM_CMD_READHIGH: /* read command that's only available on ST M95040-W that I know of */ - mc->addr = 0x1; + mc->addr = 0x100; mc->addr_shift = mc->addr_size; mc->com = BM_CMD_READLOW; + break; default: @@ -283,7 +276,7 @@ u8 bm_transfer(memory_chip_t *mc, u8 data) } } - mc_write_file(mc,"test.sav"); +// mc_write_file(mc,"test.sav"); return data; } diff --git a/desmume/src/mc.h b/desmume/src/mc.h index 01d9f175c..93dd5ae63 100644 --- a/desmume/src/mc.h +++ b/desmume/src/mc.h @@ -44,7 +44,7 @@ typedef struct void mc_init(memory_chip_t *mc, int type); /* reset and init values for memory struct */ u8 *mc_alloc(memory_chip_t *mc, u32 size); /* alloc mc memory */ -void mc_realloc(int type, u32 size); /* realloc mc memory */ +void mc_realloc(memory_chip_t *mc, int type, u32 size); /* realloc mc memory */ void mc_free(memory_chip_t *mc); /* delete mc memory */ void mc_reset_com(memory_chip_t *mc); /* reset communication with mc */ u8 fw_transfer(memory_chip_t *mc, u8 data); /* transfer to, then receive data from firmware */ diff --git a/desmume/src/windows/main.c b/desmume/src/windows/main.c index 933a53799..803babaec 100644 --- a/desmume/src/windows/main.c +++ b/desmume/src/windows/main.c @@ -829,23 +829,23 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM case IDC_SAVETYPE1: saver(MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED); - mc_realloc(MC_TYPE_EEPROM1,MC_SIZE_4KBITS); + mc_realloc(&MMU.bupmem, MC_TYPE_EEPROM1,MC_SIZE_4KBITS); return 0; case IDC_SAVETYPE2: saver(MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED); - mc_realloc(MC_TYPE_EEPROM2,MC_SIZE_64KBITS); + mc_realloc(&MMU.bupmem, MC_TYPE_EEPROM2,MC_SIZE_64KBITS); return 0; case IDC_SAVETYPE3: saver(MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED,MF_UNCHECKED); - mc_realloc(MC_TYPE_EEPROM2,MC_SIZE_512KBITS); + mc_realloc(&MMU.bupmem, MC_TYPE_EEPROM2,MC_SIZE_512KBITS); return 0; case IDC_SAVETYPE4: saver(MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED,MF_UNCHECKED); - mc_realloc(MC_TYPE_FRAM,MC_SIZE_256KBITS); + mc_realloc(&MMU.bupmem, MC_TYPE_FRAM,MC_SIZE_256KBITS); return 0; case IDC_SAVETYPE5: saver(MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_UNCHECKED,MF_CHECKED); - mc_realloc(MC_TYPE_FLASH,MC_SIZE_2MBITS); + mc_realloc(&MMU.bupmem, MC_TYPE_FLASH,MC_SIZE_2MBITS); return 0; case IDM_RESET: