Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: <<<-Basura->>> en 3 Abril 2012, 08:09 am



Título: Modo Grafico
Publicado por: <<<-Basura->>> en 3 Abril 2012, 08:09 am
Hola tenia la de como entrar al modo gráfico en C... estuve buscando y me encuentro que hay que invocar una interrupción de la BIOS... "INT 10h", esa exactamente pero el problema que tengo es que no tengo ni la mejor idea de como hacerlo... si alguien sabe que me quiera ayudar


Título: Re: Modo Grafico
Publicado por: Queta en 3 Abril 2012, 14:12 pm
¿A qué te refieres con modo gráfico? ¿Quieres hacer una interfaz para tu programa?

Igualmente, 10h es una interrupción de 16 bits (http://en.wikipedia.org/wiki/INT_10H (http://en.wikipedia.org/wiki/INT_10H)) y no la puedes utilizar en programas de 32/64 bits.


Título: Re: Modo Grafico
Publicado por: <<<-Basura->>> en 4 Abril 2012, 09:31 am
MM... para que me entiendas un ejemplo en ASM:

Código
  1. MOV  AH, 0Fh        ;Las primeras tres instrucciones guardan
  2.    INT  10h            ;el modo actual de video que esta usando
  3.    PUSH AX             ;el sistema operativo
  4.    CALL MODO_GRAF
  5.    CALL GRAFICAR
  6.    CALL PAUSA
  7.    POP  AX             ;Y aqui reestablece el modo que estaba usando
  8.    MOV  AH, 0          ;el sistema operativo
  9.    INT  10h
  10.    INT  20h
  11.  
  12.  
  13. MODO_GRAF:
  14.    MOV  AX, 0010H      ;Establece el modo de video (AH=0)
  15.    INT  10h            ;AL=10H modo grafico: 640x350
  16.    MOV  AH, 0BH        ;Establece la paleta de 16 colores
  17.    MOV  BX, 000BH      ;BH=Page=0, BL=Color Verde claro
  18.    INT  10H            ;Para el fondo de pantalla
  19.    RET
  20.  
  21.  
  22. GRAFICAR:
  23.    MOV  BX, 0          ;BL=Color, BH=No. de pagina=0
  24.    MOV  CX, 64         ;CX es la columna de pixel, coord. X
  25.    MOV  DX, 70         ;DX es la linea de pixel, coord Y
  26. G10:
  27.    MOV  AH, 0Ch
  28.    MOV  AL, BL         ;En BL se guardo el color
  29.    INT  10h
  30.    INC  CX             ;Incrementa posiscion en x
  31.    CMP  CX, 576        ;hasta la posicion 576
  32.    JNE  G10
  33.    MOV  CX, 64         ;mueve 64 a CX para usarlo para decrementar
  34.    INC  BL             ;Incrementa el color BL (0-F)
  35.    INC  DX             ;Incrementa en posicion en y
  36.    CMP  DX, 280        ;hasta la posicion 280
  37.    JNE  G10
  38.    RET
  39.  
  40.  
  41. PAUSA: ;Espera a que se pulse una tecla
  42.    MOV  AH, 10h
  43.    INT  16h
  44.    RET
  45.  
http://expo.itch.edu.mx/view.php?f=asm_33 (http://expo.itch.edu.mx/view.php?f=asm_33)

Este ejemplo no es mio pero esta sencillo y muy completo


Título: Re: Modo Grafico
Publicado por: Queta en 4 Abril 2012, 13:17 pm
Sí, esto está programado para 16 bits, o sea, es actualmente obsoleto.

Para "simular" estas interrupciones tienes que usar la API de Windows (para consola):

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073.aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073.aspx)

Y encontrarás funciones como SetConsoleTextAttribute para cambiar el color de las letras, el fondo...


Título: Re: Modo Grafico
Publicado por: <<<-Basura->>> en 4 Abril 2012, 23:58 pm
Sí, esto está programado para 16 bits, o sea, es actualmente obsoleto.
No Importa

Para "simular" estas interrupciones tienes que usar la API de Windows (para consola):
No quiero llamar la librería de windows...

nada mas quiero llamar la int 10h desde C -.-".
Pero muchas gracias por tratar de ayudarme

Mira tengo un boot y ya lice e link con mi main.c entiendes estoy booteando desde el CD sin sistema operativo...


Título: Re: Modo Grafico
Publicado por: Eternal Idol en 5 Abril 2012, 00:51 am
Usa inline assembly.