Programando Basic en un +3 Virtual

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
DennisChannels
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 32
Registrado: 06 Jun 2010, 14:20
Sistema Favorito: Amstrad CPC
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: NeoGeo
Primera consola: Sega Game Gear
Gracias dadas: 12 veces

Programando Basic en un +3 Virtual

Mensajepor DennisChannels » 22 Abr 2024, 05:35

Buenas a todos,

Por una idea de revisar revistas publicadas desde el comienzo de los tiempos y escribir todo el código incluido en ellas, me he dado de bruces con las peculiaridades del Basic del ZX Spectrum. Abro hilo para hacer algunas consultas, muchas gracias de antemano :tecle:

Primero de todo, cómo estoy operando:
  • Vivo al otro lado del mundo, lo cual me impide operar con mis Spectrums o bien quedar con gente versada para aprender de su nutrida experiencia.
  • Empleo el "Retro Virtual Machine", pero entiendo que cualquier emulador ofrece las mismas características a la hora de operar.
  • Estoy usando el BASIC +3 porque soy de Diskette más que de cinta. Me cuesta mucho menos cargar y grabar a disco dado que me crié con un 6128.

Dicho esto, paso con el primer "bloqueo" (y ojalá el último):

  • Emplear color en el código para fondo y letras en BASIC +3.
Nunca imaginé que algo tan ornamental me daría quebraderos de cabeza, pero quiero replicar exactamente lo que veo en las revistas. Investigando, he podido comprobar (y también gracias al autor del emulador) que el modo extendido se logra en un teclado normal con Control + Shift. Pero he comprobado que esto sólo funciona si se emplea el BASIC 48K, con sus terroríficos accesos directos (lo siento, son terroríficos, si no tienes el teclado original delante o has crecido con él, operar así es anti-intuitivo). ¿Hay manera de usar ese modo extendido o dar color al texto directamente empleando directamente el BASIC +3?

Razones por las que me resisto a cambiarme al Basic 48K para continuar escribiendo código:
- No encuentro acceso directo para operar con diskettes (con instrucciones como Cat) está claro que el BASIC 48 nunca se diseñó para ese tipo de soporte.
- Dado que no puedo usar discos, lo suyo sería emplear cintas, pero no se cómo crear cintas para grabar en el Retro Virtual Machine. Además, creo que es mucho más engorroso el cargar programas así. No quita que no quiera aprender, ojo.

Avatar de Usuario
Lenko
Atari 1040 STf
Atari 1040 STf
Mensajes: 800
Registrado: 29 Mar 2005, 11:39
Gracias dadas: 447 veces
Gracias recibidas: 96 veces

Re: Programando Basic en un +3 Virtual

Mensajepor Lenko » 22 Abr 2024, 10:56

Hola Dennis.

Yo copié muchos programas de la Microhobby en casa de mis primos con su 48K y era un coñazo. Creo que si hoy me dedico a la programación es porque cuando por fin tuve la posibilidad de conseguir mi primer ordenador fue un +3. El poder escribir letra a letra y el poder guardar a disco fueron dos valores fundamentales. Hice muchísimos programas con ese +3 y te aseguro que nunca se me pasó por la cabeza cambiar a modo 48K.

Ahora que comentas el tema de meter los atributos directamente en la cadena que se iba a imprimir con las combinaciones de teclas... no recuerdo si eso era posible tal cual en el +3, aunque imagino que sí.

Pero existen al menos dos formas de hacer lo mismo con el PRINT, que es un comando lento pero muy poderoso:

- Usar los comandos de color dentro del propio PRINT, separados con punto y coma:

PRINT INK 3; PAPER 2; FLASH 1; "Hola"

- Simular la pulsación de las teclas de control dentro del propio PRINT con el comando CHR$ de acuerdo con la siguiente tabla:

CHR$ 16 corresponds to INK
CHR$ 17 corresponds to PAPER
CHR$ 18 corresponds to FLASH
CHR$ 19 corresponds to BRIGHT
CHR$ 20 corresponds to INVERSE
CHR$ 21 corresponds to OVER

Por ejemplo:

PRINT CHR$ 16+CHR$ 9; "Hola"

es lo mismo que:

PRINT INK 9; "Hola"

Recuerda que otra ventaja del +3 BASIC es que traía el comando RENUM, que ayudaba cuando la planificación de líneas se iba al garete.

Avatar de Usuario
DennisChannels
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 32
Registrado: 06 Jun 2010, 14:20
Sistema Favorito: Amstrad CPC
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: NeoGeo
Primera consola: Sega Game Gear
Gracias dadas: 12 veces

Re: Programando Basic en un +3 Virtual

Mensajepor DennisChannels » 24 Abr 2024, 17:35

Pues me apunto estos dos métodos como la alternativa más plausible por el momento. Tal vez no pueda copiar 1:1 el código de las revistas, pero al menos puedo conseguir 1:1 sus resultados sin meter más líneas (tan solo añadiendo una "cabecera" a los Prints)

¡Muchas gracias!

Si alguien tiene alguna sugerencia más, siempre es bienvenida. Es bastante entretenido encontrar las particularidades de cada versión de BASIC, la verdad...

Aprovecho para plantear otra de esas preguntas que te vienen a la cabeza...

  • ¿Algún mapa de caracteres completo para saber qué símbolos perdidos hay por ahí?
Lo que encuentro por internet no profundiza demasiado, me da que hay que predefinir símbolos tan específicos con antelación. Por supuesto, hablo desde la ignorancia; en el Amstrad te definías una matriz de 8x8 y editabas cualquier símbolo. En el código que estoy copiando ahora no hay nada de eso, pero te encuentras chuladas como las de la imagen adjunta... y me las estoy viendo y deseando ](*,)
Adjuntos
Cod_Indiana.PNG
Cod_Indiana.PNG (82.54 KiB) Visto 422 veces

Avatar de Usuario
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 157
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 3 veces
Gracias recibidas: 37 veces

Re: Programando Basic en un +3 Virtual

Mensajepor Alan_Smithee » 25 Abr 2024, 17:24

DennisChannels escribió:Pues me apunto estos dos métodos como la alternativa más plausible por el momento. Tal vez no pueda copiar 1:1 el código de las revistas, pero al menos puedo conseguir 1:1 sus resultados sin meter más líneas (tan solo añadiendo una "cabecera" a los Prints)

¡Muchas gracias!

Si alguien tiene alguna sugerencia más, siempre es bienvenida. Es bastante entretenido encontrar las particularidades de cada versión de BASIC, la verdad...

Aprovecho para plantear otra de esas preguntas que te vienen a la cabeza...

  • ¿Algún mapa de caracteres completo para saber qué símbolos perdidos hay por ahí?
Lo que encuentro por internet no profundiza demasiado, me da que hay que predefinir símbolos tan específicos con antelación. Por supuesto, hablo desde la ignorancia; en el Amstrad te definías una matriz de 8x8 y editabas cualquier símbolo. En el código que estoy copiando ahora no hay nada de eso, pero te encuentras chuladas como las de la imagen adjunta... y me las estoy viendo y deseando ](*,)


Se trata de los famosos "gráficos definidos por el usuario" (GDU o UDG) del ZX Basic. No te lo puedo explicar en detalle desde el curro pero cualquier manual del Basic de Speccy te lo aclara de un modo sencillito. Una vez que los has definido aparecen con el "dibujito" en el listado.

Ojito! En modo +3 el Basic se reserva algunos de los UDG para sus propios asuntos, así que algunos programas de Basic 48k imprimirán cosas raras. De nuevo, perdón por no entrar en detalles, pero el manual explica cuáles y por qué.

Pero lo que te iba a decir es que una buena alternativa para pelearte con todo ello al teclear es escribir los listados en tu editor de textos favoritos y convertirlos en ficheros de Spectrum con utilidades como zmakebas.

