Commodore 64 > CC65

Programando para C64 en C++

(1/4) > >>

SirArthur:
Me he topado con este video que me ha dejado ojiplático o_O No se si alguno de los que aquí lleváis montones de tiempo programando para el C64 habíais visto esto o se os había ocurrido intentarlo. Se trata de programar PARA Commodore 64 en el lenguaje C++ Se que hay algun tipo de C para C64,pero C++ es bastante diferente. Aunque está basado en C, y hay muchísimas cosas "compatibles" es un lenguaje que necesita más recursos de inicio, por lo que tener un compilador C++ en C64 supongo que es imposible. Aunque no me he puesto a mirar y podría estar diciendo una burrada.

¿Asi es que como se hace? Pues a ver.. si lo he entendido bien sería algo así. Se hace en un PC ,en el video usa linux pero imagino que podrá valer en windows. Se escribe el código en C++ y se obtiene como veis en el vídeo el equivalente en ensamblador para x86. El truco está que desde el programa C++, el sujeto que hace este video hace llamadas directas a memoria a las posiciones que son las que quisieras manejar/manipular/leer en el C64, es decir, lo equivalente a pokes y peeks para leer o escribir. Si eso se ejecutara en un PC seguramente sería catástrofe al acceder a posiciones protegidas o vete a saber, pero ese código no funcionará finalmente en un PC Una vez obtenido el equivalente del programa C++ en ensamblador x86 parece que usa un compiler o herramienta especial "x86-to-6502" que hace el trabajo duro de transformar el ensamblador x86 a código máquina del 6502, y hace que el resultado lo saque por pantalla. Entonces copia ese texto y lo pega en el programa Turbo Macro 1.2 de C64,usando emulador claro. Finalmente se ejecuta y tachán.. funciona..

Alguno dira.. pues vaya currada para solo unas líneas que podrías hacer directamente en C64. Sí, cierto. Pero con (mucho) tiempo y ganas se podría crear un IDE en PC que pudieras programar directamente en C++, y pulsando un botoncito automáticamente haría todo el proceso anterior y se visualizaría en el emulador. NO es lo mismo que por ejemplo el CBM prg Studio, en el CBM hay que programar en Basic o en ensamblador del 6502. Aqui solo programarías en C++ que quitada la barrera inicial de entender lo de los objetos es un lenguaje tremendamente potente

Así en poco tiempo podrias hacerte tus propias librerías chulas C++ para manejar puertos, joysticks, zonas de memoria, sprites, crear objetos de soldado, de nave, de bala.. Reutilizarlas, mejorarlas, Yo creo que los que sepáis C++ sabéis a qué me refiero.

Bueno pues ahí lo dejo.. no se si alguien algún día le gustaria tomar este proyecto, no se si ya hay algo en marcha o a medias o finalizado pero me gustaria saber vuestra opinión :)

Un ejemplo sencillo y de lo que podría ser en C++ crear un nuevo soldadito y mostrarlo por pantalla en la posición 50,80 ya con atributos de resistencia,velocidad y todo lo que se ocurriera :)
Soldado patoso = new Soldado(20,5);//Soldado (int Resistencia,int velocidad)
patoso.show(50,80);

y aqui matamos al soldado patoso XD
patoso.death();

https://www.youtube.com/watch?v=nLv_INgaLq8

josepzin:
No tengo tiempo de ver el video ahora, pero comento porque algo estuve jugando con C para C64.

El principal problema que le veo a esto es que el código generado seguro que no está nada optimizado para el 64, no porque esté mal hecho sino porque al querer hacer cosas como uno las haría en un lenguaje de alto nivel, ya con eso la estás cagando ;)

Me imagino que implementar una programación orientada a objetos debe generar un montón de código extra sólo para que ese ejemplo del soldado que has puesto sea entendido, cuando hacer lo mismo en ensamblador, usando la "lógica" de un sistema de 8 bits con poca memoria, ocuparía el 1% y sería más rápido.

Igual estoy hablando sin conocimientos suficientes... a lo Aigor :P

Lo que comentas del IDE, creo que es mas o menos lo que se hace con CC65 (o cualquier cruzado), editas en un Notepad++, le das a F5 y tienes el emulador corriendo con lo que has hecho.
En el camino el emulador generó varios archivos, compiló, enlazó y yo que sé más :P

Hace mucho hice una entrada sobre CC65: https://josepzin.blogspot.com/2010/08/tutorial-instalacion-entorno-C-para-C64.html

Algún día lo retomaré :'(

Portiella:
Te comento, toda la vida he trabajado en C y C++ y muchos años en ensamblador (C64, Amiga e Intel) y he mirado los primeros minutos del video hasta donde empieza a hacer una función de memoria y te diré que la herramienta tiene muy buena pinta, parece muy buena pero creo que es útil para la enseñanza.

En el ejemplo enseñan como crear una función/subrutina para asignar una valor a una dirección de memoria, esto en el mundo real para hacer un juego es imposible! sería muy lento, ningún juego se movería con soltura, te explico, realizar una llamada JSR/CALL implica un montón de ciclos, aumentar el stack(pila), reducir el stack (al acabar) y en muchos casos si la función retorna un valor perder un registro.
Otro ejemplo que he visto es controlar el joystick y los bits, hacer una función para eso es estar tirando los ciclos a la basura.

Está muy bien para enseñar y jugar con esa herramienta, pero nada mas.

SirArthur:
Ya me parecía demasiado idílico XD A ver yo tb he programado años en C y C++ y como dije en el mensaje soy consciente que C++ exige de inicio más recursos que C. Lo que me faltaba por cuadrar era ver si esto podría ser práctico. Imaginaba que no podría estar optimizado al ser algo tan automático. Si quisiéramos apurar al límite no queda más remedio que ir directamente al ensamblador en C64. Pensaba que quizá aunque fuera con algo de desaprovechamiento podría ser útil para algun juego sencillo. Esta claro tal como me habéis dicho que de esta forma se genera demasiado código extra,desperdiciando ciclos,memoria etc.. con lo cual no es útil en ninguna forma salvo como curiosidad o algun programa tremendamente sencillo. Entendido,si el C64 tuviera 20 mhz igual si valdría XD

Gracias a ambos y me miraré lo del CC65 Jose, la CPCtelera funciona por esa misma vía del C y mira que de juegos salen. A ver si alguien se atreviera a crear algo parecido :)

josepzin:
Los juegos mojonos para c64 están hechos usando cc65,  aunque usando ensamblador para mover gráficos.

A ver si @Wood nos puede dar detalles.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa