1.1 --- a/src/aica/armmem.c Mon Dec 26 06:38:51 2005 +0000
1.2 +++ b/src/aica/armmem.c Wed Dec 28 22:50:08 2005 +0000
1.5 - * $Id: armmem.c,v 1.5 2005-12-26 06:38:51 nkeynes Exp $
1.6 + * $Id: armmem.c,v 1.6 2005-12-26 10:48:20 nkeynes Exp $
1.8 * Implements the ARM's memory map.
1.13 char *arm_mem = NULL;
1.14 +char *arm_mem_scratch = NULL;
1.16 void arm_mem_init() {
1.17 arm_mem = mem_get_region_by_name( MEM_REGION_AUDIO );
1.19 + arm_mem_scratch = mem_get_region_by_name( MEM_REGION_AUDIO_SCRATCH );
1.22 int arm_has_page( uint32_t addr ) {
1.24 switch( addr & 0xFFFFF000 ) {
1.26 return mmio_region_AICA0_read(addr);
1.29 return mmio_region_AICA1_read(addr);
1.32 return mmio_region_AICA2_read(addr);
1.38 + return *(int32_t *)(arm_mem_scratch + addr - 0x00803000);
1.41 ERROR( "Attempted long read to undefined page: %08X",
1.45 uint32_t arm_read_word( uint32_t addr ) {
1.46 - if( addr < 0x00200000 ) {
1.47 - return *(int16_t *)(arm_mem + addr);
1.48 - /* Main sound ram */
1.50 - /* Undefined memory */
1.51 - ERROR( "Attempted word read to undefined page: %08X",
1.56 + return (uint32_t)(uint16_t)arm_read_long( addr );
1.59 uint32_t arm_read_byte( uint32_t addr ) {
1.60 - if( addr < 0x00200000 ) {
1.61 - return (uint32_t)(*(uint8_t *)(arm_mem + addr));
1.62 - /* Main sound ram */
1.64 - /* Undefined memory */
1.65 - ERROR( "Attempted byte read to undefined page: %08X",
1.69 + return (uint32_t)(uint8_t)arm_read_long( addr );
1.72 void arm_write_long( uint32_t addr, uint32_t value )
1.74 if( addr < 0x00200000 ) {
1.75 + /* Main sound ram */
1.76 *(uint32_t *)(arm_mem + addr) = value;
1.78 + switch( addr & 0xFFFFF000 ) {
1.80 + mmio_region_AICA0_write(addr, value);
1.83 + mmio_region_AICA1_write(addr, value);
1.86 + mmio_region_AICA2_write(addr, value);
1.90 + *(uint32_t *)(arm_mem_scratch + addr - 0x00803000) = value;
1.93 + ERROR( "Attempted long write to undefined address: %08X",
1.95 + /* Undefined memory */
1.101 void arm_write_byte( uint32_t addr, uint32_t value )
1.103 if( addr < 0x00200000 ) {
1.104 - *(uint8_t *)(arm_mem+addr) = (uint8_t)value;
1.105 + /* Main sound ram */
1.106 + *(uint8_t *)(arm_mem + addr) = (uint8_t)value;
1.108 + switch( addr & 0xFFFFF000 ) {
1.110 + mmio_region_AICA0_write(addr, value);
1.113 + mmio_region_AICA1_write(addr, value);
1.116 + mmio_region_AICA2_write(addr, value);
1.120 + *(uint8_t *)(arm_mem_scratch + addr - 0x00803000) = (uint8_t)value;
1.123 + ERROR( "Attempted byte write to undefined address: %08X",
1.125 + /* Undefined memory */
1.131 /* User translations - TODO */