Kyp escribió:
Pero esa es la ROM 5.03 que es la del Betadisk 128, la del Betadisk 48 es la 3.0 y sigo pensando que no funciona igual. Y es que no hay sitio en la entrada de directorio para guardarlo, son 16 bytes: 8 para el nombre, 1 para el tipo, 2 para la dirección de carga, 2 para la de ejecución, 1 para el tamaño en sectores, y 2 para el sector y pista donde está el archivo en el disco. Total 16 bytes, no cabe más información
He estado mirando el desensamblado de TR-DOS 5.03, pero hace meses que no manejo ese código y me es difícil seguirlo ahora, a pesar de que ya está bastante comentado.
A la hora de manipular ficheros, TR-DOS 5.03 apunta a una zona de 16 octetos, como dices, llamada "file descriptor area": 8 octetos para el nombre, 1 para el tipo, 2 para la dirección de carga,
2 para la longitud en octetos, 1 para la longitud en sectores, 1 para el primer sector de la primera pista, 1 para la primera pista. Por tanto sí está la longitud real. Lo que no recuerdo es si TR-DOS graba además, al comienzo de cada fichero de tipo BASIC o CODE, la cabecera propia de Spectrum, la que se graba en las cintas (GDOS y G+DOS lo hacen así).
Seguro que en TR-DOS 3 es similar. Piensa que de otro modo no podrías, por ejemplo, cargar una pantalla en memoria sin machacar las variables del sistema...
He encontrado esta explicación que en su día le mandé a César Hernández cuando estaba programando la emulación de TR-DOS para Pentagon en ZEsarUX:
Lo que se hace es que el sistema operativo usa un búfer para guardar
cada sector que lee del disco. Como la transferencia de sectores es de
más bajo nivel que la transferencia de ficheros, la rutina que
transfiere los ficheros sabe qué hacer con el contenido de cada sector
que va transfiriendo, hasta completar la longitud del fichero, que ya
conoce anticipadamente. Por ejemplo: del último sector de un fichero,
una vez leído del disco al búfer, se transferirá a la memoria solo el
número de octetos que completen la longitud del fichero en cuestión.
Si no recuerdo mal, TR-DOS crea el búfer de sector cuando lo necesita,
moviendo el BASIC hacia arriba para hacer hueco.