revision 312:2c34bdc36cbd
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 312:2c34bdc36cbd |
parent | 311:5be79c6b4367 |
child | 313:7e4bd1629268 |
author | nkeynes |
date | Tue Jan 23 08:17:06 2007 +0000 (17 years ago) |
Save/restore MMU state (specifically the OC cache ram) correctly
src/sh4/sh4core.c | view | annotate | diff | log | ||
src/sh4/sh4core.h | view | annotate | diff | log | ||
src/sh4/sh4mmio.c | view | annotate | diff | log |
1.1 --- a/src/sh4/sh4core.c Mon Jan 22 21:26:39 2007 +00001.2 +++ b/src/sh4/sh4core.c Tue Jan 23 08:17:06 2007 +00001.3 @@ -1,5 +1,5 @@1.4 /**1.5 - * $Id: sh4core.c,v 1.39 2007-01-17 21:27:20 nkeynes Exp $1.6 + * $Id: sh4core.c,v 1.40 2007-01-23 08:17:06 nkeynes Exp $1.7 *1.8 * SH4 emulation core, and parent module for all the SH4 peripheral1.9 * modules.1.10 @@ -69,7 +69,7 @@1.11 void sh4_init(void)1.12 {1.13 register_io_regions( mmio_list_sh4mmio );1.14 - mmu_init();1.15 + MMU_init();1.16 sh4_reset();1.17 }1.19 @@ -93,6 +93,7 @@1.20 /* Peripheral modules */1.21 CPG_reset();1.22 INTC_reset();1.23 + MMU_reset();1.24 TMU_reset();1.25 SCIF_reset();1.26 }1.27 @@ -216,6 +217,7 @@1.28 void sh4_save_state( FILE *f )1.29 {1.30 fwrite( &sh4r, sizeof(sh4r), 1, f );1.31 + MMU_save_state( f );1.32 INTC_save_state( f );1.33 TMU_save_state( f );1.34 SCIF_save_state( f );1.35 @@ -224,6 +226,7 @@1.36 int sh4_load_state( FILE * f )1.37 {1.38 fread( &sh4r, sizeof(sh4r), 1, f );1.39 + MMU_load_state( f );1.40 INTC_load_state( f );1.41 TMU_load_state( f );1.42 return SCIF_load_state( f );
2.1 --- a/src/sh4/sh4core.h Mon Jan 22 21:26:39 2007 +00002.2 +++ b/src/sh4/sh4core.h Tue Jan 23 08:17:06 2007 +00002.3 @@ -1,5 +1,5 @@2.4 /**2.5 - * $Id: sh4core.h,v 1.17 2007-01-17 21:27:20 nkeynes Exp $2.6 + * $Id: sh4core.h,v 1.18 2007-01-23 08:17:06 nkeynes Exp $2.7 *2.8 * This file defines the internal functions exported/used by the SH4 core,2.9 * except for disassembly functions defined in sh4dasm.h2.10 @@ -128,6 +128,10 @@2.11 void INTC_reset( void );2.12 void INTC_save_state( FILE *f );2.13 int INTC_load_state( FILE *f );2.14 +void MMU_init( void );2.15 +void MMU_reset( void );2.16 +void MMU_save_state( FILE *f );2.17 +int MMU_load_state( FILE *f );2.19 #define SIGNEXT4(n) ((((int32_t)(n))<<28)>>28)2.20 #define SIGNEXT8(n) ((int32_t)((int8_t)(n)))
3.1 --- a/src/sh4/sh4mmio.c Mon Jan 22 21:26:39 2007 +00003.2 +++ b/src/sh4/sh4mmio.c Tue Jan 23 08:17:06 2007 +00003.3 @@ -1,5 +1,5 @@3.4 /**3.5 - * $Id: sh4mmio.c,v 1.9 2006-06-18 12:01:53 nkeynes Exp $3.6 + * $Id: sh4mmio.c,v 1.10 2007-01-23 08:17:06 nkeynes Exp $3.7 *3.8 * Miscellaneous and not-really-implemented SH4 peripheral modules. Also3.9 * responsible for including the IMPL side of the SH4 MMIO pages.3.10 @@ -49,11 +49,33 @@3.11 }3.14 -void mmu_init()3.15 +void MMU_init()3.16 {3.17 cache = mem_alloc_pages(2);3.18 }3.20 +void MMU_reset()3.21 +{3.22 + mmio_region_MMU_write( CCR, 0 );3.23 +}3.24 +3.25 +void MMU_save_state( FILE *f )3.26 +{3.27 + fwrite( cache, 4096, 2, f );3.28 +}3.29 +3.30 +int MMU_load_state( FILE *f )3.31 +{3.32 + /* Setup the cache mode according to the saved register value3.33 + * (mem_load runs before this point to load all MMIO data)3.34 + */3.35 + mmio_region_MMU_write( CCR, MMIO_READ(MMU, CCR) );3.36 + if( fread( cache, 4096, 2, f ) != 2 ) {3.37 + return 1;3.38 + }3.39 + return 0;3.40 +}3.41 +3.42 void mmu_set_cache_mode( int mode )3.43 {3.44 uint32_t i;
.