Funcionamiento de la Famicom Disk System
Introducción
Aquí tengo información, que para muchos sera vital y a otros les sonará a chino, de como funcionaba la FDS. Disfrútenlo.
Fecha: 1998/05/17 por Goroh. Traducido por sgt. bowhack a inglés. Traducido a Español por KAISER-77.
Esto se explicará en este documento:
- Configuración de cada bloque del disco
- Errores de la BIOS
- Puertos
- Como emularla
Configuración del Disco
Este sistema esta formado por un grupo de bloques y llamadas a datos. Cada ID de cada bloque ocupa 1 byte en el principio de cada bloque que lo describe.
2-1. Bloque de cabecera del DISK Header Block (BlockID=1)
Este bloque guarda un atributo:

Configuración de bytes
(Tamaño 1byte) #$01 BloqueID (Tamaño 14byte) *NINTENDO-HVC* reconoce los datos para la Famicom Disk (Tamaño 1byte) Creación de reconocimiento (Tamaño 4byte) Reconocimiento del ID del juego (Tamaño 1byte) Número de versión del juego (Tamaño 1byte) Número de la cara del disco (0:Cara-A 1:Cara-B) (Tamaño 1byte) Disco adicional #1 (Tamaño 1byte) Disco adicional #2 (Tamaño 1byte) Disco adicional #3 (Tamaño 1byte) $08 Almacenamiento (Tamaño 30byte) Espacio reservado (La DiskBIOS no lo usa)
2-2. Bloque de la cantidad del archivo (BlockID=2)
El bloque almacena el número de archivos que esta en el disco
Ejemplo:

Configuración del byte
(Tamaño 1byte) #$02 BlockID (Tamaño 1byte) guarda $06 varias veces
2-3. Bloque de cabecera del archivo (BlockID=3)
El bloque almacena atributos del archivo.
Ejemplo:

Configuración del byte
(Tamaño 1byte) #$03 BlockID
(Tamaño 1byte) Número archivos (DiskBIOS no usa este dato)
(Tamaño 1byte) Número archivos 2 (DiskBIOS no usa este dato)
(Tamaño 8byte) Nombre del archivo (DiskBIOS no usa este dato)
(Tamaño 2byte) Lugar de almacenamiento del archivo
(Tamaño 2byte) Tamaño del archivo
(Tamaño 1byte) Tipo del archivo (0:Dato 1:Datos caracter 2:Dato de la tabla del nombre) (DiskBIOS no distingue entre 1 y 2)
2-4. Bloque de dato del archivo (BlockID=4)
El bloque almacena datos de un archivo (Tamaño 1byte) #$04 BlockID (Tamaño -----) Datos del archivo
Volver a Inicio
3. Configuracion del posicionamiento
Bloque de cabcera del disco Varios archivos del bloque + Bloque
Varias veces... ---------
Bloque de cabecera del archivo Bloque de datos del archivo
Volver a Inicio
Disk Errors
Ver aquí.
Controles del sistemas de discos
4020 -W Timer IRQ Registro de control 0 4021 -W Timer IRQ Registro de control 1 4022 -W Timer IRQ Registro de control 2 4023 -W Timer IRQ Registro de control 3 Actualmente en análisis
4024 -W Port Output 4025 -W Control Register Input 4bit eye(look?): Espejo (VRAM A10) 0:LHLH 1:LLHH
Figura de sincronización
< Incluye un caso de leer > A Inicializar B Impulsor encendido C Leer y marcar D IRQ_Activada E Leer y marcar
- 1. Datoleido, 4030's 6bit = 0
- 2. Datoleido, 4030's 5bit = 0
| A | B | C | D || E | 8bit |___|______|___|---||------___| 7bit |___|______|---|---||------___| 6bit |---|------|---|---||---------| 5bit |___|______|___|___||___---___| 3bit |---|------|---|---||---------| 2bit |---|---___|___|___||_________| 1bit |___|------|---|---||------___| Note | | | | || 1 2 |>
< Si escribe y es un vacio>
A Inicializar
B Impulsor encendido
C Escribir_comienzo_marca & empezar a escribir
D IRQ_Activada
E Escribir final de marca
- 1. latencia, EscrbirDato #$00
- 2. EscrbirDato #$80
- 3. EscrbirDato, 4030's 6bit = 0
- 4. Latencia
| A | B | C | D || E | 8bit |___|______|______|---||------___| 7bit |___|______|___---|---||------___| 6bit |---|------|------|---||---------| 5bit |___|______|______|___||___---___| 3bit |---|------|______|___||______---| 2bit |---|---___|______|___||_________| 1bit |___|------|------|---||------___| Note | | | 1 | 2 || 3 4 |>
4026 -W ExPort Output
Útil para salida de terminal de expansiones donde hay un obturador en la vuelta de la tarjeta RAM.
4030 R- Disk Status Register 0 -A-B---- Causa un error cuando A y B son 1 después él llama a la información contenido en los mandos del disco.
4031 R- Port Input Cuando los datos estan divididos, los datos transferidos llegan a definirse en un disco y se unen mientras la lectura de esa dirección no sea vacio
4032 R- Disk Status Register 1
PSD
Información de la unidad de disco D Bandera de medio 0: Disco insertado 1: Disco no insertado S Bandera de preparado 0: Disco preparado 1: Disco no preparado P Bandera de protegido 0: Escribir sin proteger 1: Escribir proteguido
4033 ExPort Input B------- B: Baja bateria en el disco 0: ALTA 1: BAJA
4040-407F Wave Table Data
4080 Volume Control register bit TFffffff T: Tipo de control de volumen 0:Bajo ,hundido 1:Inmediato T=Si vale 1... F:Ignorar ffffff: Volumen 0:mínimo (sin sonido)..3f:máximo T=Si vale 0... F: Bajo ,hundido 0:Hundido 1:Bajo ffffff: Baja velocidad 0:rápida .. 3f:baja
4082 Frequence Control registere(LOW) bit ffffffff: Baja frecuencia
4083 Frequence Control registere(High) bit E---ffff E: Si vale 1 el sonido de salida se apaga ffff: Alta frecuencia
Al sonar el centro de un teclado si f =#096
4084 Efector Control register bit TFffffff T: Tipo de control del Efector 0:bajo,hundido 1:Inmediato T=Si vale 1... F: Ignorar ffffff: Velocidad de hundir del efector T=Si vale 0... F: Efecto bajo/hundido 0:Hundido 1:Bajo ffffff: Velocidad baja, hundida 0:rápida .. 3f:baja
4085 Efector State Control register bit Svvvvvvv S:Guarda el estado del efecto. vvvvvvv: Estado efecto
4086 Efector Speed Control register(Low) 4087 Efector Speed COntrol register(High) RSssssss R: Reset S: Máxima velocidad ssssss: Velocidad Efector
4088 ----ABCD Desconocido
4089 E------- E: Sonido de salida Activado/Desactivado 0:Activado 1:Desactivado
Especificaciones del cable
Cable de unidad del disco
1 3 5 7 9 B 2 4 6 8 A C
- 1:Corriente
- 2:Salida Impulsor Activado $4025's 3bit
- 3:Tierra
- 4:Salida Lectura $4025's 2bit
- 5:Entrada Sentido Sense Voltage $4033's 8bit
- Entiende la situación de encendido cuando el motor esta activado.
- 6:Entrada Lectura Datos[9] $4031
- 8:Entrada Escritura Protegida $4032's 3bit
- 9:Entrada MediaSet $4032's 1bit
- A:Salida Escritura: DATA $4024
- B:Salida Escritura: $4025's 1bit
- C:Entrada Preparado: $4032's 2bit
Cable de extensión
1 3 5 7 9 2 4 6 8 A
- 1:Tierra
- 2:Corriente
- 3:Entrada $4033's 1bit Salida $4026's 1bit
- 4:Entrada $4033's 2bit Salida $4026's 2bit
- 5:Entrada $4033's 3bit Salida $4026's 3bit
- 6:Entrada $4033's 4bit Salida $4026's 4bit
- 7:Entrada $4033's 5bit Salida $4026's 5bit
- 8:Entrada $4033's 6bit Salida $4026's 6bit
- 9:Entrada $4033's 7bit Salida $4026's 7bit
- A:NC
Método correspondiente al emulador
- Usa $6000-$DFFF para RAM
- Organiza un puntero para enseñar la posición de dato actual en el disco
- Para las figuras sincronizadas del $4025, si IRQ está en un intervalo estacionario, este usa un puntero del actual dato de un disco de 8 bits para verlo con velocidad de un incremento.
- Datos de salida para el actual puntero dentro de $4031
- Usa leer y escribir el último dato de cada bloque vacio, referido a las figuras sincronizadas de $4025 (puedes fácilmente *preguntar a archivos FDS como esto)
- Los 2 bits del $4025 muestran como conseguir el principio para un puntero de un disco cuando funciona.
- $4030 devuelve un valor que no causa un error cada vez que el tiempo empieza a atestarse cuando lee.
- Los 8 bits del $4033 muestran un 0 en todo momento.