From: Toni Wilen Date: Fri, 17 Aug 2018 20:14:00 +0000 (+0300) Subject: Fallback to indirect mode if HDF read/write address is not plain memory (but some... X-Git-Tag: 4100~122 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=8c44773562510511b5c7b508c568b438972b285e;p=francis%2Fwinuae.git 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. --- 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) {