Proyecto BASIC ZX en punto muerto, pero no por mucho tiempo…

Llevo desatendido este blog desde hace meses. Lo sé, pero no doy abasto últimamente y se me multiplican las tareas, con lo que he dejado pasar este tiempo para reflexionar qué puedo hacer con el Proyecto BASIC ZX y cómo voy a gestionar el blog, de forma que vaya habiendo alguna novedad significativa con la frecuencia debida.

Ahora mismo, tengo varios frentes abiertos: por un lado, tratar de componer varias músicas para un encargo que me han hecho (no puedo decir más al respecto) y por el otro, es estar diariamente con el escáner liado trabajando con más de una docena de ejemplares que me han sido cedidas de “El Ordenador Personal”, en lo que estoy centrado en este momento, más poner ojo avizor sobre las posibles noticias que surjan en otros frentes para su posible inclusión en el otro blog, que considero como mi principal foco de atención, Program : Bytes : 48k, amén de ir visitando foros de noticias sobre informática y demás para ver qué se cuece por ahí. Ya os digo que se me crecen hasta los enanos, pero no será por mucho tiempo, os lo garantizo.

No obstante, ya tengo más que claro que en cuanto acabe con los escaneos y con otras de las tareas en curso, trataré de sacarle algo más de tiempo para ir siguiendo con los trabajos de preservación de listados, pero insisto que no es una tarea que yo deba hacer solo. A ver si pronto vuelvo a arrancar motores con este proyecto para no dejarlo anquilosado por más tiempo y continuar por donde lo dejé la última vez. Nos vemos pronto.

Añadiduras y correcciones de programas de Microhobby

Gracias a Rubén Aós Garralda, un seguidor de este blog, he recibido unos archivos que vienen a suplir algunos de los programas que estaban ya subidos en el servidor y me ha proporcionado otros de entre los que figuran como listados por la revista Microhobby. Los primeros son programas corregidos de otros que, por lo visto, contenían algunos fallos en su ejecución. Con su permiso, publico parte de su carta con lo que se ha encontrado con varios de estos programas de dicha revista, algunos resueltos (R) que él mismo me ha enviado y me ha indicado otros programas con problemas y por ser solucionados (S):

- Microhobby 169: El programa “Editor de Directorios” que hay en la web tiene (al menos) dos errores. Adjunto un fichero .dsk con los errores corregidos. No sé si queda alguno más, son los que he encontrado mientras lo utilizaba. (R)

- Microhobby 170: El programa “Catálogo ampliado” no funciona bien, la mayoría de las veces resetea el equipo. Las pocas veces que no lo resetea, tampoco muestra el catálogo. Comprobado tanto en +3 como en +3e. (S)

- Microhobby 190: Hay dos programas que no aparecen listados en la web. Son “Nueva versión del catálogo ampliado” (pagina 58) y “Nueva versión del formateador de discos” (página 59). Ambos iban incluídos en el artículo “Protector de discos”. (S)

- Microhobby 192: El programa “Noduleando” (no preservado) es un algoritmo escrito en BASIC “genérico” (bueno, en BASIC que no es de Sinclair). Imposible hacerlo funcionar en Spectrum sin cambios. (S)

- Microhobby 203: No es una corrección propiamente dicha, es un problema para anotar en “Specbase”. Debido a dónde coloca el CLEAR y algún otro pequeño detalle, este programa es incompatible con la disketera. No sé si funcionaría en un +2A, pero en un +3 tengo claro que no. (S)

- Microhobby 212: En la cinta se publicó el N.C.U.C.M. (Nuevo Cargador Universal de Código Máquina), en dos versiones (48k/128k y +3). En la web aparecen para descargar dos versiones, la de 48k/128k y una “versión +D” que no aparece en la cinta. Imagino que es un error de transcripción, pero por si las moscas envío mis versiones tzx (separadas del resto de la cinta). (R)

Los programas corregidos y que se han incorporado a sus correspondientes fichas son, por tanto:

169 – Editor de Directorios
212 – Nuevo Cargador Universal de Código Máquina. Se ha añadido a su ficha correspondiente la versión en .DSK para los Plus 3.

Y los nuevos proporcionados por Rubén y que ya han sido borrados del listado en .doc con los programas por preservar (debidamente actualizado a fecha de hoy):

195 – Pasadisk (en .TZX y .DSK)
203 – Carga Automática de Programas; Toda clase de Logaritmos; “V” y N.I.F. (Número de Identificación Fiscal).

Al añadirse un programa como “Pasadisk” que no figuraba como listado en BASIC más el código hexadecimal correspondiente al mismo y que venía incluido con la cinta de portada del nº 195 de Microhobby, he pensado que pueden incluirse también todos los programas de lectores que estaban contenidos en todas las cintas publicadas por Microhobby a partir del nº 182. Me pondré a ello en cuanto me sea posible.

Una vez más, agradezco a Rubén la ayuda prestada.

Añadido el programa “Planetarium” de la Enciclopedia Práctica de Informática

