Funcionamiento de la Famicom Disk System

De WikiNES-77
Revisión del 17:15 16 ago 2011 de S05ad1fa root (discusión | contribuciones) (Página creada con '=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. Tradu...')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

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:

Fdsfuntabla1.jpg

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:

Fdsfuntabla2.jpg


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:

Fdsfuntabla3.jpg


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.



Agradecimientos: Texto extraído de aquí.