Commodore manía

Commodore 64 => Desarrollo => CC65 => Mensaje iniciado por: josepzin en Agosto 23, 2010, 17:33:43

Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Agosto 23, 2010, 17:33:43
Lo prometido es deuda:

El motivo de este tutorial es instalar un entorno básico de desarrollo en lenguaje C para crear aplicaciones de Commodore 64 bajo Windows, con las siguientes características:

* WinVICE: emulador de Commodore
* CC65: compilador C para 6502
* Plataforma Windows XP/7

Mi intención es tener todo el entorno en formato "portable" (recomiendo la web Portable Apps para obtener programas portables), o sea que no dependa de instalar aplicaciones y que sea fácilmente portable de un ordenador a otro, por ejemplo en una memoria USB o como en mi caso, usando la aplicación de almacenamiento online y sincronización automática Dropbox.

Leer completo en  Tutorial de instalación de entorno de desarrollo en lenguaje C para Commodore 64, usando CC65 y WinVICE sobre Windows XP/7 (http://josezanni.com/tutorial-de-instalacion-de-entorno-de-desarrollo-en-lenguaje-c-para-commodore-64-usando-cc65-y-winvice-sobre-windows-xp-7)

Cualquier crítica, error o sugerencia para mejorar el tutorial es bienvenido!
Título: Tutorial para comenzar a programar C en C64
Publicado por: Carlos en Agosto 26, 2010, 08:54:49
Le he echado un ojo, muy útil para la gente novata que no sabe cómo empezar.

Me ha llamado la atención que en el .bat que te montas haces en una de las líneas un borrado de los ficheros assembler generados al compilar mediante un DEL *.lst, no se a ti pero a mi me los genera con extensión .s

Sobre el editor yo uso el Scite, el Notepad++ lo conocía y aunque no lo he visto a fondo me parece que tiene 'demasiadas opciones' para lo poco que yo necesito.
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Agosto 26, 2010, 11:37:02
Cita de: "Carlos"
Le he echado un ojo, muy útil para la gente novata que no sabe cómo empezar.

Si, es la idea :)


Cita de: "Carlos"
Me ha llamado la atención que en el .bat que te montas haces en una de las líneas un borrado de los ficheros assembler generados al compilar mediante un DEL *.lst, no se a ti pero a mi me los genera con extensión .s

Cierto, es raro... ¿puede ser porque hay una librería con extensión .s (text.s)??


Cita de: "Carlos"
Sobre el editor yo uso el Scite, el Notepad++ lo conocía y aunque no lo he visto a fondo me parece que tiene 'demasiadas opciones' para lo poco que yo necesito.

El Scite siempre tiene buenos comentarios, alguna vez lo he probado pero siempre vuelvo al Notepad++.
A ver si le doy una nueva oportunidad.
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 02, 2010, 22:46:44
Parece que hay guerra... estoy de viaje y no tengo tiempo de leerlo, pero pinta entretenido :D
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 29, 2010, 23:32:56
Hola ^^

Este es mi primer mensaje por aqui y bueno, decir que llevaba desde hace mucho con ganas de incarle el diente ya fuese a la NES o al C64 para hacer algun jueguito pero el ponerme con ensamblador me quitaba las ganas cosa mala. Por suerte hace unos dias me dio por mirar el panorama, por puro aburrimiento del momento xD y encontre CC65 y que decir, el ver que se podia programar en C... :D

Yo soy programador de .Net (ademas de estar haciendo proyectos para XNA) y comence con C ademas de luego estudiar tambien C++.

Era por presentarme espero no moleste el tocho. Bueno, el caso es que al final me he decidido por C64 y aqui ando haciendo mis pinitos, mirando que leches eran esas direcciones de memoria a las que hacia Dr.Fred referencias en algunos codigos suyos que visto por aqui y entendiendo dichos codigos y sobre todo, mirandome las librerias de CC65 a fondo y haciendome mi propia documentacion en castellano, bien ordenada y explicada e incluso algunos metodos con ejemplos, material que adelanto...espero no se considere spam...ire poniendo en mi blog de programacion porque me parece extrñisimo que a dia de hoy haya tan poco material disponible en la red sobre el tema pero acerca de retropcs atari o incluso la lynx hay muuucho mas.

Tras el final, lo juro, del tocho, quiero preguntar la pregunta que venia a hacer xD en los ejemplos de Dr.Fred pone por ejemplo..
POKE(2040,13); //asigno puntero del Sprite 0
..pero no se ese 2040 a que hace referencia porque me he mirado una tabla entera de referencias a memoria del C64 y esa en concreto ni idea, se que de 53248 a 54271 es para las coord. de los sprites etc.. pero esta ni remota idea.

Si alguien puede echar un cable pues muchas gracias :wink:
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 29, 2010, 23:47:55
+Bienvenido! ¡Espero que el tutorial te sea de ayuda!
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 29, 2010, 23:58:20
Plis no escapes!!!!!! :twisted:

Me autocito 8)
Citar
la pregunta que venia a hacer xD en los ejemplos de Dr.Fred pone por ejemplo..
POKE(2040,13); //asigno puntero del Sprite 0
..pero no se ese 2040 a que hace referencia porque me he mirado una tabla entera de referencias a memoria del C64 y esa en concreto ni idea, se que de 53248 a 54271 es para las coord. de los sprites etc.. pero esta ni remota idea.
Título: Tutorial para comenzar a programar C en C64
Publicado por: Carlos en Septiembre 30, 2010, 00:31:17
Cita de: "KFR"
Hola ^^

Este es mi primer mensaje por aqui y bueno, decir que llevaba desde hace mucho con ganas de incarle el diente ya fuese a la NES o al C64 para hacer algun jueguito pero el ponerme con ensamblador me quitaba las ganas cosa mala. Por suerte hace unos dias me dio por mirar el panorama, por puro aburrimiento del momento xD y encontre CC65 y que decir, el ver que se podia programar en C... :D

Yo soy programador de .Net (ademas de estar haciendo proyectos para XNA) y comence con C ademas de luego estudiar tambien C++.

Era por presentarme espero no moleste el tocho. Bueno, el caso es que al final me he decidido por C64 y aqui ando haciendo mis pinitos, mirando que leches eran esas direcciones de memoria a las que hacia Dr.Fred referencias en algunos codigos suyos que visto por aqui y entendiendo dichos codigos y sobre todo, mirandome las librerias de CC65 a fondo y haciendome mi propia documentacion en castellano, bien ordenada y explicada e incluso algunos metodos con ejemplos, material que adelanto...espero no se considere spam...ire poniendo en mi blog de programacion porque me parece extrñisimo que a dia de hoy haya tan poco material disponible en la red sobre el tema pero acerca de retropcs atari o incluso la lynx hay muuucho mas.

Tras el final, lo juro, del tocho, quiero preguntar la pregunta que venia a hacer xD en los ejemplos de Dr.Fred pone por ejemplo..
POKE(2040,13); //asigno puntero del Sprite 0
..pero no se ese 2040 a que hace referencia porque me he mirado una tabla entera de referencias a memoria del C64 y esa en concreto ni idea, se que de 53248 a 54271 es para las coord. de los sprites etc.. pero esta ni remota idea.

Si alguien puede echar un cable pues muchas gracias :wink:


Bienvenido! cuenta algo más de tu historia.. cómo es que te ha dado por la retroprogramación, siempre has sido fan del C64, que proyecto tienes en mente hacer... ?

Como no todo van a ser preguntas te respondo, esa dirección de memoria es el puntero que apunta al patrón o definición de ese sprite, es decir, a la imagen que va a mostrar ese sprite si está activo. Por lo tanto existen 8 direcciones diferentes de ese tipo (una por cada sprite hardware de los ocho que posee el C64). De todas formas y sin entrar en detalles esas son direcciones relativas al banco sobre el que está trabajando el VIC.. pero por ahora no te lío con esto.. a no ser que quieras claro  :lol:

Te comento que no eres el único que se ha lanzado a la programación de un juego de C64 usando el cc65  :wink:
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 30, 2010, 00:42:56
Yo estoy preparando una librería en C para usar sprites, modos graficos, tiles y demás, puede servirte para usarla o para ver "cómo se hacen las cosas" :D

Tengo que hacerme un momento un día de estos para publicarla... incluso tengo la wiki hecha!!
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 00:45:15
Hola y por resumir, que porque me ha dado por la retroprogramacion? pues porque desde siempre el programar y sobre todo juegos o aplicaciones para estos (editores etc..) me ha encantado y es que desde que me regalaron un clonica pong me enamore...me quede embobado pensando como cojoNES se haria para detectar la colision (en su dia no usaria estos terminos xD) con los laterales o con los "tacos" y que la bola rebotase etc.

Y a dia de hoy me siguen teniendo enamorado los sistemas antiguos y por eso colecciono consolas/juegos desde spectrum hasta 360.

Porque me ha dado por programar para C64? pues porque si o si queria hacer algo para alguna maquina con procesador de la familia 65xx para asi poder portarlo con menos dificultades a otros sistemas y de lo que usan estos chips mis recuerdos de años mozos me hacian decantarme por NES o C64 y tras mirar que si de C64 hay poca informacion de NES hay menos, en relacion a programacion en C claro esta ^^, pues me he tirado a por C64.

Sobre si quiero que me des la chapa...si padre, como decia una profesora mia...que caracter tenia T T

Es que ando aqui mirando mucha documentacion y una cosa que no me queda clara es que para las coordenadas de los sprites (son 8, del 0 al 7) se usan las direcciones 53248-54271 y luego la 53269 para...activar todos? no se puede activar por separado cada uno? y luego esta ese 2040...que se/o intuyo que hacen pero no encuentro en ningun lado nada sobre ello en concreto.
Título: Tutorial para comenzar a programar C en C64
Publicado por: Carlos en Septiembre 30, 2010, 00:56:09
Si lo necesitas puedo hacer un post explicándolo en detalle, pero te recomiendo que te vayas familiarizando con estas dos biblias, practicamente TODO está ahí.

C64 Programmer's Reference Guide: http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/page_iii.html (http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/page_iii.html)

C64 Codebase: http://codebase64.org/doku.php?id=start (http://codebase64.org/doku.php?id=start)
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 01:12:17
Gracias ^^ y justo ando mirando ahora la de las i's (devili.iki.fi) y me gusta como viene explicado si bien, y si no es molestia claro, estaria muy bien el poder tener info de primera mano y en castellano, aunque entiendo perfectamente ingles. Como tu veas. Yo ahora voy a pobar a crear 8 sprites, darles diferente color a cada y animarlos automaticamente. Luego mirare para hacer que choquen entre si.
Título: Tutorial para comenzar a programar C en C64
Publicado por: Carlos en Septiembre 30, 2010, 09:36:36
Intentaré ser breve pero a la vez que se me entienda mas o menos  :lol:

La CPU (6510) del C64 es capaz de direccionar los 64Kb de la máquina pero sin embargo el VIC-II (el chip gráfico) sólo es capaz de 'ver' (direccionar) 16Kb debido al tamaño del registro de direcciones que utiliza.

Por este motivo la memoria del C64, para el uso del VIC, se divide en 4 bancos de 16Kb cada uno, normalmente denominados (bank 0, 1, 2 y 3). Por defecto el bank que usa el VIC es el 0 (direcciones 0-16384) de ahí que en los ejemplos de Dr. Fred se haga referencia a direcciones en ese rango (la famosa 2040 que preguntabas). El banco de vídeo se puede cambiar usando ciertos registros del VIC y de hecho es lo más recomendable ya que el bank 0 (el por defecto) no es el más adecuado para ser usado por el VIC.

