Funcionamiento de la Famicom Disk System

De WikiNES-77
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.


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)


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


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)

Bloque de dato del archivo (BlockID=4)

El bloque almacena datos de un archivo

  • (Tamaño 1byte) #$04 BlockID
  • (Tamaño -----) Datos del archivo


Configuración del posicionamiento

  • Bloque de cabecera del disco
  • Varios archivos del bloque + Bloque (Varias veces...)
  • Bloque de cabecera del archivo
  • Bloque de datos del archivo


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í.