Autor Tema: POKE o PRINT?  (Leído 3437 veces)

5alad

  • Sinver
  • *
  • Mensajes: 17
    • Ver Perfil
POKE o PRINT?
« en: Julio 05, 2024, 00:15:29 »
Para hacer gráficos en baja resolución, el PRINT en commodore ofrece una versatilidad que no tienen otros 8 bits. Cuando abres comillas, las combinaciones de teclas se vuelven en símbolos, y así es muy rápido y fácil hacer algo.
Para movimientos horizontales TAB hace el resto (y un espacio para borrar la estela)
Por ejemplo

Código: [Seleccionar]
10 for x=10 to 38
20 print tab(x)" ->(aquí poner cursor hacia arriba)"
30 next x

haciéndolo en POKES se tardaría mas en ejecutar no? que opinais.
seria algo así

Código: [Seleccionar]
10 for x=1 to 28
20 poke 1034+x,(espacio):poke 1035+x,(-).poke1036,(>)
30 next x

El problema si quieres mover dos objetos y ponerle sonido.

Que opinais?
« última modificación: Julio 05, 2024, 04:23:51 por josepzin »
10 NEW
READY
_

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #1 en: Julio 05, 2024, 04:29:52 »
Sin ser un conocedor del tema, yo creo que el PRINT va a ser mas rápido por estas razones:
- Con PRINT en una sola llamada a la instrucción ya resuelve todo
- Con POKE hay que hacer 3 llamadas distintas y además dos sumas

Supongo que hay alguna manera @Dozznar *cof*cof* para revisar el código máquina generado por cada uno y así saber cuantos ciclos ocupa.

Una lanza a favor del POKE es que al usarlo estas conociendo cómo funciona internamente el C64 y luego pasar eso a ensamblador o cualquier otro lenguaje sería la misma lógica, en cambio usando el PRINT no.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #2 en: Julio 05, 2024, 04:31:06 »
Realmente lo que hace el PRINT al abrir comillas parece magia!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Jeff

  • Commodore Master
  • *****
  • Mensajes: 698
  • RUN/STOP + RESTORE
    • Ver Perfil
Re:POKE o PRINT?
« Respuesta #3 en: Julio 05, 2024, 09:51:41 »
Buenas,

Hay otras maneras de imprimir en diferentes posiciones de la pantalla, como si fuera un PRINT AT o un GOTO(X,Y) empleando una rutina del KERNEL.

Te pongo un ejemplo para que ratonees y hagas comparaciones de velocidad.

Lo bueno, es que puedes trabajar con coordenadas cartesianas, por lo que los calculos para el programa te resultarán mas sencillos.

Código: [Seleccionar]
10 FOR X=0 TO 37
20 POKE 781,15:POKE 782,X:SYS 65520
30 PRINT" ->"
40 NEXT X
50 FOR X=37 TO 0 STEP (-1)
60 POKE 781,15:POKE 782,X:SYS 65520
70 PRINT"<- "
80 NEXT X
90 GOTO 10

Como verás, con los POKES en las direcciones 782 y 781 son las posiciones cartesianas del cursor en X e Y.
Y el SYS a 65520 es la llamada a PLOT del KERNEL

Nota: El PRINT TAB (X) tiene limitación hasta 255, por si intentas emplearlo mas allá de una posición vertical.

Con el POKE 1024+X+Y*40, la limitación es la propia pantalla, es decir, hasta 2023.

De todos modos, usar variables, aumenta la velocidad de los programas en BASIC.

Si defines P=1024, entonces pokeas como POKE P+X+Y*40 y debería de ser mas eficiente.
« última modificación: Julio 05, 2024, 10:01:29 por Jeff »
Press ANY key (¿Donde esta la tecla ANY???)

5alad

  • Sinver
  • *
  • Mensajes: 17
    • Ver Perfil
Re:POKE o PRINT?
« Respuesta #4 en: Julio 05, 2024, 10:29:50 »
Probaré eso, aunque lo de que "trabajar con coordenadas cartesianas, por lo que los calculos para el programa te resultarán mas sencillos." es mucho presuponer para un cero patatero en mates. No me habrá pasado veces en que un fallo de cálculo me pone un poke donde no debe y se va todo a la mierda (suerte que lo voy salvando compulsivamente jaja)
10 NEW
READY
_

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 298
    • Ver Perfil
Re:POKE o PRINT?
« Respuesta #5 en: Julio 05, 2024, 11:09:24 »
Para este tema recuerdo un articulo de la Commodore World nº22 " El formateo de pantalla en el C64" que hacia pruebas de velocidad midiéndolo en jiffies, y los clasificaba así:

Control del cursor con Print 57 Jiffies
Rutina kernal Plot 109 Jiffies
Metodo Poke1 110 Jiffies
Metodo Poke2 118 Jiffies
Tab y Spc 253 Jiffies
Read y Poke 508 Jiffies

con lo que el Print es lo más rapido, si es que en Basic puede algo ir rápido..., el articulo esta interesante de leer, estas revistas deben  estar por el apartado de preservación

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #6 en: Julio 05, 2024, 14:59:13 »
« última modificación: Julio 05, 2024, 15:03:53 por josepzin »
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #7 en: Julio 05, 2024, 15:00:14 »
Código: [Seleccionar]
20 POKE 781,15:POKE 782,X:SYS 65520

Que guai este PRINT AT!!!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #8 en: Julio 05, 2024, 15:00:36 »
Control del cursor con Print 57 Jiffies
Rutina kernal Plot 109 Jiffies
Metodo Poke1 110 Jiffies
Metodo Poke2 118 Jiffies
Tab y Spc 253 Jiffies
Read y Poke 508 Jiffies

Buenisima esta comparativa.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

5alad

  • Sinver
  • *
  • Mensajes: 17
    • Ver Perfil
Re:POKE o PRINT?
« Respuesta #9 en: Julio 05, 2024, 15:22:49 »
Guay. Igual esta noche vuelvo a las andadas.

Mi problema pirncipal es que cuando empiezo algo, no tengo ni idea de lo que quiero hacer
Eso para componer música está muy bién, enciendes un sinte, empiezas a tocar, buscar sonidos, modificarlos y ahí salen cosas
Pero para programar , acaba siendo un p*** caos, primero hice las gotas, luego la cueva, luego el fondo, luego el robot, luego el texto, pero ya sobraba otra cosa, así te encuentras un código descojonado completamente jeje
Gosubs por aquí, linesas de 10 en 10 qie de repente van de 1 en 1
10 NEW
READY
_

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 15021
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:POKE o PRINT?
« Respuesta #10 en: Julio 05, 2024, 16:34:15 »
Para eso existe el BASIC, para tener código spaghetti :D
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com