Después está el tema de en que direcciones está cada cosa (punteros de los sprites, coordenadas de los sprites, ...), la respuesta a esto es depende donde se encuentre la memoria de pantalla (screen memory). La memoria de pantalla, al igual que el banco del VIC, también es configurable aunque su valor por defecto es 1024 ($0400 en hex) y teniendo en cuenta que ocupa 1000 bytes (40x25 bytes) llega hasta la dirección 2023 (ya nos vamos acercando a la 2040 :wink: Esta parte está muy bien explicada aquí: http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_101.html (http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_101.html)

Los siguientes 16 bytes desde donde finaliza la screen memory no se usan para a partir del byte 16, existen 8 bytes que son los 8 punteros a las definiciones de cada sprite de ahí que en nuestro ejemplo la memoria de video comienze en la dirección 1024, termine en la 2023 + 16 bytes sin uso = 2039 por lo que la direccion 2040 es el puntero a la definición del primer sprite (sprite 0).

Esto en cuanto a los punteros de las definiciones, el resto de parámetros de los sprites (coordenadas, si están activos o no, colores, ...) se controlan con los diferentes registros del VIC que se encuentran en las direcciones a partir de la $D000 (53248), para eso leete la C64 Programmer's Reference Guide donde puedes ver la dirección de cada cosa (estas direcciones SI son fijas siempre).

Espero que esta parte haya quedado mas o menos clara...
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 30, 2010, 09:39:41
Cita de: "Carlos"
Intentaré ser breve pero a la vez que se me entienda mas o menos  :lol:

Objetivos NO cumplidos :lol:
Título: Tutorial para comenzar a programar C en C64
Publicado por: Carlos en Septiembre 30, 2010, 09:48:51
Cita de: "josepzin"

Objetivos NO cumplidos :lol:


Ambos?  :lol:
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 30, 2010, 10:10:23
Cita de: "Carlos"
Cita de: "josepzin"

Objetivos NO cumplidos :lol:


Ambos?  :lol:

El de breve NO :P, el otro todavía no lo leí jeje
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 10:54:45
Carlos muchisimas gracias y me ha quedado mas claro imposible ^^
Anoche empece a suponer que seria algun tema de rango de memoria a usar "como te plazca" pero como no terminaba de dar con ello pues tenia ahi la duda y ahora me ha quedado mucho mas claro y si, la pagina de devili me la estoy mirando entera, poco a poco que tampoco quiero acabar aburrido antes de tiempo pero va bien la cosa ^^
Título: Tutorial para comenzar a programar C en C64
Publicado por: marcos64 en Septiembre 30, 2010, 14:55:36
Hola, bienvenido al foro!

Como bien te han dicho practicamente TODO esta el la C64 Programmer's Reference Guide y en la C64 Codebase. Leete la guia (una primera vez, por encima) y te haras una buena idea de como funciona el C64.

Eso si, luego seguro que te salen muchas mas dudas...  :D
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 15:21:31
Ando leyendo, la parte de graficos ^^ de devili y traduciendola a un documento en perfect castellano ademas de añadir cosas que dan por supuesto se han entendido como cuando ponen un 16384 y se quedan tan anchos y no te explican que viene de 16*256 = 4096*4 = 16384 y cosas asi.

Mas que nada lo hago para mi pero ire poniendo toda la informacion en mi blog y por aqui claro esta que creo que toda aportacion sera buena.

De momento dudas...no, creo que voy pillando todo solo que a veces tengo que volver atras, otra vez adelante, atras etc.. hasta terminar de ver como leches va algo :evil: pero bien.

PD: Y que no habia comentado, gracias a todos por saludar :wink:
Título: Tutorial para comenzar a programar C en C64
Publicado por: marcos64 en Septiembre 30, 2010, 15:25:08
Cita de: "KFR"
cosas que dan por supuesto se han entendido como cuando ponen un 16384 y se quedan tan anchos y no te explican que viene de 16*256 = 4096*4 = 16384 y cosas asi.


Te tienes que acostumbrar a usar hexadecimal, las cosas se ven mas claras y ademas resultan mas faciles de recordar. Te lo digo por propia experiencia.
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 30, 2010, 15:27:45
¡HEXADECIMAL YA!

¡En serio! :D
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 15:55:42
Yo de momento me quedo con el decimal :twisted:
Título: Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Septiembre 30, 2010, 16:25:54
Cita de: "KFR"
Yo de momento me quedo con el decimal :twisted:

¡Sufrirás!  8)
Título: Tutorial para comenzar a programar C en C64
Publicado por: KFR en Septiembre 30, 2010, 16:30:57
...quien sabe... :twisted:
Título: Tutorial para comenzar a programar C en C64
Publicado por: marcos64 en Septiembre 30, 2010, 20:57:08
Cita de: "josepzin"
Cita de: "KFR"
Yo de momento me quedo con el decimal :twisted:

¡Sufrirás!  8)


Mucho me temo que sera asi...  :D
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Portiella en Noviembre 06, 2014, 09:20:50
Ando leyendo, la parte de graficos ^^ de devili y traduciendola a un documento en perfect castellano ademas de añadir cosas que dan por supuesto se han entendido como cuando ponen un 16384 y se quedan tan anchos y no te explican que viene de 16*256 = 4096*4 = 16384 y cosas asi.

Mas que nada lo hago para mi pero ire poniendo toda la informacion en mi blog y por aqui claro esta que creo que toda aportacion sera buena.

De momento dudas...no, creo que voy pillando todo solo que a veces tengo que volver atras, otra vez adelante, atras etc.. hasta terminar de ver como leches va algo :evil: pero bien.

PD: Y que no habia comentado, gracias a todos por saludar :wink:

¿Se puede descargar algo en castellano?
Título: Tutorial para comenzar a programar C en C64
Publicado por: Royos en Julio 05, 2015, 20:41:46
Abro este tema aparte para consultarles a los developers de MAC, que es necesario para programar en MAC?

Conocimiento de PHP, base de datos?

Gracias de antemano.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Julio 05, 2015, 23:39:40
¿Pero qué relación tiene esto con el desarrollo para C64??
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 28, 2017, 03:50:15
Refloto este hilo para preguntar: ¿Hay por ahí algún libro, código fuente liberado de C al que se pueda acudir para saber como va el tema?. El ensamblador por dificultad y tiempo lo descarto y BASIC se queda corto.
Muchas gracias.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 28, 2017, 07:05:35
Libros sobre C para C64 no creo (o no lo sé...) pero libros sobre C seguro que muchos!

Ejemplos tengo varios archivados (desde hace años), si quieres te los paso.

Que yo sepa, los dos juegos de los Mojon Twins son hechos en este C, una pena que @Wood esté desaparecido.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 28, 2017, 10:44:17
Buenas,
Sí, libros de C hay muchos. En cuanto a los ejemplos, muchas gracias por el ofrecimiento, ¿son de juegos en C de C64? ¿son amplios? Es que si son rutinas cortas posiblemente no me sirva para montar algo desde 0 al no tener demasiadas referencias (es para no molestarte para nada, hombre).
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 28, 2017, 11:19:38
¡Hola estoy desaparecido pero no estoy muerto  Y el grito de Josepzin ha llegado a mí! XD.

Lo que yo he hecho para aprender a programar en C para C64 fue ir a este sitio http://csdb.dk/release/?id=74653 y bajar tanto el juego como el código fuente pues este juego está programado en C usando CC65.

Estudar muy bien el fichero .cfg y mirar el manual de CC65 para ver como se usa. Tambien mirar claro el .c y el h.

Hacer cópias de eses ficheros y jugar con ellos cambiando cosas y ver que pasa.

Ya ha pasado mucho tiempo y si yo quiero programar en C otra vez tendría que hacer ese proceso otra vez porque desgraciadamente ya no me acuerdo bien como funciona cc65 y no sé si han salido nuevas versiónes desde que lo usé y que podrán haber cambiado como funciona.

Bueno espero que esto sea de ayuda y un buen finde para todos y perdonad mi castellano.


Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 28, 2017, 12:14:23
Hola Wood!
¿Perdonar por tu castellano? Jolin, no había notado que eras de fuera. Es muy bueno. ;-)
Precisamente encontré este juego en otra web pero no había visto lo de los fuentes.  Voy a hacer lo que dices, muchas gracias por la orientación.
Buen finde para tí también. ;-)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 28, 2017, 12:24:18
Hola Wood!
¿Perdonar por tu castellano? Jolin, no había notado que eras de fuera. Es muy bueno. ;-)
Precisamente encontré este juego en otra web pero no había visto lo de los fuentes.  Voy a hacer lo que dices, muchas gracias por la orientación.
Buen finde para tí también. ;-)

Mira no te olvides de mirar el fichero Makefile que és muy importante para saberes como compilar todo y incluso como usar dos herramientas más si las necesitas c1541(crear disco .d64) y exomizer (compactar).
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: danytoon en Octubre 29, 2017, 15:31:22
Wood, tú eras de Portugal, no? No eras el programador de algo de los Mojon Twins para C64?
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 29, 2017, 21:04:48
Si, Wood hizo el Uwol y Sir Ababol.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 29, 2017, 22:49:17
Hola de nuevo, Wood!

Aunque me imagino que lo sabrás comentarte que en el siguiente enlace puedes bajarte una versión final con intro y trainer incorporadas ;-) :
http://csdb.dk/release/?id=102217

Saludos.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Octubre 30, 2017, 12:01:29
En mis ratos libres voy avanzando con mi juego en ASM, pero ando muy tentado por C, creo que aceleraría bastante lo que quiero hacer, aunque siempre tengo dudas por el rendimiento.

@josepzin , puedes subir esos ejemplos que tienes :)

Pienso que quizas C+ASM puntual puede ser suficiente para el juego que tengo en mente.

Por cierto, el visual studio code es una pasada para tener casi un IDE multiplataforma, solo le falta un buen editor grafico (sprites, tilemaps, tiles...)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 12:11:51
Pienso que quizas C+ASM puntual puede ser suficiente para el juego que tengo en mente.
Eso es lo que me estoy temiendo yo pero al revés, Hylian. Que el C no sea suficiente y necesite ASM, entonces la cosa pintará jodida.

Saludos.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Octubre 30, 2017, 12:15:44
Eso es lo que me estoy temiendo yo pero al revés, Hylian. Que el C no sea suficiente y necesite ASM, entonces la cosa pintará jodida.

Saludos.

Justo, es mi gran duda, pero luego veo juegos como los de Mojon Twins que estan hechos en C, y no creo que mi juego sea "mas" que eso.

Yo creo que aun programando en C, es clave ser consciente de lo que estas haciendo e intentar escribir un C lo mas "simple" posible, sin millones de funciones, variables y sin millones de bucles/ifs anidados.

En el fondo si mantienes un C sencillo, el compilador puede generar un ASM muy similar a lo que escribirias tu mismo.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 12:18:00
Yo creo que aun programando en C, es clave ser consciente de lo que estas haciendo e intentar escribir un C lo mas "simple" posible, sin millones de funciones, variables y sin millones de bucles/ifs anidados.
Totalmente de acuerdo, está claro.