Nuevamente, gracias a Juan Pablo (SPA2), se ha agregado un nuevo programa llamado “Planetarium” procedente de esta enciclopedia de Ingelek / Nueva Lente, desde que el fascículo nº 18 del cual procede había sido puesto a disposición de todos los interesados por el dueño del blog Compusaurios (gran labor de preservación la suya).

Asimismo, debo disculparme por la falta de noticias en cuanto al reporte de novedades respecto a la labor de preservación de programas que han quedado algo paradas desde hace poco más de un mes. Habiendo terminado con una serie de tareas tanto personales como referentes a mi otro blog Program : Bytes : 48k, en breve continuaré con las mismas por donde lo había dejado. Aun queda mucho trabajo por hacer, pero con algo de ayuda todo sería algo más fácil. Por eso, espero que el Proyecto BASIC ZX pueda cobrar más vida si los que siguen este blog pueden prestarla en la medida de sus posibilidades.

Donde con más seguridad tendré alguna dificultad a la hora de transcribir y preservar programas son con aquellos listados incluidos dentro de la sección “Aula Spectrum” de Microhobby, como con los casos de los programas “Monitor de Diédrica” y “Capitales” del nº 170 de la revista. Tengo los archivos .TXT correspondientes con la copia de estos programas pero con innumerables errores que tendré que ir corrigiendo manualmente y me supondrán bastante tiempo hasta que estén perfectamente modificados para su posterior procesamiento con el BASin de Paul Dunn y su transferencia a formato digital para emuladores. Tengo una ventaja, poseo los PDF “OCReados” de los números de Microhobby que restan por repasar, pero me hallo con el inconveniente de que, en ocasiones, hacer “corta y pega” de todas y cada una de las líneas de estos programas desde estos archivos no da siempre el resultado esperado. Mucho más lento sería tratar de transcribirlos directa y físicamente en un ZX Spectrum, o bien tratar de hacer lo mismo pero por medio de un emulador.

En cualquier caso, que sepáis que en cuanto me sea posible, veréis más novedades aquí próximamente.

Añadido el programa “Motora” de la Enciclopedia Práctica de la Informática al proyecto

Gracias a Juan Pablo (SPA2) que me ha proporcionado el archivo de este programa, listado en el fascículo nº 13 de esta enciclopedia que con una determinada frecuencia está siendo preservada por fascículos, un trabajo éste llevado a cabo por el blog Compusaurios con José Martínez (drachco) al frente. Con este nuevo programa ya son varios los aparecidos en esta obra de cuatro volúmenes y más que veremos próximamente en siguientes entregas en cuanto se vayan sumando el resto de sus fascículos a la colección digital.

Según me ha contado Juan Pablo, “Motora” es un programa que, curiosamente, volvería a aparecer algo más tarde dentro de la Enciclopedia RUN del Spectrum de la misma editorial. Algunos de los otros programas incluidos en la E.P.I., se verían igualmente en otras publicaciones, incluyendo cintas de software como “Audio Spectrum” y “VideoSpectrum”.

El programa está disponible dentro de la sección “Libros y Enciclopedias” de este blog.

Solucionado el problema con el programa de Microhobby

La pantalla lo dice todo. Gracias a Metalbrain se ha conseguido que el programa generador de laberintos publicado en el nº 26 de Microhobby funcione correctamente. La maquetación del listado inducía a error y, por alguna razón, en las líneas 30 y 40 se han obviado una serie de caracteres que en la revista aparecen como espacios. Éste es el cambio que le he realizado y tal cual ha conseguido que el programa realice su labor.

30 LET A$(1)="-----------------------------------": LET A$(25)=A$(1) 35 símbolos "-"
40 FOR N=2 TO 24: LET A$(N)="-(33 espacios)-": NEXT N

Es decir, sustituir todos los espacios de la línea 30 por cualquier otro carácter, en este caso el guión o signo “menos” (“-”) y en la 40 cambiar el primer y último carácter de la cadena por otro distinto. De esta manera se consigue que el programa detecte los límites del laberinto sin necesidad de recurrir a la detección de la zona exterior de la pantalla de trabajo como pensaba en un primer momento.

El programa corregido y modificado oportunamente para ello vuelve a estar disponible en la misma ficha donde se halla ubicado el programa.

“Cómo generar laberintos”, con fallos

Gracias a lobogris se ha detectado que el programa “Cómo generar laberintos” del nº 26 de la revista Microhobby contiene un error grave. Al margen de que le faltaba la linea 120 en el archivo LAB1.TAP que ha sido subsanado, aun así el programa siempre devuelve el error B Integrer Out Of Range 410:1 y en algún caso otro error 3 Subscript Wrong en la misma línea cuando el dibujo del laberinto llega al extremo derecho de la pantalla, y también 5 Out of screen 150:4 si roza el margen inferior. Examinando el listado veo que el autor del programa, Paco Martín, no ha tenido en cuenta los límites de la pantalla y no veo en el programa alguna rutina que detecte el límite del laberinto con los márgenes exteriores de la misma. Hay dos variables V y H que se van posicionando aleatoriamente a partir de unas posiciones marcadas (V=13 y H=3) dentro de la matriz A$ compuesta por 25×35 caracteres y cuando alcanzan una de estas variables un valor igual a 1 genera dicho error. Por supuesto, se ha comprobado el listado con el aparecido en las páginas de la revista en su totalidad y no he apreciado en él más fallos salvo la ausencia de la linea 120 en el archivo en cuestión.

Aun así, también creo que hay alguna incoherencia con el listado original aparecido en la revista y puedo creer en la posibilidad de que se hubiera cometido algún error en su maquetación.

A pesar de que he querido corregir el programa por mi cuenta, pero no veo de qué forma podría añadir esta rutina de detección de los bordes de la pantalla sin alterar demasiado el listado. He subido el programa corregido hasta donde he podido junto con un archivo .BAS para que podáis trastear con él con el BASin de Paul Dunn. Si alguno consigue encontrarle una solución para que el programa funcione, muchísimo mejor.

DESCARGA

Éste es el listado, tal como ha sido copiado desde el referido programa:

10 BORDER 0: PAPER 0: INK 7: CLS : GO SUB 9100
12 :
15 REM \{vi} Inicializacion de las dimensiones \{vn}
17 :
20 DIM a$(25,35)
22 :
25 REM \{vi} Se "marca" el contorno y el interior del laberinto \{vn}
27 :
30 LET A$(1)=" ": LET A$(25)=A$(1) "35 espacios en variable A$(1)"
40 FOR N=2 TO 24: LET A$(N)=" ": NEXT N "35 espacios en A$(N)"
42 :
45 REM \{vi} Inicializacion del contador de "direcciones" \{vn}
47 :
50 DIM C(120,2): LET CO=2
52 :
55 REM \{vi} Se asigna la posicion de inicio. Impresion inicial del contenido del laberinto \{vn}
57 :
60 LET V=13: LET H=3: LET A$(V,H)="\::": GO SUB 9000
65 :
100 REM \{vi} Construccion del laberinto \{vn}
105 :
110 GO SUB 400: IF NOT LI THEN GO SUB 300: GO TO 100+400*(NOT V AND NOT H): REM \{vi} Si V=0 y H=0 el laberinto esta terminado \{vn}
120 IF LI>1 THEN GO SUB 200
130 IF (RND>.6 OR LI=1) AND A$(V-2,H)=" " THEN LET A$(V-1,H)="\::": LET A$(V-2,H)="\::": PRINT AT V-4,H-3;"\::";AT V-5,H-3;"\::": LET V=V-2: GO TO 100
140 IF (RND>.5 OR LI=1) AND A$(V,H+2)=" " THEN LET A$(V,H TO H+2)="\::\::\::": PRINT AT V-3,H-2;"\::\::": LET H=H+2: GO TO 100
150 IF (RND>.5 OR LI=1) AND A$(V+2,H)=" " THEN LET A$(V+1,H)="\::": LET A$(V+2,H)="\::": PRINT AT V-2,H-3;"\::";AT V-1,H-3;"\::": LET V=V+2: GO TO 100
160 IF (RND>.5 OR LI=1) AND A$(V,H-2)=" " THEN LET A$(V,H-2 TO H)="\::\::\::": PRINT AT V-3,H-5;"\::\::": LET H=H-2: GO TO 100
170 GO TO 130
175 :
200 REM \{vi} La posicion actual queda almacenada. El contador se incrementa \{vn}
205 :
210 LET C(CO,1)=V: LET C(CO,2)=H: LET CO=CO+1: RETURN
250 :
300 REM \{vi} La posicion del "contador de direcciones" se reduce \{vn}
305 :
310 LET CO=CO-1: LET V=C(CO,1): LET H=C(CO,2): RETURN
395 :
400 REM \{vi} La variable LI toma el numero de "caminos" posibles \{vn}
405 :
410 LET LI=(A$(V+2,H)=" ")+(A$(V-2,H)=" ")+(A$(V,H+2)=" ")+(A$(V,H-2)=" ")
420 RETURN
425 :
500 REM \{vi}El laberinto esta totalmente terminado \{vn}
505 :
510 PRINT #0;"TERMINADO": PAUSE 0
520 PRINT #0;AT 1,0;"Otro laberinto (s/n)?": PAUSE 0
530 IF INKEY$="s" OR INKEY$="S" THEN RUN
540 IF INKEY$"n" AND INKEY$"N" THEN GO TO 530
550 STOP
8900 :
9000 REM \{vi} Ejemplo de impresion del laberinto \{vn}
9005 :
9010 PRINT AT 0,0;: FOR N=3 TO 23: PRINT A$(N,3 TO 33): NEXT N: RETURN
9050 :
9100 REM \{vi} El grafico "A" puede tomar cualquier forma \{vn}
9105 :
9110 FOR N=USR "A" TO USR "A"+7: POKE N,INT (RND*256): NEXT N: RETURN

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.