diff --git a/src/ints/ems.cpp b/src/ints/ems.cpp index c346b408..141316e2 100644 --- a/src/ints/ems.cpp +++ b/src/ints/ems.cpp @@ -16,9 +16,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include +#include +#include -#include -#include #include "dosbox.h" #include "callback.h" #include "mem.h" @@ -596,10 +597,10 @@ static void LoadMoveRegion(PhysPt data,MoveRegion & region) { region.dest_page_seg=mem_readw(data+0x10); } -static Bit8u MemoryRegion(void) { +static uint8_t MemoryRegion() +{ MoveRegion region; - Bit8u buf_src[MEM_PAGE_SIZE]; - Bit8u buf_dest[MEM_PAGE_SIZE]; + if (reg_al>1) { LOG(LOG_MISC,LOG_ERROR)("EMS:Call %2X Subfunction %2X not supported",reg_ah,reg_al); return EMM_FUNC_NOSUP; @@ -631,15 +632,19 @@ static Bit8u MemoryRegion(void) { dest_off=region.dest_offset&(MEM_PAGE_SIZE-1); dest_remain=MEM_PAGE_SIZE-dest_off; } - Bitu toread; - while (region.bytes>0) { - if (region.bytes>MEM_PAGE_SIZE) toread=MEM_PAGE_SIZE; - else toread=region.bytes; + + uint8_t buf_src[MEM_PAGE_SIZE]; + uint8_t buf_dest[MEM_PAGE_SIZE]; + + while (region.bytes > 0) { + const size_t toread = std::min(region.bytes, MEM_PAGE_SIZE); + /* Read from the source */ if (!region.src_type) { MEM_BlockRead(src_mem,buf_src,toread); } else { - if (toread