He hecho un pequeño ejemplo con un sprite que se mueve por la pantalla a través del joystick (usando las funciones que proporciona cc65 para el joystick). La verdad es que el resultado de lujo. Os dejo aquí el código:
[code]
#include <conio.h>
#include <stdlib.h>
#include <peekpoke.h>
#include <joystick.h>
int main (void)
{
unsigned char i=0;
unsigned char a[11]={0,-1,1,0,0,-1,1,0,0,-1,1}; //array de posiciones del joystick
unsigned char b[11]={0,0,0,0,-1,-1,-1,0,1,1,1};
unsigned char sprite[64]={0,24,0,0,24,0,0,
60,0,0,60,0,0,60,0,
0,60,0,0,36,0,0,36,
0,0,36,0,16,102,8,16,
189,8,17,126,136,18,255,72,
29,255,184,30,60,120,0,60,
0,0,60,0,0,60,0,0,
60,0,0,126,0,0,255,0}; //Array con los datos de los puntos del Sprite 0 (un avión ^^)
unsigned char c,x=150,y=100,j=0;
int vc=53248;
joy_load_driver ("c64-stdjoy.joy"); //carga el driver del joystick
bordercolor (0); //borde negro
bgcolor (0); //fondo negro
clrscr(); //limpia pantalla
POKE(2040,13); //asigno puntero del Sprite 0
for (i=0;i<=64;i++) //relleno el sprite 0 leyendo datos del array sprite[]
POKE(832+i,sprite[i]);
POKE(vc+21,255); //activa sprite 0
POKE(vc+39,7); //color del sprite 0 (amarillo)
while (j==0) //bucle infinito
{
POKE(vc,x); //posicion x de sprite 0
POKE(vc+1,y);
c=joy_read(1); //devuelve posición del joystick
x=x+b[c]; //recalcula las coordenadas de X e Y
y=y+a[c];
}
return EXIT_SUCCESS;
}
[/quote]
Al ser pequeño, no lo he estructurado en funciones, ni nada.
Una cosa es que he notado que me da un warning de que la variable vc es un long... pero no se me ocurre otra manera de definirlo, a no ser que sea haciendo un casting. De momento lo acepta y la usa bien en el programa, aunque advierte de que manejar longs lo ralentiza.
Otra duda que se me ocurre es que (aunque aquí no lo he utilizado), en la colisión de Sprites, necesitaría hacer un AND lógico en el byte del registro de colisión (el 53278). ¿Esto en C cómo lo haría? ¿Con el operador &&?
Bueno, creo que de momento el experimento ha salido satisfactorio. He probado a hacer el programa directamente en basic y claro está, el de código máquina se ejecuta muchísimo más rápido.
Aquí os dejo el archivo por si quereis probarlo en algún emulador (yo utilizo VICE). Se utiliza con el joystick en el puerto 2.
http://www.megaupload.com/?d=UQ2FKZ3BPor cierto, he descubierto un programa muy interesante para observar el valor de todos los registros de memoria que está muy curioso. Se llama ICU64 y lo he probado con el VICE. Echadle un ojo en este video:
http://www.youtube.com/watch?v=tjcvR5McmSg