Commodore manía

Commodore 64 => Desarrollo => BASIC => Mensaje iniciado por: 5alad en Julio 05, 2024, 00:15:29

Título: POKE o PRINT?
Publicado por: 5alad 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?
Título: Re:POKE o PRINT?
Publicado por: josepzin 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.
Título: Re:POKE o PRINT?
Publicado por: josepzin en Julio 05, 2024, 04:31:06
Realmente lo que hace el PRINT al abrir comillas parece magia!
Título: Re:POKE o PRINT?
Publicado por: Jeff 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.
Título: Re:POKE o PRINT?
Publicado por: 5alad 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)
Título: Re:POKE o PRINT?
Publicado por: Laddh 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
Título: Re:POKE o PRINT?
Publicado por: josepzin en Julio 05, 2024, 14:59:13
Aquí esta!!

https://archive.org/details/CommodoreWorld/Commodore_World_22/page/n9/mode/2up
Título: Re:POKE o PRINT?
Publicado por: josepzin en Julio 05, 2024, 15:00:14
Código: [Seleccionar]
20 POKE 781,15:POKE 782,X:SYS 65520

Que guai este PRINT AT!!!
Título: Re:POKE o PRINT?
Publicado por: josepzin 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.
Título: Re:POKE o PRINT?
Publicado por: 5alad 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
Título: Re:POKE o PRINT?
Publicado por: josepzin en Julio 05, 2024, 16:34:15
Para eso existe el BASIC, para tener código spaghetti :D