From 8c44773562510511b5c7b508c568b438972b285e Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 17 Aug 2018 23:14:00 +0300 Subject: [PATCH] Fallback to indirect mode if HDF read/write address is not plain memory (but some kind of IO-like, like Bridgeboard shared RAM) instead of failing immediately. --- hardfile.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hardfile.cpp b/hardfile.cpp index 26b38cf7..3720bd40 100644 --- a/hardfile.cpp +++ b/hardfile.cpp @@ -1282,10 +1282,12 @@ static uae_u64 cmd_read(TrapContext *ctx, struct hardfiledata *hfd, uaecptr data return 0; if (!ctx && real_address_allowed()) { addrbank *bank_data = &get_mem_bank (dataptr); - if (!bank_data || !bank_data->check (dataptr, len)) + if (!bank_data) return 0; - uae_u8 *buffer = bank_data->xlateaddr(dataptr); - return cmd_readx(hfd, buffer, offset, len); + if (bank_data->check(dataptr, len)) { + uae_u8 *buffer = bank_data->xlateaddr(dataptr); + return cmd_readx(hfd, buffer, offset, len); + } } int total = 0; while (len > 0) { @@ -1315,10 +1317,12 @@ static uae_u64 cmd_write(TrapContext *ctx, struct hardfiledata *hfd, uaecptr dat return 0; if (!ctx && real_address_allowed()) { addrbank *bank_data = &get_mem_bank (dataptr); - if (!bank_data || !bank_data->check (dataptr, len)) + if (!bank_data) return 0; - uae_u8 *buffer = bank_data->xlateaddr(dataptr); - return cmd_writex(hfd, buffer, offset, len); + if (bank_data->check(dataptr, len)) { + uae_u8 *buffer = bank_data->xlateaddr(dataptr); + return cmd_writex(hfd, buffer, offset, len); + } } int total = 0; while (len > 0) { -- 2.47.3