Home
Home
Principio Anterior Contenido Próximo Término
Principio - Anterior - Contenido - Próximo - Término
English Deutsch Italiano
English - Deutsch - Italiano

Apéndice B: Órdenes de la Unidad de Disco

La Unidad de Disco 1541 es un dispositivo flexible en sí mismo, al contener una CPU, RAM y ROM, es una pequeña computadora que puede ejecutar muchas órdenes.
Si está buscando una referencia más completa con multitud de ejemplos, eche un vistazo al manual original del C1541. Se encuentra disponible en formato texto en: http://project64.c64.org.

Utilice el siguiente programa para enviar una orden al disco.

10 OPEN 1, 8, 15                  ; Abre el Canal de Ordenes
20 PRINT#1, Orden$                ; Envía la Orden
30 CLOSE 1                        ; Cierra el Canal

Con el siguiente programa puede mostrar el estado actual del disco.

10 OPEN 1, 8, 15                  ; Abre el Canal de Errores
20 INPUT#1, NE$, ER$, PT$, SC$    ; Lee el Mensaje
30 CLOSE 1                        ; Cierra el Canal
40 PRINT "N. Error: "; NE$        ; Muestra los Resultados
50 PRINT "Error   : "; ER$
60 PRINT "Pista   : "; PT$
70 PRINT "Sector  : "; SC$

Power64 emula las siguientes órdenes para las unidades de disco 1541 emuladas:

NEW - Formatea un disco
Abreviatura: N
Sintaxis: "NEW:<Nombre del Disco>,<ID>"
Donde <Nombre del Disco> puede tener hasta 16 caracteres de longitud e <ID> puede o bien ser omitido (sólo se borra el directorio en un disco ya formateado) o bien debe tener exactamente 2 caracteres de longitud.

COPY - Realiza una copia de un archivo en el mismo disco
Abreviatura: C
Sintaxis: "COPY:<Archivo Destino>=<Archivo Origen>" o
"COPY:<Archivo Destino>=<Archivo Origen 1>, <Archivo Origen 2>, ..."
Si se listan varios archivos origen, el archivo destino estará formado por la concatenación del contenido de los archivos de origen.

RENAME - Renombra un archivo
Abreviatura: R
Sintaxis: "RENAME:<Nombre Nuevo>=<Nombre Antiguo>"

SCRATCH - Elimina archivos
Abreviatura: S
Sintaxis: "SCRATCH:<Archivo>"
Puede utilizar los comodines '?' y '*' para eliminar varios archivos a la vez.

INITIALIZE - Reinicia el C1541 a la condición de encendido
Abreviatura: I
Sintaxis: "INITIALIZE"

VALIDATE - Comprueba y repara la consistencia del disco
Abreviatura: V
Sintaxis: "VALIDATE"
Validate solucionará las inconsistencias que puedan ser causadas por archivos que se abrieron pero nunca se cerraron. ¡Cuidado: Validate también elimina todos los archivos aleatorios!

POSITION - Cambia la posición de lectura/escritura en un archivo relativo
Abreviatura: P
Sintaxis: "P"+CHR$(Canal)+CHR$(Registro Bajo)+CHR$(Registro Alto)+CHR$(Posición)
Ejemplo:
OPEN 15, 8, 15            ; Abre el Canal de Ordenes
OPEN  5, 8, 5, "ArchivoRelativo,L,";CHR$(40)
                          ; Crea un Archivo Relativo con un tamaño
                          ; de grabación de 40 Bytes
PRINT#15,"P"+CHR$(5)+CHR$(17)+CHR$(0)+CHR$(1)
                          ; Establece la Posición del Archivo en
                          ; el primer Byte del Registro 17
                          ; (La numeración para Registros y
                          ; Posición de Bytes comienza con 1
                          ; (no con 0))
PRINT#5,"Datos"           ; Escribe Datos
PRINT#15,"P"+CHR$(5)+CHR$(9)+CHR$(0)+CHR$(4)
                          ; Establece la Posición del Archivo
                          ; en el cuarto Byte del Registro 9
                          ; (La numeración para Registros y
                          ; Posición de Bytes comienza con 1
                          ; (no con 0))
INPUT#5,X$                ; Lee Datos
CLOSE 5                   ; Cierra el Canal
CLOSE 15                  ; Cierra el Canal de Orden
BLOCK-READ - Lee un bloque del disco en la RAM interna de la unidad de disco
Abreviatura: B-R
Sintaxis: "B-R:"+STR$(Canal)+STR$(Unidad de Disco)+
STR$(Pista)+STR$(Sector)

Ejemplo:
OPEN 15, 8, 15            ; Abre el Canal de Ordenes
OPEN  5, 8, 5, "#"        ; Abre el Canal 5 hacia el buffer de RAM
PRINT#15,"B-R: 5 0 18 2"  ; Lee la Pista 18 / Sector 2 en el
                            buffer por el canal 5
