• Viernes 15 de Noviembre de 2024, 07:44

Autor Tema:  Asm En C++  (Leído 1981 veces)

mansonet

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Asm En C++
« en: Jueves 1 de Septiembre de 2005, 06:53 »
0
Tengo la siguiente funcion a la cual llamo para extraer informacion de un modo en Vesa
Donde "info" es un puntero a la estructura de modos de vesa

Código: Text
  1. void GetVesaModeInfo(int* modo,vesamodes* info)
  2. {
  3.   asm{
  4.     mov ax,0x4f01
  5.     mov di,info
  6.     mov cx,modo
  7.     int 0x10
  8.   };
  9. };
  10.  

No logro que en el registro cx me guarde el contenido de "modo", me guarda la direccion de memoria a la cual apunta...
Alguien podria darme alguna solucion... o algunos conceptos que creo q me faltan para hacer que funcione...
Desde ya gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Asm En C++
« Respuesta #1 en: Jueves 1 de Septiembre de 2005, 09:50 »
0
El modo no tiene ningun contenido, en info tenes las informacion sobre ese modo si la funcion te devuelve 0 en AH, si te devuelve 1 es porque hubo un error.
Todo eso teniendo en cuenta que VESA esta soportado y en AL te devuelve 4Fh.

Si todo va bien en ES:DI vas a tener los datos sobre el modo, que podes ver en este pagina http://www.opferman.net/Text/svga.txt son algo asi:

/* VESA Mode Information Structure */
typedef struct vesa_type {
    short ModeAttrib;
    char WindowA_Attrib, WindowB_Attrib;
    short WinGran, WinSize, SegWinA, SegWinB;
    long WindowPointer;
    short Bits_Per_Scanline, HorzRes, VertRes;
   
    char Width, Height, MemPlanes,
          BPP, NumBanks, MemType,
          SizeBank, NumberPages, Reserved,
          RedMaskSize, RedFieldPos, GreenMaskSize,
          GreenFieldSize, BlueMaskSize, BlueFieldSize,
          ReservedMaskSize, ReservedMaskPos,
          DirectColorModeInfo, ReservedBlock[216];
         
} VesaInfo, *VesaInfoPtr;

Tambien aca podes encontrar informacion al respecto:
http://www.ctyme.com/intr/rb-0274.htm

Probablemente tu problema sea que no estas configurando bien el registro ES, ¿tu programa es un EXE?


Si lo que queres es obtener el modo actual aca tenes como hacerlo:
http://www.ctyme.com/intr/rb-0276.htm

 :smartass:  :devil:  :comp:  :ph34r:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

mansonet

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Asm En C++
« Respuesta #2 en: Jueves 1 de Septiembre de 2005, 17:23 »
0
La idea era poder pasarle a la funcion GetVesaModeInfo por medio del puntero "modo" el modo del video que quiero sacar la informacion que se guarda en "info"....
El problema es que "modo" apunta a FFFE por poner algo, que en esa parte de memoria esta guardado el primer modo de Vesa que soporta, pero al meterlo en el registro CX en vez de guardarse 101h o algun otro modo se guarda FFFE....

Gracias por la data Eternal Idol me tengo que poner a leer a ver como lo resuelvo.....

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Asm En C++
« Respuesta #3 en: Jueves 1 de Septiembre de 2005, 17:51 »
0
Es que precisamente le dices que guarde FFFE.

Por ejemplo si quisieras guardar en edx 2 bytes apuntados por esi tendrías que usar:

movzx edx, word ptr [esi]