Autor Tema: Tutorial para comenzar a programar C en C64  (Leído 12361 veces)

josepzin

Tutorial para comenzar a programar C en C64
« 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

Cualquier crítica, error o sugerencia para mejorar el tutorial es bienvenido!

Carlos

Tutorial para comenzar a programar C en C64
« Respuesta #1 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.
 

josepzin

Tutorial para comenzar a programar C en C64
« Respuesta #2 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.

josepzin

Tutorial para comenzar a programar C en C64
« Respuesta #3 en: Septiembre 02, 2010, 22:46:44 »
Parece que hay guerra... estoy de viaje y no tengo tiempo de leerlo, pero pinta entretenido :D

KFR

  • Sinver
  • *
  • Mensajes: 18
    • Ver Perfil
    • http://unliocode.wordpress.com
Tutorial para comenzar a programar C en C64
« Respuesta #4 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:
 

josepzin

Tutorial para comenzar a programar C en C64
« Respuesta #5 en: Septiembre 29, 2010, 23:47:55 »
+Bienvenido! ¡Espero que el tutorial te sea de ayuda!

KFR

  • Sinver
  • *
  • Mensajes: 18
    • Ver Perfil
    • http://unliocode.wordpress.com
Tutorial para comenzar a programar C en C64
« Respuesta #6 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.
 

Carlos

Tutorial para comenzar a programar C en C64
« Respuesta #7 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:
 

josepzin

Tutorial para comenzar a programar C en C64
« Respuesta #8 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!!

KFR

  • Sinver
  • *
  • Mensajes: 18
    • Ver Perfil
    • http://unliocode.wordpress.com
Tutorial para comenzar a programar C en C64
« Respuesta #9 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.
 

Carlos

Tutorial para comenzar a programar C en C64
« Respuesta #10 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

C64 Codebase: http://codebase64.org/doku.php?id=start
 

KFR

  • Sinver
  • *
  • Mensajes: 18
    • Ver Perfil
    • http://unliocode.wordpress.com
Tutorial para comenzar a programar C en C64
« Respuesta #11 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.
 

Carlos

Tutorial para comenzar a programar C en C64
« Respuesta #12 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

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...
 

josepzin

Tutorial para comenzar a programar C en C64
« Respuesta #13 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:

Carlos

Tutorial para comenzar a programar C en C64
« Respuesta #14 en: Septiembre 30, 2010, 09:48:51 »
Cita de: "josepzin"

Objetivos NO cumplidos :lol:


Ambos?  :lol: