⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem.h

📁 freedos32的源代码
💻 H
字号:
#ifndef __FD32_DRENV_MEM_H#define __FD32_DRENV_MEM_H#include<sys/movedata.h>#include<sys/segments.h>#include<go32.h> /* for _dos_ds */#include<dpmi.h>#define LOWMEM_ADDR  int /* A protected mode selector */#define DOS_SELECTOR _dos_dsextern inline LOWMEM_ADDR fd32_dosmem_get(unsigned size, WORD *rm_segment, WORD *rm_offset){  int         seg;  LOWMEM_ADDR buf_selector;  seg = __dpmi_allocate_dos_memory((size + 15) >> 4, &buf_selector);  if (seg < 0) return 0; /* Failed to allocate DOS memory */  *rm_segment = (WORD) seg;  *rm_offset  = 0;  return buf_selector;}extern inline void fd32_dosmem_free(LOWMEM_ADDR buf_selector, unsigned size){  __dpmi_free_dos_memory(buf_selector); }extern inline LOWMEM_ADDR fd32_dmamem_get(unsigned size, WORD *rm_segment, WORD *rm_offset){  DWORD       begin, end;  int         seg;  LOWMEM_ADDR buf_selector;  /* Allocate size*2 bytes, so that if we cross a 64 KiB boundary,  */  /* we add size to the base in order to get a non-crossing buffer. */  seg = __dpmi_allocate_dos_memory((size * 2 + 15) >> 4, &buf_selector);  if (seg < 0) return 0; /* Failed to allocate DOS memory */  begin = seg << 4;  end   = begin + size;  if ((end & 0xFFFF) < (begin & 0xFFFF)) begin += size;  *rm_segment = (WORD) (begin >> 4);  *rm_offset  = (WORD) (begin & 0x000F);  return buf_selector;}#define fd32_dmamem_free fd32_dosmem_freeextern inline void fd32_memcpy_from_lowmem(void *destination, LOWMEM_ADDR source, DWORD source_offset, unsigned size){  movedata(source, source_offset, _my_ds(), (unsigned) destination, size);}extern inline void fd32_memcpy_to_lowmem(LOWMEM_ADDR destination, DWORD destination_offset, const void *source, unsigned size){  movedata(_my_ds(), (DWORD) source, (unsigned) destination, destination_offset, size);}#endif /* #ifndef __FD32_DRENV_MEM_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -