• Viernes 15 de Noviembre de 2024, 03:01

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - simpleThings

Páginas: [1]
1
ASM (Ensamblador) / Enumeración de los PCI-s: casi pero no lo consigo
« en: Viernes 5 de Febrero de 2010, 06:56 »
Hola a todos!

Estaba tratando de escribir un codigo lo maximo breve posible(he de conseguir meterlo en el bootsector). El codigo escanea el PCI bus en busca del CDROM, una vez encontrado el dicho device, necesito obtener el IRQ que usa el dispositivo.

La cosa es que no encuentra el CDROM.

El codigo no falla, seguro, lo he revizado muchas veces. Estoy seguro pero que me falla la lógica del programa/codigo.
A continuacion pongo el pseudocodigo(no pongo el ASM que es mogollon y cuesta mas leerlo):

Código: C
  1.  
  2. for (i=0; i<256; i++){
  3.      for(j=0; j<32; j++){
  4.           if (Device(Bus:i, Device:j).VendorID != 0ffffh){
  5.                 if (Device(Bus:i, Device:j).ClassCode == CDROMClassCode){
  6.                      readIRQRegister(Bus:i, Device:j);
  7.                 } else if (Device(Bus:i, Device:j).ClassCode == PCIBridgeFamilyClassCode){
  8.                       if (readSecondaryBusRegister(Bus:i, Device:j) != 0){
  9.                             indexingIntoTableOcuppedBusNumber(readSecondaryBusRegister(Bus:i, Device:j));
  10.                       } else {
  11.                            SubordinaryBusNumber(Bus:i, Device:j) = 0ffh;
  12.                            SecondaryBusNumber(Bus:i, Device:j) = (queryFromTableUnOcuppedBusNumber());
  13.                       }
  14.                 }
  15.           }
  16.      }
  17. }
  18.  
  19.  

No se si en algun momento les debo mandar algun comando a los PCI-Bridges o configurar tambien algo mas para poder sumergir me mas en la raiz de los PCI-s....

Puesto que al pasar por el PCI-bridge, ése me convierte los mensajes tipo 1 a tipo 0, he pasado totalmente de los mensajes tipo 0. He hecho bien?

Está claro que tengo una que otra laguna importante. Agradeceria cualquier ayuda o consejo.

Adios!

2
ASM (Ensamblador) / Re: Puntero en modo texto aparece solo..
« en: Miércoles 27 de Enero de 2010, 16:18 »
Muchas gracias por la pronta ayuda!
 ^_^

3
ASM (Ensamblador) / Puntero en modo texto aparece solo..
« en: Miércoles 27 de Enero de 2010, 12:48 »
Hola!

He buscado en internet, pero es una de las busquedas dificiles porque con "pointer" me salen otras cosas.

El tema es que para imprimir los mensajes de flujo del programa en pantalla, escribo directamente en 0b8000h.
Y me aparece un guion-bajo parpadeante en la segunda linea de la pantalla. Parpadea incuso bajo las letras. No sé quién lo mandó a la pantalla y por qué en segunda línea.

Ya estoy en modo protegido. Alguien me puede explicar cómo ha ocurrido eso? Cómo lo quito?

Gracias!

4
ASM (Ensamblador) / Re: Obtener el "[ORG XxXXX]"
« en: Martes 22 de Diciembre de 2009, 03:59 »
Hola!

Yo estuve malito un tiempo.
Hoy he vuelto a probarlo y ha salido.

En el principio del codigo puse la directiva del origen a 0(supongo que cualquier numero sirve)
luego para cada direccion que me faltaba, puse "direccion_que_me_falta EQU (direccion_segun_nasm - principio_del_codigo_a_cargar_en_memoria)+7C00h" y luego simplemente "LGDT direccion_que_me_falta" (por ejemplo).

Adios!   :hola:

5
ASM (Ensamblador) / Re: Obtener el "[ORG XxXXX]"
« en: Sábado 28 de Noviembre de 2009, 11:37 »
Gracias por responder.

En el estandar, leí que si no especifico el lugar en el que quiero cargar el bootloader, en el caso de los PC, se lo cargará en 0x7c0. Y por eso he preferido dejarlo a zeros, ademas que ya estoy loco con el little-endian y en El Torito, little y big endian están mesclados. Por eso, por miedo a no meter la pata, he decidido dejar lo a zero y que lo carge en la direccion por defecto. Ademas que uso Hyper-V y me da miedo pisar algo en RAM.

Me ha agobiado bastante el ASM, y por eso me dí unos dias de descanso, pero en cuanto me sienta mejor de los animos, voy a probar algo parecido a:

Pseudocodigo:
Código: ASM
  1.  
  2. [BITS 16]
  3. Principio_de_El_Torito:
  4.       ;bla bla bla estandares....
  5. Fin_de_El_Torito:
  6. Nota_uno:
  7. ORIGEN equ (Fin_de_El_Torito-Principio_de_El_Torito)+0x7c00
  8. [ORG ORIGEN]     ;o igual lo ponga en el principio por si las moscas
  9.       ;preparo el salto a modo protegido
  10.       jmp 08h:codigo_protegido
  11. [BITS 32]
  12. codigo_protegido:
  13.    ;etc....
  14.    ;GDT,GDTR,IDT etc...
  15. Nota_dos:
  16.  
  17.  

Como se puede ver, uso el mismo nasm para generar la ISO y de paso generar el bootloader que lleva dentro. En "Nota_uno" empieza el sector que El Torito carga en RAM y acaba en "Nota_dos". Mi capricho es generar todo a partir de nasm y tal vez eso me trae los problemas.
Cuando vuelva a intentarlo, si no me sale de nuevo, voy a generar la ISO con algun programa, pero sería una pena.

Cuando tenga algo nuevo, lo comento.

6
ASM (Ensamblador) / Obtener el "[ORG XxXXX]"
« en: Sábado 28 de Noviembre de 2009, 06:56 »
Hola, soy nuevo en el ASM.

Hice un bootstrap que corre desde el floppy y entra en modo protegido, luego algo de terminal de texto etc. Nada de sistemas operativos,  simple bootstrap.
Luego volví a escribir e bootstrap para un CD de arranque y se me reinicia continuamente al iniciar.
Estaba comentando el codigo hasta el punto en que funcione. Y el punto en que no se me reinicia, es el justo despues de cargar el EAX con el bit de PE puesto a uno en el registro de CR0, y justo antes del salto largo al codigo protegido.

Sospecho que la directiva [ORG 0x7C0] no va bien, porque si cargo programas que no hacen al nasm calcular direcciones en memoria a partir de marcadores, va bien y los programas se ejecutan como lo esperado.

Me gustaria conocer alguna forma de determinar dónde se ha cargado el programa de arranque y poder usar lo luego en las directivas de nasm para calcular mis saltos  :brickwall:  
Ahora voy a intentar imprimir el IP por pantalla, pero aun si me sirviera, no seria una solucion automatizada. Se le ocurre a alguien alguna solucion mas comoda?

Gracias!

Una cosa mas:
        Tengo la directiva del [ORG ...] en la mitad del codigo y no sé si eso cuenta para nasm como el principio de todo el codigo sin importar la posicion del [ORG..], ó el ORG toma efecto en el lugar exacto donde se declara la directiva.

Páginas: [1]