• Lunes 16 de Diciembre de 2024, 05:56

Autor Tema:  Utilizacion de memoria de video  (Leído 1570 veces)

shadowpucci

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: ar
    • Ver Perfil
Utilizacion de memoria de video
« en: Jueves 28 de Mayo de 2009, 16:01 »
0
Buenas... en primer lugar me presento, mi nombre es Matias, soy de Argentina, estudiante de ingenieria electronica, y soy nuevito en esto de programar... Aprendi en la secundaria algo de ASM y Basic para 8051, lo cual me resulto muy interesante... Actualmente en la facultad tenemos las materias de informatica 1 y 2, y luego tecnicas digitales etc etc en la cual usamos C (en el compilador Borland C para ser exacto, pero trato de usar todas librerias ANSI para no perder portabilidad). Vengo siguiendo el foro hara una semana, y encontre muchas informaciones que me han sido utiles, las cuales aprovecho para agradecer!

Bueno, atacando ahora el "problema" (que en realidad es un desasne lo que necesito) que tengo, es el siguiente:

Se manejar la memoria de video en modo texto, accediendo mediante (unsigned char far*) 0xB8000000, usando los bytes de caracter y colores y arme una funcion llamada "imprimi" que la uso en lugar del printf en la primer fase de mi proyecto. la funcion es:
Código: C
  1.  
  2. #define VIDEO (unsigned char far*) 0xB8000000
  3. void imprimir ( char* string , int x , int y, char formato) {
  4.     int a;
  5.     unsigned char far* pvideo;
  6.     pvideo=VIDEO;
  7.     for(a=0; a < (strlen(string)) ; a++){
  8.         *(pvideo+(2*x+(160*y+2*a)))=*(string+a);
  9.     }
  10.     if(formato!=-1){
  11.     for(a=0; a < (strlen(string)) ; a++){
  12.         *(pvideo+(1+(2*x+(160*y+2*a))))=formato;
  13.     }
  14.  
  15.     }
  16.     return;
  17. }
  18.  

 Ahora, resulta que para la aplicacion que estoy armando para la segunda parte del proyecto, me seria util usar la memoria de video pero en modo GRAFICO (al menos asi me dijeron que se llama), es decir, como matrix de pixeles. Es decir, poder armar una funcion similar a esta, en la cual le pase ( int X, int Y, int cantidad de pixeles a pintar,char color). Encontre algo en el foro ( viewtopic.php?f=18&t=37378&p=136145 ), que habla de que el modo grafico se usa la direccion A000h:0000h... pero escribi esa direccion y no me pinta ni un pixel. Aparte no se como es el formato de escritura de dichos pixels (yo mande 0xFF a 16 direcciones y nada....). Creo que posiblemente tenga que cambiar algo en algun registro de la bios, supongo.. (me han dicho algo asi), pero no estoy seguro.

Igual voy a seguir buscando en mi gran amigo google a ver si encuentro algo

Muchas Gracias.

Shadowpucci

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Utilizacion de memoria de video
« Respuesta #1 en: Jueves 28 de Mayo de 2009, 16:39 »
0
Efectivamente, hay que cambiar primero el modo de representación. Si estás en modo texto, las páginas gráficas de la memoria de vídeo están sin utilizar.

Échale un vistazo a esto: http://www.osdever.net/FreeVGA/vga/vga.htm

Igualmente ten en cuenta que hoy en días las tarjetas gráficas vienen con sus drivers y es posible que estas direcciones de registros de E/S ya no sean válidas para algunas tarjetas modernas, aunque que yo sepa todas intentan respetar el estándar VGA.

Suerte

shadowpucci

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: ar
    • Ver Perfil
Re: Utilizacion de memoria de video
« Respuesta #2 en: Jueves 28 de Mayo de 2009, 17:15 »
0
Gracias por la velocidad en la respuesta... ahi estoy mirando lo que me dijiste... solo que con el ingles me peleo bastante  :wacko:  :wacko:  

en medio habia encontrado esto (no me dejaponer links, asi que en google pone GEOCITIES MODO 13H y se encuentra lo que quiero poner, es algo similar pero en español) que me sirvio bastante... pero aun asi sigue sin andar... mas a la tarde subo el codigo de lo que estoy armando a ver si puedo hacerlo andar... el problema que tengo es con el REGS r.. me tira un error al momento de compilar...

En cuanto a lo que me decis de tarjetas graficas nuevas, este programa se va a usar en un 486DX2, asi que, no hay problema de esas compatibilidades...

Ahora tengo que ponerme a trabajar asi que la facu quedara para mas tarde

Muchisimas Gracias!

shadowpucci

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: ar
    • Ver Perfil
Re: Utilizacion de memoria de video
« Respuesta #3 en: Miércoles 3 de Junio de 2009, 20:32 »
0
Bueno, gracias a un estado gripal hoy en cama estoy divirtiendome con los proyectos de la facultad....

resulta que gracias al tutorial que encontre, arme un programita para testear el modo 13h de video.... muy sencillo y muy basico, pasandole a la memoria de video el dato de la tecla pulsada en el teclado (similarmente ya habia testeado esto en modo texto de la memoria de video y funcionaba, ponia caracteres de cualquier color y fondo, pero da una idea de si el modo funciona).

el programita es
Código: C
  1.  
  2. #include <dos.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. #define memvideo (unsigned char*) 0xA0000000
  7.  
  8.  
  9.  void modo13h(void)
  10. {
  11.         union REGS r;
  12.  
  13.         r.h.ah=0;
  14.         r.h.al=0x13;
  15.         int86(0x10, &r, &r);
  16. }
  17.  
  18. unsigned char far *DIR_VGA=(unsigned char far *) 0xA0000000;
  19.  
  20. void main(){
  21.  
  22. int a;
  23. modo13h();
  24. for(a=1;a>60000;a++)
  25.     {*(DIR_VGA+a)=getch();}
  26. return;
  27. }
  28.  

y el tema es que no empieza siquiera la aplicacion que me tira el winxp la siguiente pantalla:


luego se cuelga y no me deja volver al IDE para ver donde es que se esta colgando....

alguna sugerencia?? en que le estoy errando???

Gracias!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Utilizacion de memoria de video
« Respuesta #4 en: Jueves 4 de Junio de 2009, 09:43 »
0
Se ve que ha sucedido algo raro y estás ejecutando datos, ya que si te fijas la instrucción que te da el error es "code "  :D.
Depúralo a ver dónde te equivocas. Y también mi consejo es que si vas a usar básicamente ensamblador (como en la función modo13h()), uses la función asm().