Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Modo de Video en Consola Windows (https://www.clubdelphi.com/foros/showthread.php?t=45488)

LordGarfio 04-07-2007 20:17:08

Modo de Video en Consola Windows
 
En Microsoft Visual C++ v6 escribí un pequeño trozo de código para consola Windows la cual me debe permitir cambiar el modo gráfico a 320x200 sin exito, pues, el sistema me muestra la pantalla Azul diciéndome que se ha producido un Fallo de Protección General.... durante la ejecución. :(

El trozo de código que se encarga de tal camio es el siguiente:

( Utilizando la directiva: _asm directive )
xor ah,ah
mov al,0x13h ; Poner el Modo de Video a 320x200 pixeles.
int 10h ; Llamar a la interrucción 0x10 de la Bios.

El trozo de código de arriba funciona perfectamente compilando con el Watcom C++.

¿ Alguien sabe como puedo cambiar el video a 320x200 utilizando la BIOS en una aplicación de consola bajo Windows ?

Saludos.

courtois 05-07-2007 08:02:48

no puedes ejecutar una interrupción de hardware de esa forma en modo protegido dentro de windows, solo en modo real, de cualquier forma para cambiar las propiedades de la consola debes usar la api de windows checate como funciona SetConsoleTextAttribute

Ñuño Martínez 05-07-2007 08:58:03

Cita:

Empezado por LordGarfio
¿ Alguien sabe como puedo cambiar el video a 320x200 utilizando la BIOS en una aplicación de consola bajo Windows ?

Como ya ha dicho curtois, no se puede porque la BIOS está protegida al acceso directo. Te recomiendo que, para esos menesteres, utilices Allegro (o Allegro.pas).

LordGarfio 05-07-2007 18:34:00

Gracias chicos por vuestra ayuda.

Ya veo que no puede hacer una llamada a la Interrupción 0x10h desde el Modo Protegido en Windows, usando el Microsoft Visual C++ :confused:

¿ Qué hace el Watcom C++ entonces ? que no da ningún problema.

Estuve mirando esta página para intentar aclararme: http://www.missl.cs.umd.edu/winint/index1.html

En mi aplicación despues de poner el video en consola a 320x200 pixeles, cargo una gráfico y lo pinto en pantalla escribiendo en la siguiente dirección:

BYTE *memVideo = (BYTE *) 0xA0000;

De todas maneras si se os ocurre algo, aconsejarme. ;)

Saludos.

courtois 06-07-2007 01:11:29

No se por que me dio la impresión que querias escribir texto en 320x200, pero en fin, por lo que puedo ver, dado que es asm de 16 bits lo que ejecutas asumo que el exe que generas realmente es para ms-dos, cuando ejecutas exe de ms-dos en windows, se activa el subsistema de 16 bits, con una ventana de ms-dos que usa una cpu virtual y media entre el sistema y la aplicacion, asi que es windows y no watcom c++ quien hace que esto funcione, obviamente no funciona con vc++ porque este solo genera exes de consola de 32 bits para windows, y en ese modo una instruccion asi no es permitida, igualmente si compilaras tu aplicación con watcom para que te genere un exe de consola de windows, no funcionaría, ahora, no se para que desees usar cga estando dentro de windows, teniendo muchas opciones para dibujar como la api de windows, opengl o directdraw, y si usas delphi además las clases y métodos del canvas.
saludos :)

Ñuño Martínez 06-07-2007 08:23:32

Ya veo que estás más perdido que un pulpo en un garaje (creo que tendré que cambiar mi status :D )
Cita:

Empezado por LordGarfio
Ya veo que no puede hacer una llamada a la Interrupción 0x10h desde el Modo Protegido en Windows, usando el Microsoft Visual C++ :confused:

¿ Qué hace el Watcom C++ entonces ? que no da ningún problema.

Hacer no hace nada que no haga MS-Visual C++. Lo que pasa es que, como ha explicado courtois perfectamente, Watcom C++ es un compilador para DOS, que es un sistema operativo total, completa e inequívocamente distinto a MS-Windows, aunque este es capaz de emularlo en ciertas condiciones. Es cierto que Windows utiliza (en principio) el mismo vector de interrupciones que DOS (como también lo hacen OS/2, GNU/Linux para PC, etc., pero no MacOS X, GNU/Linux, BeOS...), pero utilizar interrupciones BIOS en un SO que no sea DOS es incómodo, innecesario y, casi siempre, peligroso.

Si estás interesado en saber el por qué, busca y leete el libro "Sistemas Operativos Modernos" de Andrew S. Tanenbaum. Te prevengo de que es un texto universitario así que preparate.

Cita:

Empezado por LordGarfio
En mi aplicación despues de poner el video en consola a 320x200 pixeles, cargo una gráfico y lo pinto en pantalla escribiendo en la siguiente dirección:

BYTE *memVideo = (BYTE *) 0xA0000;

De todas maneras si se os ocurre algo, aconsejarme. ;)

Me repito: utiliza Allegro, no te arrepentirás. Te recomendaría OpenGL pero te veo muy principiante como para eso (No te lo tomes a mal, que yo también fui novato ;) ). Cuando tengas más mundo ya podrás pegarte con OpenGL.

Y si alguien te ofrece DirectX (o DirectDraw), sé valente y di: No, gracias. Que luego la desintoxicación sale cara :p ;) :D

LordGarfio 06-07-2007 17:38:46

DIOS!, no quiero ver nada del Sr. Andrew S. Tanenbaum, ya tuve bastante con su libro de Redes de Computadores.

Gracias compañeros por vuestras ayudas :)

courtois 08-07-2007 08:50:50

Cita:

Empezado por Ñuño Martínez
Y si alguien te ofrece DirectX (o DirectDraw), sé valente y di: No, gracias. Que luego la desintoxicación sale cara

jajaja, vamos ñuño, si va de chulada eso, no le saques, mira que hay wrappers para delphi :D


La franja horaria es GMT +2. Ahora son las 10:14:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi