Diferencia entre revisiones de «Funcionamiento de la Famicom Disk System»

De WikiNES-77
Saltar a: navegación, buscar
(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...')
 
 
Línea 17: Línea 17:
 
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.
 
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)==
+
 
 +
==Bloque de cabecera del DISK Header Block (BlockID=1)==
  
 
Este bloque guarda un atributo:
 
Este bloque guarda un atributo:
Línea 24: Línea 25:
  
 
Configuración de bytes  
 
Configuración de bytes  
------------------------------------------------------------
+
*(Tamaño 1byte) #$01 BloqueID
(Tamaño 1byte) #$01 BloqueID
+
*(Tamaño 14byte) *NINTENDO-HVC* reconoce los datos para la Famicom Disk
(Tamaño 14byte) *NINTENDO-HVC* reconoce los datos para la Famicom Disk
+
*(Tamaño 1byte) Creación de reconocimiento
(Tamaño 1byte) Creación de reconocimiento
+
*(Tamaño 4byte) Reconocimiento del ID del juego
(Tamaño 4byte) Reconocimiento del ID del juego
+
*(Tamaño 1byte) Número de versión 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) Número de la cara del disco (0:Cara-A 1:Cara-B)
+
*(Tamaño 1byte) Disco adicional #1
(Tamaño 1byte) Disco adicional #1
+
*(Tamaño 1byte) Disco adicional #2
(Tamaño 1byte) Disco adicional #2
+
*(Tamaño 1byte) Disco adicional #3
(Tamaño 1byte) Disco adicional #3
+
*(Tamaño 1byte) $08 Almacenamiento  
(Tamaño 1byte) $08 Almacenamiento  
+
*(Tamaño 30byte) Espacio reservado (La DiskBIOS no lo usa)
(Tamaño 30byte) Espacio reservado (La DiskBIOS no lo usa)
 
  
2-2. Bloque de la cantidad del archivo (BlockID=2)
+
 
 +
==Bloque de la cantidad del archivo (BlockID=2)==
  
 
El bloque almacena el número de archivos que esta en el disco
 
El bloque almacena el número de archivos que esta en el disco
Línea 47: Línea 48:
  
 
Configuración del byte  
 
Configuración del byte  
------------------------------------------------------------
+
*(Tamaño 1byte) #$02 BlockID
(Tamaño 1byte) #$02 BlockID
+
*(Tamaño 1byte) guarda $06 varias veces
(Tamaño 1byte) guarda $06 varias veces
 
------------------------------------------------------------
 
  
2-3. Bloque de cabecera del archivo (BlockID=3)
+
 
 +
==Bloque de cabecera del archivo (BlockID=3)==
  
 
El bloque almacena atributos del archivo.
 
El bloque almacena atributos del archivo.
Línea 62: Línea 62:
  
 
Configuración del byte
 
Configuración del byte
(Tamaño 1byte) #$03 BlockID
+
*(Tamaño 1byte) #$03 BlockID
(Tamaño 1byte) Número archivos (DiskBIOS no usa este dato)
+
*(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 1byte) Número archivos 2 (DiskBIOS no usa este dato)
(Tamaño 8byte) Nombre del archivo (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) Lugar de almacenamiento del archivo  
(Tamaño 2byte) Tamaño 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)
+
*(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)
+
==Bloque de dato del archivo (BlockID=4)==
  
 
El bloque almacena datos de un archivo
 
El bloque almacena datos de un archivo
(Tamaño 1byte) #$04 BlockID
+
*(Tamaño 1byte) #$04 BlockID
(Tamaño -----) Datos del archivo
+
*(Tamaño -----) Datos del archivo
 
 
Volver a Inicio
 
  
 
   
 
   
  
3. Configuracion del posicionamiento
+
=Configuración 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
+
*Bloque de cabecera del disco
 +
*Varios archivos del bloque + Bloque (Varias veces...)
 +
*Bloque de cabecera del archivo
 +
*Bloque de datos del archivo
  
 
   
 
   
Línea 100: Línea 95:
 
=Controles del sistemas de discos=
 
=Controles del sistemas de discos=
  
4020 -W Timer IRQ Registro de control 0
+
*4020 -W Timer IRQ Registro de control 0
4021 -W Timer IRQ Registro de control 1
+
*4021 -W Timer IRQ Registro de control 1
4022 -W Timer IRQ Registro de control 2
+
*4022 -W Timer IRQ Registro de control 2
4023 -W Timer IRQ Registro de control 3  
+
*4023 -W Timer IRQ Registro de control 3  
 
Actualmente en análisis
 
Actualmente en análisis
  
4024 -W Port Output
+
*4024 -W Port Output
4025 -W Control Register Input
+
*4025 -W Control Register Input
4bit eye(look?): Espejo (VRAM A10) 0:LHLH 1:LLHH
+
*4bit eye(look?): Espejo (VRAM A10) 0:LHLH 1:LLHH
  
 
Figura de sincronización
 
Figura de sincronización
  
< Incluye un caso de leer >
+
*< Incluye un caso de leer >
A Inicializar  
+
*A Inicializar  
B Impulsor encendido  
+
*B Impulsor encendido  
C Leer y marcar  
+
*C Leer y marcar  
D IRQ_Activada
+
*D IRQ_Activada
E Leer y marcar  
+
*E Leer y marcar  
 
*1. Datoleido, 4030's 6bit = 0
 
*1. Datoleido, 4030's 6bit = 0
 
*2. Datoleido, 4030's 5bit = 0
 
*2. Datoleido, 4030's 5bit = 0
Línea 135: Línea 130:
  
  
< Si escribe y es un vacio>
+
*< Si escribe y es un vacio>
A Inicializar  
+
*A Inicializar  
B Impulsor encendido  
+
*B Impulsor encendido  
C Escribir_comienzo_marca & empezar a escribir  
+
*C Escribir_comienzo_marca & empezar a escribir  
D IRQ_Activada
+
*D IRQ_Activada
E Escribir final de marca  
+
*E Escribir final de marca  
 
*1. latencia, EscrbirDato #$00
 
*1. latencia, EscrbirDato #$00
 
*2. EscrbirDato #$80
 
*2. EscrbirDato #$80
Línea 159: Línea 154:
  
  
4026 -W ExPort Output
+
*4026 -W ExPort Output
 
Útil para salida de terminal de expansiones donde hay un obturador en la vuelta de la tarjeta RAM.
 
Útil para salida de terminal de expansiones donde hay un obturador en la vuelta de la tarjeta RAM.
  
4030 R- Disk Status Register 0
+
*4030 R- Disk Status Register 0
 
-A-B----
 
-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.
 
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
+
*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
 
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
+
*4032 R- Disk Status Register 1
-----PSD
+
PSD
Información de la unidad de disco  
+
**Información de la unidad de disco  
D Bandera de medio
+
**D Bandera de medio
0: Disco insertado  
+
**0: Disco insertado  
1: Disco no insertado
+
**1: Disco no insertado
S Bandera de preparado  
+
**S Bandera de preparado  
0: Disco preparado  
+
**0: Disco preparado  
1: Disco no preparado
+
**1: Disco no preparado
P Bandera de protegido  
+
**P Bandera de protegido  
0: Escribir sin proteger  
+
**0: Escribir sin proteger  
1: Escribir proteguido
+
**1: Escribir proteguido
  
4033 ExPort Input
+
*4033 ExPort Input
B-------
+
**B
B: Baja bateria en el disco  
+
**B: Baja bateria en el disco  
0: ALTA  
+
**0: ALTA  
1: BAJA
+
**1: BAJA
  
4040-407F Wave Table Data
+
*4040-407F Wave Table Data
  
4080 Volume Control register
+
*4080 Volume Control register
bit TFffffff
+
**bit TFffffff
T: Tipo de control de volumen 0:Bajo ,hundido 1:Inmediato
+
**T: Tipo de control de volumen 0:Bajo ,hundido 1:Inmediato
T=Si vale 1...  
+
**T=Si vale 1...  
F:Ignorar
+
**F:Ignorar
ffffff: Volumen 0:mínimo (sin sonido)..3f:máximo
+
**ffffff: Volumen 0:mínimo (sin sonido)..3f:máximo
T=Si vale 0...  
+
**T=Si vale 0...  
F: Bajo ,hundido 0:Hundido 1:Bajo
+
**F: Bajo ,hundido 0:Hundido 1:Bajo
ffffff: Baja velocidad 0:rápida .. 3f:baja
+
**ffffff: Baja velocidad 0:rápida .. 3f:baja
  
4082 Frequence Control registere(LOW)
+
*4082 Frequence Control registere(LOW)
bit ffffffff: Baja frecuencia
+
**bit ffffffff: Baja frecuencia
  
4083 Frequence Control registere(High)
+
*4083 Frequence Control registere(High)
bit E---ffff
+
**bit E---ffff
E: Si vale 1 el sonido de salida se apaga  
+
**E: Si vale 1 el sonido de salida se apaga  
ffff: Alta frecuencia
+
**ffff: Alta frecuencia
 +
**Al sonar el centro de un teclado si f =#096
  
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
  
4084 Efector Control register
+
*4085 Efector State Control register
bit TFffffff
+
**bit Svvvvvvv
T: Tipo de control del Efector 0:bajo,hundido 1:Inmediato
+
**S:Guarda el estado del efecto.  
T=Si vale 1...  
+
**vvvvvvv: Estado efecto
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
+
*4086 Efector Speed Control register(Low)
bit Svvvvvvv
 
S:Guarda el estado del efecto.
 
vvvvvvv: Estado efecto
 
  
4086 Efector Speed Control register(Low)
+
*4087 Efector Speed COntrol register(High)
4087 Efector Speed COntrol register(High)
+
**RSssssss
RSssssss
+
**R: Reset
R: Reset
+
**S: Máxima velocidad  
S: Máxima velocidad  
+
**ssssss: Velocidad Efector
ssssss: Velocidad Efector
 
  
4088 ----ABCD
+
*4088 ABCD
Desconocido
+
**Desconocido
  
4089 E-------
+
*4089 E-------
E: Sonido de salida Activado/Desactivado 0:Activado 1:Desactivado
+
**E: Sonido de salida Activado/Desactivado 0:Activado 1:Desactivado
  
  

Revisión actual del 17:30 16 ago 2011

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