📄 dos_mem.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 + -