clext.c revision 4d07f569799aaae0d7fccf8e76386d450664987f
14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// QEMU Cirrus CLGD 54xx VGABIOS Extension. 34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Copyright (c) 2004 Makoto Suzuki (suzu) 54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This library is free software; you can redistribute it and/or 74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// modify it under the terms of the GNU Lesser General Public 84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// License as published by the Free Software Foundation; either 94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// version 2 of the License, or (at your option) any later version. 104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// This library is distributed in the hope that it will be useful, 124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// but WITHOUT ANY WARRANTY; without even the implied warranty of 134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Lesser General Public License for more details. 154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// You should have received a copy of the GNU Lesser General Public 174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// License along with this library; if not, write to the Free Software 184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima//#define CIRRUS_VESA3_PMINFO 224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef VBE 234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#undef CIRRUS_VESA3_PMINFO 244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define PM_BIOSMEM_CURRENT_MODE 0x449 274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define PM_BIOSMEM_CRTC_ADDRESS 0x463 284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define PM_BIOSMEM_VBE_MODE 0x4BA 294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct 314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* + 0 */ 334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short mode; 344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short width; 354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short height; 364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short depth; 374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* + 8 */ 384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short hidden_dac; /* 0x3c6 */ 394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short *seq; /* 0x3c4 */ 404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short *graph; /* 0x3ce */ 414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned short *crtc; /* 0x3d4 */ 424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* +16 */ 434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char bitsperpixel; 444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesacolortype; 454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesaredmask; 464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesaredpos; 474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesagreenmask; 484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesagreenpos; 494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesabluemask; 504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesabluepos; 514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* +24 */ 524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesareservedmask; 534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char vesareservedpos; 544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} cirrus_mode_t; 554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define CIRRUS_MODE_SIZE 26 564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* For VESA BIOS 3.0 */ 594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#define CIRRUS_PM16INFO_SIZE 20 604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* VGA */ 624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_vga[] = {0x0007,0xffff}; 634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cgraph_vga[] = {0x0009,0x000a,0x000b,0xffff}; 644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_vga[] = {0x001a,0x001b,0x001d,0xffff}; 654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* extensions */ 674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cgraph_svgacolor[] = { 684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0000,0x0001,0x0002,0x0003,0x0004,0x4005,0x0506,0x0f07,0xff08, 694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0009,0x000a,0x000b, 704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 640x480x8 */ 734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_640x480x8[] = { 744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107, 754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x580b,0x580c,0x580d,0x580e, 764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x331b,0x331c,0x331d,0x331e, 784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_640x480x8[] = { 814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2c11, 824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07, 834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x4009,0x000c,0x000d, 844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xea10,0xdf12,0x5013,0x4014,0xdf15,0x0b16,0xc317,0xff18, 854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 640x480x16 */ 894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_640x480x16[] = { 904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707, 914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x580b,0x580c,0x580d,0x580e, 924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x331b,0x331c,0x331d,0x331e, 944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_640x480x16[] = { 974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2c11, 984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07, 994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x4009,0x000c,0x000d, 1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xea10,0xdf12,0xa013,0x4014,0xdf15,0x0b16,0xc317,0xff18, 1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 640x480x24 */ 1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_640x480x24[] = { 1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507, 1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x580b,0x580c,0x580d,0x580e, 1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x331b,0x331c,0x331d,0x331e, 1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_640x480x24[] = { 1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2c11, 1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07, 1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x4009,0x000c,0x000d, 1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xea10,0xdf12,0x0013,0x4014,0xdf15,0x0b16,0xc317,0xff18, 1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x321b,0x001d, 1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 800x600x8 */ 1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_800x600x8[] = { 1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107, 1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x230b,0x230c,0x230d,0x230e, 1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x141b,0x141c,0x141d,0x141e, 1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_800x600x8[] = { 1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007, 1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x7d10,0x5712,0x6413,0x4014,0x5715,0x9816,0xc317,0xff18, 1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 800x600x16 */ 1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_800x600x16[] = { 1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707, 1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x230b,0x230c,0x230d,0x230e, 1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x141b,0x141c,0x141d,0x141e, 1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_800x600x16[] = { 1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007, 1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x7d10,0x5712,0xc813,0x4014,0x5715,0x9816,0xc317,0xff18, 1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 800x600x24 */ 1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_800x600x24[] = { 1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507, 1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x230b,0x230c,0x230d,0x230e, 1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x141b,0x141c,0x141d,0x141e, 1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_800x600x24[] = { 1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007, 1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x7d10,0x5712,0x2c13,0x4014,0x5715,0x9816,0xc317,0xff18, 1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x321b,0x001d, 1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1024x768x8 */ 1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1024x768x8[] = { 1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107, 1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1024x768x8[] = { 1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507, 1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18, 1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1024x768x16 */ 1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1024x768x16[] = { 1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707, 1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1024x768x16[] = { 1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507, 1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0x0013,0x4014,0xff15,0x2416,0xc317,0xff18, 1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x321b,0x001d, 1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1024x768x24 */ 1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1024x768x24[] = { 1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507, 1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1024x768x24[] = { 2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507, 2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18, 2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x321b,0x001d, 2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1280x1024x8 */ 2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1280x1024x8[] = { 2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107, 2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1280x1024x8[] = { 2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707, 2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18, 2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1280x1024x16 */ 2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1280x1024x16[] = { 2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707, 2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1280x1024x16[] = { 2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707, 2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0x4013,0x4014,0xff15,0x2416,0xc317,0xff18, 2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x321b,0x001d, 2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/* 1600x1200x8 */ 2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cseq_1600x1200x8[] = { 2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107, 2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x760b,0x760c,0x760d,0x760e, 2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0412,0x0013,0x2017, 2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x341b,0x341c,0x341d,0x341e, 2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short ccrtc_1600x1200x8[] = { 2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707, 2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x6009,0x000c,0x000d, 2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18, 2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0x001a,0x221b,0x001d, 2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima0xffff 2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_mode_t cirrus_modes[] = 2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x5f,640,480,8,0x00, 2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_640x480x8,cgraph_svgacolor,ccrtc_640x480x8,8, 2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4,0,0,0,0,0,0,0,0}, 2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x64,640,480,16,0xe1, 2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16,16, 2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,11,6,5,5,0,0,0}, 2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x66,640,480,15,0xf0, 2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16,16, 2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,10,5,5,5,0,1,15}, 2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x71,640,480,24,0xe5, 2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_640x480x24,cgraph_svgacolor,ccrtc_640x480x24,24, 2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,8,16,8,8,8,0,0,0}, 2714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x5c,800,600,8,0x00, 2734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_800x600x8,cgraph_svgacolor,ccrtc_800x600x8,8, 2744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4,0,0,0,0,0,0,0,0}, 2754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x65,800,600,16,0xe1, 2764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16,16, 2774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,11,6,5,5,0,0,0}, 2784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x67,800,600,15,0xf0, 2794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16,16, 2804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,10,5,5,5,0,1,15}, 2814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x60,1024,768,8,0x00, 2834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1024x768x8,cgraph_svgacolor,ccrtc_1024x768x8,8, 2844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4,0,0,0,0,0,0,0,0}, 2854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x74,1024,768,16,0xe1, 2864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16,16, 2874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,11,6,5,5,0,0,0}, 2884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x68,1024,768,15,0xf0, 2894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16,16, 2904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,10,5,5,5,0,1,15}, 2914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x78,800,600,24,0xe5, 2934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_800x600x24,cgraph_svgacolor,ccrtc_800x600x24,24, 2944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,8,16,8,8,8,0,0,0}, 2954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x79,1024,768,24,0xe5, 2964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1024x768x24,cgraph_svgacolor,ccrtc_1024x768x24,24, 2974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,8,16,8,8,8,0,0,0}, 2984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x6d,1280,1024,8,0x00, 3004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1280x1024x8,cgraph_svgacolor,ccrtc_1280x1024x8,8, 3014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4,0,0,0,0,0,0,0,0}, 3024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x69,1280,1024,15,0xf0, 3034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16, 3044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,10,5,5,5,0,1,15}, 3054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x75,1280,1024,16,0xe1, 3064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16, 3074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6,5,11,6,5,5,0,0,0}, 3084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0x7b,1600,1200,8,0x00, 3104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,8, 3114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4,0,0,0,0,0,0,0,0}, 3124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0xfe,0,0,0,0,cseq_vga,cgraph_vga,ccrtc_vga,0, 3144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xff,0,0,0,0,0,0,0,0}, 3154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima {0xff,0,0,0,0,0,0,0,0, 3164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xff,0,0,0,0,0,0,0,0}, 3174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 3184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned char cirrus_id_table[] = { 3204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima // 5430 3214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xA0, 0x32, 3224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima // 5446 3234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xB8, 0x39, 3244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xff, 0xff 3264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 3274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaunsigned short cirrus_vesa_modelist[] = { 3304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 640x480x8 3314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x101, 0x5f, 3324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 640x480x15 3334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x110, 0x66, 3344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 640x480x16 3354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x111, 0x64, 3364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 640x480x24 3374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x112, 0x71, 3384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 800x600x8 3394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x103, 0x5c, 3404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 800x600x15 3414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x113, 0x67, 3424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 800x600x16 3434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x114, 0x65, 3444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 800x600x24 3454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x115, 0x78, 3464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1024x768x8 3474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x105, 0x60, 3484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1024x768x15 3494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x116, 0x68, 3504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1024x768x16 3514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x117, 0x74, 3524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1024x768x24 3534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x118, 0x79, 3544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1280x1024x8 3554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x107, 0x6d, 3564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1280x1024x15 3574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x119, 0x69, 3584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// 1280x1024x16 3594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0x11a, 0x75, 3604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima// invalid 3614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 0xffff,0xffff 3624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}; 3634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3654d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaASM_START 3664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_installed: 3684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.ascii "cirrus-compatible VGA is detected" 3694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0x0d,0x0a 3704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0x0d,0x0a,0x00 3714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_not_installed: 3734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.ascii "cirrus-compatible VGA is not detected" 3744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0x0d,0x0a 3754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0x0d,0x0a,0x00 3764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_vendorname: 3784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_productname: 3794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_oemname: 3804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.ascii "VGABIOS Cirrus extension" 3814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0 3824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_productrevision: 3834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.ascii "1.0" 3844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima.byte 0 3854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 3864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_init: 3874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_check 3884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz no_cirrus 3894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima SET_INT_VECTOR(0x10, #0xC000, #cirrus_int10_handler) 3904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0f ; memory setup 3914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3C4 3924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 3934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 3944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 3954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x18 3964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, al 3974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0a 3984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 3994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 4004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0007 ; set vga mode 4014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 4024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0431 ; reset bitblt 4034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3CE 4044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 4054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0031 4064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 4074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimano_cirrus: 4084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 4094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_display_info: 4114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 4124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 4134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 4144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 4154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_check 4164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #cirrus_not_installed 4174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_msgnotinstalled 4184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #cirrus_installed 4194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_msgnotinstalled: 4214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call _display_string 4224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 4234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 4244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 4254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_check: 4274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 4284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 4294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x9206 4304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3C4 4314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 4324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 4334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 4344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x12 4354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 4364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 4374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 4384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_int10_handler: 4414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pushf 4424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bp 4434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0x00 ;; set video mode 4444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_set_video_mode 4454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0x12 ;; cirrus extension 4464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_extbios 4474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0x4F ;; VESA extension 4484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa 4494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_unhandled: 4514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bp 4524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima popf 4534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp vgabios_int10_handler 4544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_return: 4564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 4574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_debug_dump 4584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 4594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bp 4604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima popf 4614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima iret 4624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_set_video_mode: 4644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 4654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_debug_dump 4664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 4674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 4684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 4694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 4704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 4714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 4724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 4734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, [cirrus_vesa_sel0000_data] 4744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else 4754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor si, si 4764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 4774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, si 4784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bx, bx 4794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov [PM_BIOSMEM_VBE_MODE], bx 4804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 4814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 4824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_modeentry 4834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnc cirrus_set_video_mode_extended 4844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0xfe 4854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_modeentry_nomask 4864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode 4874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 4884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 4894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_unhandled 4904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 4914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios: 4924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 4934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_debug_dump 4944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 4954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x80 4964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jb cirrus_unhandled 4974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0xAF 4984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ja cirrus_unhandled 4994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 5004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and bx, #0x7F 5014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl bx, 1 5024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 5034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bp, cirrus_extbios_handlers[bx] 5044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 5054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push #cirrus_return 5064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bp 5074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 5084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa: 5104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 5114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_debug_dump 5124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 5134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x10 5144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ja cirrus_vesa_not_handled 5154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 5164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bx, bx 5174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 5184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl bx, 1 5194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 5204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bp, cirrus_vesa_handlers[bx] 5214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 5224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push #cirrus_return 5234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bp 5244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 5254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_not_handled: 5274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x014F ;; not implemented 5284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_return 5294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 5314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_debug_dump: 5324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push es 5334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 5344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pusha 5354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 5364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 5374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call _cirrus_debugmsg 5384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima popa 5394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 5404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop es 5414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 5424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 5434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_set_video_mode_extended: 5454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode 5464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax ;; mode 5474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test al, #0x80 5484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_set_video_mode_extended_1 5494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 5504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0xffff ; set to 0xff to keep win 2K happy 5514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_clear_vram 5524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 5534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_set_video_mode_extended_1: 5544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x7f 5554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 5574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 5584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 5594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, [cirrus_vesa_sel0000_data] 5604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else 5614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor si, si 5624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 5634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, si 5644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov [PM_BIOSMEM_CURRENT_MODE], al 5654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 5664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x20 5684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 5704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_return 5714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_pmbios_init: 5734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima retf 5744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_pmbios_entry: 5754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pushf 5764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bp 5774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0x4F 5784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_pmbios_unimplemented 5794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x0F 5804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ja cirrus_vesa_pmbios_unimplemented 5814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 5824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bx, bx 5834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 5844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl bx, 1 5854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 5864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bp, cirrus_vesa_handlers[bx] 5874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 5884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push #cirrus_vesa_pmbios_return 5894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bp 5904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 5914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_pmbios_unimplemented: 5924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x014F 5934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_pmbios_return: 5944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bp 5954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima popf 5964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima retf 5974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 5984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima; in si:mode table 5994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_switch_mode: 6004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 6014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 6024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 6034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 6044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 6054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, [si+10] ;; seq 6074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3c4 6084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x1206 6094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax ;; Unlock cirrus special 6104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode_setregs 6114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, [si+12] ;; graph 6134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 6144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode_setregs 6154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, [si+14] ;; crtc 6174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 6184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode_setregs 6194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3c6 6214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x00 6224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, [si+8] ;; hidden dac 6284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0xff 6304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x00 6334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, [si+17] ;; memory model 6344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or bl, bl 6354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz is_text_mode 6364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x01 6374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x03 6384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz is_text_mode 6394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or al, #0x40 6404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimais_text_mode: 6414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, #0x10 6424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call biosfn_get_single_palette_reg 6434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and bh, #0xfe 6444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or bh, al 6454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call biosfn_set_single_palette_reg 6464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 6484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 6494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 6504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 6514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_enable_16k_granularity: 6534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 6544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 6554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 6564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0b 6574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 6594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or al, #0x20 ;; enable 16k 6614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 6634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 6644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 6654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_switch_mode_setregs: 6674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacsms_1: 6684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [bx] 6694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0xffff 6704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz csms_2 6714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 6724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add bx, #0x2 6734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp csms_1 6744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacsms_2: 6754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 6764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 6774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_80h: 6784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 6794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 6804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x27 6814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 6824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 6834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 6844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, #_cirrus_id_table 6854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimac80h_1: 6864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 6874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, [bx] 6884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, al 6894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz c80h_2 6904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0xff 6914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz c80h_2 6924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 6934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 6944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp c80h_1 6954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimac80h_2: 6964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 6974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, 0x1[bx] 6984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 6994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, #0x00 7004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bx, bx 7014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_81h: 7044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x100 ;; XXX 7054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_82h: 7074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 7084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 7094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 7104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x27 7114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 7124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 7134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 7144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x03 7154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, #0xAF 7164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 7174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_85h: 7204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cx 7214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 7224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3C4 7234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0f ;; get DRAM band width 7244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 7254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 7264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 7274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; al = 4 << bandwidth 7284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cl, al 7294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr cl, #0x03 7304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and cl, #0x03 7314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp cl, #0x03 7324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je c85h2 7334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x04 7344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl al, cl 7354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp c85h3 7364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimac85h2: 7374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; 4MB or 2MB 7384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x80 7394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x20 ;; 2 MB 7404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je c85h3 7414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x40 ;; 4 MB 7424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimac85h3: 7434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 7444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop cx 7454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_9Ah: 7484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x4060 7494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, #0x1132 7504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_A0h: 7534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_modeentry 7544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, #0x01 7554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima sbb ah, #0x00 7564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, cirrus_extbios_A0h_callback 7574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #0xffff 7584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov di, bx 7594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, bx 7604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov es, bx 7614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_A0h_callback: 7644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; fatal: not implemented yet 7654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cli 7664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima hlt 7674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima retf 7684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_A1h: 7704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, #0x0E00 ;; IBM 8512/8513, color 7714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_A2h: 7744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x07 ;; HSync 31.5 - 64.0 kHz 7754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_AEh: 7784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x01 ;; High Refresh 75Hz 7794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_unimplemented: 7824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 7834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 7844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_00h: 7854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 7864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 7874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bp, di 7884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push es 7894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 7904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cld 7914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [di] 7924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0x4256 ;; VB 7934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cv00_1 7944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [di+2] 7954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0x3245 ;; E2 7964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cv00_1 7974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; VBE2 7984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima lea di, 0x14[bp] 7994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0100 ;; soft ver. 8004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, # cirrus_vesa_vendorname 8024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cs 8044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, # cirrus_vesa_productname 8064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cs 8084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, # cirrus_vesa_productrevision 8104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cs 8124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacv00_1: 8144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov di, bp 8154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x4556 ;; VE 8164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x4153 ;; SA 8184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0200 ;; v2.00 8204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, # cirrus_vesa_oemname 8224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cs 8244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax ;; caps 8264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima lea ax, 0x40[bp] 8294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, es 8314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_extbios_85h ;; vram in 64k 8334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, #0x00 8344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 8364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 8374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 8384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima lea di, 0x40[bp] 8394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #_cirrus_vesa_modelist 8404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacv00_2: 8414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima lodsw 8424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add si, #2 8444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0xffff 8454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cv00_2 8464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 8474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 8484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov di, bp 8494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 8504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 8514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 8524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 8534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h: 8544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cx 8554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and ax, #0x3fff 8564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_vesamode_to_mode 8574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0xffff 8584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_01h_1 8594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_vesa_unimplemented 8604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h_1: 8614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 8624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 8634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cx 8644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 8654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 8664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bp, di 8674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cld 8684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 8694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 8704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_modeentry_nomask 8714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 8724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push di 8734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 8744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, #0x80 8754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima rep 8764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw ;; clear buffer 8774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop di 8784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 8794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x003b ;; mode 8804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0007 ;; attr 8824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0010 ;; granularity =16K 8844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0040 ;; size =64K 8864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0xA000 ;; segment A 8884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax ;; no segment B 8904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #cirrus_vesa_05h_farentry 8924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cs 8944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_line_offset_entry 8964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw ;; bytes per scan line 8974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [si+2] ;; width 8984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 8994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [si+4] ;; height 9004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 9014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x08 9024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x10 9044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #1 ;; count of planes 9064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, [si+6] ;; bpp 9084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1 ;; XXX number of banks 9104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, [si+17] 9124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb ;; memory model 9134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0 ;; XXX size of bank in K 9144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_line_offset_entry 9164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, [si+4] 9174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mul bx ;; dx:ax=vramdisp 9184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or ax, ax 9194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa_01h_3 9204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 9214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h_3: 9224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_extbios_85h ;; al=vram in 64k 9234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, #0x00 9244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, dx 9254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dx, dx 9264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div cx 9274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec ax 9284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb ;; number of image pages = vramtotal/vramdisp-1 9294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x00 9304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb 9314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; v1.2+ stuffs 9334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 9344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add si, #18 9354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima movsw 9364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima movsw 9374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima movsw 9384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima movsw 9394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 9404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, [si+16] 9424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0 9434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima sub ah, #9 9444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima rcl al, #1 ; bit 0=palette flag 9454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosb ;; direct screen mode info 9464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; v2.0+ stuffs 9484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 32-bit LFB address 9494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 9504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 9514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x1013 ;; vendor Cirrus 9524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call _pci_get_lfb_addr 9534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 9544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or ax, ax 9554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa_01h_4 9564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push di 9574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov di, bp 9584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x26 ;; es: 9594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [di] 9604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or ax, #0x0080 ;; mode bit 7:LFB 9614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 9624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop di 9634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h_4: 9644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 9664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw ; reserved 9674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw ; reserved 9684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw ; reserved 9694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 9714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov di, bp 9724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 9734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 9744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop cx 9754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 9764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 9774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test cx, #0x4000 ;; LFB flag 9794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa_01h_5 9804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cx 9814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x26 ;; es: 9824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, [di] 9834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp cx, #0x0080 ;; is LFB supported? 9844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_01h_6 9854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x014F ;; error - no LFB 9864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h_6: 9874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop cx 9884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_01h_5: 9894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 9904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 9914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h: 9924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; XXX support CRTC registers 9934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test bx, #0x3e00 9944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_02h_2 ;; unknown flags 9954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, bx 9964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and ax, #0x1ff ;; bit 8-0 mode 9974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0x100 ;; legacy VGA mode 9984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jb cirrus_vesa_02h_legacy 9994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_vesamode_to_mode 10004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ax, #0xffff 10014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_02h_1 10024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h_2: 10034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_vesa_unimplemented 10044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h_legacy: 10054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 10064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 10074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp byte ptr [cirrus_vesa_is_protected_mode], #0 10084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_02h_2 10094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif // CIRRUS_VESA3_PMINFO 10104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int #0x10 10114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 10124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 10134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h_1: 10144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 10154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 10164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_modeentry_nomask 10174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_switch_mode 10184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test bx, #0x4000 ;; LFB 10194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_02h_3 10204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_enable_16k_granularity 10214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h_3: 10224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test bx, #0x8000 ;; no clear 10234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_02h_4 10244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 10254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax,ax 10264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_clear_vram 10274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 10284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_02h_4: 10294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 10304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 10314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 10324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 10334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, [cirrus_vesa_sel0000_data] 10344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else 10354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor si, si 10364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 10374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, si 10384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov [PM_BIOSMEM_CURRENT_MODE], al 10394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov [PM_BIOSMEM_VBE_MODE], bx 10404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 10414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 10424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 10434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 10444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 10454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_03h: 10464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 10474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 10484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 10494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [cirrus_vesa_sel0000_data] 10504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#else 10514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 10524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 10534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, ax 10544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, # PM_BIOSMEM_VBE_MODE 10554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [bx] 10564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, ax 10574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima test bx, bx 10584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_03h_1 10594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, # PM_BIOSMEM_CURRENT_MODE 10604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, [bx] 10614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 10624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bh, bh 10634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_03h_1: 10644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 10654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 10664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 10674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 10684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_05h_farentry: 10694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_vesa_05h 10704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima retf 10714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 10724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_05h: 10734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x01 10744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ja cirrus_vesa_05h_1 10754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bh, #0x00 10764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa_05h_setmempage 10774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bh, #0x01 10784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cirrus_vesa_05h_getmempage 10794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_05h_1: 10804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cirrus_vesa_unimplemented 10814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_05h_setmempage: 10824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or dh, dh ; address must be < 0x100 10834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz cirrus_vesa_05h_1 10844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 10854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, bl ;; bl=bank number 10864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add al, #0x09 10874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, dl ;; dx=window address in granularity 10884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 10894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 10904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 10914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 10924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 10934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_05h_getmempage: 10944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, bl ;; bl=bank number 10954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add al, #0x09 10964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 10974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 10984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 10994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 11004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dx, dx 11014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dl, al ;; dx=window address in granularity 11024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004F 11034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 11054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_06h: 11064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cx 11074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x01 11084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je cirrus_vesa_06h_3 11094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x02 11104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je cirrus_vesa_06h_2 11114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jb cirrus_vesa_06h_1 11124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0100 11134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_06h_1: 11154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_bpp_bytes 11164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 11174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bh, bh 11184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cx 11194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mul bx 11204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_06h_2: 11214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_set_line_offset 11224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_06h_3: 11234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_bpp_bytes 11244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 11254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bh, bh 11264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dx, dx 11274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_line_offset 11284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 11294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div bx 11304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, ax 11314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 11324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_extbios_85h ;; al=vram in 64k 11334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dx, dx 11344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dl, al 11354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ax, ax 11364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div bx 11374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, ax 11384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 11394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 11414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_07h: 11424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x80 11434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je cirrus_vesa_07h_1 11444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x01 11454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je cirrus_vesa_07h_2 11464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jb cirrus_vesa_07h_1 11474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x0100 11484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_07h_1: 11504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 11514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_bpp_bytes 11524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 11534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bh, bh 11544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, cx 11554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mul bx 11564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 11574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 11584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_line_offset 11594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mul bx 11604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 11614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add ax, bx 11624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnc cirrus_vesa_07h_3 11634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 11644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_07h_3: 11654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 11664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and dx, #0x0003 11674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, #0x04 11684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div bx 11694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 11704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr dx, #2 11714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_set_start_addr 11724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 11734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_07h_2: 11754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_start_addr 11764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl dx, #2 11774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 11784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, #0x04 11794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mul bx 11804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 11814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or dx, bx 11824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 11834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_line_offset 11844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, ax 11854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 11864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div bx 11874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 11884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 11894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_bpp_bytes 11904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 11914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor bh, bh 11924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 11934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dx, dx 11944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima div bx 11954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, ax 11964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 11974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 11984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 11994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_10h: 12014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x00 12024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jne cirrus_vesa_10h_01 12034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, #0x0f30 12044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 12054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_10h_01: 12074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x01 12084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jne cirrus_vesa_10h_02 12094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 12104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 12114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x40 12124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, dx 12134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov [0xb9], bh 12144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 12154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 12164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 12174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_10h_02: 12194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp bl, #0x02 12204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jne cirrus_vesa_unimplemented 12214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 12224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 12234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x40 12244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ds, dx 12254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bh, [0xb9] 12264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 12274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 12284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x004f 12294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_unimplemented: 12324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, #0x014F ;; not implemented 12334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; in ax:vesamode, out ax:cirrusmode 12374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesamode_to_mode: 12384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 12394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cx 12404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push si 12414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push cs 12424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 12434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, #0xffff 12444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #_cirrus_vesa_modelist 12454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacvtm_1: 12464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp [si],ax 12474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cvtm_2 12484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp [si],cx 12494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cvtm_2 12504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add si, #4 12514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cvtm_1 12524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacvtm_2: 12534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax,[si+2] 12544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop si 12554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop cx 12564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 12574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ; cirrus_get_crtc 12604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; NOTE - may be called in protected mode 12614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_crtc: 12624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ds 12634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 12644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3cc 12654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 12664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x01 12674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl al, #5 12684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3b4 12694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add dl, al 12704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 12714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ds 12724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; in - al:mode, out - cflag:result, si:table, ax:destroyed 12754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_modeentry: 12764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x7f 12774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_modeentry_nomask: 12784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, #_cirrus_modes 12794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacgm_1: 12804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima db 0x2e ;; cs: 12814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, [si] 12824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, ah 12834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cgm_2 12844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, #0xff 12854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jz cgm_4 12864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima add si, # CIRRUS_MODE_SIZE 12874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cgm_1 12884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacgm_4: 12894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor si, si 12904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stc ;; video mode is not supported 12914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jmp cgm_3 12924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacgm_2: 12934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima clc ;; video mode is supported 12944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacgm_3: 12954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 12964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 12974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; out - al:bytes per pixel 12984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_bpp_bytes: 12994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 13004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x03c4 13014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x07 13024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 13044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 13054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x0e 13064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x06 13074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jne cirrus_get_bpp_bytes_1 13084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x02 13094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_bpp_bytes_1: 13104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr al, #1 13114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x04 13124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je cirrus_get_bpp_bytes_2 13134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc al 13144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_bpp_bytes_2: 13154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 13164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 13174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 13184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; in - ax: new line offset 13194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_set_line_offset: 13204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr ax, #3 13214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 13224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 13234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x13 13244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 13264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 13274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 13294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1b 13304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 13324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl ah, #4 13334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 13344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #ef 13354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or al, ah 13364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 13384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 13394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; out - ax: active line offset 13404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_line_offset: 13414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 13424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 13434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 13444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x13 13454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 13474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 13484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 13494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 13504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1b 13514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 13524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 13534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 13544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, al 13554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr ah, #4 13564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and ah, #0x01 13574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, bl 13584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl ax, #3 13594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 13604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop dx 13614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 13624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 13634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; in - si: table 13644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; out - ax: line offset for mode 13654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_line_offset_entry: 13664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 13674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bx, [si+14] ;; crtc table 13684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 13694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaoffset_loop1: 13704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [bx] 13714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x13 13724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je offset_found1 13734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 13744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 13754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz offset_loop1 13764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaoffset_found1: 13774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor al, al 13784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr ax, #5 13794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 13804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 13814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaoffset_loop2: 13824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, [bx] 13834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp al, #0x1b 13844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima je offset_found2 13854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 13864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc bx 13874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jnz offset_loop2 13884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaoffset_found2: 13894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 13904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and ax, #0x1000 13914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr ax, #1 13924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or ax, bx 13934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 13944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 13954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 13964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; in - new address in DX:AX 13974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_set_start_addr: 13984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 13994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push dx 14004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 14014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 14024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0d 14034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 14064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0c 14094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, ah 14124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1d 14154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x7f 14194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 14204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, bl 14214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl bl, #4 14224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and bl, #0x80 14234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or al, bl 14244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, ah 14274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and ah, #0x01 14284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl bl, #1 14294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and bl, #0x0c 14304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or ah, bl 14314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1b 14324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0xf2 14364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or al, ah 14374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 14394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 14404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 14414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima;; out - current address in DX:AX 14424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_get_start_addr: 14434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push bx 14444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_get_crtc 14454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0c 14464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ah, al 14504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x0d 14524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 14564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1b 14584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dec dx 14624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 14634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x01 14644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and bl, #0x0c 14654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr bl, #1 14664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or bl, al 14674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x1d 14684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, al 14694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc dx 14704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima in al, dx 14714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima and al, #0x80 14724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shr al, #4 14734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima or bl, al 14744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dl, bl 14754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor dh, dh 14764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 14774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop bx 14784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 14794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 14804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_clear_vram: 14814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pusha 14824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push es 14834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov si, ax 14844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 14854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_enable_16k_granularity 14864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima call cirrus_extbios_85h 14874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shl al, #2 14884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov bl, al 14894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ah,ah 14904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_clear_vram_1: 14914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov al, #0x09 14924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 14934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 14944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima push ax 14954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, #0xa000 14964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov es, cx 14974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor di, di 14984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov ax, si 14994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov cx, #8192 15004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cld 15014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima rep 15024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima stosw 15034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop ax 15044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima inc ah 15054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima cmp ah, bl 15064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima jne cirrus_clear_vram_1 15074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 15084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima xor ah,ah 15094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima mov dx, #0x3ce 15104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima out dx, ax 15114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 15124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pop es 15134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima popa 15144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ret 15154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 15164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_extbios_handlers: 15174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 80h 15184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_80h 15194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_81h 15204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_82h 15214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 84h 15234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_85h 15254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 88h 15284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 8Ch 15334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 90h 15384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 94h 15434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 98h 15484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_9Ah 15514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 9Ch 15534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; A0h 15584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_A0h 15594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_A1h 15604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_A2h 15614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; A4h 15634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; A8h 15684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; ACh 15734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_AEh 15764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_extbios_unimplemented 15774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 15784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_handlers: 15794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 00h 15804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_00h 15814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_01h 15824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_02h 15834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_03h 15844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 04h 15854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_05h 15874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_06h 15884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_07h 15894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 08h 15904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 0Ch 15954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_unimplemented 15994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; 10h 16004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_10h 16014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 16024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 16034d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaASM_END 16044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 16054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_VESA3_PMINFO 16064d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaASM_START 16074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_pminfo: 16084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* + 0 */ 16094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima .byte 0x50,0x4d,0x49,0x44 ;; signature[4] 16104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* + 4 */ 16114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_pmbios_entry ;; entry_bios 16124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw cirrus_vesa_pmbios_init ;; entry_init 16134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* + 8 */ 16144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_sel0000_data: 16154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw 0x0000 ;; sel_00000 16164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_selA000_data: 16174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw 0xA000 ;; sel_A0000 16184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* +12 */ 16194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_selB000_data: 16204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw 0xB000 ;; sel_B0000 16214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_selB800_data: 16224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw 0xB800 ;; sel_B8000 16234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima /* +16 */ 16244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_selC000_data: 16254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw 0xC000 ;; sel_C0000 16264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacirrus_vesa_is_protected_mode: 16274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ;; protected mode flag and checksum 16284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dw (~((0xf2 + (cirrus_vesa_pmbios_entry >> 8) + (cirrus_vesa_pmbios_entry) \ 16294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima + (cirrus_vesa_pmbios_init >> 8) + (cirrus_vesa_pmbios_init)) & 0xff) << 8) + 0x01 16304d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaASM_END 16314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif // CIRRUS_VESA3_PMINFO 16324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 16334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 16344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#ifdef CIRRUS_DEBUG 16354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimastatic void cirrus_debugmsg(DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS) 16364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u DI, SI, BP, SP, BX, DX, CX, AX, ES, DS, FLAGS; 16374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{ 16384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if((GET_AH()!=0x0E)&&(GET_AH()!=0x02)&&(GET_AH()!=0x09)&&(AX!=0x4F05)) 16394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("vgabios call ah%02x al%02x bx%04x cx%04x dx%04x\n",GET_AH(),GET_AL(),BX,CX,DX); 16404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} 16414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#endif 1642