X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Ftsthimem.c;h=245a5335831a4a928ecbaeb7a2bdf7330f491e2c;hb=fb97121f7d0be4408d8e2ed98a2f7b10b852a915;hp=7476b7ea67db79d88b81547dfb4d5eb23461b369;hpb=47cdc66151d973d975d0e31fb8a786eb639bebdb;p=16.git diff --git a/src/tsthimem.c b/src/tsthimem.c index 7476b7ea..245a5335 100755 --- a/src/tsthimem.c +++ b/src/tsthimem.c @@ -1,295 +1,295 @@ -/* tsthimem.c - * - * Test program: HIMEM.SYS functions - * (C) 2010-2012 Jonathan Campbell. - * Hackipedia DOS library. - * - * This code is licensed under the LGPL. - * - */ - -#include -#include -#include -#include -#include -#include - -//#include "src/lib/doslib/cpu.h" -#include "src/lib/doslib/dos.h" -//#include doswin.h> -#include "src/lib/doslib/himemsys.h" - -int main() { - probe_dos(); - printf("DOS version %x.%02u\n",dos_version>>8,dos_version&0xFF); - /*if (detect_windows()) { - printf("I am running under Windows.\n"); - printf(" Mode: %s\n",windows_mode_str(windows_mode)); - printf(" Ver: %x.%02u\n",windows_version>>8,windows_version&0xFF); - } - else { - printf("Not running under Windows or OS/2\n"); - }*/ - - if (probe_himem_sys()) { - int h1,h2,h3; - - printf("HIMEM.SYS detected. Entry point %04x:%04x. v%x.%02x\n", - (unsigned int)((himem_sys_entry >> 16) & 0xFFFFUL), - (unsigned int)(himem_sys_entry & 0xFFFFUL), - (unsigned int)(himem_sys_version >> 8), - (unsigned int)(himem_sys_version & 0xFF)); - - if (himem_sys_flags & HIMEM_F_HMA) - printf(" - HMA is present\n"); - if (himem_sys_flags & HIMEM_F_4GB) - printf(" - Extensions are present to address up to 4GB of memory\n"); - - printf("A20 status: %u\n",himem_sys_query_a20()); - printf("Global A20 line: "); fflush(stdout); - printf("en=%d ",himem_sys_global_a20(1)); fflush(stdout); - printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); - printf("dis=%d ",himem_sys_global_a20(0)); fflush(stdout); - printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); - printf("\n"); - - printf("Local A20 line: "); fflush(stdout); - printf("en=%d ",himem_sys_local_a20(1)); fflush(stdout); - printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); - printf("dis=%d ",himem_sys_local_a20(0)); fflush(stdout); - printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); - printf("\n"); - - himem_sys_update_free_memory_status(); - printf("Free memory: %luKB (largest block %luKB)\n", - (unsigned long)himem_sys_total_free, - (unsigned long)himem_sys_largest_free); - - printf("Attempting to alloc 4KB: "); - h1 = himem_sys_alloc(4); /* NTS: This is in KB, not bytes */ - if (h1 != -1) printf("ok, handle %u\n",h1); - else printf("failed\n"); - - printf("Attempting to alloc 64KB: "); - h2 = himem_sys_alloc(46); /* NTS: This is in KB, not bytes */ - if (h2 != -1) printf("ok, handle %u\n",h2); - else printf("failed\n"); - - printf("Attempting to alloc 1MB: "); - h3 = himem_sys_alloc(1024); /* NTS: This is in KB, not bytes */ - if (h3 != -1) printf("ok, handle %u\n",h3); - else printf("failed\n"); - - if (h1 != -1) { - if (!himem_sys_free(h1)) printf(" - Free failed\n"); - } - if (h2 != -1) { - if (!himem_sys_free(h2)) printf(" - Free failed\n"); - } - if (h3 != -1) { - if (!himem_sys_free(h3)) printf(" - Free failed\n"); - } - - printf("Attempting to alloc 1MB (for writing to): "); - h3 = himem_sys_alloc(1024); /* NTS: This is in KB, not bytes */ - if (h3 != -1) { - uint32_t ofs; - unsigned int i; - struct himem_block_info binf; -#if TARGET_MSDOS == 32 - char *msg; - unsigned char *tmp; - uint16_t tmpsel=0,msgsel=0; - const char *msgref = "Testing 123 hello"; -#else - unsigned char tmp[16]; - const char *msg = "Testing 123 hello"; -#endif - -#if TARGET_MSDOS == 32 - tmp = dpmi_alloc_dos(16,&tmpsel); - if (tmp == NULL) abort(); - msg = dpmi_alloc_dos(strlen(msgref)+16,&msgsel); - if (msg == NULL) abort(); - memcpy(msg,msgref,strlen(msgref)+1); -#endif - - printf("ok, handle %u\n",h3); - - if (himem_sys_get_handle_info(h3,&binf)) { - printf("Handle info:\n"); - printf(" Lock count=%u Free handles=%u Size=%luKB\n", - (unsigned int)binf.lock_count, - (unsigned int)binf.free_handles, - (unsigned long)binf.block_length_kb); - } - else { - printf("Cannot get handle info\n"); - } - -#if TARGET_MSDOS == 32 - if (!himem_sys_move(h3,0,0/*conventional memory*/,(unsigned long)(msg),16)) -#else - if (!himem_sys_move(h3,0,0/*conventional memory*/,((unsigned long)FP_SEG(msg) << 4UL) + (unsigned long)FP_OFF(msg),sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i += 2) { - tmp[i+0] = 0x55; - tmp[i+1] = 0xAA; - } - -#if TARGET_MSDOS == 32 - if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) -#else - if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i++) printf("%02x ",tmp[i]); - printf("\n"); - - ofs = himem_sys_lock(h3); - if (ofs != 0UL) { - printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); - if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); - } - else { - printf(" - Cannot lock\n"); - } - - printf("now resizing to 2MB\n"); - if (himem_sys_realloc(h3,2048)) { -#if TARGET_MSDOS == 32 - if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) -#else - if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i++) printf("%02x ",tmp[i]); - printf("\n"); - - ofs = himem_sys_lock(h3); - if (ofs != 0UL) { - printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); - if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); - } - else { - printf(" - Cannot lock\n"); - } - } - else { - printf(" - Cannot realloc\n"); - } - - if (!himem_sys_free(h3)) printf(" - Free failed\n"); - -#if TARGET_MSDOS == 32 - dpmi_free_dos(tmpsel); tmp=NULL; - dpmi_free_dos(msgsel); msg=NULL; -#endif - } - else printf("failed\n"); - - printf("Attempting to alloc 129MB (for writing to): "); - h3 = himem_sys_alloc(129UL * 1024UL); /* NTS: This is in KB, not bytes */ - if (h3 != -1) { - uint32_t ofs; - unsigned int i; - unsigned char tmp[16]; - struct himem_block_info binf; - const char *msg = "Testing 123 hello"; - - printf("ok, handle %u\n",h3); - - if (himem_sys_get_handle_info(h3,&binf)) { - printf("Handle info:\n"); - printf(" Lock count=%u Free handles=%u Size=%luKB\n", - (unsigned int)binf.lock_count, - (unsigned int)binf.free_handles, - (unsigned long)binf.block_length_kb); - } - else { - printf("Cannot get handle info\n"); - } - -#if TARGET_MSDOS == 32 - if (!himem_sys_move(h3,0,0/*conventional memory*/,(unsigned long)(msg),16)) -#else - if (!himem_sys_move(h3,0,0/*conventional memory*/,((unsigned long)FP_SEG(msg) << 4UL) + (unsigned long)FP_OFF(msg),sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i += 2) { - tmp[i+0] = 0x55; - tmp[i+1] = 0xAA; - } - -#if TARGET_MSDOS == 32 - if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) -#else - if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i++) printf("%02x ",tmp[i]); - printf("\n"); - - ofs = himem_sys_lock(h3); - if (ofs != 0UL) { - printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); - if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); - } - else { - printf(" - Cannot lock\n"); - } - - printf("now resizing to 144MB\n"); - if (himem_sys_realloc(h3,144UL*1024UL)) { - if (himem_sys_get_handle_info(h3,&binf)) { - printf("Handle info:\n"); - printf(" Lock count=%u Free handles=%u Size=%luKB\n", - (unsigned int)binf.lock_count, - (unsigned int)binf.free_handles, - (unsigned long)binf.block_length_kb); - } - else { - printf("Cannot get handle info\n"); - } - -#if TARGET_MSDOS == 32 - if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) -#else - if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) -#endif - printf("Copy didn't work\n"); - - for (i=0;i < 16;i++) printf("%02x ",tmp[i]); - printf("\n"); - - ofs = himem_sys_lock(h3); - if (ofs != 0UL) { - printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); - if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); - } - else { - printf(" - Cannot lock\n"); - } - } - else { - printf(" - Cannot realloc\n"); - } - - if (!himem_sys_free(h3)) printf(" - Free failed\n"); - } - else printf("failed\n"); - } - else { - printf("HIMEM.SYS not found\n"); - } - - return 0; -} - +/* tsthimem.c + * + * Test program: HIMEM.SYS functions + * (C) 2010-2012 Jonathan Campbell. + * Hackipedia DOS library. + * + * This code is licensed under the LGPL. + * + */ + +#include +#include +#include +#include +#include +#include + +//#include "src/lib/doslib/cpu.h" +#include "src/lib/doslib/dos.h" +//#include doswin.h> +#include "src/lib/doslib/himemsys.h" + +int main() { + probe_dos(); + printf("DOS version %x.%02u\n",dos_version>>8,dos_version&0xFF); + /*if (detect_windows()) { + printf("I am running under Windows.\n"); + printf(" Mode: %s\n",windows_mode_str(windows_mode)); + printf(" Ver: %x.%02u\n",windows_version>>8,windows_version&0xFF); + } + else { + printf("Not running under Windows or OS/2\n"); + }*/ + + if (probe_himem_sys()) { + int h1,h2,h3; + + printf("HIMEM.SYS detected. Entry point %04x:%04x. v%x.%02x\n", + (unsigned int)((himem_sys_entry >> 16) & 0xFFFFUL), + (unsigned int)(himem_sys_entry & 0xFFFFUL), + (unsigned int)(himem_sys_version >> 8), + (unsigned int)(himem_sys_version & 0xFF)); + + if (himem_sys_flags & HIMEM_F_HMA) + printf(" - HMA is present\n"); + if (himem_sys_flags & HIMEM_F_4GB) + printf(" - Extensions are present to address up to 4GB of memory\n"); + + printf("A20 status: %u\n",himem_sys_query_a20()); + printf("Global A20 line: "); fflush(stdout); + printf("en=%d ",himem_sys_global_a20(1)); fflush(stdout); + printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); + printf("dis=%d ",himem_sys_global_a20(0)); fflush(stdout); + printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); + printf("\n"); + + printf("Local A20 line: "); fflush(stdout); + printf("en=%d ",himem_sys_local_a20(1)); fflush(stdout); + printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); + printf("dis=%d ",himem_sys_local_a20(0)); fflush(stdout); + printf("query=%d ",himem_sys_query_a20(1)); fflush(stdout); + printf("\n"); + + himem_sys_update_free_memory_status(); + printf("Free memory: %luKB (largest block %luKB)\n", + (unsigned long)himem_sys_total_free, + (unsigned long)himem_sys_largest_free); + + printf("Attempting to alloc 4KB: "); + h1 = himem_sys_alloc(4); /* NTS: This is in KB, not bytes */ + if (h1 != -1) printf("ok, handle %u\n",h1); + else printf("failed\n"); + + printf("Attempting to alloc 64KB: "); + h2 = himem_sys_alloc(46); /* NTS: This is in KB, not bytes */ + if (h2 != -1) printf("ok, handle %u\n",h2); + else printf("failed\n"); + + printf("Attempting to alloc 1MB: "); + h3 = himem_sys_alloc(1024); /* NTS: This is in KB, not bytes */ + if (h3 != -1) printf("ok, handle %u\n",h3); + else printf("failed\n"); + + if (h1 != -1) { + if (!himem_sys_free(h1)) printf(" - Free failed\n"); + } + if (h2 != -1) { + if (!himem_sys_free(h2)) printf(" - Free failed\n"); + } + if (h3 != -1) { + if (!himem_sys_free(h3)) printf(" - Free failed\n"); + } + + printf("Attempting to alloc 1MB (for writing to): "); + h3 = himem_sys_alloc(1024); /* NTS: This is in KB, not bytes */ + if (h3 != -1) { + uint32_t ofs; + unsigned int i; + struct himem_block_info binf; +#if TARGET_MSDOS == 32 + char *msg; + unsigned char *tmp; + uint16_t tmpsel=0,msgsel=0; + const char *msgref = "Testing 123 hello"; +#else + unsigned char tmp[16]; + const char *msg = "Testing 123 hello"; +#endif + +#if TARGET_MSDOS == 32 + tmp = dpmi_alloc_dos(16,&tmpsel); + if (tmp == NULL) abort(); + msg = dpmi_alloc_dos(strlen(msgref)+16,&msgsel); + if (msg == NULL) abort(); + memcpy(msg,msgref,strlen(msgref)+1); +#endif + + printf("ok, handle %u\n",h3); + + if (himem_sys_get_handle_info(h3,&binf)) { + printf("Handle info:\n"); + printf(" Lock count=%u Free handles=%u Size=%luKB\n", + (unsigned int)binf.lock_count, + (unsigned int)binf.free_handles, + (unsigned long)binf.block_length_kb); + } + else { + printf("Cannot get handle info\n"); + } + +#if TARGET_MSDOS == 32 + if (!himem_sys_move(h3,0,0/*conventional memory*/,(unsigned long)(msg),16)) +#else + if (!himem_sys_move(h3,0,0/*conventional memory*/,((unsigned long)FP_SEG(msg) << 4UL) + (unsigned long)FP_OFF(msg),sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i += 2) { + tmp[i+0] = 0x55; + tmp[i+1] = 0xAA; + } + +#if TARGET_MSDOS == 32 + if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) +#else + if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i++) printf("%02x ",tmp[i]); + printf("\n"); + + ofs = himem_sys_lock(h3); + if (ofs != 0UL) { + printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); + if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); + } + else { + printf(" - Cannot lock\n"); + } + + printf("now resizing to 2MB\n"); + if (himem_sys_realloc(h3,2048)) { +#if TARGET_MSDOS == 32 + if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) +#else + if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i++) printf("%02x ",tmp[i]); + printf("\n"); + + ofs = himem_sys_lock(h3); + if (ofs != 0UL) { + printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); + if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); + } + else { + printf(" - Cannot lock\n"); + } + } + else { + printf(" - Cannot realloc\n"); + } + + if (!himem_sys_free(h3)) printf(" - Free failed\n"); + +#if TARGET_MSDOS == 32 + dpmi_free_dos(tmpsel); tmp=NULL; + dpmi_free_dos(msgsel); msg=NULL; +#endif + } + else printf("failed\n"); + + printf("Attempting to alloc 129MB (for writing to): "); + h3 = himem_sys_alloc(129UL * 1024UL); /* NTS: This is in KB, not bytes */ + if (h3 != -1) { + uint32_t ofs; + unsigned int i; + unsigned char tmp[16]; + struct himem_block_info binf; + const char *msg = "Testing 123 hello"; + + printf("ok, handle %u\n",h3); + + if (himem_sys_get_handle_info(h3,&binf)) { + printf("Handle info:\n"); + printf(" Lock count=%u Free handles=%u Size=%luKB\n", + (unsigned int)binf.lock_count, + (unsigned int)binf.free_handles, + (unsigned long)binf.block_length_kb); + } + else { + printf("Cannot get handle info\n"); + } + +#if TARGET_MSDOS == 32 + if (!himem_sys_move(h3,0,0/*conventional memory*/,(unsigned long)(msg),16)) +#else + if (!himem_sys_move(h3,0,0/*conventional memory*/,((unsigned long)FP_SEG(msg) << 4UL) + (unsigned long)FP_OFF(msg),sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i += 2) { + tmp[i+0] = 0x55; + tmp[i+1] = 0xAA; + } + +#if TARGET_MSDOS == 32 + if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) +#else + if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i++) printf("%02x ",tmp[i]); + printf("\n"); + + ofs = himem_sys_lock(h3); + if (ofs != 0UL) { + printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); + if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); + } + else { + printf(" - Cannot lock\n"); + } + + printf("now resizing to 144MB\n"); + if (himem_sys_realloc(h3,144UL*1024UL)) { + if (himem_sys_get_handle_info(h3,&binf)) { + printf("Handle info:\n"); + printf(" Lock count=%u Free handles=%u Size=%luKB\n", + (unsigned int)binf.lock_count, + (unsigned int)binf.free_handles, + (unsigned long)binf.block_length_kb); + } + else { + printf("Cannot get handle info\n"); + } + +#if TARGET_MSDOS == 32 + if (!himem_sys_move(0/*conventional memory*/,(unsigned long)(tmp),h3,0,16)) +#else + if (!himem_sys_move(0/*conventional memory*/,((unsigned long)FP_SEG(tmp) << 4UL) + (unsigned long)FP_OFF(tmp),h3,0,sizeof(tmp))) +#endif + printf("Copy didn't work\n"); + + for (i=0;i < 16;i++) printf("%02x ",tmp[i]); + printf("\n"); + + ofs = himem_sys_lock(h3); + if (ofs != 0UL) { + printf(" - Locked: Physical memory address 0x%08lX\n",(unsigned long)ofs); + if (!himem_sys_unlock(h3)) printf(" - Cannot unlock\n"); + } + else { + printf(" - Cannot lock\n"); + } + } + else { + printf(" - Cannot realloc\n"); + } + + if (!himem_sys_free(h3)) printf(" - Free failed\n"); + } + else printf("failed\n"); + } + else { + printf("HIMEM.SYS not found\n"); + } + + return 0; +} +