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

📄 vbe.h

📁 这个版本修正了已知的Bug,同时添加了部分函数
💻 H
📖 第 1 页 / 共 2 页
字号:
#include<dos.h>
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>

#ifndef _VBE_H_INCLUDED
#define _VBE_H_INCLUDED
#if !defined(_ENABLE_AUTODEPEND)
  #pragma read_only_file;
#endif
#ifdef __cplusplus

extern "C" {
#endif

#define PALETTE_REGISTER_RD  0x3c7
#define PALETTE_MASK         0x3c6
#define PALETTE_DATA         0x3c9


#ifndef MIN
#define MIN(x,y)     (((x) < (y)) ? (x) : (y))
#define MAX(x,y)     (((x) > (y)) ? (x) : (y))
#define MID(x,y,z)   MAX((x), MIN((y), (z)))
#endif

#ifndef ABS
#define ABS(x)       (((x) >= 0) ? (x) : (-(x)))
#endif

#ifndef SGN
#define SGN(x)       (((x) >= 0) ? 1 : -1)
#endif

#define v320x200x256     0x13
#define v640x480x256     0x101
#define v800x600x256     0x103
#define v1024x768x256    0x105

#define VESA_FUNC       0x4f00
#define VESA_SUCCESS    0x004f

#define VESA_VERSION(major, minor)  ((((major)&0xff)<<8) | ((minor)&0xff))
#define VESA_VERSION_MAJOR(vers)    (((vers)>>8) & 0xff)
#define VESA_VERSION_MINOR(vers)    ((vers) & 0xff)

#define VESA_VGA_INFO   0     //  取 显示卡信息
#define VESA_MODE_INFO  1     //  取 SVGA模式信息
#define VESA_SET_MODE   2     //  置 显示模式
#define VESA_GET_MODE   3     //  取 当前显示模式
#define MODE_SUPPORTED  1     //  硬件支持该模式

//定义显示模式 640x400x256
#define     waitVR()        while(!(inp(0x3da)&0x08))

typedef struct                //  VESA兼容卡硬件信息结构
{
    unsigned char   VESASignature[4];   // = "VESA"
    unsigned short  VESAVersion;        // VESA 版本号
    unsigned short  OEMStringOff;       // 指向OEM串的实模式地址(偏移量)
    unsigned short  OEMStringSeg;       // 指向OEM串的实模式地址(段)
    unsigned char   Capabilities[4];    // 显示卡特性
    unsigned short  VideoModePtrOff;    // 指向支持SVGA模式的实模式地址
    unsigned short  VideoModePtrSeg;    // 指向支持SVGA模式的实模式地址
    unsigned short  VRAMSize;           // 视频内存大小 (单位: 64K)
    unsigned char   VesaResever[236];   // 保留
} VBEHardWare;

typedef struct                //  VESA兼容卡模式信息结构
{
    unsigned short  ModeAttributes;     // 模式属性
    unsigned char   WinAAttributes;     // 存储窗 A 属性
    unsigned char   WinBAttributes;     // 存储窗 B 属性
    unsigned short  WinGranularity;     // 窗口移动最小单位 (单位: KB)
    unsigned short  WinSize;            // 存储窗大小 (单位: KB)
    unsigned short  WinASegment;        // 存储窗 A 起始段地址
    unsigned short  WinBSegment;        // 存储窗 B 起始段地址
    void           (*WinFuncPtr)();    // 指向存储窗控制函数
    unsigned short bytesPerScanLine;   // 逻辑扫描线宽度  (单位: unsigned char)
    unsigned short XResolution;        // 水平点分辨率(图形:点, 文字:字符)
    unsigned short YResolution;        // 垂直点分辨率
    unsigned char  XCharSize;          // 字符宽度
    unsigned char  YCharSize;          // 字符高度
    unsigned char  NumberOfPlanes;     // 显示内存的颜色平面数
    unsigned char  BitsPerPixel;       // 每一像素占多少位
    unsigned char  NumberOfBanks;      // 交错对应模式下, 扫描线的分组数
    unsigned char  MemoryModel;        // 视频存取模式
    unsigned char  BankSize;           // 扫描线分组大小
    unsigned char  NumImagePages;      // 该模式提供多少显示页
    unsigned char  Reserved[1];        // 保留
    unsigned char  RedMaskSize;        // 红色所占位数
    unsigned char  RedMaskPos;         // 红色由第几位开始
    unsigned char  GreenMaskSize;      // 绿色所占位数
    unsigned char  GreenMaskPos;       // 绿色由第几位开始
    unsigned char  BlueMaskSize;       // 兰色所占位数
    unsigned char  BlueMaskPos;        // 兰色由第几位开始
    unsigned char  ReservedMaskSize;   // 未用部分所占位数
    unsigned char  ReservedMaskPos;
    unsigned char  DirectScreenMode;   // Hi/True Color 模式的特性
    unsigned long  PhysBasePtr;        //  32位线形缓存的物理地址
    unsigned long  OffScreenMemOffset; //  指向屏幕显示部分在缓存中的偏移量
    unsigned short OffScreenMemSize;   //  以1K为单位的屏幕显示部分的缓存大小
    unsigned char  ModeResever[206];   //  保留
} VBEModeInfo;

typedef struct{
unsigned char manufacturer;
unsigned char verison;
unsigned char encoding;
unsigned char bitsperpixel;
short xmin,ymin;
short xmax,ymax;
short hers,vers;
unsigned char palette[48];
unsigned char reserved;
unsigned char colorplane;
short width;
short palettetype;
unsigned char filer[58];
}PCXHEAD;

typedef struct   bmphead
{
  unsigned short signal;            //标志位为BM, 即0x4d42
  unsigned short bfsize;       //文件长度
  unsigned short bfresevered1;      //保留
  unsigned short bfresevered2;      //保留
  unsigned short cc;                //保留
  unsigned short bfoff;        //
  unsigned long  aa;               //保留
  unsigned short dd;              //保留
  unsigned short biwidth;      //图像宽度
  unsigned short bb;            //保留
  unsigned short biheight;     //图像高度
  unsigned short planes;            //颜色平面数
  unsigned short bitcount;          //颜色位数
  unsigned int compression;  //压缩方式 0-不压缩
  unsigned int sizeimage;
  int xpels;
  int ypels;
  unsigned int clrused;
  unsigned int clrimport;
}BMPHEAD;

typedef struct
{unsigned char r;
 unsigned char g;
 unsigned char b;
}PALETTE[256],RGB,PALLETE[256];


//SVGA信息和变量
struct DIRECTX
{
short           x,y;
short           cr,cb;
short           ct,cl;
short           w,h;
unsigned char   clip;
unsigned char   MskCol;
unsigned char   Alph;
unsigned char   *dat;
float           bitx,bity;
unsigned char   *line[];
};

#define BITMAP DIRECTX

typedef struct Mouse
{int x,y;
 int oldx,oldy;
 int msg;
 char event,click_left,
      click_right;
 unsigned char mouse_shap[16][16];
}Mouse;

typedef struct {
    unsigned long EDI;
    unsigned long ESI;
    unsigned long EBP;
    unsigned long Reserved;
    unsigned long EBX;
    unsigned long EDX;
    unsigned long ECX;
    unsigned long EAX;
    unsigned short flags,ES,DS,FS,GS,IP,CS,SP,SS;
}RMInfo;

//256色基色
int BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,YELLOW;


struct Color_MAP
{unsigned char data[256][256];
}Color_MAP;

typedef struct Voc
{int size;
 int same;
 char *dat;
}Voc;

#define MIDI_LAYERS   4
#define MIDI_TRACKS  32
#define MIDI_VOICES           32       /* actual drivers may not be */

#define MIDI_AUTO              0
#define MIDI_ADLIB             1
#define MIDI_DIGI              2
#define MIDI_MPU401            3


typedef struct MIDI                    /* a midi file */
{
   int divisions;                      /* number of ticks per quarter note */
   struct {
      unsigned char *data;             /* MIDI message stream */
      int len;                         /* length of the track data */
   } track[MIDI_TRACKS];
} MIDI;

////////////////////////////////////////////////////////////////////////////
char   *MidiMapFile[2]={ "","" };

typedef struct MIDI_DRIVER             /* driver for playing midi music */
{
   char *name;                         /* driver name */
   char *desc;                         /* description string */
   int  voices;                        /* available voices */
   int  basevoice;                     /* voice number offset */
   int  max_voices;                    /* maximum voices we can support */
   int  def_voices;                    /* default number of voices to use */
   int  xmin, xmax;                    /* reserved voice range */
   int  (*detect)();                      /* setup routines */
   int  (*init)(int voices);
   void (*exit)();
   int  (*mixer_volume)(int volume);
   void (*raw_midi)(unsigned char data);    /* raw MIDI output to MPU-401, etc. */
   int  (*load_patches)(char *patches, char *drums);    /* dynamic patch loading routines */
   void (*adjust_patches)(char *patches, char *drums);
   void (*key_on)(int inst, int note, int bend, int vol, int pan);    /* note control functions */
   void (*key_off)(int voice);

⌨️ 快捷键说明

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