filename | src/aica/armmem.c |
changeset | 931:430048ea8b71 |
prev | 811:7ff871670e58 |
next | 934:3acd3b3ee6d1 |
author | nkeynes |
date | Tue Dec 23 05:48:05 2008 +0000 (15 years ago) |
branch | lxdream-mem |
permissions | -rw-r--r-- |
last change | More refactoring and general cleanup. Most things should be working again now. Split off cache and start real implementation, breaking save states in the process |
file | annotate | diff | log | raw |
1.1 --- a/src/aica/armmem.c Wed Aug 13 10:27:49 2008 +00001.2 +++ b/src/aica/armmem.c Tue Dec 23 05:48:05 2008 +00001.3 @@ -30,6 +30,92 @@1.4 arm_mem_scratch = mem_get_region_by_name( MEM_REGION_AUDIO_SCRATCH );1.5 }1.7 +/*************** ARM memory access function blocks **************/1.8 +1.9 +static int32_t FASTCALL ext_audioram_read_long( sh4addr_t addr )1.10 +{1.11 + return *((int32_t *)(arm_mem + (addr&0x001FFFFF)));1.12 +}1.13 +static int32_t FASTCALL ext_audioram_read_word( sh4addr_t addr )1.14 +{1.15 + return SIGNEXT16(*((int16_t *)(arm_mem + (addr&0x001FFFFF))));1.16 +}1.17 +static int32_t FASTCALL ext_audioram_read_byte( sh4addr_t addr )1.18 +{1.19 + return SIGNEXT8(*((int16_t *)(arm_mem + (addr&0x001FFFFF))));1.20 +}1.21 +static void FASTCALL ext_audioram_write_long( sh4addr_t addr, uint32_t val )1.22 +{1.23 + *(uint32_t *)(arm_mem + (addr&0x001FFFFF)) = val;1.24 + asic_g2_write_word();1.25 +}1.26 +static void FASTCALL ext_audioram_write_word( sh4addr_t addr, uint32_t val )1.27 +{1.28 + *(uint16_t *)(arm_mem + (addr&0x001FFFFF)) = (uint16_t)val;1.29 + asic_g2_write_word();1.30 +}1.31 +static void FASTCALL ext_audioram_write_byte( sh4addr_t addr, uint32_t val )1.32 +{1.33 + *(uint8_t *)(arm_mem + (addr&0x001FFFFF)) = (uint8_t)val;1.34 + asic_g2_write_word();1.35 +}1.36 +static void FASTCALL ext_audioram_read_burst( unsigned char *dest, sh4addr_t addr )1.37 +{1.38 + memcpy( dest, arm_mem+(addr&0x001FFFFF), 32 );1.39 +}1.40 +static void FASTCALL ext_audioram_write_burst( sh4addr_t addr, unsigned char *src )1.41 +{1.42 + memcpy( arm_mem+(addr&0x001FFFFF), src, 32 );1.43 +}1.44 +1.45 +struct mem_region_fn mem_region_audioram = { ext_audioram_read_long, ext_audioram_write_long,1.46 + ext_audioram_read_word, ext_audioram_write_word,1.47 + ext_audioram_read_byte, ext_audioram_write_byte,1.48 + ext_audioram_read_burst, ext_audioram_write_burst };1.49 +1.50 +1.51 +static int32_t FASTCALL ext_audioscratch_read_long( sh4addr_t addr )1.52 +{1.53 + return *((int32_t *)(arm_mem_scratch + (addr&0x00001FFF)));1.54 +}1.55 +static int32_t FASTCALL ext_audioscratch_read_word( sh4addr_t addr )1.56 +{1.57 + return SIGNEXT16(*((int16_t *)(arm_mem_scratch + (addr&0x00001FFF))));1.58 +}1.59 +static int32_t FASTCALL ext_audioscratch_read_byte( sh4addr_t addr )1.60 +{1.61 + return SIGNEXT8(*((int16_t *)(arm_mem_scratch + (addr&0x00001FFF))));1.62 +}1.63 +static void FASTCALL ext_audioscratch_write_long( sh4addr_t addr, uint32_t val )1.64 +{1.65 + *(uint32_t *)(arm_mem_scratch + (addr&0x00001FFF)) = val;1.66 + asic_g2_write_word();1.67 +}1.68 +static void FASTCALL ext_audioscratch_write_word( sh4addr_t addr, uint32_t val )1.69 +{1.70 + *(uint16_t *)(arm_mem_scratch + (addr&0x00001FFF)) = (uint16_t)val;1.71 + asic_g2_write_word();1.72 +}1.73 +static void FASTCALL ext_audioscratch_write_byte( sh4addr_t addr, uint32_t val )1.74 +{1.75 + *(uint8_t *)(arm_mem_scratch + (addr&0x00001FFF)) = (uint8_t)val;1.76 + asic_g2_write_word();1.77 +}1.78 +static void FASTCALL ext_audioscratch_read_burst( unsigned char *dest, sh4addr_t addr )1.79 +{1.80 + memcpy( dest, arm_mem_scratch+(addr&0x00001FFF), 32 );1.81 +}1.82 +static void FASTCALL ext_audioscratch_write_burst( sh4addr_t addr, unsigned char *src )1.83 +{1.84 + memcpy( arm_mem_scratch+(addr&0x00001FFF), src, 32 );1.85 +}1.86 +1.87 +struct mem_region_fn mem_region_audioscratch = { ext_audioscratch_read_long, ext_audioscratch_write_long,1.88 + ext_audioscratch_read_word, ext_audioscratch_write_word,1.89 + ext_audioscratch_read_byte, ext_audioscratch_write_byte,1.90 + ext_audioscratch_read_burst, ext_audioscratch_write_burst };1.91 +1.92 +/************************** Local ARM support **************************/1.93 int arm_has_page( uint32_t addr ) {1.94 return ( addr < 0x00200000 ||1.95 (addr >= 0x00800000 && addr <= 0x00805000 ) );
.