Fixed allocation rounding for MEM_RESERVE.

diff --git a/memory/virtual.c b/memory/virtual.c
index f9f917a..b70bf4f 100644
--- a/memory/virtual.c
+++ b/memory/virtual.c
@@ -552,12 +552,13 @@
     if (addr)
     {
         if (type & MEM_RESERVE) /* Round down to 64k boundary */
-            base = ((UINT)addr + granularity_mask) & ~granularity_mask;
+            base = (UINT)addr & ~granularity_mask;
         else
             base = ROUND_ADDR( addr );
         size = (((UINT)addr + size + page_mask) & ~page_mask) - base;
-        if (base + size < base)  /* Disallow wrap-around */
+        if ((base <= granularity_mask) || (base + size < base))
         {
+            /* disallow low 64k and wrap-around */
             SetLastError( ERROR_INVALID_PARAMETER );
             return NULL;
         }
@@ -636,7 +637,7 @@
     if (!(view = VIRTUAL_FindView( base )) ||
         (base + size > view->base + view->size))
     {
-        SetLastError( ERROR_INVALID_PARAMETER );
+        SetLastError( ERROR_INVALID_ADDRESS );
         return NULL;
     }