From 3650edab856d70c8eae9e37088002fb63e645e0f Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Wed, 21 Aug 2002 22:23:10 +0000 Subject: [PATCH] Added lock count and get EMB block information call. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@201 --- src/ints/xms.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/ints/xms.cpp b/src/ints/xms.cpp index f8b7e1a7..d08bd651 100644 --- a/src/ints/xms.cpp +++ b/src/ints/xms.cpp @@ -58,6 +58,7 @@ struct XMS_Block { Bit16u prev,next; Bit16u size; /* Size in kb's */ PhysPt phys; + Bit8u locked; void * data; bool active; }; @@ -155,8 +156,10 @@ foundnew: xms_handles[new_index].next=xms_handles[index].next; xms_handles[new_index].prev=index; xms_handles[index].next=new_index; + xms_handles[index].locked=0; xms_handles[new_index].active=true; xms_handles[new_index].data=0; + xms_handles[new_index].locked=0; xms_handles[new_index].size=xms_handles[index].size-reg_dx; xms_handles[new_index].phys=xms_handles[index].phys+reg_dx*1024; xms_handles[index].size=reg_dx; @@ -275,6 +278,7 @@ foundnew: reg_bl=XMS_INVALID_HANDLE; return CBRET_NONE; } + if (xms_handles[reg_dx].locked<255) xms_handles[reg_dx].locked++; reg_bx=(Bit16u)(xms_handles[reg_dx].phys & 0xFFFF); reg_dx=(Bit16u)(xms_handles[reg_dx].phys>>16); reg_ax=1; @@ -287,9 +291,21 @@ foundnew: reg_bl=XMS_INVALID_HANDLE; return CBRET_NONE; } + if (xms_handles[reg_dx].locked) xms_handles[reg_dx].locked--; reg_ax=1;reg_bl=0; break; case XMS_GET_EMB_HANDLE_INFORMATION: /* 0e */ + /* Check for a valid handle */ + if (!reg_dx || (reg_dx>=XMS_HANDLES) || !xms_handles[reg_dx].active || !xms_handles[reg_dx].data ) { + reg_ax=0; + reg_bl=XMS_INVALID_HANDLE; + return CBRET_NONE; + } + reg_bh=xms_handles[reg_dx].locked; + /* Find available blocks */ + reg_bx=0;{ for (Bitu i=0;i