# HG changeset patch # User nkeynes # Date 1134383861 0 # Node ID fc481a63884869412d98b779ce1eb1d11f8fb93e # Parent 28aea89fb9c6df3ffe96ac896b6ccc02ed33682b Use cpu-specific is_valid_page function --- a/src/aica/armcore.h Mon Dec 12 10:09:24 2005 +0000 +++ b/src/aica/armcore.h Mon Dec 12 10:37:41 2005 +0000 @@ -57,5 +57,6 @@ void arm_write_word( uint32_t addr, uint32_t val ); void arm_write_byte( uint32_t addr, uint32_t val ); int32_t arm_read_phys_word( uint32_t addr ); +int arm_has_page( uint32_t addr ); #endif /* !dream_armcore_H */ --- a/src/aica/armdasm.c Mon Dec 12 10:09:24 2005 +0000 +++ b/src/aica/armdasm.c Mon Dec 12 10:37:41 2005 +0000 @@ -49,12 +49,16 @@ {NULL, 0, NULL} }; -const struct cpu_desc_struct arm_cpu_desc = { "ARM7", arm_disasm_instruction, 4, - (char *)&armr, sizeof(armr), arm_reg_map, - &armr.r[15], &armr.icount }; -const struct cpu_desc_struct armt_cpu_desc = { "ARM7T", armt_disasm_instruction, 2, - (char*)&armr, sizeof(armr), arm_reg_map, - &armr.r[15], &armr.icount }; +const struct cpu_desc_struct arm_cpu_desc = + { "ARM7", arm_disasm_instruction, 4, + (char *)&armr, sizeof(armr), arm_reg_map, + &armr.r[15], &armr.icount, + arm_has_page }; +const struct cpu_desc_struct armt_cpu_desc = + { "ARM7T", armt_disasm_instruction, 2, + (char*)&armr, sizeof(armr), arm_reg_map, + &armr.r[15], &armr.icount, + arm_has_page }; --- a/src/aica/armmem.c Mon Dec 12 10:09:24 2005 +0000 +++ b/src/aica/armmem.c Mon Dec 12 10:37:41 2005 +0000 @@ -9,6 +9,11 @@ } +int arm_has_page( uint32_t addr ) { + return ( addr < 0x00200000 || + (addr >= 0x00800000 && addr <= 0x00805000 ) ); +} + int32_t arm_read_long( uint32_t addr ) { if( addr < 0x00200000 ) { return *(int32_t *)(arm_mem + addr); --- a/src/cpu.h Mon Dec 12 10:09:24 2005 +0000 +++ b/src/cpu.h Mon Dec 12 10:37:41 2005 +0000 @@ -43,7 +43,7 @@ uint32_t *pc; /* Pointer to PC register */ uint32_t *icount; /* Pointer to instruction counter */ /* Memory map? */ - is_valid_page_t valid_page_func; /* Test for valid memory page */ + is_valid_page_t is_valid_page_func; /* Test for valid memory page */ } *cpu_desc_t; #ifdef __cplusplus --- a/src/gui/debug_win.c Mon Dec 12 10:09:24 2005 +0000 +++ b/src/gui/debug_win.c Mon Dec 12 10:37:41 2005 +0000 @@ -1,5 +1,5 @@ /** - * $Id: debug_win.c,v 1.5 2005-12-11 12:00:03 nkeynes Exp $ + * $Id: debug_win.c,v 1.6 2005-12-12 10:37:36 nkeynes Exp $ * This file is responsible for the main debugger gui frame. * * Copyright (c) 2005 Nathan Keynes. @@ -142,7 +142,7 @@ sprintf( addr, "%08X", from ); gtk_entry_set_text( data->page_field, addr ); - if( !mem_has_page( from ) ) { + if( !data->cpu->is_valid_page_func( from ) ) { arr[3] = "This page is currently unmapped"; gtk_clist_append( data->disasm_list, arr ); gtk_clist_set_foreground( data->disasm_list, 0, &clrError ); --- a/src/sh4/sh4dasm.c Mon Dec 12 10:09:24 2005 +0000 +++ b/src/sh4/sh4dasm.c Mon Dec 12 10:37:41 2005 +0000 @@ -24,9 +24,10 @@ {NULL, 0, NULL} }; -const struct cpu_desc_struct sh4_cpu_desc = { "SH4", sh4_disasm_instruction, 2, - (char *)&sh4r, sizeof(sh4r), sh4_reg_map, - &sh4r.pc, &sh4r.icount }; +const struct cpu_desc_struct sh4_cpu_desc = + { "SH4", sh4_disasm_instruction, 2, + (char *)&sh4r, sizeof(sh4r), sh4_reg_map, + &sh4r.pc, &sh4r.icount, mem_has_page }; uint32_t sh4_disasm_instruction( uint32_t pc, char *buf, int len, char *opcode ) {