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

📄 xms.cpp

📁 一个basic语言的编译工具。
💻 CPP
字号:
#include<stdio.h>
#include<dos.h>
#include"type.cpp"

typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;

void far (*HIMEM)();

#ifndef embtype
#define embtype

typedef struct
{ulong bl;
 uint sh;
 ulong sa;
 uint dh;
 ulong da;
}EMB;

EMB emb;
void XMSP()
{
 uint t;union REGS reg;struct SREGS sreg;
 reg.x.ax=0x4310;
 int86x(0x2f,&reg,&reg,&sreg);
 HIMEM=(void (far*)())MK_FP(sreg.es,reg.x.bx);
}

uint XA(uint kb)
{_DX=kb;_AH=9;HIMEM();
 if(_AX!=1)return 0xffff;
 return _DX;
}

uint XKB()
{_AH=8;HIMEM();
 return _AX;
}

void XFREE(uint h)
{_DX=h;_AH=0X0A;HIMEM();}

void XMOV(EMB far *e)
{/*asm push ds;*/
 uint ds;void far (*H)();
 ds=_DS;H=HIMEM;
 _DS=FP_SEG(e);
 _SI=FP_OFF(e);
 _AH=0X0B;
 H();
 _DS=ds;
 /*asm pop ds;*/
}

uchar XMSI()
{union REGS reg,r;
 reg.h.ah=0x43;reg.h.al=0;
 int86(0x2f,&reg,&r);
 if(r.h.al!=0x80)return 1;
 XMSP();
 return 0;
}


uint READ(uint h,uchar far *p,uint s)
{union REGS r;struct SREGS sr;
 r.h.ah=0x3f;
 r.x.bx=h;
 r.x.cx=s;
 sr.ds=FP_SEG(p);
 r.x.dx=FP_OFF(p);
 int86x(0x21,&r,&r,&sr);
 if(r.x.cflag)return -1;
 return r.x.ax;
}

class XMS
{
 public:
  uint xh;ulong xl;
  XMS::XMS(uint kb);
  void XMS::X2B(ulong xd,uchar huge*b,ulong bl);
  void XMS::B2X(uchar huge*b,ulong xd,ulong bl);
  XMS::~XMS(){XFREE(xh);}
};

XMS::XMS(uint kb)
{
 if(XMSI()){ERR(20);return;}
 xl=kb*1024;
 if((xh=XA(kb))==0xffff){ERR(21);return;}
}

void XMS::X2B(ulong xd,uchar huge*b,ulong bl)
{
 emb.bl=bl;emb.sh=xh;emb.sa=xd;
 emb.dh=0;emb.da=(ulong)b;
 XMOV(&emb);
}

void XMS::B2X(uchar huge*b,ulong xd,ulong bl)
{
 emb.bl=bl;emb.dh=xh;emb.da=xd;
 emb.sh=0;emb.sa=(ulong)b;
 XMOV(&emb);
}

#endif

⌨️ 快捷键说明

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