Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - darro99

Páginas: [1] 2 3
1
General / Re:Retro-Alba 2019 ¿Alguien va?
« en: Marzo 06, 2019, 15:53:44 »
Citar
Del foro creo que Darro99 asistirá según me comentó hace tiempo.

Espero que si no surge nada nos veremos allí!!!  ;D

2
Muchas gracias por el premio. Gracias a todos!  ;D
Esto da mucho animo para continuar programando juegos para nuestra amada maquina.

3
Programación / Re:Borrado de un fichero en disco
« en: Febrero 02, 2019, 14:44:16 »
Buenas de nuevo!!!

Por fin he conseguido hacer el borrado y la grabación  ;D

El problema venia por mi propia aplicación al intentar realizar la grabación de los datos. Existía un problema de sincronización entre la salida de la rutina de  borrado/grabado y la ejecución del resto del programa, incluido el estado y orden de ejecución de las irqs.
Para averiguarlo he sacado la rutina completa a un programa aparte para ver si funcionaba, y resulta que el código corría correctamente.... Bueno he tenido que cambiar los registros en la invocación a la rutina open del kernal  ;)

El tema de la 'S' es con el código $53.

Aquí dejo la rutina completa, funciona correctamente
Código: [Seleccionar]
.pc = $2200
.const file_start = $25a6    // Inicio datos C64
.const file_end   = $25b2   

    jsr loadprepare

// ** SCRATCH OLD FILE **
    lda #fname_end-scratch
    ldx #<scratch           // XY ptr
    ldy #>scratch 
    jsr K_setnam
     
    lda #$01                // Logical
    ldy #$0F                // Secondary
    ldx #8
    jsr K_setlfs
   
    jsr K_open
    bcc noError2
    sta errorLevel
    inc ioError
    lda #2
    sta BORDER
noError2:
    lda #$01                // Logical
    jsr K_close
    jsr K_clrchn
   
// ** SAVE NEW FILE **
    jsr loadsetlfs 
    jsr loadsetnam
    lda #<file_start        // ZP ptr to start address
    sta temp1
    lda #>file_start
    sta temp2
    ldx #<file_end          // XY = end address
    ldy #>file_end
    lda #temp1              // ZP ptr, 1st byte
    jsr K_save
    bcc noError3
    sta errorLevel
    inc ioError
noError3:
    //jmp closeExit

   
// Close open file and return
closeExit:
    lda #$01                // Logical
    jsr K_close
    jsr K_clrchn
 
    jsr cargaMiZp
     
    lda #$35 //desactivacion de las funciones Kernal
    sta $01
   
   
    lda #$01
    sta $d01a      //turn on raster irq.
    cli
    lda #1
    sta BORDER
    jmp *
     
// Prepare hardware for IO operation
loadprepare:
     sei                     // Disable IRQ

     lda #0
     sta $d01a //turn off raster irq.
     
     jsr grabaMiZp
     jsr cargaZp
     
     lda #$36                // Kernal on
     sta $01
     lda #0                  // Reset rs 232
     sta $02a1
     sta $d404               // Sid silent
     sta $d404+7
     sta $d404+14
     sta $9d                 // Disable KERNAL messages
     sta ioError             // Clear error return flag
     rts

// SETLFS. Set file parameters.
// Input: A = Logical number// X = Device number// Y = Secondary address.

loadsetlfs:
      lda #$01                // Logical
      ldy #$00                // Secondary
loadsetlfs2:
      ldx lastDevice
      jmp K_setlfs

// SETNAM. Set file name parameters.
// Input: A = File name length// X/Y = Pointer to file name.
loadsetnam:     
    lda #fname_end-fname 
    ldx #<fname             // XY ptr
    ldy #>fname
    jmp K_setnam

Unas ultimas aclaraciones:
Hay que guardar anteriormente la memoria de la pagina cero, por ejemplo nada mas arrancar el programa.
Antes de usar las rutinas kernal se restaura esa memoria anteriormente guardada, guardando la propia pagina cero de tu programa, para una vez llamadas las funciones del kernal restaurar de nuevo la pagina cero propia.
Todo esto, si tu programa usa la pagina cero claro.
Este vaivén de cargas y grabaciones de memoria es debido a que las rutinas del kernal usan la pagina cero.

Gracias a todos por sus comentarios  8)

4
Programación / Re:Borrado de un fichero en disco
« en: Enero 29, 2019, 16:43:51 »
Citar
A ver si va a tener algo que ver con la conversión ASCII -> PETSCII que hace el ensamblador.
Esto es lo que puede ser, pero al mirar como aparecen en el monitor del VICE, las letras aparecen correctas si lo ejecuto con la etiqueta .text

Citar
En el ejemplo de lemon no usan "S0:" sino esto:
Llevas razón, antes había probado con diferentes combinaciones de números, pero me di cuenta que realmente ponía S0:, y como no funcionaba decidí cambiarlas por el texto a ver si con esto lo conseguía, pero no ha habido suerte.

He vuelto a probar con diferentes códigos de 'S' a través de esta pagina:
http://sta.c64.org/cbm64scr.html
He probado con:
Código: [Seleccionar]
.byte $13,$30,$3A
.byte $93,$30,$3A
.byte $53,$30,$3A
.byte $D3,$30,$3A
(En todas estas prueba no he tenido suerte)

Solo he cambiado la S, por que tanto los ':', como el cero solo aparecen una vez en la lista.

5
Programación / Re:Borrado de un fichero en disco
« en: Enero 28, 2019, 18:54:09 »
Hola de nuevo.
 
Citar
con una simple instruccion lo haces, de las del tipo: Load "xxx",8,..pero en vez de load simplemente ponia una letra y ya esta.
Creo que sé a lo que te refieres, puede ser esto?
Código: [Seleccionar]
OPEN 15,8,15,"S0:file name":CLOSE 15
En realidad es lo que estoy intentando usar, solo que en asm, para hacer el borrado del fichero pero no parece funcionar.

Citar
leyendo mi mensaje, anda que no me repito en las frases, el asm me esta dejando la mente en bucle,..ja,j,aj,ja,j,a
Es lo que tiene el pensamiento para el código spaghetti generado con el asm. Al final a todos nos alcanza :D

Citar
En el vice el numero de device creo que es 0 no 8 si usas una carpeta del sistema en vez de una imagen d64.
La prueba la realizo montado un fichero d64, y el device es 8. De hecho si no existe el fichero en el disco lo graba correctamente. Pero  al intentar sobreescribirlo no lo hace, ni borra, ni lo reescribe. Ademas no parece generar ningun error  ???
Según la documentación que he consultado hay que borrarlo y a continuación grabarlo de nuevo. Pero no estoy consiguiendo borrarlo.

Gracias por las respuestas, seguiré estrujando un poco las meninges a ver si doy con ello  :)

6
Programación / Re:Borrado de un fichero en disco
« en: Enero 27, 2019, 13:49:54 »

Citar
Donde lo pruebas en VICE ? en una 1541 real ? en un SD2IEC ?
Lo estoy probando con el VICE

7
Programación / Borrado de un fichero en disco
« en: Enero 27, 2019, 11:53:15 »
Hola buenas a todos!

Estoy intentando integrar un grabación de records en disco, pero estoy teniendo problemas.
El caso es que para la grabación del fichero sin que exista anteriormente funciona correctamente. El problema viene cuando hay que reemplazar este fichero con uno nuevo.
El codigo que estoy usando lo he sacado de este link:
https://www.lemon64.com/forum/viewtopic.php?t=64677&sid=3b6de77b5fde4e3f9c6b0ad214ad5ea6

Usa las funciones del Kernal para grabar/cargar el fichero desde el disco.

Este el código (realmente es la parte que falla, la que llaman scratch):
Código: [Seleccionar]
.const file_start = $25a6    // Inicio datos C64
.const file_end   = $25b2
 
// most likely errors:
// a = $05 (device not present)
// a = $04 (file not found)
// a = $1d (load error)
// a = $00 (break, run/stop has been pressed during loading)

//Constantes del kernal
.const K_close           = $ffc3
.const K_open            = $ffc0
.const K_setnam          = $ffbd
.const K_setlfs          = $ffba
.const K_clrchn          = $ffcc
.const K_load            = $ffd5
.const K_save            = $ffd8
.const temp1             = $c1
.const temp2             = $c2

scratch:         
.text "S0:"
fname:
.text "RECORDS"
fname_end:
lastDevice:
.byte 8                  // Range 8-11

saveData:       
jsr loadprepare

// ** SCRATCH OLD FILE **
lda #$0f                // Logical
    ldy #$0f                // Secondary
    jsr loadsetlfs2
lda #fname_end-scratch
    ldx #<scratch           // XY ptr
    ldy #>scratch 
    jsr K_setnam
    jsr K_open
    bcc noError2
    sta errorLevel
    inc ioError
noError2:
    lda #$0f                // Logical
    jsr K_close
    jsr K_clrchn

jsr cargaMiZp
     
    lda #$35 //desactivacion de las funciones Kernal
    sta $01
   
   
    lda #$01
    sta $d01a      //turn on raster irq.
    cli
    rts

// Prepare hardware for IO operation
loadprepare:
     sei                     // Disable IRQ

lda #0
sta $d01a //turn off raster irq.
     
     jsr grabaMiZp
     jsr cargaZp
     
     lda #$36                // Kernal on
     sta $01
     lda #0                  // Reset rs 232
     sta $02a1
     sta $d404               // Sid silent
     sta $d404+7
     sta $d404+14
     sta $9d                 // Disable KERNAL messages
     sta ioError             // Clear error return flag
     rts

loadsetlfs:
      lda #$01                // Logical
      ldy #$00                // Secondary
loadsetlfs2:
      ldx lastDevice
      jmp K_setlfs

Cuando se ejecuta este código, no aparecen errores en las variables ioError/errorLevel. Por eso tampoco sé lo que se está haciendo mal  :(

He estado comprobando otra pagina de referencia para comandos del DOS:
https://en.wikipedia.org/wiki/Commodore_DOS
Y parece que para el borrado de fichero se usa el comando:
Código: [Seleccionar]
OPEN 15,8,15,"S0:file name":CLOSE 15que creo que es el se está usando en el código.

Alguien puede echarme una manilla con esto.
Gracias de antemano.

8
General / Re:Nuevos juegos publicados
« en: Enero 07, 2019, 13:33:55 »
Buenas a todos

Citar
@darro99 A mí no me engañáis, esto lo habéis hecho pa lucimiento de @Narciso

Esto ha sido una oscura y oculta conspiración para traernos a nuestro terreno a un nuevo fichaje.  ;)
Ya en serio, ha sido un completo honor trabajar con @Narciso teniendo en cuenta que yo un novato en estos tortuosos caminos de crear videojuegos para el C64.

Citar
armas especiales? Power Ups? :)

Pues no hay previsto nada de esto.  :-[

Citar
Contaros algo de este juego, que sois los perpetradores! especialmente Errazking que parece ser el autor intelectual :P

Os cuento un poco la historia de este juego...
@Errazking me hablo de este juego cuando estaba finalizando Sky Diving. Me mando una documentación del mismo, charset y los sprites. Este juego está pensado para los torneos que se realizan en Explora Commodore, en un principio solo para dos jugadores, basado en las 'guerras ochobiteras'  :P.
A mi la idea me pareció genial, pero no quedaba tiempo, el evento del Explora era en un mes escaso y mi tiempo también es escaso...  :-\
Además me di cuenta que el charset era gigantesco, mas de 300 caracteres para todos los escenarios. Los sprites eran por superposición y había que hacer espejo de los mismos. No tenia ni idea de como hacerlo y lleva tiempo adaptar las cosas. Tampoco he pasado un buen momento familiar y el desarrollo se ha hecho muy cuesta arriba. Sobretodo con los gigantescos charset del amigo Igor. Que he tenido que reordenar uno a uno, para separarlos en dos y pudiera mostrarlos a la vez en pantalla, si hay dos charset que se muestran juntos en cada frame.
Al final ya casi tenia el juego preparado, pero Igor me comento que había que hacer una versión para un jugador, al principio no pensaba hacerla, pues sinceramente se me había atragantado un poco el dichoso juego y no me apeticía mucho seguir con él. Supongo que por eso hay dos programas para uno y dos jugadores, no todo en el mismo...  ::) también por un tema de espacio.
Pero bueno al final he hecho la versión de un jugador. Todo esto desde el mes de Abril hasta Diciembre, con el handicap de no tener musica, ni efectos. Al final pensaba coger una cancion de HVCS y pedir permiso al autor como hice en Rowman. Pero hete aquí @PacoBlog64 me comento de la llegada al foro de @Narciso . La verdad pensaba que no me iba a hacer mucho caso en el tema de componer música para un juego tan amateur. Pero al contrario ha sido un placer de colaboración que me gustaría que se repitiera en el futuro.

Espero haber satisfecho vuestra curiosidad.  ;D

9
Programación / Re:Música del 4M Arena
« en: Diciembre 26, 2018, 16:27:55 »
Citar
Y del juego se puede saber algo?  ;D

Esperamos que para principios del año que viene publiquemos una demo.   ;)

10
Programación / Re:Goattracker y efectos de sonido
« en: Diciembre 17, 2018, 20:10:47 »
Buenas a todos!

Citar
Bueno, pues ya está arreglado el problema. Simplemente era exportar el SID indicando en las opciones del GoatTracker que se habilitan los Fx´s sonoros y listo.

Efectivamente  ;D con esta opción funciona correctamente!

Lo curioso es que con la dirección $1006 del player del KickAssembler funciona correctamente, aunque la 'decompilación' no me convencía  ???

Tendré que diseccionar un poco mas el código para ver que es lo que se está haciendo realmente con los registros del SID.

Gracias a todos por la ideas y las soluciones!  ;D

11
Programación / Re:Goattracker y efectos de sonido
« en: Diciembre 15, 2018, 12:33:08 »
Buenas de nuevo

Me temo que no termino de hacerlo funcionar.   :(

He comprobado el codigo del enlace: https://www.lemon64.com/forum/viewtopic.php?t=67111&sid=d919c9025323fc98a6b0aa5318fb17fb

Creo que entiendo lo que quiere decir el código quedaría tal que así (o eso creo):
Código: [Seleccionar]
lda #<SFX_Step
ldy #>SFX_Step
ldx #14
jsr music + 6

El caso es que el player esta situado a partir de la dirección $1000 (music) y parece ser que en la $1006 (music) es donde debería de estar la función para estos casos. Pero no me termina de convencer, he decompilado esta parte y no parece que haga mucho caso a lo que se carga anteriormente en los registros:

Código: [Seleccionar]
LDA $152F,Y
JMP $1013
TAY
LDA #$00
STA $1399,X
TYA
$1013 
STA $1370,X
LDA $135F,X
STA $136F,X
RTS

A esta función no sé tampoco cuando debo de llamarla. Si a la vez que se llama al play ($1000) de la canción principal o por el contrario una vez y sonara el efecto especial.

De todas formas seguiré investigando, a ver si consigo sacar algo en claro, por que ahora mismo ando muy despistado  :-\

12
Programación / Re:Goattracker y efectos de sonido
« en: Diciembre 12, 2018, 17:38:13 »
Buenas!
Me temo que en el KickAssambler no funciona de esta manera:

Código: [Seleccionar]
Llda #<fx_light_hit       ;Address in A,Y
ldy #>fx_light_hit
ldx #$0e                        ;Channel index in X (0, 7 or 14)
jsr MUSIC_PLAYBACK+3

Ya que el propio compilador te proporciona un player.
El caso que tienes que cargar el sid:
Código: [Seleccionar]
.var music = LoadSid("musics.sid")
.pc=music.location "Music"
.fill music.size, music.getData(i)

A continuación elegir la canción con el valor del acumulador e 'iniciar' el player:
Código: [Seleccionar]
lda #0
jsr music.init

Y por ultimo en la irq elegida hacer que toque con:
Código: [Seleccionar]
jsr music.play
Aquí es donde viene mi problema, no se si habrá que añadir al fichero sid los efectos de sonido al final (o como una canción mas) y 'tocarlos' seleccionándolos, o por el contrario hay que cargarlos de alguna forma para que luego el player pueda ejecutarlos.

Alguien me puede aclarar estas dudas?

13
Programación / Re:Problemas con scroll suave a toda pantalla
« en: Noviembre 29, 2018, 18:00:27 »
Buenas a todos!
He estado leyendo el tema del scroll. Hace tiempo estuve liado con ello, el problema que tenía es que no iba lo suficientemente rápido y opte por un scroll a lo 'bestia' que es el que esta implementado en Sky Diving...
Pero me desvío del tema. He estado revisando 'viejos' códigos de scroll a través del VIC y he visto que lo hago es mover los caracteres con  los registros del VIC, mientras en la una pantalla 'oculta' muevo en dos veces los bloques de datos para que cuando termine el movimiento por hardware se haga el swap entre pantallas. Todo ello sincronozándolo con el raster de la pantalla.
Espero que os sirva como idea.

Por cierto Rulas, nos vimos en el ultimo RetroMadrid pero apenas pudimos hablar... Lo siento :( a ver si quedamos delante de unas cervecitas (al menos invito a la primera ronda :D) y hablamos de codificación.

Salu2 a todos!!!

14
Off-topic / Re:Hola. Soy Narciso. Un placer estar aquí.
« en: Noviembre 28, 2018, 16:29:39 »
Hola Narciso, y bienvenido!
Encantado de que alguien con esta gran trayectoria en los 8 y 16 bits se encuentre por aquí.
Veo que tienes grandes e interesantes historias que contar.

Para el C64 en concreto no. Mas de una vez me han entrado ganas para hacer cosas nuevas con el DMC, pero me ha faltado motivación. Lo mismo si alguien hace una intro, demo o lo que sea nuevo para el C64, estaría encantado de volver a experimentar la sensación de hacer cosas nuevas y poder participar en ello.
Al hilo de la cita. Te interesaría participar revitalizando la música para un nuevo juego de C64 que estamos desarrollando?

15
General / Re:Nuevos juegos publicados
« en: Mayo 28, 2018, 10:29:30 »
Buenos días!!!

Aquí os dejo nuevo juego para Commodore 64 Sky Diving


Link de descarga:
https://csdb.dk/release/?id=165026

Espero que lo disfrutéis!!!  ;D

Páginas: [1] 2 3