132 lines
2.6 KiB
C
132 lines
2.6 KiB
C
|
/* From VGAlib, changed for svgalib */
|
||
|
/* partially copyrighted (C) 1993 by Hartmut Schirmer */
|
||
|
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <unistd.h> /* for usleep( long ) */
|
||
|
#include <string.h>
|
||
|
#include "vga.h"
|
||
|
|
||
|
static unsigned char line[2048 * 3];
|
||
|
|
||
|
static void testmode(int mode)
|
||
|
{
|
||
|
int xmax, ymax, i, yw, ys;
|
||
|
unsigned char buf[60];
|
||
|
vga_modeinfo *modeinfo;
|
||
|
|
||
|
vga_setmode(mode);
|
||
|
|
||
|
modeinfo = vga_getmodeinfo(mode);
|
||
|
|
||
|
printf("Width: %d Height: %d Colors: %d\n",
|
||
|
modeinfo->width,
|
||
|
modeinfo->height,
|
||
|
modeinfo->colors);
|
||
|
printf("DisplayStartRange: %xh Maxpixels: %d Blit: %s\n",
|
||
|
modeinfo->startaddressrange,
|
||
|
modeinfo->maxpixels,
|
||
|
modeinfo->haveblit ? "YES" : "NO");
|
||
|
|
||
|
vga_screenoff();
|
||
|
|
||
|
xmax = vga_getxdim() - 1;
|
||
|
ymax = vga_getydim() - 1;
|
||
|
|
||
|
vga_setcolor(vga_white());
|
||
|
vga_drawline(0, 0, xmax, 0);
|
||
|
vga_drawline(xmax, 0, xmax, ymax);
|
||
|
vga_drawline(xmax, ymax, 0, ymax);
|
||
|
vga_drawline(0, ymax, 0, 0);
|
||
|
|
||
|
for (i = 0; i <= 15; i++) {
|
||
|
vga_setegacolor(i);
|
||
|
vga_drawline(10 + i * 5, 10, 90 + i * 5, 90);
|
||
|
}
|
||
|
for (i = 0; i <= 15; i++) {
|
||
|
vga_setegacolor(i);
|
||
|
vga_drawline(90 + i * 5, 10, 10 + i * 5, 90);
|
||
|
}
|
||
|
|
||
|
vga_screenon();
|
||
|
|
||
|
ys = 100;
|
||
|
yw = (ymax - 100) / 4;
|
||
|
for (i = 0; i < xmax - 1; i++)
|
||
|
line[i] = (i + 2) % 16;
|
||
|
line[0] = line[xmax] = 15;
|
||
|
line[1] = line[xmax - 1] = 0;
|
||
|
for (i = 100; i < ymax - 1; i++)
|
||
|
vga_drawscanline(i, line);
|
||
|
|
||
|
if (getchar() == 'd')
|
||
|
vga_dumpregs();
|
||
|
|
||
|
|
||
|
vga_getcrtcregs(buf);
|
||
|
|
||
|
buf[0]=0x4d;
|
||
|
buf[1]=0x3f;
|
||
|
buf[2]=0x3f;
|
||
|
buf[3]=0x80;
|
||
|
buf[4]=0x41;
|
||
|
buf[5]=0x10;
|
||
|
|
||
|
vga_setcrtcregs(buf);
|
||
|
for(i=0;i<20;i++) {
|
||
|
vga_setdisplaystart(i);
|
||
|
usleep(200000);
|
||
|
vga_waitretrace();
|
||
|
}
|
||
|
|
||
|
vga_getch();
|
||
|
|
||
|
vga_setmode(TEXT);
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
int mode;
|
||
|
int i, high;
|
||
|
|
||
|
vga_init(); /* Initialize. */
|
||
|
|
||
|
mode = 4;
|
||
|
|
||
|
if (mode == -1) {
|
||
|
printf("Choose one of the following video modes: \n");
|
||
|
|
||
|
high = 0;
|
||
|
for (i = 1; i <= vga_lastmodenumber(); i++)
|
||
|
if (vga_hasmode(i)) {
|
||
|
vga_modeinfo *info;
|
||
|
char expl[100];
|
||
|
char *cols = NULL;
|
||
|
|
||
|
*expl = '\0';
|
||
|
info = vga_getmodeinfo(i);
|
||
|
cols = "16";
|
||
|
strcpy(expl, "4 bitplanes");
|
||
|
high = i;
|
||
|
printf("%5d: %dx%d, ",
|
||
|
i, info->width, info->height);
|
||
|
if (cols == NULL)
|
||
|
printf("%d", info->colors);
|
||
|
else
|
||
|
printf("%s", cols);
|
||
|
printf(" colors ");
|
||
|
if (*expl != '\0')
|
||
|
printf("(%s)", expl);
|
||
|
printf("\n");
|
||
|
}
|
||
|
}
|
||
|
if (vga_hasmode(mode))
|
||
|
testmode(mode);
|
||
|
else {
|
||
|
printf("Error: Video mode not supported by driver\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|