Skip to content

Instantly share code, notes, and snippets.

@SzateX

SzateX/tryby.c Secret

Last active March 16, 2019 22:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SzateX/2ac180b25b14d87abceb492b26888248 to your computer and use it in GitHub Desktop.
Save SzateX/2ac180b25b14d87abceb492b26888248 to your computer and use it in GitHub Desktop.
#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,&regs,&regs);
}
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