Ejemplo n.º 1
0
int dpmi_init(int verbose)
{
	union REGS regs;
	struct SREGS sregs;
	mem_data mi;

	dpmi_dos_memory = dpmi_find_dos_memory();
	
	dpmi_dos_buffer = dpmi_real_malloc( 1024, dpmi_dos_buffer);
	if (!dpmi_dos_buffer) {
		dpmi_dos_selector = 0;
		printf( "Error allocating 1K of DOS memory\n" );
		exit(1);
	}
	atexit(dpmi_close);

		if (verbose) printf( "MemInfo failed!" );
		dpmi_physical_memory = 16*1024*1024;		// Assume 16 MB
		dpmi_available_memory = 16*1024*1024;		// Assume 16 MB
	
	return 1;
}
Ejemplo n.º 2
0
int dpmi_init(int verbose)
{
    union REGS regs;
    struct SREGS sregs;
    mem_data mi;

    dpmi_dos_memory = dpmi_find_dos_memory();

    dpmi_dos_buffer = dpmi_real_malloc( 1024, &dpmi_dos_selector);
    if (!dpmi_dos_buffer) {
        dpmi_dos_selector = 0;
        printf( "Error allocating 1K of DOS memory\n" );
        exit(1);
    }
    atexit(dpmi_close);

    // Check dpmi
    memset(&regs,0,sizeof(regs));
    regs.x.eax = 0x400;							// DPMI Get Memory Info
    int386( 0x31, &regs, &regs );
    if (!regs.w.cflag)	{
        if (verbose) printf( "V%d.%d, CPU:%d, VMM:", regs.h.ah, regs.h.al, regs.h.cl );
        if (regs.w.bx & 4)	{
            if (verbose) printf( "1" );
            dpmi_virtual_memory = 1;
        } else {
            if (verbose) printf( "0" );
        }
    }

    //--------- Find available memory
    memset(&regs,0,sizeof(regs));
    memset(&sregs,0,sizeof(sregs));
    regs.x.eax = 0x500;							// DPMI Get Memory Info
    sregs.es = FP_SEG(&mi);
    regs.x.edi = FP_OFF(&mi);
    int386x( 0x31, &regs, &regs, &sregs );
    if (!regs.w.cflag)	{
        if (verbose) printf( ", P:%dK", mi.largest_lockable_pages*4 );
        if (dpmi_virtual_memory)
            if (verbose) printf( ", A:%dK", mi.largest_block_bytes/1024 );
        //dpmi_physical_memory = mi.largest_lockable_pages*4096;
        //dpmi_available_memory = mi.largest_block_bytes;
        dpmi_physical_memory = mi.total_physical_pages*4096;
        dpmi_available_memory = mi.total_pages * 4096;
    } else {
        if (verbose) printf( "MemInfo failed!" );
        dpmi_physical_memory = 16*1024*1024;		// Assume 16 MB
        dpmi_available_memory = 16*1024*1024;		// Assume 16 MB
    }

#ifdef __WATCOMC__
    if (!dpmi_lock_region( _GETDS, 4096 ))	{
        printf( "Error locking _GETDS" );
        exit(1);
    }
    if (!dpmi_lock_region( cstart_, 4096 )) {
        printf( "Error locking cstart" );
        exit(1);
    }
    if (!dpmi_lock_region( _chain_intr, 4096 ))	{
        printf( "Error locking _chain_intr" );
        exit(1);
    }
#endif
    return 1;
}