A ver, porque los fuentes que he visto del "Zoo mania" tiene más líneas de ensamblador que de C. :-(
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 30, 2017, 12:28:37
Yo solo toco de oidas eh...

Hace poco @reidrac comentó que no le gustó el código generado por CC65 y por eso se decidió a hacer su Resucing orc directamente en ensamblador.

Pero existiendo los juegos de Wood está la prueba que juegos se pueden hacer y muy bien, aunque el código no sea el mas optimizado.

Al final tambien dependerá del tipo de juego y del programador.

Lo que sí, los juegos hechos en CC65 de Wood tienen rutinas hechas en ensamblador para mover bloques gráficos y tareas mas exigentes.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 12:32:12
Nuestro juego no necesitaría muchos recursos, la verdad, aunque tenemos que saber si es viable hacerlo sin tocar apenas el ensamblador.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: reidrac en Octubre 30, 2017, 12:57:26
Todo depende, lo que vi yo es que el código que genera CC65 no era muy eficiente; pero eso no quiere decir que no puedas usarlo.

Dependiendo del tipo de juego, si programas en C "simple", atendiendo a las extensiones de CC65 (por ejemplo, puedes definir una variable local con "register" para que use la página cero), y las partes que necesiten velocidad están en ensamblador... creo que sí se podría, quizás a costa de usar un poco más de espacio.

Me suena que los mojones no han usado C en C64 (porque creo que sus juegos los ha portado alguien), pero es cierto que sus producciones para NES están en C usando el CC65. No sé cómo compara la NES en ese aspecto o si la librería que usan les da el empujón que el juego necesita.

Cuando uso C en una plataforma de 8-bits es para la parte de la lógica sobretodo, las rutinas gráficas van en ensablador normalmente. Pero eso es en ZX Spectrum y Amstrad CPC, que no tienen el soporte hardware del C64.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 13:00:44
En las maquinitas de 8 bits lo más pesado de programar en los juegos es generalmente los sprites(calcular posición de desplazamiento horizontal o tenerle precalculado, guardar fondo, pintar sprite, restaurar fondo) y todo esto gasta mucho tiempo de procesador y memoria pero en c64 no tenemos eses problema porque vienen ya implementados en el hardware luego es muy posible de crear juegos aceptables o incluso buenos en C. Yo he usado assembler con C en mis juegos pero porque yo no tengo problemas en usar código máquina y me se me hizo más fácil así porque he podido usar el código de los Mojones sin cambiarle mucho y no me ha sido necesario mirar como usar ciertas cosas en C porque lo sabia hacer en asm y así he ahorrado tiempo. Ha sido necesario ralentizar mucho los juegos con bucles de espera porque iban demasiado rápidos.


Cuales son los problemas principales que tenéis en usar el código máquina? el 6510 es muy sencillo y tiene muy pocos mnemónicos al contrario del z80 por ejemplo?
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 30, 2017, 13:04:18
Nuestro juego no necesitaría muchos recursos, la verdad, aunque tenemos que saber si es viable hacerlo sin tocar apenas el ensamblador.

Seguramente algo de ensamblador vas a necesitar, a menos que no hagas interrupciones, sea con caracteres redefinibles y sin superar los 8 sprite. Por ejemplo muchos de los juegos Mojontwins son un buen ejemplo de juegos que se podrían hacer.

Tengo un intento de hacer una librería básica para juegos en C65, pero no la terminé por falta de tiempo y conocimientos... http://nautilus.commodoremania.com/2016/01/EightSpriter.html

Al final te das cuenta que programar con C es lo mismo (o mas complicado) que hacerla directamente en ensamblador :P, excepto para la lógica del juego, en eso seguro que C lo hace mas fácil.

@Wood , que bueno que tuviste el código fuente de los juegos!
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 13:12:54
@Wood , que bueno que tuviste el código fuente de los juegos!
Sí todos los juegos en el sítio de los mojones vienen con el código si no me equivoco.

Los mojones no han sacado más juegos c64 pienso por falta de una librería para cc65 como hay para NES por ejemplo.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 13:15:21
Me acordé ahora de una cosa, hay otro lenguaje de alto nivel algo tipo C para c64, llamada Slang, quizá seria buena para quien quiere programar para la máquina sin usar asm.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 13:29:18
Lo que sí, los juegos hechos en CC65 de Wood tienen rutinas hechas en ensamblador para mover bloques gráficos y tareas mas exigentes.

En la verdad la librería es muy cencilla y no me parece que tenga algo que no se pueda hacer en C. Lo que veo que podría ser más pesado son rutinas para pintar tiles, lo que en modo texto se puede hacer bien en C, en bitmap será más pesado. Y la otra cosa son las rutinas de interrupción que yo no he programado de modo genérico y hay que crear librerías nuevas para cada juego si hay cambios en la rutina de interrupción. Las interrupciones se pueden crear y llamar desde C pero yo como sabía hacer en asm lo hizo así para no perder tiempo mirando documentación. Por eso no veo cualquier problema para que no se programe más juegos en C sin uso de asm. Eso sí hay que conocer el hardware muy bien y eso puede que sea lo que lleve más tiempo para los nuevos programadores.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 13:37:31
Gracias por vuestros aportes.

Todo depende, lo que vi yo es que el código que genera CC65 no era muy eficiente; pero eso no quiere decir que no puedas usarlo.

Dependiendo del tipo de juego, si programas en C "simple", atendiendo a las extensiones de CC65 (por ejemplo, puedes definir una variable local con "register" para que use la página cero), y las partes que necesiten velocidad están en ensamblador... creo que sí se podría, quizás a costa de usar un poco más de espacio.

Cuando uso C en una plataforma de 8-bits es para la parte de la lógica sobretodo, las rutinas gráficas van en ensablador normalmente. Pero eso es en ZX Spectrum y Amstrad CPC, que no tienen el soporte hardware del C64.
Efectivamente, eso es lo que dice Wood abajo, el hardware de C64 ayuda a que no te tengas que pegar con todas esas rutinas gráficas y demás.

Cuales son los problemas principales que tenéis en usar el código máquina? el 6510 es muy sencillo y tiene muy pocos mnemónicos al contrario del z80 por ejemplo?
Pues, no sé si es más difícil o más fácil pero mi único contacto ha sido con ensamblador de CPC y veo el 6510 bastante distinto al Z80. Lo mismo si me pongo no me cuesta tanto, pero el factor tiempo ahora es muy importante, por eso lo de hacerlo en C.  Y no solo eso sino entender el interior del C64 que cuando programas en ensamblador tienes que conocerlo mejor que con C u otro lenguaje de alto nivel.
Por otro lado, es cierto que acabo de descubrir un blog de desarrollo paso a paso de un juego en ensamblador gracias a josepzin que lo comenta en otro hilo. Además está otro (este en inglés) de "Guns & Ghosts" o algo así. Sobretodo es el factor tiempo, Wood.

Muchas gracias a ambos por vuestra respuesta. ;-)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 13:42:55
Por otro lado, es cierto que acabo de descubrir un blog de desarrollo paso a paso de un juego en ensamblador gracias a josepzin que lo comenta en otro hilo. Además está otro (este en inglés) de "Guns & Ghosts" o algo así. Sobretodo es el factor tiempo, Wood.
Entiendo, yo también he empezado en Z80 depués aprendi la programación de 6502, 6809 etc. El tutorial "Guns & Ghosts" es realmente muy bueno.

Has sacado juegos para CPC, tienes alguno link. Gracias
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 14:04:13
Entiendo, yo también he empezado en Z80 depués aprendi la programación de 6502, 6809 etc. El tutorial "Guns & Ghosts" es realmente muy bueno.

Has sacado juegos para CPC, tienes alguno link. Gracias
Pues publicamos hace un tiempo "Zombi terror reloaded" para Amstrad CPC. Empecé a hacerlo en BASIC, luego en C y finalmente lo hice en Ensamblador que es como está programado.
Video parte 1:
https://www.youtube.com/watch?v=oyCqWsiWOwY
Video parte 2:
https://www.youtube.com/watch?v=jxrDF-oIDS4

También estoy inmerso en acabar "Babaliba" que saldrá bajo ESP soft, a ver si para la edición de Amstrad eterno 3 puede ser, que ya se demora demasiado. Este empecé haciéndolo en C con Z88dk pero lo he rehecho en ensamblador. El video que te enlazo es muy antiguo, estaba hecho en C y no tenía implementado los tres pasos al moverse el protagonista por lo que parece que se "teletransporta" ¡¡Ja,ja!!
https://www.youtube.com/watch?v=o0VZoCcPIvw



Finalmente, ahora estamos inmerso en un proyecto multiplataforma que nos va a traer mucho curro y unos cuantos dolores de cabeza. Te dejo el enlace a la noticia en nuestro blog:
https://lunaticoretro.000webhostapp.com/hwgar-lo-nuevo-de-bitzarro-games/

¡Saludos!
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 14:05:51
Pues publicamos hace un tiempo "Zombi terror reloaded" para Amstrad CPC. Empecé a hacerlo en BASIC, luego en C y finalmente lo hice en Ensamblador que es como está programado.
Video parte 1:

Video parte 2:


También estoy inmerso en acabar "Babaliba" que saldrá bajo ESP soft, a ver si para la edición de Amstrad eterno 3 puede ser, que ya se demora demasiado. Este empecé haciéndolo en C con Z88dk pero lo he rehecho en ensamblador. El video que te enlazo es muy antiguo, estaba hecho en C y no tenía implementado los tres pasos al moverse el protagonista por lo que parece que se "teletransporta" ¡¡Ja,ja!!


Finalmente, ahora estamos inmerso en un proyecto multiplataforma que nos va a traer mucho curro y unos cuantos dolores de cabeza. Te dejo el enlace a la noticia en nuestro blog:
https://lunaticoretro.000webhostapp.com/hwgar-lo-nuevo-de-bitzarro-games/

¡Saludos!
Muchas gracias Mode 2
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 14:08:49
De nada.

Se me olvidaba, Wood échale un ojo a este tutorial que tiene muy buena pinta ;-)
https://mscifu.wordpress.com/
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 14:11:31
De nada.

Se me olvidaba, Wood échale un ojo a este tutorial que tiene muy buena pinta ;-)
https://mscifu.wordpress.com/
Gracias no conocía.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 14:27:43
Gracias a ti, Wood. ;)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 30, 2017, 14:44:59
Hay unos tutoriales muy buenos por ahí, en el hilo de Desarrollo tendría que poner algunas de estas referencias. Me lo apunto
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 30, 2017, 14:47:17
Amstradianos haciendo spam... habrá que banear gente... :P
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 14:57:38
Amstradianos haciendo spam... habrá que banear gente... :P
No era mi intención, J. Por cierto, cepeceros, si no te importa. ;-)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 15:05:42
Acá tienes otro, Josepzin. ;-)
http://www.6502.org/tutorials/
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 15:13:48
Y claro ;) http://codebase64.org/doku.php me ha sido útil muchas veces.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 15:15:56
Otro en inglés, mirar en "Rants" y algunos de los juegos tienen el código fuente - uno de ellos con comentários detallados como funciona todo. https://cadaver.github.io/
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 30, 2017, 15:24:59
Estupendo, Wood. Gracias.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 30, 2017, 15:29:26
Estupendo, Wood. Gracias.
De nada chaval.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: josepzin en Octubre 30, 2017, 17:31:57
Agregado!, tengo que buscar en el foro que hay varios más: http://retroinvaders.com/commodoremania/foro/index.php?topic=911

* Digo amstradianos porque es en plan despectivo :P ;)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 31, 2017, 10:17:43
Otro en inglés, mirar en "Rants" y algunos de los juegos tienen el código fuente - uno de ellos con comentários detallados como funciona todo. https://cadaver.github.io/
Acabo de echarle un ojo a este enlace, es una pasada.
Hay una versión en videojuego de "Escape fron New York" de John Carpenter (precisamente el de los comentarios detallados). Mi dire favorito, ¡¡woooow!!! :-O
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Mode 2 en Octubre 31, 2017, 10:20:36
* Digo amstradianos porque es en plan despectivo :P ;)
¡Graciosillo! ;-)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Octubre 31, 2017, 11:15:36
Acabo de echarle un ojo a este enlace, es una pasada.
Hay una versión en videojuego de "Escape fron New York" de John Carpenter (precisamente el de los comentarios detallados). Mi dire favorito, ¡¡woooow!!! :-O
Con ese se puede aprender muchisimo. :)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 26, 2017, 13:06:29
Buenas!

Estoy liado con el cc65 para hacer un jueguecillo, mayormente en C.

Estoy intentando colocar los datos de mis sprites, directamente en memoria, (el juego es sencillo y no necesitare cambiar mucho los sprites), y asi ahorrarme una copia en el propio programa.

Para ello estoy usando un fichero .cfg de configuracion del linker. Tengo (de momento) dos ficheros, el main.c y el sprites.s. El sprites.s tiene una pinta asi:

.segment "SPRITES"
.byte $ff, $ff....
.byte ...
...

y en el config.cfg tengo algo asi:

MEMORY {
...
    SPRITES:  file = %O, define = yes, start = $2000,           size = $1000;
}

SEGMENTS {
...
    SPRITES:      load = SPRITES,      type = ro,  define = yes;
...
}

Pues bien, compilo con el cl65, no da ningun error, ejecuto el prg, y por lo que puedo ver en el monitor del VICE, en $2000 no hay ni rastro de los sprites definidos en sprites.s :(

Sabeis que puedo estar haciendo mal?

Gracias de antebrazo!
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 26, 2017, 13:28:40
Hola HyLian

No sé si será esto pero aquí va:

En mi fichero cfg tengo, RAM4: start = $d000, size = $1000, type = rw, fill = yes, file = %O;
Será que te falta: fill = yes ?
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 26, 2017, 14:14:27
Hola HyLian

No sé si será esto pero aquí va:

En mi fichero cfg tengo, RAM4: start = $d000, size = $1000, type = rw, fill = yes, file = %O;
Será que te falta: fill = yes ?

Hola!, Gracias por contestar!. he probado con fill = yes y lo mismo... al arrancar el PRG, con el monitor del vice hago "m $2000", y alli no hay ni rastro de mis sprites.

Hay una cosa que me extraña, en el fichero que sale cuando sacas el memory map del fichero (con la opcion -vm y -m),

sale esto:
mysprites.o:
    CODE              Offs=00035F  Size=000000  Align=00001  Fill=0000
    RODATA            Offs=000000  Size=000000  Align=00001  Fill=0000
    BSS               Offs=000000  Size=000000  Align=00001  Fill=0000
    DATA              Offs=000000  Size=000000  Align=00001  Fill=0000
    ZEROPAGE          Offs=000000  Size=000000  Align=00001  Fill=0000
    NULL              Offs=000000  Size=000000  Align=00001  Fill=0000
    SPRITES           Offs=000000  Size=000040  Align=00001  Fill=0000

Parece que lo esta metiendo en el segmento de CODE, en lugar del de SPRITES, pese a que mysprites.s tiene un .segment "SPRITES" bien grande en la primera linea
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 26, 2017, 14:28:33
lo que uso en ABABOL es:

MEMORY {
    ZP:  start = $0002, size = $00fe, type = rw, define = yes;
    RAM: start = $07ff, size = $0101, fill = yes, file = %O, define = yes;
    RAMa: start = $0900, size = $1A01, fill = yes, file = %O;
    RAMb: start = $2301, size = $9cff, fill = yes, file = %O;
    RAM1: start = $c000, size = $0400,type = rw,  fill =yes, file = %O;    
    RAM2: start = $c400, size = $0400, type = rw, fill = yes, file = %O;
    RAM3: start = $c800, size = $0800, type = rw, fill = yes, file = %O;
    RAM4: start = $d000, size = $1000, type = rw, fill = yes, file = %O;
    RAM5: start = $e000, size = $1ff9, type = rw, file = %O;
   
   
}

SEGMENTS {
   
    STARTUP:  load = RAM, type = ro;
    INIT:     load = RAM, type = ro, define = yes, optional = yes;
   
    SID:   load = RAMa , start = $0900, type = ro;
   
    CODE:     load = RAMb, type = ro, define = yes;
   ZEROPAGE: load = ZP,  type = zp;
    ZPSAVE:   load = RAMb,  type = bss, define =yes, optional = yes;
    BSS:      load = RAMb, type = bss, define = yes;
    RODATA:   load = RAMb, type = ro;
    DATA:     load = RAMb, type = rw;
    COMPACTDATA:    load = RAMb, start = $7a00, type = ro, optional = yes;
    EXODEPACK: load = RAMb, start= $9e00, type = rw, optional = yes;
    SPRITES2:  load = RAMb, start= $a200, type = ro, optional = yes;
   
 
    SPRITES:  load = RAM4, start = $d000, type = ro, optional = yes;
    ABABOLCHARS: load = RAM5, type = ro;
    TILECOLOURS: load = RAM5, start = $e800, type = ro;
    ABABOLANIM: load = RAM5, start =$e900, type = ro;
    BITMAPSCREEN: load = RAM5, type = rw;
    RESTO: load = RAM5, start = $ff40 type = rw;
   
}
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 28, 2017, 13:36:04
Hola de nuevo!

No soy capaz de que me ponga en la dichosa posicion los bytes.

He visto el PRG que genera, y mis sprites estan por el offset $0530, que parece que es justo despues de mi codigo y todo el codigo de c64.lib que mete el compilador. De hecho en el monitor del vice miro en la posicion de memoria $0D31 que es $801 + $530, y estan alli!

Este es mi cfg (una copia del c64.cfg por defecto mas lo de los SPRITES). Si quito cosas de ahi me da fallo al linkar... entiendo que son cosas usadas por el c64.lib que se linka automaticamente al usar los headers de c64.h.

Código: [Seleccionar]
FEATURES {
    STARTADDRESS: default = $0801;
}
SYMBOLS {
    __LOADADDR__:  type = import;
    __EXEHDR__:    type = import;
    __STACKSIZE__: type = weak, value = $0800; # 2k stack
    __HIMEM__:     type = weak, value = $D000;
}
MEMORY {
    ZP:       file = "", define = yes, start = $0002,           size = $001A;
    LOADADDR: file = %O,               start = %S - 2,          size = $0002;
    HEADER:   file = %O, define = yes, start = %S,              size = $000D;
    MAIN:     file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
    SPRITES:  file = %O,               start = $2000,           size = $1000, fill = yes, type = ro;
    BSS:      file = "",               start = __ONCE_RUN__,    size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
}
SEGMENTS {
    ZEROPAGE: load = ZP,       type = zp;
    LOADADDR: load = LOADADDR, type = ro;
    EXEHDR:   load = HEADER,   type = ro;
    STARTUP:  load = MAIN,     type = ro;
    LOWCODE:  load = MAIN,     type = ro,  optional = yes;
    CODE:     load = MAIN,     type = ro;
    RODATA:   load = MAIN,     type = ro;
    DATA:     load = MAIN,     type = rw;
    INIT:     load = MAIN,     type = rw;
    ONCE:     load = MAIN,     type = ro,  define   = yes;
    BSS:      load = BSS,      type = bss, define   = yes;
    SPRITES:  load = SPRITES,  type = ro;
}
FEATURES {
    CONDES: type    = constructor,
            label   = __CONSTRUCTOR_TABLE__,
            count   = __CONSTRUCTOR_COUNT__,
            segment = ONCE;
    CONDES: type    = destructor,
            label   = __DESTRUCTOR_TABLE__,
            count   = __DESTRUCTOR_COUNT__,
            segment = RODATA;
    CONDES: type    = interruptor,
            label   = __INTERRUPTOR_TABLE__,
            count   = __INTERRUPTOR_COUNT__,
            segment = RODATA,
            import  = __CALLIRQ__;
}

Estoy por tirar la toalla con el linker y hacerme un programilla que ponga en la posicion adecuada en el PRG los datos de los sprites... (Asumiendo que el PRG es un formato "plano" donde se copia byte a byte la info a partir de lo que digan los dos primeros bytes)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 28, 2017, 13:39:39
Eso es porque no está llenando la memória vacía con ceros antes de meter los demás datos. Ahora saber porqué ya que el "fill" no ha funcionado...
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 28, 2017, 13:42:28
No sé si te puede ayudar, esto es parte de mi makefile de UWOL:

compila:    
   
         cl65 --cpu 6502X -O  $(TESTE).c  uwolasm.s sprites.s music.s fases.s compactdata.s $(LIB).lib -o $(TESTE).o --config $(TESTE).cfg -m mapa.mem -vm -Ln $(TESTE).lbl  -v
   
crunch:       test
         ./pucrunch.exe -x0x080d $(TESTE).o  $(TESTE).prg
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 28, 2017, 14:24:42
Eso es porque no está llenando la memória vacía con ceros antes de meter los demás datos. Ahora saber porqué ya que el "fill" no ha funcionado...

Creo que esto es la clave, he probado a poner un fill=yes en la parte de memoria que esta justo antes, y efectivamente lo llena con 0s

Pero entonces, no acabo de entender para que sirve el "start", ya que tienes que calcular que la seccion anterior ocupe justo para que acabe antes del start y encima meterle un fill=yes para que lo llene con 0s.

Yo esperaria que si le digo que empiece en el $2000, que haga lo que necesite para que eso este alli :-/.

Hay algo que se me escapa, creo :)

Lo he cuadrado, a mano pero aun asi, me sigue sin funcionar  >:(

Ahora en el PRG veo que el spirte esta $1801,  ($1801 - 2) + $801 = $2000. Lo que parece correcto. Pero al cargar el prg en el vice, en $2000, no esta el sprite! :(

Estoy empezando a pensar que tengo algo en el programa que hace que se sobreescriba ese $2000, por que en el resto de direcciones si que veo que este lo que va en el PRG
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 28, 2017, 15:09:24
Vale... culpa mia :facepalm:. Estaba copiando la ROM de caracteres en $2000, ya que tengo puesto que alli esta la ram de caracteres....

He movido el sprite a $1500 y ahora en el vice ya veo los datos del sprite en memoria. Aunque ahora lo que sale por pantalla es basura en lugar de lo que deberia aparecer jejeje, aunque esto es ya otro problema :)

Mi puntero de sprites esta en 0x07F8 y vale 0x54 que deberia apuntar a $1500... asi que algo estoy haciendo mal por otro lado :)

Gracias @Wood por las pistas, el fill de la zona anterior era la clave :)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 28, 2017, 18:23:57
De nada @HyLian :)

Eso de la basura es fácil de explicar, es que en las posiciones $1000 a $2000 el VIC-II mira a la rom de caracteres y no a la ram.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 29, 2017, 10:00:42
De nada @HyLian :)

Eso de la basura es fácil de explicar, es que en las posiciones $1000 a $2000 el VIC-II mira a la rom de caracteres y no a la ram.

Justo era eso, movi los sprites al $3000 y ya lo tengo dando vueltas por pantalla. Gracias por la ayuda :)
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 29, 2017, 10:19:12
Justo era eso, movi los sprites al $3000 y ya lo tengo dando vueltas por pantalla. Gracias por la ayuda :)
Genial, fuerza para tu proyecto.
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: HyLian en Diciembre 29, 2017, 12:41:28
Genial, fuerza para tu proyecto.

Aprovecho para preguntar varias dudas que tengo. He resuelto el tema del timming y joystick pero no estoy seguro de que sea la mejor manera. Agradezco commentarios :)

Sobre el joystick, al principio hice un simple test del registro ($DC00), pero quiero mover una especie de cursor casilla a casilla, y eso hacia que mueva mas de una casilla ya que es muy facil que detecte mas de una pulsacion. Para arreglarlo puse un delay, pero el comportamiento es extraño. Quiero solucionarlo haciendo una deteccion de KEY_UP en lugar de KEY_DOWN.

Ademas en el joystick, mi juego va a requerir dos botones... no estoy seguro de si lo mejor es mover el segundo boton al teclado, o si hacer alguna cosa dejando pulsado el joystick... como echo en falta dos botones en la norma atari :)

Sobre el timming del bucle de juego hago algo asi:

Código: [Seleccionar]
while(RASTER_LINE_LOCATION == 0xF8);
while (RASTER_LINE_LOCATION != 0xF8);

Siguiendo lo que pone aqui https://www.gamedev.net/blogs/entry/2249793-first-step-explained-in-detail/ en asm:

Código: [Seleccionar]
WaitFrame
          lda $d012
          cmp #$F8
          beq WaitFrame
         
          ;wait for the raster to reach line $f8 (should be closer to the start of this line this way)
.WaitStep2
          lda $d012
          cmp #$F8
          bne .WaitStep2
         
          rts
Título: Re:Tutorial para comenzar a programar C en C64
Publicado por: Iapetus en Diciembre 29, 2017, 13:07:28
yo uso una variable para el estado anterior para no haber repetición dentro de un determinado tiempo

mi rutina es esta y la llamo desde mi rutina de interrupción IRQ:

Código: [Seleccionar]
;---------------------------------------------
;void read_joystick(void);
;---------------------------------------------

.export _read_joystick

_read_joystick:
                        lda #$ff
sta $dc00
lda _joystick
sta _joyPrevio
lda $dc00
eor #$ff
sta _joystick
rts