-
-
Save SzateX/2ac180b25b14d87abceb492b26888248 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<conio.h> | |
#include<dos.h> | |
#define VGA_AC_INDEX 0x3C0 | |
#define VGA_AC_WRITE 0x3C0 | |
#define VGA_AC_READ 0x3C1 | |
#define VGA_MISC_WRITE 0x3C2 | |
#define VGA_SEQ_INDEX 0x3C4 | |
#define VGA_SEQ_DATA 0x3C5 | |
#define VGA_DAC_READ_INDEX 0x3C7 | |
#define VGA_DAC_WRITE_INDEX 0x3C8 | |
#define VGA_DAC_DATA 0x3C9 | |
#define VGA_MISC_READ 0x3CC | |
#define VGA_GC_INDEX 0x3CE | |
#define VGA_GC_DATA 0x3CF | |
#define VGA_CRTC_INDEX 0x3D4 | |
#define VGA_CRTC_DATA 0x3D5 | |
#define VGA_INSTAT_READ 0x3DA | |
#define VGA_NUM_SEQ_REGS 5 | |
#define VGA_NUM_CRTC_REGS 25 | |
#define VGA_NUM_GC_REGS 9 | |
#define VGA_NUM_AC_REGS 21 | |
#define VGA_NUM_REGS (1 + VGA_NUM_SEQ_REGS + VGA_NUM_CRTC_REGS + VGA_NUM_GC_REGS + VGA_NUM_AC_REGS) | |
unsigned char values[VGA_NUM_REGS]; | |
void setVideoMode(unsigned char mode) | |
{ | |
union REGS regs; | |
regs.h.ah=0; | |
regs.h.al=mode; | |
int86(0x10,®s,®s); | |
} | |
void read_regs(unsigned char *regs) | |
{ | |
unsigned int i; | |
unsigned char value; | |
//MISC | |
*regs = inportb(VGA_MISC_READ); | |
regs++; | |
//SEQ | |
for(i = 0; i< VGA_NUM_SEQ_REGS; i++) | |
{ | |
outportb(VGA_SEQ_INDEX, i); | |
//delay(1000); | |
value = inportb(VGA_SEQ_DATA); | |
*regs = value; | |
regs++; | |
} | |
//CRTC | |
for(i = 0; i< VGA_NUM_CRTC_REGS; i++) | |
{ | |
outportb(VGA_CRTC_INDEX, i); | |
//delay(1000); | |
*regs = inportb(VGA_CRTC_DATA); | |
regs++; | |
} | |
//GC | |
for(i = 0; i< VGA_NUM_GC_REGS; i++) | |
{ | |
outportb(VGA_GC_INDEX, i); | |
//delay(1000); | |
*regs = inportb(VGA_GC_DATA); | |
regs++; | |
} | |
//AC | |
for(i = 0; i< VGA_NUM_AC_REGS; i++) | |
{ | |
(void)inportb(VGA_INSTAT_READ); | |
//delay(1000); | |
outportb(VGA_AC_INDEX, i); | |
//delay(1000); | |
*regs = inportb(VGA_AC_READ); | |
regs++; | |
} | |
(void)inportb(VGA_INSTAT_READ); | |
outportb(VGA_AC_INDEX, 0x20); | |
} | |
void dump(unsigned char *regs, unsigned count, FILE* f) | |
{ | |
unsigned i; | |
i = 0; | |
fprintf(f, "\t"); | |
for(; count !=0; count--) | |
{ | |
fprintf(f, "0x%02X,", *regs); | |
i++; | |
if(i >= 8) | |
{ | |
i = 0; | |
fprintf(f, "\n\t"); | |
} | |
else fprintf(f, " "); | |
regs++; | |
} | |
fprintf(f, "\n"); | |
} | |
void dump_regs(unsigned char *regs, FILE* f) | |
{ | |
fprintf(f, "unsigned char g_mode[] =\n"); | |
fprintf(f, "{\n"); | |
//MISC | |
fprintf(f, "/* MISC */\n"); | |
fprintf(f, "\t0x%02X, \n", *regs); | |
regs++; | |
//SEQ | |
fprintf(f, "/* SEQ */\n"); | |
dump(regs, VGA_NUM_SEQ_REGS, f); | |
regs += VGA_NUM_SEQ_REGS; | |
//CRTC | |
fprintf(f, "/* CRTC */\n"); | |
dump(regs, VGA_NUM_CRTC_REGS, f); | |
regs += VGA_NUM_CRTC_REGS; | |
//GC | |
fprintf(f, "/* GC */\n"); | |
dump(regs, VGA_NUM_GC_REGS, f); | |
regs += VGA_NUM_GC_REGS; | |
//AC | |
fprintf(f, "/* AC */\n"); | |
dump(regs, VGA_NUM_AC_REGS, f); | |
regs += VGA_NUM_AC_REGS; | |
fprintf(f, "};\n"); | |
} | |
void main(void) | |
{ | |
/*read_regs(values); | |
//setVideoMode(3); | |
printf("%d", (int)values[2]); | |
getch();*/ | |
//FILE* f = NULL; | |
char buff[50]; | |
int mode = 0; | |
//setVideoMode(3); | |
//f = fopen("DUPA.TXT", "w"); | |
//read_regs(values, f); | |
//fclose(f); | |
for (; mode<=7; mode++) | |
{ | |
FILE *f = NULL; | |
setVideoMode(mode); | |
sprintf(buff, "mode_%d.txt", mode); | |
read_regs(values); | |
f = fopen(buff, "w"); | |
dump_regs(values, f); | |
fclose(f); | |
printf("Mode: %d\n", mode); | |
} | |
mode = 0x0D; | |
for (; mode<=0x13; mode++) | |
{ | |
FILE *f = NULL; | |
setVideoMode(mode); | |
sprintf(buff, "mode_%d.txt", mode); | |
read_regs(values); | |
f = fopen(buff, "w"); | |
dump_regs(values, f); | |
fclose(f); | |
printf("Mode: %d\n", mode); | |
} | |
setVideoMode(0x3); | |
printf("End Mode: 0x%02X", mode); | |
sound(440); | |
delay(1000); | |
nosound(); | |
getch(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment