Arquitectura de la PC Mapa de Memoria Mapa de Memoria (2) Mapa de Memoria (3) Mapa de E/S en una PC Power On Self Test (1) Antes de iniciar su operación el sistema verificará el correcto funcionamiento de la CPU Chequea si el contenido de la ROM es el correcto (realiza un checksum del contenido de la ROM completa que en fábrica se ajusta de modo que el resultado del check sea cero). Detecta el tipo de adaptador de video instalado. Lo inicializa en modo texto 80x25.Escribe en la BIOS DATA AREA los principales datos de interés para el sistema que proporciona este controlador. Comprueba la correcta interacción con el 8042 y setea el modo de trabajo con los diferentes ports de E/S que proporciona este chip. Si el Timer 1 funciona correctamente se lo programa para generar un pulso al final de la cuenta, cuenta cíclica, y duración de la misma 15 mseg aproximadamente. Power On Self Test (2) Comprueba el correcto funcionamiento para el canal de DMA 0. Si los test descriptos indican que el Timer 1 y el canal 0 de DMA funcionan correctamente, entonces se dispara el refresco de momeria. Comprueba el 8259 y lo inicializa con los valores default de los vector es de Interrupción. A los que usa, los apunta a las rutinas de la ROM correspondientes. Cuenta la memoria RAM y comprueba su funcionamiento Una vez finalizada la cuenta de memoria, chequea los restantes timers y canales de DMA. Si funcionan correctamente los inicializa de acuerdo a la forma en la que van a trabajar cada uno de ellos. Cheque el teclado y el timer tick, habilita sus interrupciones en el 8259. Power On Self Test (3) Testea el funcionamiento de las unidades de disco flexible y rígido. Una vez comprobado las inicializa, y escribe los resultados y principales parámetros en la BIOS DATA AREA. Chequea si existen ports serie. Inicializa a los que encuentra y guarda resultados en BIOS DATA AREA. Chequea si existen ports paralelo. Inicializa a los que encuentra y guarda resultados en BIOS DATA AREA. Establece si existen extensiones BIOS. Esto es: La ROM BIOS de las PC provee un camino para integrar adaptadores de E/S con su propia ROM on­board. Llama a la rutina Bootstrap loader para la carga del sistema operativo. Detección de extensiones BIOS El POST busca extensiones de BIOS. El rango de direcciones de memoria en las que se pueden mapear estas ROMs va desde la C0000h hasta la EFFFFh. Se busca dentro de este rango cada 2K una firma fija e igual a 55AAh. Si la encuentra asume que en esa página de 2k comienza una extensión de BIOS. Si el POST detecta alguna ROM adicional, le transfiere temporariamente el control. La extensión de BIOS. Detección de extensiones BIOS (2) Inicializará el hardware para el que fue diseñada Realizará, del mismo modo que el POST (de la ROM del sistema) un checksum, cuyo resultado debe ser 0 para que la ROM se considere de contenido válido. Interceptará las interrupciones que necesite. Devolverá al POST el control del sistema (RET) dejando al hardware asociado a la extensión BIOS, listo para su uso. Extensiones BIOS: Mapa de Memoria Boostrap Loader del BIOS Lee el primer sector físico del disco, del que está configurado en el equipo en la secuencia de arranque. Carga los 512 bytes en memoria RAM (0000h:7C00h) Salta al primer byte (debe haber allí una instrucción válida) Boostrap Loader del BIOS (2) En ese sector debe residir un programa que sepa cargar al Sistema Operativo. Entonces: − Debe leer del disco los archivos necesarios para bajar a la memoria. − Para ello deben conocer la forma en que está organizada la información en el disco − Debe descargarlos en memoria y en algún momento transferirles la ejecución. Práctica: Primer código en modo protegido %define KERNEL_MEMORY 8000h %define VIDEOMEM 0b8000h ORG KERNEL_MEMORY ; acá nos carga nuestro bootsector use16 cli mov eax,cr0 ;lee el registro de control 0. or al,1 ;setea el bit PE Protection Enable. mov cr0,eax ;pasa a modo protegido. jmp short $+2;vacía la cola de ejecución. Práctica: Primer código en modo protegido mp: in al,60h ;lee el teclado dec al ;compara con esc jnz mp ;sino es esc sigue mov eax,cr0 and al,0feh ;resetea el PE. mov cr0,eax ;retorna a modo real. Práctica: Primer código en modo protegido mov ecx, 80*25 mov eax,VIDEOMEM sar eax,4 mov ds,ax limpiar_pantalla: mov byte [ecx * 2 ­ 2], 0 mov byte [ecx * 2 ­ 1], 1Bh dec ecx jne limpiar_pantalla jmp $ Uso de nasm y Linux nasm ­f bin ­o bootsector.bin bootsector.asm nasm ­f bin ­o KERNEL.BIN kernel.asm ­l kernel.lst sudo mkdosfs ­C floppy.dsk ­F 12 1440 sudo mount ­o loop ­t msdos floppy.dsk /mnt/prueba sudo cp KERNEL.BIN /mnt/prueba sudo umount /mnt/prueba dd if=floppy.dsk bs=512 skip=1 of=floppy1.dsk cat bootsector.bin floppy1.dsk > floppy.img sudo rm ­f floppy.dsk rm floppy1.dsk Uso de bochs <bochs:1> c – Inicia la ejecución (Dos consolas: Una de texto degub y otra gráfica de emulación) ^c – Para la ejecución info r – Muestra los valores de los registros info cpu – Otra vista de los registros s – Ejecución paso a paso n – Ejecución paso a paso, no para Call's Uso de bochs (2) help vb 0x1811:0x111 – Setea un Break Point blist – Veo los BP bpd 1 – Deshabilito un BP bpe 1 – Habilito un BP