Inicio > C y C++ > pablojbf > Problema con paginas virtuales

Problema con paginas virtuales

Experto:
Usuario:
Fecha: 11/10/2008
Valoración: (3,00 sobre 5) Categoría: C y C++
11/10/2008
morpheus117, usuario preguntando en C y C++
Usuario
Hola que tal? Mira, es que tengo un problemilla con las pantallas virtuales te paso este codigo 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 que se cuelga y que puedo hacer para que no se me cuelge? Muchas gracias.
11/10/2008
morpheus117, experto respondiendo en C y C++
Experto
¿como lo va a hacer 20 o 30 veces, si el bucle solo lo repite 10? Y de todos modos random(256) devuelve numero entre 0 y 255 es eso lo que quieres, porque igual es el 0 el que lo cuelga.

Espero que te vaya bien el consejo, de todos modos, si el problema esta en algun movimiento de memoria, que es lo más probable yo no se mucho sobre las direcciones de memoria del procesador para salida por pantalla y tampoco te recomiendo que hagas esto así, usa alguna librería como DirectX o OpenGL, porque conseguiras un codigo más portable, y con eso si te podré ayudar.

Lo siento si no te soy de gran ayuda.
11/10/2008
morpheus117, usuario preguntando en C y C++
Usuario
Bien. Una respuesta aceptable.
Más opciones
Enlaces patrocinados