From ffe68640216ef82ac578a71fd3bbe55c6b588a12 Mon Sep 17 00:00:00 2001 From: Ulf Wohlers Date: Tue, 30 Sep 2003 13:49:34 +0000 Subject: [PATCH] Added int 15 87 - Move memory region Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1282 --- src/ints/bios.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ints/bios.cpp b/src/ints/bios.cpp index d04a0e6c..63b65afd 100644 --- a/src/ints/bios.cpp +++ b/src/ints/bios.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: bios.cpp,v 1.21 2003-09-17 19:17:35 qbix79 Exp $ */ +/* $Id: bios.cpp,v 1.22 2003-09-30 13:49:34 finsterr Exp $ */ #include #include "dosbox.h" @@ -228,11 +228,26 @@ static Bitu INT15_Handler(void) { Bit32u micro=(reg_cx<<16)|reg_dx; CALLBACK_SCF(false); } + case 0x87: /* Copy extended memory */ + { + bool enabled = MEM_A20_Enabled(); + MEM_A20_Enable(true); + Bitu bytes = reg_cx * 2; + PhysPt data = SegPhys(es)+reg_si; + PhysPt source = mem_readd(data+0x12) & 0x00FFFFFF + (mem_readb(data+0x16)<<24); + PhysPt dest = mem_readd(data+0x1A) & 0x00FFFFFF + (mem_readb(data+0x1E)<<24); + MEM_BlockCopy(dest,source,bytes); + reg_ax = 0x00; + MEM_A20_Enable(enabled); + CALLBACK_SCF(false); + break; + } case 0x88: /* SYSTEM - GET EXTENDED MEMORY SIZE (286+) */ IO_Write(0x70,0x30); reg_al=IO_Read(0x71); IO_Write(0x70,0x31); reg_ah=IO_Read(0x71); + LOG(LOG_BIOS,LOG_NORMAL)("INT15:Function 0x88 Remaining %04X kb",reg_ax); CALLBACK_SCF(false); break; case 0x90: /* OS HOOK - DEVICE BUSY */ @@ -253,7 +268,7 @@ static Bitu INT15_Handler(void) { CALLBACK_SCF(true); break; default: - LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call %2X",reg_ah); + LOG(LOG_BIOS,LOG_ERROR)("INT15:Unknown call %4X",reg_ax); reg_ah=0x86; CALLBACK_SCF(false); }