Problema con páginas virtuales
¿Hola qué tal? Mira, ¿es qué tengo un problemilla con las pantallas virtuales te paso este código vale?
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
void set_modo(int modo);
void put_pixel(int x, int y, int color);
void linea_horiz(int x1, int x2, int y, int color);
void linea_verti(int x, int y1, int y2, int color);
void borra_pantalla(void);
void rectangulo(int x1,int y1,int x2,int y2,int color);
int get_pixel(int x, int y);
void relleno(int x, int y, int color);
void PutPixel(int x, int y, unsigned char color, unsigned char *where);
void FlipTo(unsigned char *source, unsigned char *where);
void set_modo(int modo)
{
union REGS inregs,outregs;
inregs.h.ah=0;
inregs.h.al=modo;
int86(0x10,&inregs,&outregs);
}
void borra_pantalla(void)
{
unsigned char *vgaset=(unsigned char *) MK_FP(0xA000,0);
memset(vgaset,0,64000);
}
int get_pixel(int x, int y)
{
char color;
int offset=320*y+x;
color=peekb(0xA000,offset);
return color;
}
void put_pixel(int x, int y, int color)
{
int offset;
offset=320*y+x;
pokeb(0xA000,offset,color);
}
void linea_horiz(int x1, int x2, int y, int color)
{
int n,offset;
for(n=x1;n<=x2;n++)
{
offset=320*y+n;
pokeb(0xA000,offset,color);
}
}
void linea_verti(int x, int y1, int y2, int color)
{
int n,offset;
for(n=y1;n<=y2;n++)
{
offset=320*n+x;
pokeb(0xA000,offset,color);
}
}
void rectangulo(int x1,int y1,int x2,int y2,int color)
{
linea_horiz(x1,x2,y1,color);
linea_horiz(x1,x2,y2,color);
linea_verti(x1,y1,y2,color);
linea_verti(x2,y1,y2,color);
}
void FlipTo(unsigned char *source, unsigned char *where)
{
memmove(where, source, 64000);
}
void PutPixel(int x, int y, unsigned char color, unsigned char *where)
{
where[(y<<8)+(y<<6)+x]=color;
}
void main(void)
{
int yo,x,y;
unsigned char *DIR_VGA=(unsigned char *) MK_FP(0xA000, 0);
unsigned char *pantalla;
pantalla=(unsigned char *) malloc(64000);
if(pantalla=NULL)
exit(1);
randomize();
set_modo(0x13);
borra_pantalla();
put_pixel(200,100,4);
linea_horiz(12,123,121,4);
linea_verti(12,12,145,4);
rectangulo(134,17,178,40,4);
for(x=0; x<10; x++)
pantalla[320+x]=random(256); //cuando lo hace 20 o 30 veces se cuelga el ordenador
borra_pantalla();
FlipTo(pantalla,DIR_VGA);
getchar();
free(pantalla);
}
¿Por qué se cuelga y que puedo hacer para que no se me cuelgue? Muchas gracias.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
void set_modo(int modo);
void put_pixel(int x, int y, int color);
void linea_horiz(int x1, int x2, int y, int color);
void linea_verti(int x, int y1, int y2, int color);
void borra_pantalla(void);
void rectangulo(int x1,int y1,int x2,int y2,int color);
int get_pixel(int x, int y);
void relleno(int x, int y, int color);
void PutPixel(int x, int y, unsigned char color, unsigned char *where);
void FlipTo(unsigned char *source, unsigned char *where);
void set_modo(int modo)
{
union REGS inregs,outregs;
inregs.h.ah=0;
inregs.h.al=modo;
int86(0x10,&inregs,&outregs);
}
void borra_pantalla(void)
{
unsigned char *vgaset=(unsigned char *) MK_FP(0xA000,0);
memset(vgaset,0,64000);
}
int get_pixel(int x, int y)
{
char color;
int offset=320*y+x;
color=peekb(0xA000,offset);
return color;
}
void put_pixel(int x, int y, int color)
{
int offset;
offset=320*y+x;
pokeb(0xA000,offset,color);
}
void linea_horiz(int x1, int x2, int y, int color)
{
int n,offset;
for(n=x1;n<=x2;n++)
{
offset=320*y+n;
pokeb(0xA000,offset,color);
}
}
void linea_verti(int x, int y1, int y2, int color)
{
int n,offset;
for(n=y1;n<=y2;n++)
{
offset=320*n+x;
pokeb(0xA000,offset,color);
}
}
void rectangulo(int x1,int y1,int x2,int y2,int color)
{
linea_horiz(x1,x2,y1,color);
linea_horiz(x1,x2,y2,color);
linea_verti(x1,y1,y2,color);
linea_verti(x2,y1,y2,color);
}
void FlipTo(unsigned char *source, unsigned char *where)
{
memmove(where, source, 64000);
}
void PutPixel(int x, int y, unsigned char color, unsigned char *where)
{
where[(y<<8)+(y<<6)+x]=color;
}
void main(void)
{
int yo,x,y;
unsigned char *DIR_VGA=(unsigned char *) MK_FP(0xA000, 0);
unsigned char *pantalla;
pantalla=(unsigned char *) malloc(64000);
if(pantalla=NULL)
exit(1);
randomize();
set_modo(0x13);
borra_pantalla();
put_pixel(200,100,4);
linea_horiz(12,123,121,4);
linea_verti(12,12,145,4);
rectangulo(134,17,178,40,4);
for(x=0; x<10; x++)
pantalla[320+x]=random(256); //cuando lo hace 20 o 30 veces se cuelga el ordenador
borra_pantalla();
FlipTo(pantalla,DIR_VGA);
getchar();
free(pantalla);
}
¿Por qué se cuelga y que puedo hacer para que no se me cuelgue? Muchas gracias.
2 Respuestas
Respuesta de muerte666
1
Respuesta de pablojbf
1