Modo Grafico

Iniciado por <<<-Basura->>>, 3 Abril 2012, 08:09 AM

0 Miembros y 1 Visitante están viendo este tema.

<<<-Basura->>>

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
<<<--Basura-->>>

Queta

¿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) y no la puedes utilizar en programas de 32/64 bits.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

<<<-Basura->>>

MM... para que me entiendas un ejemplo en ASM:

Código (asm) [Seleccionar]

MOV  AH, 0Fh        ;Las primeras tres instrucciones guardan
    INT  10h            ;el modo actual de video que esta usando
    PUSH AX             ;el sistema operativo
    CALL MODO_GRAF
    CALL GRAFICAR
    CALL PAUSA
    POP  AX             ;Y aqui reestablece el modo que estaba usando
    MOV  AH, 0          ;el sistema operativo
    INT  10h
    INT  20h


MODO_GRAF:
    MOV  AX, 0010H      ;Establece el modo de video (AH=0)
    INT  10h            ;AL=10H modo grafico: 640x350
    MOV  AH, 0BH        ;Establece la paleta de 16 colores
    MOV  BX, 000BH      ;BH=Page=0, BL=Color Verde claro
    INT  10H            ;Para el fondo de pantalla
    RET


GRAFICAR:
    MOV  BX, 0          ;BL=Color, BH=No. de pagina=0
    MOV  CX, 64         ;CX es la columna de pixel, coord. X
    MOV  DX, 70         ;DX es la linea de pixel, coord Y
G10:
    MOV  AH, 0Ch
    MOV  AL, BL         ;En BL se guardo el color
    INT  10h
    INC  CX             ;Incrementa posiscion en x
    CMP  CX, 576        ;hasta la posicion 576
    JNE  G10
    MOV  CX, 64         ;mueve 64 a CX para usarlo para decrementar
    INC  BL             ;Incrementa el color BL (0-F)
    INC  DX             ;Incrementa en posicion en y
    CMP  DX, 280        ;hasta la posicion 280
    JNE  G10
    RET


PAUSA: ;Espera a que se pulse una tecla
    MOV  AH, 10h
    INT  16h
    RET

http://expo.itch.edu.mx/view.php?f=asm_33

Este ejemplo no es mio pero esta sencillo y muy completo
<<<--Basura-->>>

Queta

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

Y encontrarás funciones como SetConsoleTextAttribute para cambiar el color de las letras, el fondo...
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

<<<-Basura->>>

Cita de: Queta en  4 Abril 2012, 13:17 PM
Sí, esto está programado para 16 bits, o sea, es actualmente obsoleto.
No Importa

Cita de: Queta en  4 Abril 2012, 13:17 PM
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...
<<<--Basura-->>>

Eternal Idol

Usa inline assembly.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón