Ho provato, ma il random seed non e' generato come ci si aspetta,. probabilmente perche' il timer sotto c64 non e' proprio un gioiello :D
Lo sostituirei con la posizione del raster attuale, piu' che sufficiente.
Poi e' altresi' sufficiente generare i 3 valori in cima al programma, non ad ogni iterazione.
int main(void)
{
//Three random, positive, number are generated. Ranges can be tweaked
// Seed is initialized
srand(*(unsigned char*)0xd012); // utilizziamo il raster come seed
ran_1 = rand() % 15 + 1;
ran_2 = rand() % 15 + 1;
ran_3 = rand() % 2000 + 1;
// stampiamo i valori ottenuti e attendiamo un tasto
cprintf("%d\r\n%d\r\n%d\r\n",ran_1,ran_2,ran_3);
while(!kbhit())
;
getchar();
POKE(646,1);clrscr();
POKE(0xd018,0x14);
POKE(0xd020,0);
POKE(0xd021,0);
for(n=0;n<=12;++n)
{
n4=(n*40);
q=(n-12);
for(m=0;m<=39;++m)
{
c=1024+n4+m;
d=1024+960-n4+m;
p=(m-20)-10; //p=(m-20)-1;
x=0;y=0;
for(i=0;i<=50;++i)
{
u=((x*x-y*y)/ran_1)+p;
v=(x*y/ran_2)+q; //v=(2*x*y/8)+q;
if((u*u+v*v)>ran_3)
{
j=screenchars[i&15];
POKE(c,j);
POKE(d,j);
break;
}
else
{
x=u;
y=v;
}
POKE(c,160);
POKE(d,160);
}
}
}
return 0;
}
Per quanto riguarda alla compilazione, CC65 e' una suite di programmi - detta in termine tecnico toolchain - tra cui un compilatore, CC65.EXE, che interpreta il C e genera un sergente ASM (*.s), un Assembler, CA65, che dal ASM genera il file oggetto (*.o), e un linker, LD65, che dai files oggetto e librerie genera finalmente un .prg eseguibile.
Un file bat per compilare risolverebbe alla grande. Io ne uso uno fatto da me, ma che richiede 4dos come interprete di comandi. Per command.com si potrebbe fare una cosa del genere (SCRITTO DI GETTO E NON TESTATO!)
set sys=c64
set incp=C:\cc65\include\
set libp=C:\cc65\lib\
set path=C:\cc65\bin;%path%
cc65 -Oirs -T --codesize 500 -t %sys% -I%incp% %1.c
if errorlevel 2 goto end
ca65 %1.s
if errorlevel 2 goto end
if not exist %1.o goto end
LD65 -t %sys% -o %1.prg %libp%%sys%.o %1.o %libp%%sys%.lib
:end