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

📄 dos_mem.cpp

📁 djgpp bt878 capture for DOS
💻 CPP
字号:
#include "dos_mem.h"

DOS_MEM::DOS_MEM(DWORD length_in_bytes)
{
   AllocateMem(length_in_bytes);
}

DOS_MEM::DOS_MEM(void)
{
   length = 0;
   address = 0;
   selector = _dos_ds;
}

DOS_MEM::~DOS_MEM(void)
{
   if(length != 0)
   {
      __dpmi_free_dos_memory(selector);
   }
}

void DOS_MEM::AllocateMem(DWORD length_in_bytes)
{
   int segment;

   length = (length_in_bytes + 15) & 0xffff0;
   if((segment = __dpmi_allocate_dos_memory(length >> 4, &selector)) == -1)
   {
      printf("Error allocating DOS memory!\n");
      exit(10);
   }

   address = ((segment << 4) & 0xffff0) + ((segment >> 16) & 0xffff);
}

void DOS_MEM::Set(DWORD value, DWORD offset)
{
   _farpokel(selector, offset, value);
}

void DOS_MEM::Set(WORD value, DWORD offset)
{
   _farpokew(selector, offset, value);
}

void DOS_MEM::Set(BYTE value, DWORD offset)
{
   _farpokeb(selector, offset, value);
}

DWORD DOS_MEM::Get(DWORD offset)
{
    return _farpeekl(selector, offset);
}

DWORD DOS_MEM::GetDWORD(DWORD offset)
{
    return _farpeekl(selector, offset);
}

WORD DOS_MEM::GetWORD(DWORD offset)
{
    return _farpeekw(selector, offset);
}

BYTE DOS_MEM::GetBYTE(DWORD offset)
{
    return _farpeekb(selector, offset);
}

DWORD DOS_MEM::GetDosMemDWORD(int segment, int offset)
{
   int dos_addr;
   
   dos_addr = ((segment&0xffff) << 4) + (offset & 0xffff);

   return _farpeekl(_dos_ds, dos_addr);
}

WORD DOS_MEM::GetDosMemWORD(int segment, int offset)
{
   int dos_addr;
   
   dos_addr = ((segment&0xffff) << 4) + (offset & 0xffff);

   return _farpeekw(_dos_ds, dos_addr);
}

BYTE DOS_MEM::GetDosMemBYTE(int segment, int offset)
{
   int dos_addr;
   
   dos_addr = ((segment&0xffff) << 4) + (offset & 0xffff);

   return _farpeekb(_dos_ds, dos_addr);
}

⌨️ 快捷键说明

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