Feb 13

experimental-os

Tag: admin @ 2:35 pm

La idea es hacer una especie de Emacs OS, con una base en C y ASM (la parte dependiente de la plataforma) a partir de ahi, extender todo lo posible en Lisp. De momento el SO ya arranca, y hare algunas pruebas bajo la supervision de David para luego reprogramarlo entero una vez se hayan visto problemas de planificacion, codigo, dependencias y demas.

Esta fase de prueba llevara el nombre de experimental-os y sera reconstruida de cero como bien decimos una vez este acabada y que nos sirva como referencia para la siguiente. Asi que la version 0.0 de experimental-os ya esta funcionando.

LOC de experimental-os 0.0:

Sh: 1072 (83.29%)
Ansic: 175 (13.60%)
Asm: 40 (3.11%)
Lisp: 0 (0.0%)

Screenshot de experimental-os 0.0

La interrupcion 0x10 se usa de forma general para las funciones de pantalla. De esta forma:

Usaremos 2 puertos, el low port con 0x3D4 para control (low port) y 0x3D5 para datos (high port). Usaremos el bus 0x0F y y 0x0E en el puerto de control indicaremos que nos referimos a que las acciones se efectuaran sobre el cursor. Recordemos que el puerto se emplea para identificar el device, mientras que el bus para el tipo de operacion.

La memoria de video en VGA es de 80×25 y comienza en la direccion 0xB8000 por lo que para comenzar a escribir algo deberiamos referirnos a partir de esta direccion. Debemos tener en cuenta que se emplearan 2 bytes por cada caracter, el primero de ellos para referirse al caracter en si, el segundo para sus attributos. Asi que es importante no pensar que el siguiente byte es del siguiente caracter, ya que sino estariamos escribiendo en los attributos del primero.

Podemos crear un puntero a dicha direccion, siendo el tipo de puntero a una struct de 2 chars, de esta forma la aritmetica de punteros sera mas sencilla a la hora de movernos entre caracteres.

Deberemos escribir de byte en byte porque el dispositivo de video no tiene memoria suficiente para recordar todo (es sincrona). En assembler usaremos outb para enviar bytes (ya sea un word o un dword) en una localizacion de I/O. Emplearemos ASM para GCC inline, por lo que debemos tener muy en cuenta los constraints.

<en desarrollo>

Leave a Reply

You must be logged in to post a comment.