Con este último, de hecho, puedes utilizar secuencias de escape en el texto para meter cómodamente los UDG o, atento, los códigos de color embebidos en las cadenas de texto.

Y aunque, si lo recuerdo bien, zmakebas crea ficheros TAP (de cinta), pasar programas Basic de cinta a disco es trivial en cualquier emulador. 8-)

__

Avatar de Usuario
Lenko
Atari 1040 STf
Atari 1040 STf
Mensajes: 800
Registrado: 29 Mar 2005, 11:39
Gracias dadas: 447 veces
Gracias recibidas: 96 veces

Re: Programando Basic en un +3 Virtual

Mensajepor Lenko » 28 Abr 2024, 19:41

Es exactamente lo que te ha contado nuestro querido ZonaFi. Solo para intentar dejártelo un poco más claro: esos caracteres raros que ves en el listado NO ESTÁN en el mapa de caracteres del Spectrum. No es como el del Commodore 64 que tiene mil combinaciones raras diferentes.

En el Spectrum los únicos caracteres de este estilo los vas a encontrar de la posición 128 a la 143, y son básicamente todas las posibles combinaciones de ladrillitos de 4x4 píxeles.

Justo después de estos se encuentras los UDG, del 144 (la A) al 162 (la S).

Para ponerlos en los listados se pulsaba la tecla de GRAPH y la letra asociada. Si el UDG aún no se había cambiado al hacer esto salía la letra en cuestión, pero si ya se había modificado la memoria donde se encontraba el gráfico, al hacer la combinación en el listado aparecía el gráfico que habíamos creado.

Es decir, ese caracter del arca perdida, quizás es GRAPH+A, o algo similar. Normalmente en algún sitio te debían poner a qué letra correspondía cada uno en ese programa. Si no pues es ir haciendo prueba y error.

Échale un vistazo a este capítulo del manual de +3 donde verás la tabla de todos los caracteres y que también te cuenta cómo funciona esa parte gráfica en el Basic y como crear tus propios UDG.

Avatar de Usuario
DennisChannels
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 32
Registrado: 06 Jun 2010, 14:20
Sistema Favorito: Amstrad CPC
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: NeoGeo
Primera consola: Sega Game Gear
Gracias dadas: 12 veces

Re: Programando Basic en un +3 Virtual

Mensajepor DennisChannels » 29 Abr 2024, 07:11

¡Gracias a los dos por vuestra ayuda!

Llevo días intentando contestar, pero el foro no me deja de dar errores, tanto si intento postear como simplemente logeando o incluso refrescando.
Alan_Smithee escribió:Pero lo que te iba a decir es que una buena alternativa para pelearte con todo ello al teclear es escribir los listados en tu editor de textos favoritos y convertirlos en ficheros de Spectrum con utilidades como zmakebas.

He localizado el programa, pero me da la impresión de que sólo está preparado para correr en Linux y... MS Dos? no es que reniegue del pingüino o de la línea de comandos, pero por falta de costumbre (y a falta de máquina virtual lista), casi que prefiero seguir editando con el emulador. Es una pena porque algo que me gustaría conseguir es grabarlo todo en cinta: crearía una sensación más auténtica a la hora de cargarlo!!
Lenko escribió:En el Spectrum los únicos caracteres de este estilo los vas a encontrar de la posición 128 a la 143, y son básicamente todas las posibles combinaciones de ladrillitos de 4x4 píxeles.

Entonces el tileset editable es de 128 a 143... vaya, son menos de los que esperaba (recuerdo que en el CPC más allá de los caracteres del teclado - que no era recomendable tocar a menos que quisieras crear fuentes personalizadas - tenías decenas y decenas de caracteres para editar)
Lenko escribió:Es decir, ese caracter del arca perdida, quizás es GRAPH+A, o algo similar. Normalmente en algún sitio te debían poner a qué letra correspondía cada uno en ese programa. Si no pues es ir haciendo prueba y error.

Uno de los puntos que peor llevo es identificar las teclas en mi propio teclado. Tengo que mirar a ver si encuentro más referencias o documentación relativa al Retro Virtual Machine, porque debe de haber una especie de mapa para determinar qué tecla sustituye a cual - cosa que necesito, sobre todo porque mi teclado es Japonés :(

Gracias por el enlace al manual! directo va a los bookmarks... y a leer, que ya me leí y releí el del CPC, pero este no lo he catado...

Avatar de Usuario
Lenko
Atari 1040 STf
Atari 1040 STf
Mensajes: 800
Registrado: 29 Mar 2005, 11:39
Gracias dadas: 447 veces
Gracias recibidas: 96 veces

Re: Programando Basic en un +3 Virtual

Mensajepor Lenko » 29 Abr 2024, 13:47

DennisChannels escribió:Entonces el tileset editable es de 128 a 143... vaya, son menos de los que esperaba (recuerdo que en el CPC más allá de los caracteres del teclado - que no era recomendable tocar a menos que quisieras crear fuentes personalizadas - tenías decenas y decenas de caracteres para editar)


No, no, esos no son editables, los que puedes modificar de forma fácil son los UDG que te comento después, es decir, del 144 al 162.

Gracias por el enlace al manual! directo va a los bookmarks... y a leer, que ya me leí y releí el del CPC, pero este no lo he catado...


Sí, el manual del +3 es fantástico. Sé que en algún lado se puede conseguir también en español digitalizado.

Te digo que esa parte debe estar bastante clara porque yo en su día (con 15 o 16 años) me hice un par de programitas que usaban los UDG para alguna tontería y solo tenía el manual para consultar información.

Avatar de Usuario
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 157
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 3 veces
Gracias recibidas: 37 veces

Re: Programando Basic en un +3 Virtual

Mensajepor Alan_Smithee » 29 Abr 2024, 15:27

DennisChannels escribió:He localizado el programa, pero me da la impresión de que sólo está preparado para correr en Linux y... MS Dos? no es que reniegue del pingüino o de la línea de comandos, pero por falta de costumbre (y a falta de máquina virtual lista), casi que prefiero seguir editando con el emulador. Es una pena porque algo que me gustaría conseguir es grabarlo todo en cinta: crearía una sensación más auténtica a la hora de cargarlo!!


:lol: No, si yo tampoco soy pinguinero. El año pasado, tras rebuscar mucho,, di con un ejecutable para windows en la sección de Releases de este github:

https://github.com/ohnosec/zmakebas

Bajate el ejecutable, y también el README.MD del código fuente para ver como funciona. Un ejemplo práctico de lo que te interesaba:

Pongamos que tenemos esta linea de BASIC:

Código: Seleccionar todo

10 PRINT "Maria tenia una ovejita."


Si utilizo el código de escape "\" y unos códigos específicos de Spectrum puedo hacer cambios de color al vuelo en mi editor de textos de Windows, tal que así:

Código: Seleccionar todo

10 PRINT "\{16}\{4}Maria\{16}\{0} tenia una ovejita."


Esto hará automáticamente que la palabra "María" salga con tinta verde:

\{16} --> 16 es el código de control para tinta
\{4} --> 4 es el código del color verde

Y tras "Maria" uso un \{16}\{0} que vuelve la tinta a la normalidad (0 es el código de color negro)

ovejita.png
ovejita.png (3.36 KiB) Visto 281 veces


Si tienes el emulador en modo +3, el cambio no será obvio en el listado, ya que el editor de BASIC del Spectrum en modo +3 ignora deliberadamente todo lo referente al "modo extendido" y a los códigos de color (según cita expresamebnte el manual "por el bien de nuestra salud mental" :lol: ) pero el cambio de tinta seguirá teniendo efecto al ejecutar el programa 8-)

En el manual de Spectrum encontrarás enseguida los códigos relevantes para PAPER(17), BRIGHT(19), INVERSE(20), FLASH(18), OVER(21), AT(22) y TAB(23) (bueno, te los acabo de poner en una edición del post :lol: )

--


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados