stratotrasto escribió:Me dejáis de piedra.
Chapó.
Un reloj para ZX Spectrum
Moderador: Fundadores
Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Un reloj para ZX Spectrum
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ónFermars escribió: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.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.
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...
- elfoscuro
- Demonio segundo orden
- Mensajes: 1831
- Registrado: 01 Abr 2013, 22:00
- Been thanked: 26 times
Re: Un reloj para ZX Spectrum
Creo que BEEP es otro comando chungo con las interrupciones... tenedlo en cuenta también.
Un saludo.
Un saludo.
Fin de impresión
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Un reloj para ZX Spectrum
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
- tacha
- 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
Si me dais un par de horas os puedo pasar un programa sencillo en Basic. (es que ahora estoy limpiando mi "posilga" )
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
- wilco2009
- 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
Una manera alternativa de hacerlo:elfoscuro escribió:Usa: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:SaludosCódigo: Seleccionar todo
LPRINT horas;":";minutos
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.
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.
Douglas Adams. Guía del autoestopista galáctico.
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Un reloj para ZX Spectrum
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...
No veo ninguna manera de solucionarlo...
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Un reloj para ZX Spectrum
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.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
- wilco2009
- 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
Pon un contador en memoria que se incremente a cada salida del programa principal y se calibra cronometro en mano.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...
¿cambia de linea aunque pongas el punto y coma?yombo escribió: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.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
"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.
Douglas Adams. Guía del autoestopista galáctico.
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Un reloj para ZX Spectrum
Eso no lo sé, pero lo puedo probar con el emulador...wilco2009 escribió:Pon un contador en memoria que se incremente a cada salida del programa principal y se calibra cronometro en mano.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...
¿cambia de linea aunque pongas el punto y coma?yombo escribió: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.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
Edito: Pues sí que funciona lo del punto y coma al final