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 »

stratotrasto escribió:Me dejáis de piedra. :o

Chapó.
:D :D :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 »

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.
No importa hacer el vídeo, será mejor que haga un programa de prueba que cronometre lo que tarda en imprimir una frase, y que haga un beep al principio y al final. Puedes cronometrar a mano o grabando el audio y mirando con un editor la diferencia de tiempo entre los dos beeps, aunque a mano creo que es suficiente. Lo que dice elfoscuro, si no coincide por mucho es que los FRAMES no se actualizan mientras se imprime, y entonces es imposible mantener la sincronización :(

Yo pienso que sí se actualiza FRAMES, pero que hay una imprecisión en mi código, ya veremos.
En un rato subo el programa para cronometrar...
Imagen
Avatar de Usuario
elfoscuro
Demonio segundo orden
Demonio segundo orden
Mensajes: 1831
Registrado: 01 Abr 2013, 22:00
Been thanked: 26 times

Re: Un reloj para ZX Spectrum

Mensaje por elfoscuro »

Creo que BEEP es otro comando chungo con las interrupciones... tenedlo en cuenta también.

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ó:Creo que BEEP es otro comando chungo con las interrupciones... tenedlo en cuenta también.

Un saludo.

No lo había pensado, y hay beeps en el programa, pero muy conrtitos, no explicarían el retraso de 15 segundos en una hora ::?
Imagen
Avatar de Usuario
tacha Uruguay
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3144
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Has thanked: 46 times
Been thanked: 32 times
Contactar:

Re: Un reloj para ZX Spectrum

Mensaje por tacha »

Si me dais un par de horas os puedo pasar un programa sencillo en Basic. (es que ahora estoy limpiando mi "posilga" :D )
66 6C 6F 70 70 69 6E 67 20 6D 61 73 63 61 20 50 30 6C 6C 34 / 6D 61 73 20 63 6F 74 69 6C 6C 61 20 73 65 72 E1 73 20 74 75 20 49 7A 61 72 6F 20 3A 70
Avatar de Usuario
wilco2009 !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 8152
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 47 times
Been thanked: 101 times

Re: Un reloj para ZX Spectrum

Mensaje por wilco2009 »

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

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.
Una manera alternativa de hacerlo:

10 IF H < 10 THEN LPRINT 0;
20 LPRINT H;":";
30 IF M< 10 THEN LPRINT "0";
40 LPRINT M
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.
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 no hace falta que te pase el programa de prueba Fermars, he comprobado que efectivamente al usar la impresora afecta a los frames.

No veo ninguna manera de solucionarlo... :?
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 »

wilco2009 escribió: Una manera alternativa de hacerlo:

10 IF H < 10 THEN LPRINT 0;
20 LPRINT H;":";
30 IF M< 10 THEN LPRINT "0";
40 LPRINT M
El problema es que cada comando LPRINT imprime una línea diferente en la impresora (creo), con lo que no va bien esta solución, pero gracias.
Imagen
Avatar de Usuario
wilco2009 !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 8152
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 47 times
Been thanked: 101 times

Re: Un reloj para ZX Spectrum

Mensaje por wilco2009 »

yombo escribió:Bueno pues no hace falta que te pase el programa de prueba Fermars, he comprobado que efectivamente al usar la impresora afecta a los frames.

No veo ninguna manera de solucionarlo... :?
Pon un contador en memoria que se incremente a cada salida del programa principal y se calibra cronometro en mano.
yombo escribió:
wilco2009 escribió: Una manera alternativa de hacerlo:

10 IF H < 10 THEN LPRINT 0;
20 LPRINT H;":";
30 IF M< 10 THEN LPRINT "0";
40 LPRINT M
El problema es que cada comando LPRINT imprime una línea diferente en la impresora (creo), con lo que no va bien esta solución, pero gracias.
¿cambia de linea aunque pongas el punto y coma?
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.
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ó:
yombo escribió:Bueno pues no hace falta que te pase el programa de prueba Fermars, he comprobado que efectivamente al usar la impresora afecta a los frames.

No veo ninguna manera de solucionarlo... :?
Pon un contador en memoria que se incremente a cada salida del programa principal y se calibra cronometro en mano.
yombo escribió:
wilco2009 escribió: Una manera alternativa de hacerlo:

10 IF H < 10 THEN LPRINT 0;
20 LPRINT H;":";
30 IF M< 10 THEN LPRINT "0";
40 LPRINT M
El problema es que cada comando LPRINT imprime una línea diferente en la impresora (creo), con lo que no va bien esta solución, pero gracias.
¿cambia de linea aunque pongas el punto y coma?
Eso no lo sé, pero lo puedo probar con el emulador...


Edito: Pues sí que funciona lo del punto y coma al final :)
Imagen
Responder

Volver a “Proyectos de software abiertos”