]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Use indirect directory harddrive/hdf access mode if debugger is active.
authorToni Wilen <twilen@winuae.net>
Sat, 30 Jun 2018 10:12:44 +0000 (13:12 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 30 Jun 2018 10:12:44 +0000 (13:12 +0300)
debugmem.cpp
hardfile.cpp
include/memory.h
memory.cpp
traps.cpp

index 6c50fe2df13ae215b4d9e9f9da3de90ea4fd3e97..9b6cf2bbe771c2c253c02dafce4af474f9f815a6 100644 (file)
@@ -47,7 +47,7 @@ static mem_put_func debugmem_func_lput;
 static mem_put_func debugmem_func_wput;
 static mem_put_func debugmem_func_bput;
 static xlate_func debugmem_func_xlate;
-static bool debugmem_initialized;
+bool debugmem_initialized;
 static bool debug_waiting;
 static uaecptr debug_task;
 static uae_u8 *exec_thistask;
index 76e66cc52386c797d42d94cb4f1a5fbadc4eecc4..5ae93ca2ab117634cf9cea2bb7cb8fae841e68f3 100644 (file)
@@ -1278,7 +1278,7 @@ static uae_u64 cmd_read(TrapContext *ctx, struct hardfiledata *hfd, uaecptr data
 {
        if (!len)
                return 0;
-       if (!ctx) {
+       if (!ctx && real_address_allowed()) {
                addrbank *bank_data = &get_mem_bank (dataptr);
                if (!bank_data || !bank_data->check (dataptr, len))
                        return 0;
@@ -1311,7 +1311,7 @@ static uae_u64 cmd_write(TrapContext *ctx, struct hardfiledata *hfd, uaecptr dat
 {
        if (!len)
                return 0;
-       if (!ctx) {
+       if (!ctx && real_address_allowed()) {
                addrbank *bank_data = &get_mem_bank (dataptr);
                if (!bank_data || !bank_data->check (dataptr, len))
                        return 0;
index da72299cb429d0ae98393eed737ce98b67e75161..57c790aa888dfc190483756b9d88e0ba2c5b6ebc 100644 (file)
@@ -695,6 +695,8 @@ STATIC_INLINE void put_pointer (uaecptr addr, void *v)
 # endif
 #endif
 
+bool real_address_allowed(void);
+
 STATIC_INLINE uae_u8 *get_real_address (uaecptr addr)
 {
        return get_mem_bank (addr).xlateaddr(addr);
index 57a50ee5dd21d195c733d9febfa8f1349f677b20..5129f3bc09bd781618b73c70477995af097b7f20 100644 (file)
@@ -136,6 +136,13 @@ __inline__ void byteput (uaecptr addr, uae_u32 b)
 }
 #endif
 
+extern bool debugmem_initialized;
+
+bool real_address_allowed(void)
+{
+       return debugmem_initialized == false;
+}
+
 int addr_valid (const TCHAR *txt, uaecptr addr, uae_u32 len)
 {
        addrbank *ab = &get_mem_bank(addr);
index 3b35d13a98804b15e3ac5e9993eaefe92ee3a0c4..c23035f6e2229ad7c4a876a918be187376bbffe4 100644 (file)
--- a/traps.cpp
+++ b/traps.cpp
@@ -1093,7 +1093,7 @@ void trap_put_bytes(TrapContext *ctx, const void *haddrp, uaecptr addr, int cnt)
                        cnt -= max;
                }
        } else {
-               if (valid_address(addr, cnt)) {
+               if (real_address_allowed() && valid_address(addr, cnt)) {
                        memcpy(get_real_address(addr), haddr, cnt);
                } else {
                        for (int i = 0; i < cnt; i++) {
@@ -1118,7 +1118,7 @@ void trap_get_bytes(TrapContext *ctx, void *haddrp, uaecptr addr, int cnt)
                        cnt -= max;
                }
        } else {
-               if (valid_address(addr, cnt)) {
+               if (real_address_allowed() && valid_address(addr, cnt)) {
                        memcpy(haddr, get_real_address(addr), cnt);
                } else {
                        for (int i = 0; i < cnt; i++) {