• Viernes 15 de Noviembre de 2024, 02:45

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.


Temas - 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) / 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!

3
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]