Un reloj para ZX Spectrum

Aquí solo proyectos que incluyan el código fuente

Moderador: Fundadores

Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Un reloj para ZX Spectrum

Mensaje por yombo »

wilco2009 escribió:Desde Basic del spectrum es tan simple como hacer LPRINT "TEXTO QUE QUIERAS".

Gracias! Con eso ya lo tengo todo. Lo voy a hacer guapo Fermars, ya verás :D
Imagen
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Un reloj para ZX Spectrum

Mensaje por yombo »

Bueno pues ya tengo terminado el reloj, a falta de un pequeño detalle. Lo tenéis aquí (código incluído):
https://drive.google.com/file/d/0B4WEXG ... sp=sharing

Me lo he currado bastante, espero que os guste. Está hecho a medias en Sinclair BASIC y a medias en ZX BASIC de Boriel. Como no se puede imprimir desde ZX BASIC, el programa que muestra el reloj sale cada 5 minutos al BASIC, se imprime y se vuelve al programa binario.

El detalle que falta es que a la hora de imprimir en la impresora, no sé en BASIC cómo concatenar dos cadenas o imprimir con 'padding' con ceros a la izquierda.
Es decir, que cuando son la una y siete, me imprime 1:7 en vez de 01:07 que es lo que yo quiero.
Alguien me ayuda? teniendo las dos variables 'minutos' y 'segundos', numéricas, cómo imprimir de la manera que digo?

Lo que hago ahora es simplemente:

Código: Seleccionar todo

LPRINT horas;":";minutos
Saludos
Imagen
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Un reloj para ZX Spectrum

Mensaje por Fermars »

Yombo, impresionante, menudo trabajazo. La verdad es que me imaginaba algo más austero pero te has montado un relog gráfico tremendo, me has dejao :o
¡¡ENHORABUENA!!. No tengo ni puñetera idea de cómo lo has hecho, pero viendo esto no tienes precio como programador :D

Imagen

He visto un "bug" y es que cuando la impresora imprime el reloj se para, supongo que es una limitación del hardware (no es multitasking, ¿no? ;-) ) y cada 5 minutos se retrasa unos 3 segundos que es el tiempo que tarda en imprimir la hora y avanzar una línea. No se si se puede solventar...
[EDITO]
El invento lleva funcionando media hora y he visto que aunque el reloj se para durante ese tiempo para imprimir, en realidad los segundos van más rápido y se compensa un poco. Bueno, en realidad el reloj se adelante bastante, a raíz de 10 segundos cada 30 minutos más o menos.

También he pasado el TAP a MP3 y lo he cargado de la forma tradicional en el Spectrum con una ZX Printer y va de lujo!! :D.
Una cosilla rara que veo es que entre bloques de carga hay unos programas BASIC que no se cargan, supongo que el programa principal espera Bytes, cuando le estamos metiendo un "Program". No pasa nada, es solo por comentarlo.

Otra cosa, ¿Se podría poner en pantalla algo así como Próxima impresión en XX minutos/segundos o incluso mejor aún, próxima impresión a las XX:XX:XX?
Y otra ¿En vez de Valencia se podría poner ParlaBytes? Más que nada por dejar a la vista el nombre del evento, y quizá si os parece bien, en vez de Va-de-retro a secas, molaría ver la URL del foro, algo muy moderno en algo muy antiguo ;)
Por último esto será fácil (supongo) en la impresora estaría chulo que saliera un mensaje más elaborado del tipo:

Código: Seleccionar todo

Sinclair ZX Printer - Reloj Va-de-Retro
Hora: XX:XX:XX
(-: Gracias por visitarnos :-)
Y meter al final un salto de línea. Con esto conseguimos también que la hora no se quede escondida en el papel, porque con dos líneas la hora que acaba de imprimir se queda debajo.

No he mirado el código, pero seguramente esto podrá cambiarse en el BASIC
Fernando
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Un reloj para ZX Spectrum

Mensaje por yombo »

Me alegro que te guste! La verdad es que me he pegado dos dias buenos haciéndolo :)
Todo los cambios que comentas son fáciles de hacer. Buscaré el logo de Parlabytes para hacerlo en la pantalla, es fácil con Colorator. Ahora estoy con el móvil.

Lo del retraso del reloj, no debería haber, porque leo el contador del sistema como comentaban más atrás, y este contador se actualiza con la interrupción del retrazo, que no creo que se detenga al imprimir. Miraré mejor a ver dónde puede estar el problema.
Imagen
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Un reloj para ZX Spectrum

Mensaje por Fermars »

yombo escribió:Me alegro que te guste! La verdad es que me he pegado dos dias buenos haciéndolo :)
Todo los cambios que comentas son fáciles de hacer. Buscaré el logo de Parlabytes para hacerlo en la pantalla, es fácil con Colorator. Ahora estoy con el móvil.

Lo del retraso del reloj, no debería haber, porque leo el contador del sistema como comentaban más atrás, y este contador se actualiza con la interrupción del retrazo, que no creo que se detenga al imprimir. Miraré mejor a ver dónde puede estar el problema.
Si lo necesitas puego grabar un video para que veas lo del adelanto de la hora y la pausa mientras imprime. Al final lo deje una hora y se adelanto 15 segundos.
Fernando
Avatar de Usuario
stratotrasto
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2494
Registrado: 20 Feb 2014, 17:23
Ubicación: Abula

Re: Un reloj para ZX Spectrum

Mensaje por stratotrasto »

Me dejáis de piedra. :o

Chapó.
Si me muero no dejéis a mi mujer vender mis cacharros por lo que le dije que me costaron...
Avatar de Usuario
elfoscuro
Demonio segundo orden
Demonio segundo orden
Mensajes: 1835
Registrado: 01 Abr 2013, 22:00
Been thanked: 26 times

