Commodore manía
Commodore 64 => Desarrollo => BASIC => Mensaje iniciado 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
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í
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?
-
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.
-
Realmente lo que hace el PRINT al abrir comillas parece magia!
-
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.
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.
-
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)
-
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
-
Aquí esta!!
https://archive.org/details/CommodoreWorld/Commodore_World_22/page/n9/mode/2up
-
20 POKE 781,15:POKE 782,X:SYS 65520
Que guai este PRINT AT!!!
-
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.
-
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
-
Para eso existe el BASIC, para tener código spaghetti :D