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

📄 mem.h

📁 freedos32的源代码
💻 H
字号:
#ifndef __FD32_DRENV_MEM_H#define __FD32_DRENV_MEM_H#include<ll/i386/hw-data.h>#include<kmem.h>#define LOWMEM_ADDR  DWORD /* A physical buffer */#define DOS_SELECTOR 0     /* Ignore it in flat address space */extern inline LOWMEM_ADDR fd32_dosmem_get(unsigned size, WORD *rm_segment, WORD *rm_offset){  LOWMEM_ADDR phys_addr;  phys_addr   = (LOWMEM_ADDR) dosmem_get(size);  *rm_segment = phys_addr >> 4;  *rm_offset  = phys_addr & 0x0F;  return phys_addr;}extern inline void fd32_dosmem_free(LOWMEM_ADDR phys_addr, unsigned size){  dosmem_free(phys_addr, size);}extern inline LOWMEM_ADDR fd32_dmamem_get(unsigned size, WORD *rm_segment, WORD *rm_offset){  DWORD       begin, end;  LOWMEM_ADDR phys_addr;  /* 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. */  phys_addr = (LOWMEM_ADDR) dosmem_get(size * 2);  if (phys_addr == 0) return 0; /* Failed to allocate DOS memory */  begin = phys_addr;  end   = begin + size;  if ((end & 0xFFFF) < (begin & 0xFFFF)) begin += size;  *rm_segment = (WORD) (begin >> 4);  *rm_offset  = (WORD) (begin & 0x000F);  return phys_addr;}extern inline void fd32_dmamem_free(LOWMEM_ADDR phys_addr, unsigned size){  /* We actually allocated a size*2 buffer */  dosmem_free(phys_addr, size * 2);}extern inline void fd32_memcpy_from_lowmem(void *destination, LOWMEM_ADDR source, DWORD source_offset, int size){  memcpy(destination, ((BYTE *)source) + source_offset, size);}extern inline void fd32_memcpy_to_lowmem(LOWMEM_ADDR destination, DWORD destination_offset, const void *source, int size){  memcpy(((BYTE *)destination) + destination_offset, source, size);}#endif /* #ifndef __FD32_DRENV_MEM_H */

⌨️ 快捷键说明

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