Re: Un reloj para ZX Spectrum

Mensaje por elfoscuro »

Fermars escribió:
yombo escribió:Me alegro que te guste! La verdad es que me he pegado dos dias buenos haciéndolo :)
Todo los cambios que comentas son fáciles de hacer. Buscaré el logo de Parlabytes para hacerlo en la pantalla, es fácil con Colorator. Ahora estoy con el móvil.

Lo del retraso del reloj, no debería haber, porque leo el contador del sistema como comentaban más atrás, y este contador se actualiza con la interrupción del retrazo, que no creo que se detenga al imprimir. Miraré mejor a ver dónde puede estar el problema.
Si lo necesitas puego grabar un video para que veas lo del adelanto de la hora y la pausa mientras imprime. Al final lo deje una hora y se adelanto 15 segundos.
Es fácil que mientras el ordenador está con la impresora se deje de actualizar FRAMES... Por ejemplo, LOAD y SAVE paran el conteo porque deshabilitan las interrupciones...

Es fácil saberlo... cuenta los segundos que tarda en imprimir y mira si el valor de FRAMES antes y después, coincide con ese tiempo. Debería ser mucho menos si el conteo se ha parado mientras se imprime.

Un saludo.
Fin de impresión
Avatar de Usuario
elfoscuro
Demonio segundo orden
Demonio segundo orden
Mensajes: 1835
Registrado: 01 Abr 2013, 22:00
Been thanked: 26 times

Re: Un reloj para ZX Spectrum

Mensaje por elfoscuro »

yombo escribió: El detalle que falta es que a la hora de imprimir en la impresora, no sé en BASIC cómo concatenar dos cadenas o imprimir con 'padding' con ceros a la izquierda.
Es decir, que cuando son la una y siete, me imprime 1:7 en vez de 01:07 que es lo que yo quiero.
Alguien me ayuda? teniendo las dos variables 'minutos' y 'segundos', numéricas, cómo imprimir de la manera que digo?

Lo que hago ahora es simplemente:

Código: Seleccionar todo

LPRINT horas;":";minutos
Saludos
Usa:

LPRINT "00" (TO 2-LEN STR$ horas);horas;":";"00" (TO 2-LEN STR$ minutos);minutos

Algo así debería de funcionar.

Explicación:

El Basic de Spectrum no tiene LEFT$, RIGHT$ o MID$, ni falta que le hace. Para ello usa TO al modo MID$ (o parecido). Por ejemplo:

"CADENA" (2 TO 4) daría "ADE" es decir, desde el caracter 2 al 4.

En la expresión que he puesto, hay dos comandos más:

LEN, devuelve la longitud de una cadena
STR$, convierte un numérico en una cadena

Así pues, lo que hace es medir la longitud de la cadena resultante de la variable horas, y luego hace un troceo de "00", ya sea (1 TO 1), lo que daría "0", o de (1 TO 0) lo que daría "". Luego, añade la variable horas. Y lo mismo con los minutos.

En otros lenguajes, habría que convertir horas a STRING o cosas similares para hacer un msgbox por ejemplo. En BASIC no es necesario, se pueden poner detrás del ; y el intérprete lo imprime y punto :-)

Un saludo.
Fin de impresión
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Un reloj para ZX Spectrum

Mensaje por yombo »

elfoscuro escribió:
yombo escribió: El detalle que falta es que a la hora de imprimir en la impresora, no sé en BASIC cómo concatenar dos cadenas o imprimir con 'padding' con ceros a la izquierda.
Es decir, que cuando son la una y siete, me imprime 1:7 en vez de 01:07 que es lo que yo quiero.
Alguien me ayuda? teniendo las dos variables 'minutos' y 'segundos', numéricas, cómo imprimir de la manera que digo?

Lo que hago ahora es simplemente:

Código: Seleccionar todo

LPRINT horas;":";minutos
Saludos
Usa:

LPRINT "00" (TO 2-LEN STR$ horas);horas;":";"00" (TO 2-LEN STR$ minutos);minutos
Perfecto, genial. Gracias, con esto ya lo tengo. Y de paso aprendo BASIC a un nivel que no llegué a aprender de pequeño :D
Imagen
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Un reloj para ZX Spectrum

Mensaje por yombo »

elfoscuro escribió:
Fermars escribió:
yombo escribió:Me alegro que te guste! La verdad es que me he pegado dos dias buenos haciéndolo :)
Todo los cambios que comentas son fáciles de hacer. Buscaré el logo de Parlabytes para hacerlo en la pantalla, es fácil con Colorator. Ahora estoy con el móvil.

Lo del retraso del reloj, no debería haber, porque leo el contador del sistema como comentaban más atrás, y este contador se actualiza con la interrupción del retrazo, que no creo que se detenga al imprimir. Miraré mejor a ver dónde puede estar el problema.
Si lo necesitas puego grabar un video para que veas lo del adelanto de la hora y la pausa mientras imprime. Al final lo deje una hora y se adelanto 15 segundos.
Es fácil que mientras el ordenador está con la impresora se deje de actualizar FRAMES... Por ejemplo, LOAD y SAVE paran el conteo porque deshabilitan las interrupciones...

Es fácil saberlo... cuenta los segundos que tarda en imprimir y mira si el valor de FRAMES antes y después, coincide con ese tiempo. Debería ser mucho menos si el conteo se ha parado mientras se imprime.

Un saludo.
El problema es que no tengo impresora para probar, tendría que hacer un programa de prueba para Fermars... lo miraré.
Imagen
Responder

Volver a “Proyectos de software abiertos”