Timex FDD3000 Ayer: lo real. Hoy: emulación. A manera de introducción La primera parte de este artículo es una traducción resumida de los dos tutoriales publicados por el blog en portugués "PLANETA SINCLAIR", dedicado a dar noticias sobre nuevos programas además de rescatar software en cinta o discos para el Spectrum, TC-2048 y 2068, así como el FDD3000. La segunda parte es una colección de mis notas sobre los nombres de archivo, según la norma Sinclair, CP/M, FDD y demás sistemas afines. La tercera es otra recolección de mis notas comparando los comandos del MS-DOS con los del FDD. La cuarta compara los comandos de disco y ficheros GW-Basic con los del FDD. Y para cerrar, continúo con mis observaciones acerca del emulador y lo que puedo y no, hacer con él. FDD = Floppy Disk Drive de Timex SOT = Sistema Operativo de discos de Timex (TOS) token = palabra reservada del BASIC Sinclair I. El emulador de FDD El tutorial sobre como usar el emulador de FDD empieza diciendo.... La emulación del Timex FDD 3000 solo puede ser realizada con el emulador FUSE, emulando un ZX Spectrum 48K o un Timex TC-2048 teniendo como periférico un FDD 3000. Emulador Fuse https://sourceforge.net/projects/Fuse-emulator/ Versão 1.5.0 64bits El problema es que si uno busca dicha version de 64 bits, resulta que no se encuentra ahi en ese enlace. Solamente esta la version 32 bits. Más luego veremos donde se halla dicho enlace. Una vez descargada esta version de FUSE, hay que ejecutarlo, hay que ir al menu de opciones -> perifericos -> discos y encontrar FDD 3000 y seleccionarlo. Luego ir al menu de máquinas y seleccionar ya sea el Spectrum 48k o el TC-2048. Una vez hecho eso ya debe de ser posible ir al menu medios y en discos ver que aparece como seleccionable el FDD y sus 4 unidades, mientas en el menú máquinas aparece al final la opcion RESET FDD 3000. En caso de que el FUSE no ubicara la ROM requerida automaticamente, hay que ir al menu opciones -> seleccionar roms -> roms de perifericos y allí elegir FDD3000. Luego ir a opciones -> opciones de disco y marcar cada unidad del fdd a simple cara 40 tracks para trabajar con discos hitachi de 3" a 140k o doble cara 80 traks para discos de 3.5" o 5.25" a 620k. Si bien se pueden seleccionar otros perfericos a la vez que el FDD, es posible que algunos de ellos no sean compatibles con el FDD. Una vez correctamente configurado el emulador, se puede guardar la configuracion mediante opciones -> salvar. Ahora, cuando se trabaja con discos y se actualizan o crean nuevos datos en ellos, hay que salvar el disco antes de cerrar el emulador, de lo contrario todo el trabajo se pierde, muy util si eso último es lo que se desea. Las imagenes de discos de FDD con las que trabaja FUSE, tienen la misma extensión que los discos de +3 y Amstrad: DSK. Pese a eso, los discos de TIMEX son incompatibles con los del +3, debido a que tienen formato y capacidad distintos. Por eso un +3 no puede leer discos de Timex y viceversa. Como todo usuario del FDD ya sabe, el sistema operativo reside y se carga del disco, a diferencia del Opus Discovery o el +3, de modo más parecido al Disciple y +D o el CP/M, debido a eso, un disco de 3" se formatea a 164k, pero deja libres solamente 140k para el usuario. Ahora pasamos a poner un disco en FUSE, entrando al menu medios -> disco -> fdd3000 -> unidad A -> insertar y elegimos el disco con el SOT llamado tosv2.dsk. Y si luego de eso nada sucede, hay que ir y hacer reset fdd3000 (en el fdd existen dos botones de reset: uno en la interfaz y el otro en el case principal) ahora el icono de unidad de discos en la barra de estados del emulador se pondrá verde indicando que ha reconocido la imagen de disco. Si el SOT aun no se carga tras eso, volvemos a hacer RESET y al final aparecerá en pantalla el copy right de Sinclair y el de Timex. Ahora basta con hacer CAT* para ver el contenido del disco. La segunda parte del tutorial trata de LOAD, FORMAT, GOTO y como cargar el CP/M. En este caso se coloca el disco MONITOR, se bootea mediante la opcion de RESET FDD, se cambia el disco por el de CP/M, se vuelve a hacer RESET FDD y tras eso ya entramos al sistema operativo CP/M. Con eso se termina el tutorial, pero aun no sabemos donde hay un enlace para descargar la versión FUSE que incorpora el FDD. Asi que a continuación vamos a buscar la web Timex Computer World de Johnny Red, dedicada a todo lo que que TIMEX produjo; una vez ahí, vamos a su sección descargas - > discos en donde aparecen un monton de programas para FDD en formato .dsk y ahi al final de la página está el enlace correcto donde descargar la version con FDD que buscamos. https://sourceforge.net/projects/fdd3000e/files/v_0.2.0/ Y lo que dice su README: FDD3000 Emulator es an emulador del Timex FDD3000 floppy system para el ZX Spectrum. Version 0.2.0 'Keep It Simple Stupid' Esta es una versión 'embedded' (incrustada) - usa la infrastructura del emulador FUSE. Lo que sí funciona: - todo excepto los puertos seriales (AFAIKT = hasta donde yo sé) El nuevo parche (fuse-1.5.0-fdd3000-48-128) permite usar FDD3000 con ZX Spectrum 128k. Para esto el 128K requiere de la versión STAVI de la ROM (fdd3stavi.rom) Nota: trabajo aun en progreso, puede ser algo inestable, cosas extrañas pueden pasar :) Cambios _______ 20180214: - versión cambiada a 0.2.0 - Se ha mejorado el timing Fuente: README, actualizado el 2018-02-16 En TRY2EMU, web en polaco, también se puede encontrar el FDD incluida la version de 64 bits en su sección Emulatory / ZX Spectrum i pokrewnych / FDD300 Timex, cuyo enlace es: https://www.t2e.pl/t2e-download/zx-spectrum-i-pokrewnych.15 Y para terminar, en TIMEX C. W. de J. Red, se menciona que se puede también seleccionar los modelos 128k y +2, pero el FDD los bootea de frente al modo 48k. Nota: siempre que el sistema se cuelgue, basta con RESET (F5) y RESET FDD3000. Ahora que ya tenemos el emulador de FDD funcionando, pasamos a... II. Nombres de archivo Tanto en CP/M como en MS-DOS se trabaja con nombres de ficheros de 8 caracteres máximo, pudiendose expandir añadiendole una extensión (indicando el tipo de archivo) de tres caracteres más un punto como separador. El Spectrum en cambio, usa nombres de 10 caracteres. Admite espacios, de hecho, todos los signos del juego de caracteres ASCII, incluidos los tokens. Debido a ello, podemos usar los sigtes nombres a manera de ejemplo: "programa 1" - nombre valido de 10 car. con espacio en la norma Sinclair "progr1.bas" - nombre de 6 letras y extensión ".bas" para programas BASIC "progr/1.mc" - nombre de 7 letras y extensión ".mc" para indicar código máquina "program1.d" - nombre de 8 letras y extensión de un solo caracter ".d" "programa1 BIN " - nombre de 9 caracteres más el token "BIN" al final Aunque podemos, como ya dijimos antes, usar cualquier palabra reservada del Spectrum, lo más aconsejable es usar aquellos que sean más significativos para qué tipo de archivos. Como por ejemplo: BIN y USR - para ficheros binarios, preferiblemente UDGs CODE - para código máquina en general SCREEN$ - para las pantallas DATA y DIM - para las matrices en general CHR$ y STR$ - para designar que se trata de matrices de cadena En Basic 128 solamente es posible usar los tokens ingresándolos mediante CHR$, del modo sigte.: "nombre"+CHR$ token. Este uso de los nombres es posible de hacer en los Microdrives, así como con el Opus Discovery y cualquier sistema de discos que use la norma Sinclair. El uso de tokens da el error de "nombre no valido" en el Wafadrive. En cambio, cuando el +3 salva un fichero con tokens en el nombre, al hacer un CAT, el nombre aparece con los tokens reemplazados por letras. El Spectrum también diferencia mayúsculas de minúsculas. Así "alfa", "Alfa" y "ALFA son todos nombres distintos. El Microdrive y el Opus D1 mantienen esta norma. Pero el FDD usa la misma norma del CP/M o el MS-DOS para los nombres, todo lo cual significa que hay restricciones en el uso de los caracteres pensados como nombre. Los sigtes. símbolos son usados por el SOT: ".","^","?" y "+", así que no pueden ser usados como parte del nombre. No acepta los códigos CHR$ del 0 al 31. Así ">=" y "<>" son aceptados como parte del nombre si se tipean separadamente. Tampoco diferencia entre mayúsculas y minúsculas. Si el fichero es salvado como "alfa" aparecerá en pantalla como "ALFA". Los tokens tampoco son aceptados como nombre o parte de ello. En suma, todos los nombres de la norma Sinclair deben ser adaptados a la norma FDD. II.I Comodines Mientras que CP/M u MS-DOS usan "*" y "?" como comodines en la busqueda de nombres, el FDD usa "+" y "?". DIR a*.* - su equivalente FDD es CAT *"+.+" DIR archivo?.txt - en FDD es CAT *"archivo?.txt" La extensión no está limitada a letras, pueden usarse números y otros signos válidos para nombres en la norma Timex. Por ejemplo: ".123", ".m/c", ".b_1" Y tras ver todo lo relacionado con los nombres, pasamos a... III. Discos: formatos, letras y subdirectorios Tanto en CP/M como en MS-DOS, los discos son accedidos por su letra, siendo generalmente un max. de 4 unidades entonces las letras son a, b, c y d. de este modo DIR "b:" lee el directorio del disco en la segunda unidad. Sinclair en cambio eligió números para su sistema de Microdrives pudiendo conectar al Interfaz 1 hasta 8 unidades, así CAT 2 leía el contenido de la segunda unidad. Opus siguió esta misma regla para su sistema Discovery. Timex sin embargo, eligiò otro metodo para sus discos, si bien usa letras al estilo CP/M o el MS-DOS, estos no se acceden del mismo modo. Para leer el directorio de la unidad por defecto, que es la 1 o en este caso siempre la "A", en CP/M o MS-DOS basta con tiper DIR. En el FDD como ya mencionamos (igual que en el Wafadrive) se usa CAT*. El equivalenmte a DIR "b:" en Rotronics Wafadrive es CAT *"b:", pero en el caso del FDD, para hacer lo mismo, es decir, ver solamente el directorio de la unidad B sin que la seleccionemos como unidad por defecto, se debe tipear: GOSUB *"B"D: CAT *: DRAW * En cambio si estamos en A y queremos cambiar de unidad por defecto, en CP/M y MS-DOS basta con hacer B: y eso es todo, B ahora es la unidad por defecto. En FDD hay que tipear GOTO *"B"D y así con cada letra para cambiar la unidad por defecto. De lo contrario hay que recordar qué nombre tiene el disco en "B:", ya que el método de Timex es ver el catálogo por nombre y hacer CAT *":disco2" por ejemplo. Ninguno de los sistemas de disco para Spectrum con los que compitió el FDD en el año que salió, ni despues, ofrecía trabajar con subdirectorios al estilo del MS-DOS, ya fuese el Opus Discovery, el Beta128 o el Disciple por dar unos ejemplos. Ni siquiera el CP/M, este usaba números de usuario que podían usarse de modo similar, y que sería usado por el +3 más tarde. Nota: Solo el MB-02+ y el Unidos para Disciple y +D ofrecerían posteriormente el uso de subdirectorios en disco. Ya que CP/M carece de subdirectorios, a continuación vamos a comparar los comandos del MS-DOS con los del SOT. Para el manejo de subdirectorios el MSDOS usa los sigtes. comandos: MKDIR (MD) por make directory (crear directorio), CHDIR (CD) por change directrory (cambiar dir.), XCOPY y MOVE (copiar y mover sub directorios) y RMDIR (RD) por remove dir. (borrar subdirectorio). El FDD tiene como equivalentes: DIM* en vez de MD, GOTO* en vez de CD, MOVE* en lugar de XCOPY y MOVE, ERASE* en vez de RD. A continuación, ejemplos de los comandos MS-DOS y sus equivalentes SOT: MD pruebas - crea carpeta "pruebas": DIM *"pruebas.dir" MD pruebas\d1 - DIM *"pruebas:d1.dir" MD pruebas\d2 pruebas\d3 - DIM *"pruebas:d2.dir": DIM *"pruebas:d3.dir" CD pruebas - GO TO *"pruebas" CD pruebas\d1 - GO TO *"pruebas:d1" CD ..\.. - vuelve al dir. raiz: GO TO *":" XCOPY d1 d3 - copia carpeta d1 dandole nombre d3 - sin equivalente, en su lugar hacer DIM *"d4.dir": MOVE *"d1:+.+" TO "d4" MOVE d1\archivo3.txt d4\archivo.txt - MOVE *"d1:archivo3.txt" TO "d4:archivo.txt" REN d3 d4 - renombra d3 como d4: LET *"d3" TO "d4" DEL d4 - elimina contenido de toda la carpeta "d4": ERASE *"d4:+.+" RD d4 - elimina la carpeta "d4": ERASE *"d4" MOVE C:\Users\carlos\pruebas3\d2\d22\a1.txt C:\Users\carlos\pruebas3\d1\d11\d111 - MOVE *"Users:carlos:pruebas3:d2:d22:a1.txt" TO "Users:carlos:pruebas3:d1:d11:d111" Nota1: el nombre de volumen dado al disco con FORMAT, es considerado el directorio raiz. DIM * solo puede crear hasta 15 directorios por disco, llegando a 16 con el dir. raiz. MOVE * no puede copiar subdirectorios ni discos, solo el contenido de los mismos. Nota2: no es posible FORMATear sin un dar un nombre de volumen o usando un espacio en blanco. Las instrucciones FORMAT *"a" TO "" y FORMAT *"a" TO " " son invalidas. Ahora que ya vimos la comparativa entre los comandos MS-DOS y FDD pasamos a... IV. Ficheros En este apartado vamos a comparar los comandos de disco del GW-Basic con los del FDD. SAVE filename[,a][,p] donde: a= formato ASCII y p= protegido contra LIST (*) Escribe al diskette el programa que reside actualmente en memoria. Equivalente SOT: SAVE *filename LOAD filename[,r] donde: r= run: el programa arranca una vez cargado (**) Carga el programa de un diskette. LOAD borra el contenido actual de la memoria y cierra todos los archivos antes de cargar el programa. Equivalente SOT: LOAD *filename RUN filename (*) Carga el programa de un diskette en memoria y lo ejecuta inmediatamente. RUN borra el contenido actual de la memoria y cierra todos los archivos antes de cargar el programa. Equivalente SOT: LOAD *filename (**) MERGE filename Carga el programa de un diskette, pero no suprime el programa actual todavía en memoria. Equivalente SOT: MERGE *filename KILL filename Elimina el archivo de un diskette. Este comando se puede también utilizar con los ficheros de datos. Equivalente SOT: ERASE *filename NAME old filename AS new filename Cambia el nombre de un archivo de diskette. Solamente el nombre del archivo se cambia. El archivo no se modifica, y permanece en el mismo espacio y posición respecto al disco. Este comando se puede también utilizar con los ficheros de datos. Equivalente SOT: LET *old filename TO new filename BSAVE y BLOAD salvan y cargan ficheros binarios (programas en código máquina. Equivalente SOT: SAVE */ LOAD *... CODE xxx[,yy] CHAIN filename Carga y ejecuta un programa encadenándolo al que estaba en memoria que es el que lo invoca. Es decir, como MERGE no se pierden las variables en memoria. Se comparten. RESET comando usado solamente cuando se va a cambiar el disco en la unidad en uso. Equivalente SOT: el botón de RESET (*) opciones inexistentes en SOT (**) solo si se ha salvado con SAVE *... LINE xx IV.1 - Crear un archivo secuencial Las declaraciones y las funciones siguientes se utilizan con los archivos secuenciales: CLOSE, LOF, EOF, OPEN, INPUT#, PRINT#, LINE INPUT#, PRINT# USING, LOC, UNLOCK, LOCK, WRITE#. Ejemplos de comandos: OPEN "O",#1,"filename" - OPEN # *1,"DATA";O - crea el fichero PRINT# o WRITE# - PRINT *# - permiten escribir los datos en el fichero dado CLOSE #1 - CLOSE # *1 - cierra el archivo para su posterior reapertura OPEN "I",#1,"filename" - OPEN # *1,"DATA";I - abre el fichero para su lectura INPUT# o LINE INPUT# - INPUT *# - leen los datos (no hay INPUT...LINE en SOT) OPEN "A",#1,"filename" - OPEN # *1,"DATA";A - permite añadir más datos al fichero PRINT #1; USING ... - PRINT *#1; USING$("###.#",x) - solamente BetaBasic Ejemplo 1 10 OPEN "O",#1,"DATA" 20 INPUT "Nombre";N$ 30 IF N$="fin" THEN CLOSE#1:END 40 INPUT "Sección";D$ 50 INPUT "Fecha de contratación";H$ 60 PRINT#1,N$;","D$",";H$ 70 PRINT:GOTO 20 Al ejecutarlo con RUN nos pide que ingresemos los datos: Nombre? MICKEY MOUSE Sección? ayudante de audio visual Fecha de contratación? 01/12/72 Nombre? SHERLOCK HOLMES Sección? investigacion Fecha de contratación? 12/03/65 Convertido al SOT: DIM *"DATA" 10 OPEN # *1,"DATA";O: 15 LET c$=CHR$34: LET e$=CHR$13 20 INPUT "Nombre?";N$ 30 IF N$="fin" THEN PRINT *#1,N$: GOTO 80 40 INPUT "Sección?";D$ 50 INPUT "Fecha de contratación?";H$ 55 LET N$=c$+N$+c$: LET D$=c+D$+c$ 60 PRINT *#1,N$+e$+D$+e$+H$+e$ 70 PRINT:GOTO 20 80 CLOSE #*:STOP Lectura de los datos del ejemplo 1, mostrará solo el nombre asociado al año 78: 10 OPEN "I",#1,"DATA" 20 INPUT#1,N$,D$,H$ 25 IF EOF(1) THEN GOTO 50 30 IF RIGHT$(H$,2)="78" THEN PRINT N$ 40 GOTO 20 50 CLOSE #1 Su equivalente en SOT: 10 OPEN # *1,"DATA";I 20 INPUT *#1;N$: IF N$="fin" THEN GOTO 50 25 INPUT *#1;D$: INPUT *#1;H$ 30 IF H$(7 TO)="78" THEN PRINT N$ 40 GOTO 20 50 CLOSE # *1 Ejemplo 2 10 ON ERROR GOTO 2000 20 OPEN "A", #1, "NAMES" 110 REM Agrega nuevas entradas al fichero 120 INPUT "NOMBRE"; N$ 130 IF N$="" THEN 200 `se sale del bucle con CARRIAGE RETURN 140 LINE INPUT "DIRECCION"; A$ 150 LINE INPUT "CUMPLEAÑOS"; B$ 160 PRINT#1, N$ 170 PRINT#1, A$ 180 PRINT#1, B$ 190 PRINT: GOTO 120 200 CLOSE #1 2000 ON ERROR GOTO 0 En las líneas 10 y 2000 la instruccion ON ERROR GOTO es usada. Esta declaración permite la interceptación del error y especifica la primera línea (2000) del subprograma de la gestión de error. La línea 10 permite la rutina de gestión de errores. La línea 2000 inhabilita la rutina de gestión de errores y es el punto adonde GW-BASIC ramifica para imprimir los mensajes de error. Conversion al SOT del ejm. 2 DIM *"NAMES" 10 LET trap=23729: LET syserr=23728 20 OPEN # *1, "NAMES";A 30 POKE trap,255 110 REM Agrega nuevas entradas al fichero 120 INPUT "Nombre? "; N$ 125 If PEEK syserr<>0 THEN GO TO 200 130 IF N$="" THEN GOTO 200: REM se sale del bucle con ENTER 140 INPUT LINE "Direccion? "; A$ 150 INPUT LINE "Cumplea~os? "; B$ 160 PRINT *#1, N$ 170 PRINT *#1, A$ 180 PRINT *#1, B$ 190 PRINT: GOTO 120 200 CLOSE # *1 2000 POKE trap,0 En las líneas 10, 30 y 2000 la variable de sistema TRAP es usada. Esta declaración permite la interceptación del error y especifica la primera línea (2000) del subprograma de la gestión de error. Las líneas 30 y 125 permiten la rutina de gestión de errores. La línea 2000 inhabilita la rutina de gestión de errores y es el punto adonde el SOT ramifica para imprimir los mensajes de error. LOF, LOC, LOCK y UNLOCK no tienen equivalente en SOT ni BetaBasic. EOF se reemplaza por syserr. IV.2 - Crear un archivo directo Las declaraciones y funciones siguientes se utilizan con los archivos directos: CLOSE, FIELD, MKI$, CVD, LOC, MKS$, CVI, LOCK, OPEN, CVS, LOF, PUT, LSET, RSET, UNLOCK, GET, MKD$ Ejemplos de comandos: OPEN "R",#1,"filename",40 - OPEN # *1,"DATA";R;40 - crea el fichero directo FIELD 1, 30 AS N$ - DIM n$(30) PUT y GET - AT con PRINT *# e INPUT *# CVI y MKI$ - NUMBER y CHAR$ - solamente con BetaBasic LSET y RSET - LET y formateado de cadenas Ejemplo: 10 OPEN "R", #1, "INFOFILE", 32 20 FIELD#1, 20 AS N$, 4 AS A$, 8 AS P$ 30 INPUT "2-DIGIT CODE"; CODE% 40 INPUT "NAME"; X$ 50 INPUT "AMOUNT"; AMT 60 INPUT "PHONE"; TEL$: PRINT 70 LSET N$=X$ 80 LSET A$=MKS$(AMT) 90 LSET P$=TEL$ 100 PUT #1, CODE% 110 GOTO 30 Conversión a SOT: DIM *"INFOFILE" 10 OPEN # *1;"INFOFILE";R;34 20 DIM N$(20): DIM A$(6): DIM T$(8) 30 INPUT "CODIGO DE 2 DIGITOS"; CODE 35 IF CODE =0 THEN GOTO 120 40 INPUT "NOMBRE"; N$ 50 INPUT "MONTO"; AMT 60 INPUT "TELF."; T$: PRINT 80 LET A$=STR$ AMT 100 PRINT *#1; N$+A$+T$; AT CODE 110 GOTO 30 120 CLOSE #* Para leer el fichero: 10 OPEN "R",#1,"INFOFILE",32 20 FIELD #1, 20 AS N$, 4 AS A$, 8 AS P$ 30 INPUT "2-DIGIT CODE";CODE% 40 GET #1, CODE% 50 PRINT N$ 60 PRINT USING "$$###.##";CVS(A$) 70 PRINT P$:PRINT 80 GOTO 30 Versión SOT con BetaBasic: 10 OPEN # *1;"INFOFILE";R;34 20 DIM X$(34) 30 INPUT "Codigo de 2 digitos";CODE 35 IF CODE =0 THEN GOTO 120 40 INPUT *#1;X$; AT CODE 50 LET N$ =X$(TO 20): LET A$ =X$(21 TO 26): LET T$= X$(27 TO) 55 PRINT N$ 60 PRINT USING "$####.##"; VAL A$ 70 PRINT T$:PRINT 80 GOTO 30 120 CLOSE #* CVD, CVS, MKD$ y MKS$ solamente tienen su equivalente en FP$ de BetaBasic 4 para 128k. Sin equivalente en Basic Sinclair, SOT, o BetaBasic 1.xx y 3.xx. En este caso los cambios serian: 10 OPEN # *1;"INFOFILE";R;32 20 DIM N$(20): DIM A$(4): DIM T$(8) 80 LET A$=FP$ (AMT) y para leer: 20 DIM X$(32) 50 LET N$ =X$(TO 20): LET A$ =X$(21 TO 24): LET T$= X$(25 TO) 60 PRINT USING "$####.##"; NUMBER (A$) Y para cerrar... Las ROMs del FDD En la web SPECCY4EVER uno puede encontrar las sigtes ROMs: 3000boot.rom de 2k, 3000_2048 y 3000_2068.rom, ambas de 4k. Modificada para el 128k existe la 3000squa128.rom y para el +3, la 3000pl3.rom. En esta emulación no se usa ninguna de las antes mencionadas, sino la fdd3stavi.rom. Así, cuando se inicia el sistema, aparece en pantalla: (c) 1982 Sinclair Research Ltd (c) 91 STAVI 1218K TOS A.2 Hasta el momento solamente funciona con los modelos Spectrum 48k y TC-2048, en cuanto al 128k y +2, son buteados directamente a 48k. No trabaja con +3 y +2a. Aunque uno active el Interfaz 1 y 2 al mismo tiempo que el FDD, al final no reconoce a ninguno, así que es de más tenerlos activados a la vez que el FDD. Acepta al +4.rom, busysoft48.rom, tk95.rom, sdos64.rom, jgh.rom, gw03.rom, las ROMs árabes, entre las diversas ROMs modificadas con algunaas excepciones. Opciones del menú DISK Primero accedemos al menú MEDIA, aquí elegimos DISK y vamos a FDD3000 Nos sale: Drive A, Drive B, Drive C y Drive D. Cualquiera que elijamos da el sigte. menú: Insert new, Insert..., Eject, Save, Save as..., Flip disk. La primera opción crea un disco sin formatear, hay que salvarlo primero para usarlo. La segunda y tercera son insertar y eyectar el disco. La cuarta es para salvar, cosa que debemos hacer, sino todo el trabajo se pierde. La quinta es para salvar una copia en vez del disco en curso quedando éste sin modificar. La última nos lleva a dos opciones finales: Turn upside down y Turn back. Esto es voltear el disco para leer la otra cara, y regresarlo a la cara anterior. Es decir que el emulador puede trabajar con discos de 2 caras, los discos de 3" eran así. Pero no se nos dice cómo crear esta clase de discos con 2 caras. Y eso nos lleva a... Discos de 2 caras Primero hay que ir a OPTIONS y de ahí a DISK OPTIONS... Buscar los drives del FDD y cambiar al menos uno de single sided 40t a double sided 40t. Ahora sí, hacemos INSERT NEW, SAVE AS... en la unidad que hemos elegido para tal fin. Pasamos a hacer FORMAT * drive TO nombre1. y hacemos CAT* para verificar el nombre. Ya hemos creado la cara A. Vamos a FLIP DISK, Turn Upside Down y volvemos a hacer FORMAT * drive TO nombre2. Ahora hemos creado la cara B. CAT* nos mostrará el nombre de la cara B y con TURN BACK retornamos a la cara A. Salvamos el disco y listo: un disco con dos caras Hitachi 3" de 140k cada una. El disco creado pesa 341k, en vez de los 171k simple cara 40 tracks. En suma, esta opción existe para todos los sistemas de disco pero habría que probar a ver si en realidad funciona con todos ellos. En el caso del +3 debe funcionar igual ya que también usa discos Hitachi de 3" como el FDD. El detalle es que aparte de FUSE, ningún otro emulador usa esta clase de discos. Extensión FDD Sigo esperimentando con la emulacion de FDD y por error, en vez de salvar el disco como '.dsk' lo salvé como '.fdd'. Para insert(ar) un disco con esta extensión, no aparece en 'supported files', pero si en 'all files (*.*)' Lo único curioso es que no es de 171k como el .dsk, sino de 275k. Osea, en vez de, por ejemplo basic.dsk a 171k ahora tengo basic.fdd a 275k. ¿Pero de dónde salen esos k extras? Así que sigo probando con esta nueva pero rara extensión. Los dsk renombrados a fdd siguen teniendo sus 171k originales. No, los creados o los renombrados, que uno modifica, reformatea o salva algo en ellos. Ahí sí pasan a pesar 275k. Un mejor modo de retener el '.fdd' y no "inflar" el disco, es renombrarlos del modo sigte. "file.fdd.dsk". La unica razón es para diferenciarlos así de los dsk de +3. Discos de +3 El FDD no puede leer discos de +3, o de HC2000, sin embargo los puede aceptar y formatear para su propio uso. Los de +3 son de 191k pero acaban "inflados" a 275k cuando se salva como '.fdd'. Uno de 381k es "inflado" a 550k y uno de 221k pasa a ser de 289k. Multifaz 1 Ignoro si el TC-2048 y el FDD aceptan al M1 de Romantic Robot, pero el emulador FUSE sí. Ya que el M1 no incluye al FDD, el único modo es cargar primero el programa a copiar, y usar el M1 para salvarlo a una cinta y de ahí pasarlo al disco obviamente modificando el cargador BASIC. Hasta ahora me ha funcionado. Basic SE La version de Basic SE que tiene el FUSE, acepta al FDD. Pero todos los comandos de disco fueron reemplazados en el SE por otros de diversa utilidad. Así que para hacer FORMAT *, debo tipear MODE *, TRACE "" en lugar de VERIFY "", pero no he logrado lo mismo con los sustitutos para CAT, ERASE, MOVE. Debido a eso, ya no he probado a ver si SAVE*, LOAD* o MERGE* funcionan correctamente. BetaBasic BetaBasic 1.9 es plenamente compatible con los comandos de disco del SOT, excepto que no pueden usarse los comandos de bucle como DO - LOOP con ficheros. Hay que reemplazarlos por GO TO o bucles FOR - NEXT. Para capturar el EOF, debe usarse las variables de sistema TRAP y SYSERROR. En el caso de Betabasic 3.xx, se requiere de hacer POKE 64609,215 para que admita CAT*, GO TO* y demás comandos del BB 3. BB 3.1 sin el POKE antes mencionado, permite usar el modo de interrupción 1 mediante RAND. USR 63243, y si luego hacemos CAT*, veremos el directorio y dará un error que podemos ignorar. Pero si hacemos un GOTO*, el sistema colapsará. Otras extensiones al Basic Sinclair, también corren sin problemas en el FDD, como son: Xbasic, Advance Basic, Ex-Basic y Basic+. BetaBasic 4 ¿Es posible usar BetaB4 con Timex FDD? En una máquina real no sé, ya que no tengo como probar si la versión 128k permitía correr en Basic128. STAVI cambia del modo 128k al 48 así que mi método en el emulador ha sido otro. En RealSpectrum cargué el BB4, lo POKEe como hice con el BB3, lo salvé como Z80. En FUSE seleccioné el 128k con FDD. Cargué el BB4.z80 y probé los comandos de disco. Resultado exitoso. Incluso tengo PLAY "abc" sonando con pleno acceso al disco. Curiosamente lo único que se pierde es el pleno acceso al disco RAM, solamente SAVE! y LOAD! funcionan. Todos lo demás comandos RAM son rechazados. En lugar de CAT! podemos usar PRINT CAT$(). Sin embargo si hago USR 59907, acabo en modo 128k, con lo que recupero el acceso a los comandos RAM y reteniendo a la vez el acceso a todos los comandos del FDD. Así que ahora ya sé como trabajar en modo 128k y no solo en 48k. 128k con FDD Todo ese experimento me llevó a pensar, si el BB4.z80 me da acceso al 128k, ¿qué pasaría si creo un 128k.z80? Y el resultado fue: En REALS selecciono el 128k, apenas aparece el menú en pantalla, salvo un Z80. Vuelvo al FUSE y estando en 128k con STAVI, cargo el z80. Y el resultado fue... Ahora ya tengo un 128k con pleno acceso a los comandos de disco del FDD. Y ya puedo salvar a disco una copia operativa del BB4 y cargarla independientemente. No solo eso, programas pensados para el 128k también se pueden salvar ya a disco. 128k de Investronica Ya que el 128k con menú me funcionó, ¿qué tal el original 128k "made in Spain"? Aplico el mismo método. Primero cargo la ROM española en FUSE y activo el FDD. Me manda al modo 48. En REALS cargo la misma ROM y creo un z80. Ahora vuelvo a FUSE, cargo el 128esp.z80 y ¡et voila! el original 128k de Investronica, plenamente con acceso a FDD. Supongo que con cualquier otra ROM se puede hacer lo mismo. SOT A4 Una vez cargado el SOT a.4, pruebo a formatear un disco. Tipeo por ejemplo: FORMAT *"a" TO "prb164k" ¿Resultado? Devuelve error, pero aun así descubro que el disco ha sido formateado a 164k. Con un detalle: no tiene nombre de volumen. Pero es aceptado por el sistema. Este SOT A4 merece probarse con mayor detenimiento y dedicarle su propio manual. Hasta aquí es lo más que he podido llegar hasta el momento de escribir estas notas. (c)2020 zx_if1@hotmail.com