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

📄 grengine.cpp

📁 SNES game emulator. C and asm files.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*  GrEngine.cpp - Draws the emulated screen, and various GUI elements.
	See Graphics.hpp for more info, if there is any...
*/

#include "Common.hpp"
#include <STDARG.H>
#include "GrEngine.hpp"
#include "FileMan.hpp"
#include "GUI.hpp"
#include "CPU.hpp"
#include "SPC700.hpp"

boolean fpucopy = false;

int vidmode = 0;
	// Video modes:
	// 0=Text (160x25)
	// 1=Chained mode Q (256x256)
	// 2=Chained Mode 13H (320x200)
	// 3=Original Mode X (320x240)
	// 4=GUI Normal (360x240)
	// 5=GUI Tall (360x360)
int xres = 160, yres = 25;

byte vs [144000]; // Virtual screen, copied to real screen every frame.
	// While the SNES is being emulated the size (xres/yres) is always 256x256 no matter what the video mode is.
byte snesscreen [65536];
	// SNES virtual screen... copied from normal virtual screen when GUI is entered so screen shot is saved.
boolean waitretrace = false, leadingedge = false;
byte curcolor = 15;

unsigned char width8 [128] = {
	7, 7, 7, 6, 6, 7, 7, 7, // 0-7
	7, 8, 7, 7, 7, 7, 7, 7, // 8-15
	5, 5, 6, 7, 7, 7, 7, 7, // 16-23
	6, 6, 7, 7, 7, 8, 8, 8, // 24-31
	4, 2, 3, 6, 6, 5, 6, 3, // 32-39
	3, 3, 6, 6, 3, 5, 2, 5, // 40-47
	5, 4, 5, 4, 5, 5, 5, 4, // 48-55
	5, 5, 2, 3, 5, 4, 5, 5, // 56-63
	6, 6, 5, 5, 5, 5, 5, 6, // 64-71
	5, 4, 5, 5, 5, 8, 6, 6, // 72
	5, 6, 5, 5, 6, 6, 6, 7, //
	6, 6, 5, 3, 5, 3, 4, 4, //
	3, 5, 5, 4, 5, 5, 4, 5, //
	5, 2, 3, 4, 2, 6, 5, 5, //
	5, 6, 5, 5, 4, 5, 6, 6, // 112-119
	5, 5, 5, 4, 2, 4, 6, 6, // 120-127
};

unsigned char font8 [128] [8] = {
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0
	{ 0x78, 0x84, 0xB4, 0xA4, 0xB4, 0x84, 0x78, 0x00 }, // 1
	{ 0x7C, 0x82, 0xB2, 0xAA, 0xB2, 0xAA, 0x82, 0x7C }, // 2
	{ 0x50, 0xF8, 0xF8, 0xF8, 0x70, 0x20, 0x00, 0x00 }, // 3
	{ 0x20, 0x70, 0xF8, 0xF8, 0x70, 0x20, 0x00, 0x00 }, // 4
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 5
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 6
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 7
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 8
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 9
	{ 0x00, 0x24, 0x64, 0xFC, 0x60, 0x20, 0x00, 0x00 }, // 10
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 11
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 12
	{ 0x00, 0x24, 0x64, 0xFC, 0x60, 0x20, 0x00, 0x00 }, // 13
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 14
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 15
	{ 0x80, 0xC0, 0xE0, 0xF0, 0xE0, 0xC0, 0x80, 0x00 }, // 16
	{ 0x10, 0x30, 0x70, 0xF0, 0x70, 0x30, 0x10, 0x00 }, // 17
	{ 0x20, 0x70, 0xF8, 0x20, 0xF8, 0x70, 0x20, 0x00 }, // 18
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 19
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 20
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 21
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 22
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 23
	{ 0x20, 0x70, 0xF8, 0x20, 0x20, 0x20, 0x00, 0x00 }, // 24
	{ 0x20, 0x20, 0x20, 0xF8, 0x70, 0x20, 0x00, 0x00 }, // 25
	{ 0x00, 0x10, 0x18, 0xFC, 0x18, 0x10, 0x00, 0x00 }, // 26
	{ 0x00, 0x20, 0x60, 0xFC, 0x60, 0x20, 0x00, 0x00 }, // 27
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 28
	{ 0x00, 0x28, 0x6C, 0xFE, 0x6C, 0x28, 0x00, 0x00 }, // 29
	{ 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x00, 0x00 }, // 30
	{ 0x00, 0x00, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00 }, // 31
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 32
	{ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00 }, // 33
	{ 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 34
	{ 0x00, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x00, 0x00 }, // 35
	{ 0x70, 0xA8, 0xA0, 0x70, 0x28, 0xA8, 0x70, 0x00 }, // 36
	{ 0x00, 0x00, 0x90, 0x20, 0x40, 0x90, 0x00, 0x00 }, // 37
	{ 0x00, 0x20, 0x20, 0xF8, 0xA0, 0x60, 0x00, 0x00 }, // 38
	{ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 39
	{ 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00 }, // 40
	{ 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00 },
	{ 0x00, 0xA8, 0x70, 0xF8, 0x70, 0xA8, 0x00, 0x00 },
	{ 0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00 },
	{ 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00 },
	{ 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00 },
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00 },
	{ 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00 },
	{ 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00 },
	{ 0x40, 0xC0, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00 },
	{ 0x60, 0x90, 0x10, 0x20, 0x40, 0xF0, 0x00, 0x00 },
	{ 0xC0, 0x20, 0x60, 0x20, 0x20, 0xC0, 0x00, 0x00 },
	{ 0x20, 0xA0, 0xA0, 0xF0, 0x20, 0x20, 0x00, 0x00 },
	{ 0xF0, 0x80, 0xE0, 0x10, 0x10, 0xE0, 0x00, 0x00 },
	{ 0x70, 0x80, 0xE0, 0x90, 0x90, 0x60, 0x00, 0x00 },
	{ 0xE0, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00 },
	{ 0x60, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00 },
	{ 0x60, 0x90, 0x70, 0x10, 0x90, 0x60, 0x00, 0x00 },
	{ 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 },
	{ 0x00, 0x40, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00 },
	{ 0x10, 0x20, 0x40, 0x80, 0x40, 0x20, 0x10, 0x00 },
	{ 0x00, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x00, 0x00 },
	{ 0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80, 0x00 },
	{ 0x40, 0xA0, 0x10, 0x20, 0x40, 0x00, 0x40, 0x00 },
	{ 0x70, 0x88, 0xA8, 0xB8, 0x80, 0x70, 0x00, 0x00 },
	{ 0x20, 0x50, 0x88, 0xF8, 0x88, 0x88, 0x00, 0x00 },
	{ 0xE0, 0x90, 0xE0, 0x90, 0x90, 0xE0, 0x00, 0x00 },
	{ 0x60, 0x90, 0x80, 0x80, 0x90, 0x60, 0x00, 0x00 },
	{ 0xE0, 0x90, 0x90, 0x90, 0x90, 0xE0, 0x00, 0x00 },
	{ 0xF0, 0x80, 0xE0, 0x80, 0x80, 0xF0, 0x00, 0x00 },
	{ 0xF0, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x00, 0x00 },
	{ 0x70, 0x80, 0x98, 0x88, 0x88, 0x70, 0x00, 0x00 },
	{ 0x90, 0x90, 0xF0, 0x90, 0x90, 0x90, 0x00, 0x00 },
	{ 0xE0, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00 },
	{ 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00 },
	{ 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x90, 0x00, 0x00 },
	{ 0x80, 0x80, 0x80, 0x80, 0x90, 0xF0, 0x00, 0x00 },
	{ 0xCC, 0xCC, 0xB4, 0xB4, 0x84, 0x84, 0x00, 0x00 },
	{ 0xC8, 0xC8, 0xA8, 0xA8, 0x98, 0x98, 0x00, 0x00 },
	{ 0x70, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00 },
	{ 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80, 0x00, 0x00 },
	{ 0x70, 0x88, 0x88, 0xA8, 0x98, 0x70, 0x08, 0x00 },
	{ 0xE0, 0x90, 0x90, 0xE0, 0xA0, 0x90, 0x00, 0x00 },
	{ 0x70, 0x80, 0x60, 0x10, 0x90, 0x60, 0x00, 0x00 },
	{ 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00 },
	{ 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00 },
	{ 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x00 },
	{ 0x84, 0x84, 0x84, 0xB4, 0xB4, 0x48, 0x00, 0x00 },
	{ 0x88, 0x50, 0x20, 0x50, 0x50, 0x88, 0x00, 0x00 },
	{ 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00, 0x00 },
	{ 0xF0, 0x10, 0x20, 0x40, 0x80, 0xF0, 0x00, 0x00 },
	{ 0xC0, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x00, 0x00 },
	{ 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x00, 0x00 },
	{ 0xC0, 0x40, 0x40, 0x40, 0x40, 0xC0, 0x00, 0x00 },
	{ 0x40, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00 },
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00 },
	{ 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00 },
	{ 0x00, 0x60, 0x10, 0x70, 0x90, 0x68, 0x00, 0x00 },
	{ 0x80, 0x80, 0xE0, 0x90, 0x90, 0xE0, 0x00, 0x00 },
	{ 0x00, 0x00, 0x60, 0x80, 0x80, 0x60, 0x00, 0x00 },
	{ 0x10, 0x10, 0x70, 0x90, 0x90, 0x70, 0x00, 0x00 },
	{ 0x00, 0x60, 0x90, 0xE0, 0x80, 0x70, 0x00, 0x00 },
	{ 0x20, 0x40, 0xE0, 0x40, 0x40, 0x40, 0x00, 0x00 },
	{ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x10, 0xE0 },
	{ 0x80, 0x80, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00 },
	{ 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00 },
	{ 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x80, 0x00 },
	{ 0x80, 0x80, 0xA0, 0xC0, 0xA0, 0xA0, 0x00, 0x00 }, // 107 'k' 10000000
	{ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00 }, // 108  l   10100000
	{ 0x00, 0x00, 0xF0, 0xA8, 0xA8, 0x88, 0x00, 0x00 }, // 109  m   10100000
	{ 0x00, 0x00, 0xE0, 0x90, 0x90, 0x90, 0x00, 0x00 }, // 110  n   11000000
	{ 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00 }, // 111  o   10100000
	{ 0x00, 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x80, 0x80 }, // 112  p   10100000
	{ 0x00, 0x00, 0x70, 0x90, 0x90, 0x70, 0x18, 0x10 }, // 113  q
	{ 0x00, 0x00, 0xB0, 0xC0, 0x80, 0x80, 0x00, 0x00 }, // 114 r
	{ 0x00, 0x70, 0x80, 0x60, 0x10, 0xE0, 0x00, 0x00 }, // 115 s
	{ 0x40, 0x40, 0xE0, 0x40, 0x40, 0x20, 0x00, 0x00 },
	{ 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x00, 0x00 },
	{ 0x00, 0x00, 0x88, 0x88, 0x50, 0x20, 0x00, 0x00 },
	{ 0x00, 0x00, 0x88, 0xA8, 0xA8, 0x50, 0x00, 0x00 }, // 119 w
	{ 0x00, 0x00, 0x90, 0x60, 0x60, 0x90, 0x00, 0x00 }, // 120 x
	{ 0x00, 0x00, 0x90, 0x90, 0x90, 0x70, 0x10, 0xE0 }, // 121
	{ 0x00, 0xF0, 0x10, 0x60, 0x80, 0xF0, 0x00, 0x00 }, // 122
	{ 0x20, 0x40, 0x40, 0x80, 0x40, 0x40, 0x20, 0x00 }, // 123
	{ 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00 }, // 124
	{ 0x80, 0x40, 0x40, 0x20, 0x40, 0x40, 0x80, 0x00 }, // 125
	{ 0x00, 0x48, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 126
	{ 0x00, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x00, 0x00 }, // 127
};

unsigned char width10 [128] = {
	2, 8, 8, 8, 8, 7, 7, 7, // 0-7
	7, 8, 7, 7, 7, 7, 7, 7, // 8-15
	6, 6, 6, 7, 7, 7, 7, 8, // 16-23
	8, 8, 8, 8, 7, 8, 8, 8, // 24-31
	5, 3, 6, 8, 6, 8, 6, 3, // 32-39
	5, 5, 6, 6, 4, 6, 3, 7, // 40-47
	6, 5, 6, 6, 6, 6, 6, 6, // 48-55
	6, 6, 3, 4, 6, 6, 6, 6, // 56-63
	7, 6, 6, 6, 6, 6, 6, 7, // 64-71
	6, 5, 6, 6, 6, 8, 7, 6, // 72-79
	6, 7, 6, 6, 7, 6, 6, 8, // 80-87
	7, 8, 7, 4, 7, 4, 6, 6, // 88-95
	4, 6, 6, 6, 6, 6, 5, 6, // 96-103
	6, 3, 5, 6, 4, 8, 6, 6, // 104-111
	6, 7, 6, 6, 5, 6, 7, 8, // 112-119
	6, 6, 6, 5, 3, 5, 7, 8, // 120-127
};

unsigned char font10 [128] [10] = {
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0
	{ 0x3C, 0x42, 0x99, 0xA5, 0xA1, 0xA5, 0x99, 0x42, 0x3C, 0x00 }, // 1
	{ 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA9, 0xA5, 0x42, 0x3C, 0x00 }, // 2
	{ 0x00, 0x6C, 0xFE, 0xFE, 0x7C, 0x7C, 0x38, 0x10, 0x00, 0x00 }, // 3
	{ 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00 }, // 4
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 5
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 6
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 7
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 8
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 9
	{ 0x00, 0x00, 0x00, 0x24, 0x64, 0xFC, 0x60, 0x20, 0x00, 0x00 }, // 10
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 11
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 12
	{ 0x00, 0x00, 0x00, 0x24, 0x64, 0xFC, 0x60, 0x20, 0x00, 0x00 }, // 13
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 14
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 15
	{ 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00 }, // 16
	{ 0x08, 0x18, 0x38, 0x78, 0xF8, 0x78, 0x38, 0x18, 0x08, 0x00 }, // 17
	{ 0x20, 0x70, 0xF8, 0x20, 0x20, 0xF8, 0x70, 0x20, 0x00, 0x00 }, // 18
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 19
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 20
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 21
	{ 0xFE, 0xAA, 0x54, 0xAA, 0x54, 0xAA, 0x54, 0xFE, 0x00, 0x00 }, // 22
	{ 0xAB, 0xD5, 0xAB, 0xD5, 0xAB, 0xD5, 0xAB, 0xD5, 0xAB, 0xD5 }, // 23
	{ 0x10, 0x38, 0x7C, 0xFE, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00 }, // 24
	{ 0x38, 0x38, 0x38, 0x38, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00 }, // 25
	{ 0x00, 0x10, 0x18, 0xFC, 0xFE, 0xFC, 0x18, 0x10, 0x00, 0x00 }, // 26
	{ 0x00, 0x10, 0x30, 0x7E, 0xFE, 0x7E, 0x30, 0x10, 0x00, 0x00 }, // 27
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 28
	{ 0x00, 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, 0x00 }, // 29
	{ 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x00, 0x00, 0x00, 0x00 }, // 30
	{ 0x00, 0x00, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 }, // 31
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 32
	{ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 0x00 }, // 33
	{ 0xD8, 0xD8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 34
	{ 0x00, 0x1B, 0x7F, 0x36, 0x36, 0xFF, 0x6C, 0x00, 0x00, 0x00 }, // 35
	{ 0x20, 0x70, 0xA8, 0xA0, 0x70, 0x28, 0xA8, 0x70, 0x20, 0x00 }, // 36
	{ 0x00, 0x43, 0xA6, 0x4C, 0x18, 0x32, 0x65, 0xC2, 0x00, 0x00 }, // 37
	{ 0x20, 0x50, 0x20, 0x68, 0x68, 0x90, 0x90, 0x68, 0x00, 0x00 }, // 38
	{ 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 39
	{ 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0x00 }, // 40
	{ 0xC0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 0x00 }, // 41
	{ 0x00, 0x00, 0xA8, 0x70, 0xF8, 0x70, 0xA8, 0x00, 0x00, 0x00 }, // 42
	{ 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 0x00 }, // 43
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00 }, // 44
	{ 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 45
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00 }, // 46
	{ 0x0C, 0x0C, 0x18, 0x30, 0x30, 0x60, 0xC0, 0xC0, 0x00, 0x00 }, // 47
	{ 0x70, 0xD8, 0x98, 0xA8, 0xA8, 0xC8, 0xD8, 0x70, 0x00, 0x00 }, // 48
	{ 0x60, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00 }, // 49
	{ 0xF0, 0x98, 0x18, 0x30, 0x60, 0xC0, 0xC8, 0xF8, 0x00, 0x00 }, // 50
	{ 0x70, 0xD8, 0x18, 0x30, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00 }, // 51
	{ 0x10, 0x30, 0x70, 0xD0, 0xF8, 0x10, 0x10, 0x10, 0x00, 0x00 }, // 52
	{ 0xF8, 0xC8, 0xC0, 0xF0, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00 }, // 53
	{ 0x70, 0xD8, 0xC0, 0xF0, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 54
	{ 0xF8, 0xD8, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00 }, // 55
	{ 0x70, 0xD8, 0xD8, 0x70, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 56
	{ 0x70, 0xD8, 0xD8, 0x78, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00 }, // 57
	{ 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00 }, // 58
	{ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00 }, // 59
	{ 0x00, 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00 }, // 60
	{ 0x00, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00 }, // 61
	{ 0x00, 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x00 }, // 62
	{ 0x70, 0xD8, 0x88, 0x18, 0x30, 0x30, 0x00, 0x30, 0x00, 0x00 }, // 63
	{ 0x78, 0x84, 0xB4, 0xB4, 0xB4, 0x9C, 0xC0, 0x7C, 0x00, 0x00 }, // 64
	{ 0x70, 0xD8, 0xD8, 0xD8, 0xF8, 0xD8, 0xD8, 0xD8, 0x00, 0x00 }, // 65
	{ 0xF0, 0xD8, 0xD8, 0xF0, 0xD8, 0xD8, 0xD8, 0xF0, 0x00, 0x00 }, // 66
	{ 0x70, 0xD8, 0xC0, 0xC0, 0xC0, 0xC0, 0xD8, 0x70, 0x00, 0x00 }, // 67
	{ 0xE0, 0xF0, 0xD8, 0xD8, 0xD8, 0xD8, 0xF0, 0xE0, 0x00, 0x00 }, // 68
	{ 0xF8, 0xD8, 0xC0, 0xF0, 0xC0, 0xC0, 0xD8, 0xF8, 0x00, 0x00 }, // 69
	{ 0xF8, 0xD8, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00 }, // 70
	{ 0x78, 0xCC, 0xC0, 0xC0, 0xDC, 0xCC, 0xCC, 0x78, 0x00, 0x00 }, // 71
	{ 0xD8, 0xD8, 0xD8, 0xF8, 0xD8, 0xD8, 0xD8, 0xD8, 0x00, 0x00 }, // 72
	{ 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00 }, // 73
	{ 0x38, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 74
	{ 0xD8, 0xD8, 0xF0, 0xE0, 0xF0, 0xD8, 0xD8, 0xD8, 0x00, 0x00 }, // 75
	{ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xD8, 0xF8, 0x00, 0x00 }, // 76
	{ 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00 }, // 77
	{ 0x8C, 0xCC, 0xEC, 0xEC, 0xDC, 0xDC, 0xCC, 0xC4, 0x00, 0x00 }, // 78
	{ 0x70, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 79
	{ 0xF0, 0xD8, 0xD8, 0xD8, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x00 }, // 80
	{ 0x30, 0x78, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x34, 0x00, 0x00 }, // 81
	{ 0xF0, 0xD8, 0xD8, 0xF0, 0xE0, 0xF0, 0xD8, 0xD8, 0x00, 0x00 }, // 82
	{ 0x70, 0xD8, 0xC0, 0x70, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00 }, // 83
	{ 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00 }, // 84
	{ 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 85
	{ 0xD8, 0xD8, 0xD8, 0xD8, 0xF8, 0xF8, 0x70, 0x20, 0x00, 0x00 }, // 86
	{ 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, 0x00 }, // 87
	{ 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x78, 0xCC, 0xCC, 0x00, 0x00 }, // 88
	{ 0xCC, 0xCC, 0x48, 0x78, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00 }, // 89
	{ 0xFC, 0xCC, 0x18, 0x30, 0x60, 0xC0, 0xCC, 0xFC, 0x00, 0x00 }, // 90
	{ 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x00, 0x00 }, // 91
	{ 0xC0, 0xC0, 0x60, 0x30, 0x30, 0x18, 0x0C, 0x0C, 0x00, 0x00 }, // 92
	{ 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0x00, 0x00 }, // 93
	{ 0x20, 0x70, 0xD8, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 94
	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00 }, // 95
	{ 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 96
	{ 0x00, 0x00, 0x00, 0xF0, 0x18, 0x78, 0xD8, 0x78, 0x00, 0x00 }, // 97
	{ 0xC0, 0xC0, 0xC0, 0xF0, 0xD8, 0xD8, 0xD8, 0xF0, 0x00, 0x00 }, // 98
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xC0, 0xD8, 0x70, 0x00, 0x00 }, // 99
	{ 0x18, 0x18, 0x18, 0x78, 0xD8, 0xD8, 0xD8, 0x78, 0x00, 0x00 }, // 100
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xF0, 0xC0, 0x78, 0x00, 0x00 }, // 101
	{ 0x30, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 }, // 102
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0x78, 0x18, 0xF0 }, // 103
	{ 0xC0, 0xC0, 0xC0, 0xF0, 0xD8, 0xD8, 0xD8, 0xD8, 0x00, 0x00 }, // 104
	{ 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00 }, // 105
	{ 0x00, 0x30, 0x00, 0x30, 0x30, 0x30, 0x30, 0xB0, 0xF0, 0x60 }, // 106
	{ 0xC0, 0xC0, 0xD8, 0xF0, 0xE0, 0xF0, 0xD8, 0xD8, 0x00, 0x00 }, // 107
	{ 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 }, // 108
	{ 0x00, 0x00, 0x00, 0xEC, 0xD6, 0xD6, 0xD6, 0xD6, 0x00, 0x00 }, // 109
	{ 0x00, 0x00, 0x00, 0xB0, 0xD8, 0xD8, 0xD8, 0xD8, 0x00, 0x00 }, // 110
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00 }, // 111
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0xF0, 0xC0, 0xC0 }, // 112
	{ 0x00, 0x00, 0x00, 0x70, 0xD8, 0xD8, 0xD8, 0x78, 0x1C, 0x18 }, // 113
	{ 0x00, 0x00, 0x00, 0xB0, 0xD8, 0xC0, 0xC0, 0xC0, 0x00, 0x00 }, // 114
	{ 0x00, 0x00, 0x00, 0x78, 0xC0, 0x70, 0x18, 0xF0, 0x00, 0x00 }, // 115
	{ 0x60, 0x60, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00 }, // 116
	{ 0x00, 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0xD8, 0x68, 0x00, 0x00 }, // 117
	{ 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00 }, // 118
	{ 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xEE, 0xC6, 0x00, 0x00 }, // 119
	{ 0x00, 0x00, 0x00, 0xD8, 0x70, 0x20, 0x70, 0xD8, 0x00, 0x00 }, // 120
	{ 0x00, 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0x78, 0x18, 0x18, 0xF0 }, // 121
	{ 0x00, 0x00, 0x00, 0xF8, 0x30, 0x60, 0xC0, 0xF8, 0x00, 0x00 }, // 122
	{ 0x30, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00 }, // 123
	{ 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00 }, // 124
	{ 0xC0, 0x60, 0x60, 0x30, 0x60, 0x60, 0x60, 0xC0, 0x00, 0x00 }, // 125
	{ 0x00, 0x00, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 126
	{ 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xFE, 0x00, 0x00, 0x00 }, // 127
};

#define _SEQU 0x3C4
	// VGA Sequencer
#define _CRTC 0x3D4
	// CRT Controller
#define _GRAC 0x3CE

// #define PHARLAP

#ifdef PHARLAP
	#define _VGA_PTR ((byte far *)MK_FP(0x34,0xA0000))
#else
	#define _VGA_PTR ((byte *)0xA0000)
#endif

/*
#define REAL_SEGMENT    0x34
void far *pharlapfirstmeg (int linearaddresss offset )
{
	return MK_FP (REAL_SEGMENT, linearaddress);
}*/

void setvideomode (int mode, boolean qsize)
{
	union REGS regs;
	int v;
	int xregset = -1, yregset = -1, doublescan = 1;
	boolean chained = true;

	debug0("Gonna set video mode...");
	static struct {
		int res;
		int h_total, h_enableend;
		int h_blankstart, h_blankend;
		int h_retracestart, h_retraceend;
		int clockselect, h_polarity;
	} x [5] = {
		{ 320, 0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0, 1 },
		{ 256, 0x5F, 0x3F, 0x40, 0x82, 0x4A, 0x9A, 0, 1 },

⌨️ 快捷键说明

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