PRINT#15,"B-P: 5 0"       ; Sitúa el Puntero al Inicio del Bloque
FOR I = 0 TO 253          ; Un Bloque tiene como máximo 254 Bytes
GET#5, A$                 ; Obtiene otro Byte
IF (ST <> 0) THEN ...     ; Comprueba si es el Final del Bloque
   ...                    ; Procesa el Byte
NEXT I
CLOSE 5                   ; Cierra el Canal
CLOSE 15                  ; Cierra el Canal de Orden
BLOCK-WRITE - Escribe un bloque del disco desde la RAM interna de la unidad de disco
Abreviatura: B-W
Sintaxis: "B-W:"+STR$(Canal)+STR$(Unidad de Disco)+
STR$(Pista)+STR$(Sector)

Ejemplo:
OPEN 15, 8, 15            ; Abre el Canal de Orden
OPEN  5, 8, 5, "#"        ; Abre el Canal 5 hacia el buffer de RAM
PRINT#5, X$               ; Escribe una cadena de caracteres
PRINT#5, Y$               ; Escribe otra cadena de caracteres
PRINT#5, Z$               ; Escribe aún otra cadena de caracteres
                            (total: máx. 254 Bytes)
PRINT#15,"B-W: 5 0 18 2"  ; Escribe en la Pista 18 / Sector 2
                            desde el buffer por el canal 5
CLOSE 5                   ; Cierra el Canal
CLOSE 15                  ; Cierra el Canal de Ordenes
BUFFER-POINTER - Sitúa el puntero para un bloque del buffer
Abreviatura: B-P
Sintaxis: "B-P:"+STR$(Canal)+STR$(Posición)
Ejemplo: ver BLOCK-READ

BLOCK-ALLOCATE - Señala un bloque del disco como utilizado
Abreviatura: B-A
Sintaxis: "B-A:"+STR$(Unidad de Disco)+STR$(Pista)+STR$(Sector)
Ejemplo:
OPEN 1, 8, 15                ; Abre el Canal de Ordenes
PRINT#1,"B-A: 0 12 7"        ; Señala el Bloque en la
                             ; Pista 12 y Sector 7
INPUT#1, NE$, ER$, PT$, SC$  ; Obtiene el sector que se ha señalado
CLOSE 1                      ; Cierra el Canal de Orden/Error
PRINT "Pista:;PT$;"Sector";SC$
BLOCK-FREE - Señala un bloque del disco como no utilizado
Abreviatura: B-F
Sintaxis: "B-F:"+STR$(Unidad de Disco)+STR$(Pista)+STR$(Sector)
Ejemplo:
OPEN 1, 8, 15         ; Abre el Canal de Ordenes
PRINT#1,"B-F: 0 12 7" ; Libera el Bloque en la Pista 12 y Sector 7
CLOSE 1               ; Cierra el Canal de Ordenes/Errores
BLOCK-EXECUTE - Lee un bloque del disco en la unidad de disco y lo ejecuta
Abreviatura: B-E
Sintaxis: "B-E:"+STR$(Canal)+STR$(Unidad de Disco)+STR$(Pista)+STR$(Sector)
Observación: Ejecutar un bloque requiere obviamente de la emulación completa de la CPU del MOS 6502 en la unidad 1541. Si desea utilizar esta orden asegúrese de que la Emulación Completa de la Unidad de Disco 1541 está habilitada. De otra manera, recibirá un Mensaje de Error 'Orden no Emulada'.

USER1 - Lee un bloque del disco en la RAM interna de la unidad de disco
Abreviatura: U1
USER1 trabaja como BLOCK-READ con la excepción de que U1 considera la unión con el siguiente bloque como parte de los datos. Por tanto un bloque leído con U1 tendrá 256 (en lugar del máx. de 254) bytes de longitud.

USER2 - Escribe un bloque del disco desde la RAM interna de la unidad de disco
Abreviatura: U2
USER2 trabaja como BLOCK-WRITE con la excepción de que U2 considera la unión con el siguiente bloque como parte de los datos. Por tanto un bloque escrito con U2 debería tener 256 (en lugar del máx. de 254) bytes de longitud.

USER3..USER8 - Ejecuta un programa de usuario en la unidad de disco
Abreviatura: U3..U8
La ejecución del programa comienza en la dirección de memoria $0500 + 3*(x-3) (p.e. $0500 para U3, $0503 para U4...) Observación: Ejecutar un bloque requiere obviamente de la emulación completa de la CPU del MOS 6502 en la unidad 1541. Si desea utilizar esta orden asegúrese de que la Emulación Completa de la Unidad de Disco 1541 está habilitada. De otra manera, recibirá un Mensaje de Error 'Orden no Emulada'.

USERI - Intercambia el C1541 entre los modos C64 y VC20
Abreviatura: UI
Sintaxis: "UI+" o "UI-"
Esta es una función que no hace nada en Power64. En un C1541 real provoca un ligero ajuste de la velocidad de transferencia

USERJ - Reinicia el C1541 a la condición de encendido
Abreviatura: UJ
Sintaxis: "UJ"
Sustituto de INITIALIZE

MEMORY-READ - Lee datos de la RAM de la unidad de disco
Abreviatura: M-R (Debe utilizar la abreviatura, la forma completa no está permitida).
Sintaxis: "M-R"+CHR$(Dirección Baja)+CHR$(Dirección Alta)+CHR$(Tamaño)
Ejemplo:
OPEN 1, 8, 15             ; Abre el Canal de Ordenes
PRINT#1, "M-R"+CHR$(52)+CHR$(18)+CHR$(3)
                          ; Especifica 3 Bytes
                          ; comenzando en la dirección $1234
GET#1, A$, B$, C$         ; ¡Obtiene todos los Valores de una vez!
CLOSE 1                   ; Cierra el Canal
MEMORY-WRITE - Escribe datos en la RAM de la unidad de disco
Abreviatura: M-W (Debe utilizar la abreviatura, la forma completa no está permitida).
Sintaxis: "M-W"+CHR$(Dirección Baja)+CHR$(Dirección Alta)+CHR$(Tamaño)
Ejemplo:
OPEN 1, 8, 15        ; Abre el Canal de Ordenes
PRINT#1, "I"         ; ¡Primero Inicializa la Unidad de Disco!
PRINT#1, "M-W"+CHR$(52)+CHR$(18)+CHR$(8)
                     ; Especifica la Dirección $1234 y 8 Bytes
PRINT#1, "POWER64"   ; Escribe 8 Bytes (incluye Retorno de Carro)
CLOSE 1              ; Cierra el Canal
MEMORY-EXECUTE - Ejecuta un programa de usuario en la unidad de disco
Abreviatura: M-E (Debe utilizar la abreviatura, la forma completa no es legal).
Sintaxis: "M-E"+CHR$(Dirección Baja)+CHR$(Dirección Alta)
Observación: Ejecutar un bloque requiere obviamente de la emulación completa de la CPU del MOS 6502 en la unidad 1541. Si desea utilizar esta orden asegúrese de que la Emulación Completa de la Unidad de Disco 1541 está habilitada. De otra manera, recibirá un Mensaje de Error 'Orden no Emulada'.

PARTITION - Crea o selecciona una partición en un disco 1581
Esta orden sólo funciona en discos 1581, no en discos 1541 ó 1571.
Abreviatura: / (Debe utilizar la abreviatura, la forma completa no es legal).
Dependiendo de los parámetros pasados a la orden, ésta tiene una semántica u otra.
Sintaxis:
a) "/:<Partición>" - Selecciona una partición dada
b) "/" - Vuelve al directorio raíz del disco. No es posible subir sólo un nivel.
c) "/:<Partición>,"+CHR$(Inicio Pista)+CHR$(Inicio Sector)+
CHR$(Contador Low)+CHR$(Contador High)+",C"

Crea una nueva partición de Contador bloques comenzando en Inicio Pista/Inicio Sector. Esta partición es originalmente sólo una colección de bloques sin estructura. Para utilizar una partición es necesario moverse a esa partición y formatearla primero.
Ejemplo:
OPEN 1, 8, 15             ; Abre el Canal de Ordenes
PRINT#1, "/:SubDir,"+CHR$(12)+CHR$(0)+CHR$(232)+CHR$(3)+",C"
      ; Crea una Partición: 1000 Bloques desde Pista 12, Sector 0
      ; 1000 = 3*256 + 232 = 25*40
PRINT#1, "/:SubDir"       ; Se Coloca en la Nueva Partición
PRINT#1, "N:POWER64,64"   ; Formatea la Partición
PRINT#1, "/"              ; Vuelve al Directorio Raíz
CLOSE 1                   ; Cierra el Canal

Una partición debe cumplir algunos requerimientos para poder ser un subdirectorio
.) Debe tener al menos un tamaño de 120 bloques
.) Su tamaño debe ser múltiplo de 40 bloques
.) Tiene que empezar en el sector 0 de una pista

Home Principio Anterior Contenido Próximo Término Top of Page

Fuente: http://www.salto.at/Power64/Documentation/Power64-Leame/AB-Ordenes_Disco.html
Power64 Homepage: http://www.infinite-loop.at y http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Austria - Europe
Últiomo Modificación: 29 de Febrero de 2008
Valid HTML 4.01!