From: sparky4 Date: Wed, 1 Mar 2017 02:49:17 +0000 (-0600) Subject: NULL pageframe detection added for EMM386 memory manager failing to assign one X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=dfbeccb03ffc0950d412e283c64a50b1aa49230c;p=16.git NULL pageframe detection added for EMM386 memory manager failing to assign one --- diff --git a/DEBUG.16W b/DEBUG.16W index 871f4d0a..ce787d07 100755 --- a/DEBUG.16W +++ b/DEBUG.16W @@ -1,208 +1,210 @@ -Seg:0 Size:9249 Owner:0x0 -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0000 -Seg:2501 Size:39 Owner:0x0 -+ -Seg:2528 Size:256 Owner:0x1dc4 -+++++ -Seg:2628 Size:256 Owner:0x1bb6 +Seg:0 Size:9022 Owner:0x0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0000 +Seg:242e Size:39 Owner:0x0 +++ +Seg:2455 Size:256 Owner:0x1dc4 +++++ +Seg:2555 Size:256 Owner:0x1bb6 ++++ -Seg:2728 Size:256 Owner:0x1bb8 +Seg:2655 Size:256 Owner:0x1bb8 ++++ -Seg:2828 Size:256 Owner:0x1bba -++++ -Seg:2928 Size:256 Owner:0x1bbc -++++ -Seg:2a28 Size:256 Owner:0x1bbe +Seg:2755 Size:256 Owner:0x1bba +++++ -Seg:2b28 Size:256 Owner:0x1bc0 +Seg:2855 Size:256 Owner:0x1bbc ++++ -Seg:2c28 Size:256 Owner:0x1bc2 +Seg:2955 Size:256 Owner:0x1bbe ++++ -Seg:2d28 Size:256 Owner:0x1bc4 +Seg:2a55 Size:256 Owner:0x1bc0 ++++ -Seg:2e28 Size:256 Owner:0x1bc6 +Seg:2b55 Size:256 Owner:0x1bc2 ++++ -Seg:2f28 Size:256 Owner:0x1bc8 +Seg:2c55 Size:256 Owner:0x1bc4 +++++ -Seg:3028 Size:256 Owner:0x1bca +Seg:2d55 Size:256 Owner:0x1bc6 ++++ -Seg:3128 Size:256 Owner:0x1bcc +Seg:2e55 Size:256 Owner:0x1bc8 ++++ -Seg:3228 Size:256 Owner:0x1bce +Seg:2f55 Size:256 Owner:0x1bca ++++ -Seg:3328 Size:256 Owner:0x1bd0 +Seg:3055 Size:256 Owner:0x1bcc ++++ -Seg:3428 Size:256 Owner:0x1bd2 +Seg:3155 Size:256 Owner:0x1bce +++++ -Seg:3528 Size:256 Owner:0x1bd4 +Seg:3255 Size:256 Owner:0x1bd0 ++++ -Seg:3628 Size:256 Owner:0x1bd6 +Seg:3355 Size:256 Owner:0x1bd2 ++++ -Seg:3728 Size:256 Owner:0x1bd8 +Seg:3455 Size:256 Owner:0x1bd4 ++++ -Seg:3828 Size:256 Owner:0x1bda +Seg:3555 Size:256 Owner:0x1bd6 ++++ -Seg:3928 Size:256 Owner:0x1bdc +Seg:3655 Size:256 Owner:0x1bd8 +++++ -Seg:3a28 Size:256 Owner:0x1bde +Seg:3755 Size:256 Owner:0x1bda ++++ -Seg:3b28 Size:256 Owner:0x1be0 +Seg:3855 Size:256 Owner:0x1bdc ++++ -Seg:3c28 Size:256 Owner:0x1be2 +Seg:3955 Size:256 Owner:0x1bde ++++ -Seg:3d28 Size:256 Owner:0x1be4 +Seg:3a55 Size:256 Owner:0x1be0 ++++ -Seg:3e28 Size:256 Owner:0x1be6 +Seg:3b55 Size:256 Owner:0x1be2 +++++ -Seg:3f28 Size:256 Owner:0x1be8 +Seg:3c55 Size:256 Owner:0x1be4 ++++ -Seg:4028 Size:256 Owner:0x1bea +Seg:3d55 Size:256 Owner:0x1be6 ++++ -Seg:4128 Size:256 Owner:0x1bec +Seg:3e55 Size:256 Owner:0x1be8 ++++ -Seg:4228 Size:256 Owner:0x1bee +Seg:3f55 Size:256 Owner:0x1bea ++++ -Seg:4328 Size:256 Owner:0x1bf0 +Seg:4055 Size:256 Owner:0x1bec +++++ -Seg:4428 Size:256 Owner:0x1bf2 +Seg:4155 Size:256 Owner:0x1bee ++++ -Seg:4528 Size:256 Owner:0x1bf4 +Seg:4255 Size:256 Owner:0x1bf0 ++++ -Seg:4628 Size:256 Owner:0x1bf6 +Seg:4355 Size:256 Owner:0x1bf2 ++++ -Seg:4728 Size:256 Owner:0x1bf8 +Seg:4455 Size:256 Owner:0x1bf4 ++++ -Seg:4828 Size:256 Owner:0x1bfa +Seg:4555 Size:256 Owner:0x1bf6 +++++ -Seg:4928 Size:256 Owner:0x1bfc +Seg:4655 Size:256 Owner:0x1bf8 ++++ -Seg:4a28 Size:256 Owner:0x1bfe +Seg:4755 Size:256 Owner:0x1bfa ++++ -Seg:4b28 Size:256 Owner:0x1c00 +Seg:4855 Size:256 Owner:0x1bfc ++++ -Seg:4c28 Size:256 Owner:0x1c02 +Seg:4955 Size:256 Owner:0x1bfe ++++ -Seg:4d28 Size:256 Owner:0x1c04 +Seg:4a55 Size:256 Owner:0x1c00 +++++ -Seg:4e28 Size:256 Owner:0x1c06 +Seg:4b55 Size:256 Owner:0x1c02 ++++ -Seg:4f28 Size:256 Owner:0x1c08 +Seg:4c55 Size:256 Owner:0x1c04 ++++ -Seg:5028 Size:256 Owner:0x1c0a +Seg:4d55 Size:256 Owner:0x1c06 ++++ -Seg:5128 Size:256 Owner:0x1c0c +Seg:4e55 Size:256 Owner:0x1c08 ++++ -Seg:5228 Size:256 Owner:0x1c0e +Seg:4f55 Size:256 Owner:0x1c0a +++++ -Seg:5328 Size:256 Owner:0x1c10 +Seg:5055 Size:256 Owner:0x1c0c ++++ -Seg:5428 Size:256 Owner:0x1c12 +Seg:5155 Size:256 Owner:0x1c0e ++++ -Seg:5528 Size:256 Owner:0x1c14 +Seg:5255 Size:256 Owner:0x1c10 ++++ -Seg:5628 Size:256 Owner:0x1c16 +Seg:5355 Size:256 Owner:0x1c12 ++++ -Seg:5728 Size:256 Owner:0x1c18 +Seg:5455 Size:256 Owner:0x1c14 +++++ -Seg:5828 Size:256 Owner:0x1c1a +Seg:5555 Size:256 Owner:0x1c16 ++++ -Seg:5928 Size:256 Owner:0x1c1c +Seg:5655 Size:256 Owner:0x1c18 ++++ -Seg:5a28 Size:256 Owner:0x1c1e +Seg:5755 Size:256 Owner:0x1c1a ++++ -Seg:5b28 Size:256 Owner:0x1c20 +Seg:5855 Size:256 Owner:0x1c1c ++++ -Seg:5c28 Size:256 Owner:0x1c22 +Seg:5955 Size:256 Owner:0x1c1e +++++ -Seg:5d28 Size:256 Owner:0x1c24 +Seg:5a55 Size:256 Owner:0x1c20 ++++ -Seg:5e28 Size:256 Owner:0x1c26 +Seg:5b55 Size:256 Owner:0x1c22 ++++ -Seg:5f28 Size:256 Owner:0x1c28 +Seg:5c55 Size:256 Owner:0x1c24 ++++ -Seg:6028 Size:256 Owner:0x1c2a +Seg:5d55 Size:256 Owner:0x1c26 ++++ -Seg:6128 Size:256 Owner:0x1c2c +Seg:5e55 Size:256 Owner:0x1c28 +++++ -Seg:6228 Size:256 Owner:0x1c2e +Seg:5f55 Size:256 Owner:0x1c2a ++++ -Seg:6328 Size:256 Owner:0x1c30 +Seg:6055 Size:256 Owner:0x1c2c ++++ -Seg:6428 Size:256 Owner:0x1c32 +Seg:6155 Size:256 Owner:0x1c2e ++++ -Seg:6528 Size:256 Owner:0x1c34 +Seg:6255 Size:256 Owner:0x1c30 ++++ -Seg:6628 Size:256 Owner:0x1c36 +Seg:6355 Size:256 Owner:0x1c32 +++++ -Seg:6728 Size:256 Owner:0x1c38 +Seg:6455 Size:256 Owner:0x1c34 ++++ -Seg:6828 Size:256 Owner:0x1c3a +Seg:6555 Size:256 Owner:0x1c36 ++++ -Seg:6928 Size:256 Owner:0x1c3c +Seg:6655 Size:256 Owner:0x1c38 ++++ -Seg:6a28 Size:256 Owner:0x1c3e +Seg:6755 Size:256 Owner:0x1c3a ++++ -Seg:6b28 Size:256 Owner:0x1c40 +Seg:6855 Size:256 Owner:0x1c3c +++++ -Seg:6c28 Size:256 Owner:0x1c42 +Seg:6955 Size:256 Owner:0x1c3e ++++ -Seg:6d28 Size:256 Owner:0x1c44 +Seg:6a55 Size:256 Owner:0x1c40 ++++ -Seg:6e28 Size:256 Owner:0x1c46 +Seg:6b55 Size:256 Owner:0x1c42 ++++ -Seg:6f28 Size:256 Owner:0x1c48 +Seg:6c55 Size:256 Owner:0x1c44 ++++ -Seg:7028 Size:256 Owner:0x1c4a +Seg:6d55 Size:256 Owner:0x1c46 +++++ -Seg:7128 Size:256 Owner:0x1c4c +Seg:6e55 Size:256 Owner:0x1c48 ++++ -Seg:7228 Size:256 Owner:0x1c4e +Seg:6f55 Size:256 Owner:0x1c4a ++++ -Seg:7328 Size:256 Owner:0x1c50 +Seg:7055 Size:256 Owner:0x1c4c ++++ -Seg:7428 Size:256 Owner:0x1c52 +Seg:7155 Size:256 Owner:0x1c4e ++++ -Seg:7528 Size:256 Owner:0x1c54 +Seg:7255 Size:256 Owner:0x1c50 +++++ -Seg:7628 Size:256 Owner:0x1c56 +Seg:7355 Size:256 Owner:0x1c52 ++++ -Seg:7728 Size:256 Owner:0x1c58 +Seg:7455 Size:256 Owner:0x1c54 ++++ -Seg:7828 Size:256 Owner:0x1c5a +Seg:7555 Size:256 Owner:0x1c56 ++++ -Seg:7928 Size:256 Owner:0x1c5c +Seg:7655 Size:256 Owner:0x1c58 ++++ -Seg:7a28 Size:256 Owner:0x1c5e +Seg:7755 Size:256 Owner:0x1c5a +++++ -Seg:7b28 Size:256 Owner:0x1c60 +Seg:7855 Size:256 Owner:0x1c5c ++++ -Seg:7c28 Size:256 Owner:0x1c62 +Seg:7955 Size:256 Owner:0x1c5e ++++ -Seg:7d28 Size:256 Owner:0x1c64 +Seg:7a55 Size:256 Owner:0x1c60 ++++ -Seg:7e28 Size:256 Owner:0x1c66 +Seg:7b55 Size:256 Owner:0x1c62 ++++ -Seg:7f28 Size:256 Owner:0x1c68 +Seg:7c55 Size:256 Owner:0x1c64 +++++ -Seg:8028 Size:256 Owner:0x1c6a +Seg:7d55 Size:256 Owner:0x1c66 ++++ -Seg:8128 Size:256 Owner:0x1c6c +Seg:7e55 Size:256 Owner:0x1c68 ++++ -Seg:8228 Size:256 Owner:0x1c6e +Seg:7f55 Size:256 Owner:0x1c6a ++++ -Seg:8328 Size:256 Owner:0x1c70 +Seg:8055 Size:256 Owner:0x1c6c ++++ -Seg:8428 Size:256 Owner:0x1c72 +Seg:8155 Size:256 Owner:0x1c6e +++++ -Seg:8528 Size:256 Owner:0x1c74 +Seg:8255 Size:256 Owner:0x1c70 ++++ -Seg:8628 Size:256 Owner:0x1c76 +Seg:8355 Size:256 Owner:0x1c72 ++++ -Seg:8728 Size:256 Owner:0x1c78 +Seg:8455 Size:256 Owner:0x1c74 ++++ -Seg:8828 Size:256 Owner:0x1c7a +Seg:8555 Size:256 Owner:0x1c76 ++++ -Seg:8928 Size:256 Owner:0x1c7c +Seg:8655 Size:256 Owner:0x1c78 +++++ -Seg:9d67 Size:25240 Owner:0x0 -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file +Seg:8755 Size:256 Owner:0x1c7a +++++ +Seg:8855 Size:256 Owner:0x1c7c +++++ +Seg:8955 Size:273 Owner:0x1b88 +++++ +Seg:9d94 Size:25195 Owner:0x0 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/HEAP.16W b/HEAP.16W index fb3acb4b..6f9a21a6 100755 --- a/HEAP.16W +++ b/HEAP.16W @@ -1,45 +1,47 @@ == default == - USED block at 25230016 of size 26 - FREE block at 25230030 of size 34844 - USED block at 2523884c of size 136 - USED block at 252388d4 of size 20 - FREE block at 252388e8 of size 7972 + USED block at 24500016 of size 26 + USED block at 24500030 of size 26 + FREE block at 2450004a of size 38914 + USED block at 2450984c of size 136 + USED block at 245098d4 of size 20 + FREE block at 245098e8 of size 7972 OK - end of heap == near == - USED block at 1522ecf6 of size 16 - USED block at 1522ed06 of size 566 - USED block at 1522ef3c of size 72 - USED block at 1522ef84 of size 20 - USED block at 1522ef98 of size 20 - USED block at 1522efac of size 20 - USED block at 1522efc0 of size 20 - USED block at 1522efd4 of size 20 - USED block at 1522efe8 of size 4116 + USED block at 144fecf6 of size 12 + USED block at 144fed02 of size 332 + USED block at 144fee4e of size 52 + USED block at 144fee82 of size 20 + USED block at 144fee96 of size 20 + USED block at 144feeaa of size 20 + USED block at 144feebe of size 20 + USED block at 144feed2 of size 20 + USED block at 144feee6 of size 4374 OK - end of heap == far == - USED block at 25230016 of size 26 - USED block at 25230030 of size 34844 - USED block at 2523884c of size 136 - USED block at 252388d4 of size 20 - USED block at 252388e8 of size 7972 + USED block at 24500016 of size 26 + USED block at 24500030 of size 26 + USED block at 2450004a of size 38914 + USED block at 2450984c of size 136 + USED block at 245098d4 of size 20 + USED block at 245098e8 of size 7972 OK - end of heap Memory Type Total Used Free ---------------- -------- -------- -------- -Default 42998 182 42816 -Near 4870 738 4132 -Far 42998 182 42816 +Default 47094 208 46886 +Near 4870 496 4374 +Far 47094 208 46886 ---------------- -------- -------- -------- -HC_coreleft = 4128 +HC_coreleft = 4372 HC_farcoreleft = 458752 -HC_GetFreeSize = 42816 -HC_GetNearFreeSize = 4132 -HC_GetFarFreeSize = 42816 -memavl = 4128 -stackavail = 31605 +HC_GetFreeSize = 46886 +HC_GetNearFreeSize = 4374 +HC_GetFarFreeSize = 46886 +memavl = 4372 +stackavail = 31606 diff --git a/MEMINFO.16W b/MEMINFO.16W new file mode 100755 index 00000000..e69de29b diff --git a/MMDUMP.16W b/MMDUMP.16W index a8c901b2..5b3efb03 100755 Binary files a/MMDUMP.16W and b/MMDUMP.16W differ diff --git a/src/lib/16_dbg.h b/src/lib/16_dbg.h index 61bbff8b..3d7ef4af 100755 --- a/src/lib/16_dbg.h +++ b/src/lib/16_dbg.h @@ -10,7 +10,7 @@ #define __DEBUG_InputMgr__ #define __DEBUG_MAP__ //#define __DEBUG_CA__ -#define __DEBUG_PM__ +//#define __DEBUG_PM__ //#define __DEBUG_MM__ diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index 5f8bb38e..67059b39 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -88,7 +88,8 @@ static char *ParmStringsexmm[] = {"noems","noxms",""}; boolean MML_CheckForEMS(void) { - boolean emmcfems=0; + boolean emmcfems = false; + word EMSPageFrame = 0; static char emmname[] = "EMMXXXX0"; //fix by andrius4669 __asm { mov dx,OFFSET emmname //fix by andrius4669 @@ -115,11 +116,21 @@ boolean MML_CheckForEMS(void) mov ah,0x3e int 0x21 // close handle jc error + + // + // pageframe check + // + mov ah,EMS_GETFRAME + int EMS_INT // find the page frame address + or ah,ah + jnz error + mov [EMSPageFrame],bx + // // EMS is good // - mov emmcfems,1 - jmp End + mov emmcfems,1 + jmp End #ifdef __BORLANDC__ } #endif @@ -130,7 +141,7 @@ boolean MML_CheckForEMS(void) // // EMS is bad // - mov emmcfems,0 + mov emmcfems,0 #ifdef __BORLANDC__ } #endif @@ -138,6 +149,17 @@ boolean MML_CheckForEMS(void) #ifdef __WATCOMC__ } #endif + + // + // Pageframe switch to determine if there is one! + // + if(!EMSPageFrame) + { + emmcfems = false; +#if defined(__DEBUG_PM__) || defined(__DEBUG_MM__) + printf("MML_CheckForEMS: EMS error No Pageframe!\nAddress detected to be %04x\n", EMSPageFrame); +#endif + } return(emmcfems); } diff --git a/src/lib/16_pm.c b/src/lib/16_pm.c index 03df0237..f4e15082 100755 --- a/src/lib/16_pm.c +++ b/src/lib/16_pm.c @@ -158,57 +158,45 @@ boolean PML_StartupEMS(global_game_variables_t *gvar) { int i; - //long size; +#ifdef __PM__NOHOGEMS__ + long size; +#endif byte err=0, str[64]; boolean errorflag=false; static char emmname[] = "EMMXXXX0"; //fix by andrius4669 - unsigned int EMSVer = 0; - unsigned totalEMSpages,freeEMSpages,EMSPageFrame,EMSHandle=0,EMSAvail=0; -#ifdef __DEBUG_PM__ - word e=0; -#endif - totalEMSpages = freeEMSpages = EMSPageFrame = 0; + unsigned EMSVer; + unsigned totalEMSpages,freeEMSpages,EMSPageFrame,EMSHandle,EMSAvail; + totalEMSpages = freeEMSpages = EMSPageFrame = EMSHandle = EMSAvail = EMSVer = 0; // set all to 0~ gvar->pm.emm.EMSPresent = false; // Assume that we'll fail - gvar->pm.emm.EMSAvail = 0; - gvar->mmi.EMSmem = 0; + gvar->pm.emm.EMSAvail = gvar->mmi.EMSmem = 0; __asm { mov dx,OFFSET emmname //fix by andrius4669 mov ax,0x3d00 int EMM_INT // try to open EMMXXXX0 device jc error1 -#ifdef __DEBUG_PM__ - add e,1 -#endif + mov bx,ax mov ax,0x4400 int EMM_INT // get device info jc error1 -#ifdef __DEBUG_PM__ - add e,1 -#endif + and dx,0x80 jz error1 -#ifdef __DEBUG_PM__ - add e,1 -#endif + mov ax,0x4407 int EMM_INT // get status jc error1 or al,al jz error1 -#ifdef __DEBUG_PM__ - add e,1 -#endif + mov ah,0x3e int EMM_INT // close handle jc error1 -#ifdef __DEBUG_PM__ - add e,1 -#endif + mov ah,EMS_STATUS int EMS_INT jc error1 // make sure EMS hardware is present @@ -217,7 +205,7 @@ PML_StartupEMS(global_game_variables_t *gvar) int EMS_INT // only work on EMS 3.2 or greater (silly, but...) or ah,ah jnz error1 - mov [EMSVer],ax // set EMSVer + mov [EMSVer],ax // set EMSVer cmp al,0x32 // only work on ems 3.2 or greater jb error1 @@ -238,20 +226,17 @@ PML_StartupEMS(global_game_variables_t *gvar) mov [totalEMSpages],dx mov [freeEMSpages],bx mov [EMSAvail],bx - jmp End1 + jmp End1 #ifdef __BORLANDC__ } #endif error1: #ifdef __BORLANDC__ __asm { -#endif -#ifdef __DEBUG_PM__ - mov e,1 #endif mov err,ah mov errorflag,1 - jmp End1 + jmp End1 #ifdef __BORLANDC__ } #endif @@ -260,7 +245,7 @@ End1: #ifdef __WATCOMC__ } #endif -/* +#ifdef __PM__NOHOGEMS__ if(errorflag==false) { // Don't hog all available EMS @@ -271,7 +256,7 @@ End1: gvar->pm.emm.EMSAvail = size / EMSPageSize; } } -*/ +#endif __asm { mov ah,EMS_ALLOCPAGES mov bx,[EMSAvail]; @@ -286,41 +271,29 @@ End1: error2: #ifdef __BORLANDC__ __asm { -#endif -#ifdef __DEBUG_PM__ - mov e,1 #endif mov err,ah mov errorflag,1 - jmp End2 + jmp End2 #ifdef __BORLANDC__ - } + }//end of assembly #endif End2: #ifdef __WATCOMC__ - } + }//end of assembly #endif - - if(errorflag==false) - { - gvar->mmi.EMSmem = EMSAvail * (dword)EMSPageSize; - - // Initialize EMS mapping cache - for (i = 0;i < EMSFrameCount;i++) - gvar->pm.emm.EMSList[i].baseEMSPage = -1; - - } - else + if(errorflag==true) { strcpy(str,"PML_StartupEMS: EMS error "); MM_EMSerr(str, err); printf("%s\n",str); -#ifdef __DEBUG_PM__ - printf("e=%u\n", e); - getch(); -#endif return(gvar->pm.emm.EMSPresent); } + gvar->mmi.EMSmem = EMSAvail * (dword)EMSPageSize; + + // Initialize EMS mapping cache + for (i = 0;i < EMSFrameCount;i++) + gvar->pm.emm.EMSList[i].baseEMSPage = -1; gvar->pm.emm.EMSPresent = true; // We have EMS gvar->pm.emm.EMSPageFrame = EMSPageFrame; diff --git a/src/lib/16_pm.h b/src/lib/16_pm.h index 2ce5fc10..bdf29a5d 100755 --- a/src/lib/16_pm.h +++ b/src/lib/16_pm.h @@ -34,6 +34,7 @@ #include "src/lib/16_ca.h" #include +//#define __PM__NOHOGEMS__ /*// NOTE! PMPageSize must be an even divisor of EMSPageSize, and >= 1024 #define EMSPageSize 16384 #define EMSPageSizeSeg (EMSPageSize >> 4)