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

HyLian

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

HyLian

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

Wood

Re:Tutorial para comenzar a programar C en C64
« Respuesta #77 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.
« última modificación: Diciembre 28, 2017, 19:00:49 por Wood »
 

HyLian

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

Wood

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

HyLian

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

Wood

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