Buenass....
Hola gente!! bueno, vengo medio liado con esto y queria trarar de aclararme algunas dudas. Estoy estudiando el funcionamiento de las rom del msxdos1 y msxdos2. Tema que me parece muy interesante. Eso si, preparense para leer alguna que otra burrada propia de un neofito en el tema
Pues para ser neofito como te autodenominas parece que tienes bastante claras las cosas...
Por lo pronto, veo que un diskrom clasico tiene 16kb en los cuales esta el kernel, el Disk-Basic y el driver del dispositivo.
Eso es. Además incorpora una rutina que lee el sector 0 del disco, comprueba si es compatible con MSXDOS y seguidamente ejecuta el código contenido en ese sector. Aquí es donde un disco normal formateado con MSXDOS, intenta cargar el MSXDOS.SYS, y este a su vez el COMMAND.COM. En caso de no encontrarlo pues salta al DiskBasic, y si el código es diferente (por ejemplo cualquier juego que funcione por sectores) pues se ejecutará ese código.
Una rom MSXDOS2 tiene 64kb mapeados en segmentos de 16kb. Segun tenia entendido, esta rom dentro solo trae el kernel msxdos2, pero viendo el codigo fuente en el sitio de Arjen Zeilemaker observo que el mismo tiene una seccion dentro del segmento cero en donde va un driver...!
Eso es. Son 4 páginas como bien dices. La 4 es el mismo DOS1 del que antes hablábamos. Y si, puede llevar o no llevar driver. No es obligatorio.
Pregunta uno: basicamente como esta estructurada una rom msxdos2?
Pues como tu mismo dices. La pagina 0 tiene el arranque y suele contener el driver (disquetera, ide...). La 1 y 2 pues sigue siendo código del MSXDOS2. (kernel). Y la 3 es el MSXDOS1 kernel. (que de nuevo lleva el driver)
pregunta dos: como funcionan las interfaces que tienen soporte tanto para msxdos 1 y msxdos 2? supongo que incluyen el diskrom de 16kb y la rom de 64kb del msxdos2 todo en uno. De ser asi cuando se inicia el sistema si detecta que es un msx1 sin ram mapeada activa el dos1 y si es msx2 entonces activa el msxdos2?? o sino?
Es algo más enrevesado y creo que ya lo expliqué una vez en algún hilo. La diskrom original del DOS2 comprueba primeramente si es un MSX2 o superior. En caso contrario aborta todo. Así que ni DOS1 ni nada. Deja continuar la rutina de inicialización del MSX en el siguiente slot. En caso de ser un MSX2 entonces comprueba si hay memoria mapeada y busca 6 segmentos de 16k. Si los tiene la máquina se instala.
La siguiente comprobación es mirar el sector 0 del disco que arranca. Si está formateado con DOS1, tira atrás todo lo que había hecho hasta aquí (posicionar un montón de variables y reservar memoria) y salta al kernel del DOS1 propio, el contenido en la misma diskrom de 64k. Y a partir de aquí exactamente igual que lo explicado en DOS1.
Si no hay disco, salta al diskBasic, pero al de DOS2.
El kernel del 2.31 tambien mira teclas... si se pulsa el 1, se "fuerza" el DOS1, aunque el disco sea de DOS2, o bien no exista el disco.
pregunta tres: para no molestar tanto al peloton de programadores, donde puedo conseguir mas informacion sobre esto?
Realmente en ningún sitio. Yo me tuve que mamar todo el código del que hablas, desensamblar un montón, hacer un millón de pruebas, etc, etc... No hay info en ningún sitio desgraciadamente. Así que todo pasa por compartirla entre los que nos hemos pegado ya muchas leches para conseguir hacer drivers y demás.
En cuanto a lo último que preguntabas sobre cómod funciona un dispositivo en DOS1 y DOS2, realmente no hace falta que el dispositivo tenga nada preparado para DOS2. Solo necesita su driver, el contenido en las 16k del DOS1. Si el kernel del DOS2 se instala, cuando se accede a esa unidad llama directamente a ese driver.
El porqué de tener en el kernel del DOS2 "duplicado" el driver es por ahorrar slots. La distribución original del MSXDOS2 no llevaba driver alguno. Tu lo pinchabas en un slot y si tu MSX ya tenía disquetera, interna o externa, pues tenías DOS2 con tu disquetera.
Ahora bien, si hoy en día quieres hacer una tarjeta controladora de algún tipo de dispositivo (SDs, USBs, etc...) pues lo que toca es meter el driver controlador en la parte DOS2 y DOS1 dentro de la misma DISKROM, yaque así solo gastas un slot/subslot y lo tienes todo compacto. En cualquier caso, las partes a implementar en el driver son muy muy pocas y sencillas (se dice pronto) pues básicamente con hacer una rutina que lea un sector y escriba un sector tienes casi todo el driver hecho.
Y bueno, no se si te habré ayudado pero después de tanto preguntar tú... ¿qué es exactamente lo que quieres hacer?
Porque digo yo que esta información no la necesitarás para algo, ¿no?