Bueno se que este tema estuvo parado pero se debe a que estoy terminando el año en la facultad y recien dentro de dos semanas le voy a poder dedicar algo de tiempo a mis hobbies ( que utopia que estudiando ing en sistemas tenga que esperar hasta las vacaciones para programar ), pero mientra me gustaria que con la participacion de todos lo miembros del foro lleguemos a una conclusion de lo que seria la version 0.0.1 del Sistema operativo CodeName SolocodigOS
:
Sobre el SO en si propongo:
* monousuario
* monotarea
* modo real
* NASM / FASM
* sistema de archivos no jerarquico
* prompt integrado al SO
* lo mas simple posible
* funciones con nombres en ingles
* interfaz bien definida ( orden de parametros estandar, valores de retorno estandar , no se alteran los registros etc )
* esquema comun de comentarios ( explicacion de cada metodo de una forma comun )
* uso de constantes
* modularidad
* usar la BIOS lo mas que se pueda
Sobre los servicios:
algunas son mas urgentes que otras pero vale tenerlas en cuenta desde un inicio
modulo de E/S ( nombre propuesto: "IO" ):
* imprimir caracter ( putChar )
* imprimir cadena ( putString )
* imprimir cadena con longitud definida ( putStringLen )
* imprimir numero decimal ( putDecimal )
* imprimir numero hexadecimal ( putHexa )
* imprimir numero octal ( putOctal )
* obtener caracter ( getChar )
* obtener cadena ( getString )
* obtener cadena con longitud definida ( getStringLen )
* obtener numero decimal ( getDecimal )
* obtener numero hexadecimal ( getHexa )
* obtener numero octal ( getOctal )
* escribir caracter a diskette ( byteToFloppy )
* escribir bloque a diskette ( blockToFloppy )
* leer caracter de diskette ( byteFromFloppy )
* leer bloque de diskette ( blockFromFloppy )
* ir a posicion definida de la pantalla ( gotoXY )
* limpiar la pantalla ( clearScreen )
modulo de cadenas ( nombre propuesto: "String" ) :
* obtener longitud de cadena ( strLen )
* comparar cadenas ( strCmp )
* verificar si la cadena es un numero ( isNum )
* verificar si la cadena es un numero Hexa ( isHexa )
* verificar si la cadena es un numero Octal ( isOctal )
el kernel ( nombre "Kernel"
):
* reiniciar ( reboot )
* apagar ( halt )
* cargar un programa a memoria y ejecutarlo ( loadProgram )
* el metodo principal ( init )
* setear la configuracion ( setup )
* establecer una interrupcion ( setInt )
* obtener la direccion de una interrupcion ( getInt )
mi idea es que los servicios de IO y String se "presten" a traves de la interrupcion 21h.
la mayoria de estos metodos ya han sido escritos por ustedes y yo alguna ves pero lo ideal seria escribir los metodos de nuevo definiendo bien la interfaces ( no son muy largos ) comentandolo bien y discutiendolos en el foro en busca de errores y mejores alternativas.
lo que faltaria es el tema del sistema de archivos que se discutira cuando tengamos todo esto andando y testeado ( en un principio podriamos cargar los programas de direcciones fijadas en el codigo hasta que tengamos algun sistema de archivos ).
lo unico que yo no escribi de los metodos de arriba es la parte de diskette debido a que desconosco la geometria de los diskettes de 3 y 1/2 y por eso cuando lo escribi , escribia y leia del diskette pero no traia lo que yo queria por lo tanto desisti, mi idea es que al llamar a la funcion de escribir al diskette nosotros usemos el diskette como una memoria lineal y que el metodo se encargue del tema de la geometria ( pistas cilindros cabezales etc ) , esto va permitir ( algun dia ) un paso mas suave a un disco duro
ESPERO OPINIONES