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

Páginas: [1] 2 3 ... 25
1
Ensamblador / Re:Rutinas de ensamblador con Laddh
« en: Mayo 03, 2024, 17:28:07 »
Próximo capítulo: que el sprite pase los X > 255

Nos centraremos solo en esto porque lo merece. Al empezar a programar con sprites siempre nos encontraremos con este problema, en un byte solo caben valores de 0 a 255 pero en la pantalla visible se llega hasta la coordenada 346 x en horizontal. Para acceder a esa parte derecha de la pantalla hay que activar el bit correspondiente a cada sprite en el registro $d010, lda #1 sta $d010 para el sprite 0 por ejemplo, y señalar su nueva posición X volviendo a escribir 0 en su coordenada X, o sea 0=256, 1=257, etc, si seguimos avanzando hacia la derecha hasta 96 máximo que ya se saldría de la pantalla.
Y a la inversa si volvemos a la izquierda, habría que poner a 0 el bit correspondiente en el registro $d010 para que nos lo muestre en la parte izquierda de la pantalla, o sea, desactivar registro y poner el valor 255 en la coordenada X del sprite.
Esto es fácil de hacer con un sprite pero se complica cuando estas moviendo los 8 sprites por la pantalla, comprobar todas las posibles combinaciones de si están en el lado derecho o el izquierdo es arduo y farragoso si lo compruebas sprite por sprite, pero no hace mucho encontré una rutina de como lo controla el Richard Bayliss/TND en su excelente tutorial de Assemble it en https://tnd64.unikat.sk/ y es la rutina Expande que añadiremos a nuestro programa, con solo 11 mnemónicos, niquelao, ver para creer.
Ejecutar el programa y analizar la rutina en el listado, con esas simples líneas controla los 8 sprites, estén o no en pantalla en todo momento, lo que hace es crear unas variables spritepos para las coordenadas X,Y de los 8 sprites que estan al final del listado, y en la rutina EXPANDE las convierte a coordenadas hardware. Simple y efectivo. 
He añadido una rutina SpritesWave para que veáis como se mueven todos los sprites por pantalla.

Código: [Seleccionar]
; 10 SYS (2064) línea para que autoarranque el programa

*=$0801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $32, $30, $36, $34, $29, $00, $00, $00

*=$0810 ;inicio del programa

v = $d000       ;variable que apunta al chip VIC, el que gestiona todo lo gráfico


        jsr musica      ;llama a rutina música por interrupciones
        jsr sprites     ;llamamos a la rutina para presentar el sprite en pantalla
loop    jsr raster_wait ;sin esto no veríamos nada, el código máquina es raaaaaapido               
        jsr PlayerControl ;la rutina para controlar el joystick
        jsr expande     ;controla msb de los sprites, > o < de 255 x
        jmp loop        ;vuelve al bucle principal


expande  ldx #$00       ;posición msb de los sprites
xloop    lda spritepos+1,x
         sta $d001,x
         lda spritepos,x
         asl        ;x position is more
         ror $d010  ;than 256 pixels
         sta $d000,x
         inx
         inx
         cpx #16
         bne xloop
         rts

SpritesWave
        lda contador
        tax
        inc contador

        lda tabla,x
        sta spritepos+4
        lda tabla+$100,x
        sta spritepos+5

        lda tabla,x
        sec
        sbc #10
        sta spritepos+6
        lda tabla+$100,x
        sta spritepos+7

        lda tabla,x
        sec
        sbc #20
        sta spritepos+8
        lda tabla+$100,x
        sta spritepos+9

        lda tabla,x
        sec
        sbc #30
        sta spritepos+2
        lda tabla+$100,x
        sta spritepos+3

        lda tabla,x
        sec
        sbc #40
        sta spritepos+10
        lda tabla+$100,x
        sta spritepos+11

        lda tabla,x
        sec
        sbc #50
        sta spritepos+12
        lda tabla+$100,x
        sta spritepos+13

        lda tabla,x
        sec
        sbc #60
        sta spritepos+14
        lda tabla+$100,x
        sta spritepos+15

        rts

MUSICA    sei
          lda #<irq
          ldx #>irq
          sta $314
          stx $315
          lda #$00
          JSR $1000     ;INITIALIZE MUSIC
          cli
          RTS

irq       lda #$01
          STA $D019     ; ACK ANY RASTER IRQS
          JSR $1003     ;PLAY THE MUSIC
          jsr SpritesWave
          jmp $ea31


PlayerControl
        LDA $DC00   ;LEEMOS JOY
        AND #31     ;LA CUATRO DIRECCIONES ARRIBA ABAJO IZQ DER   
        CMP #30     ;MAS DIAGONALES Y FUEGO
        BEQ ARR
        CMP #29
        BEQ ABJ
        CMP #27
        BEQ IZQ
        CMP #23
        BEQ DER
        cmp #22
        beq derar
        cmp #21
        beq derab
        CMP #25
        BEQ IZQab
        CMP #26
        BEQ IZQar
        cmp #15
        beq fuego
        rts

arr     dec spritepos+1 ;coordenada vertical del sprite 0
        rts
abj     inc spritepos+1
        rts
izq     dec spritepos   ;coordenada horizontal del sprite 0
        rts
der     inc spritepos
        rts
derar   inc spritepos
        dec spritepos+1
        rts
derab   inc spritepos
        inc spritepos+1
        rts
izqab   dec spritepos
        inc spritepos+1
        rts
izqar   dec spritepos
        dec spritepos+1
        rts
fuego   inc $d020       ;cambia color del borde pantalla
        rts

raster_wait             ;espera línea raster 255, el raster pasa 50 veces por segundo
l       LDA #$ff        ;en pantalla
        CMP $D012
        BNE l
        BIT $d011
        BMI l
        rts

*=2368  ; la forma del sprite
 byte 9,86,0
 byte 37,86,0
 byte 149,86,0
 byte 85,86,0
 byte 85,170,170
 byte 86,37,86
 byte 86,37,86
 byte 86,37,86
 byte 86,37,90
 byte 86,42,168
 byte 86,42,168
 byte 86,47,250
 byte 86,47,254
 byte 86,47,254
 byte 86,47,254
 byte 86,42,170
 byte 85,170,0
 byte 85,86,0
 byte 149,86,0
 byte 37,86,0
 byte 9,86,0

sprites lda #255
        sta v+21        ;activamos todos los sprites
        sta v+28        ;activamos modo multicolor del sprite 0
        lda #37         ;puntero para indicar donde estan los datos del sprite, 37*64=2368
        sta 2040
        sta 2041
        sta 2042
        sta 2043
        sta 2044
        sta 2045
        sta 2046
        sta 2048
        lda #1          ;color sprites
        sta v+39
        lda #9          ;color sprites
        sta v+40
        lda #3          ;color sprites
        sta v+41
        lda #4          ;color sprites
        sta v+42
        lda #5          ;color sprites
        sta v+43
        lda #6          ;color sprites
        sta v+44
        lda #7          ;color sprites
        sta v+45
        lda #8          ;color sprites
        sta v+46

        lda #14         ;color multicolor 1, para todos los sprites
        sta v+37
        lda #2          ;color multicolor 2, para todos los sprites
        sta v+38
        lda #100        ;coordenadas x,y del sprite 0
        sta spritepos
        sta spritepos+1
        rts

*=$1000
incbin"commodore_64.sid",126

contador        byte 0

spritepos       BYTE $00,$00 ;SPRITE 0 X/Y
                BYTE $00,$00 ;SPRITE 1 X/Y
                BYTE $00,$00 ;SPRITE 2 X/Y
                BYTE $00,$00 ;SPRITE 3 X/Y
                BYTE $00,$00 ;SPRITE 4 X/Y
                BYTE $00,$00 ;SPRITE 5 X/Y
                BYTE $00,$00 ;SPRITE 6 X/Y
                BYTE $00,$00 ;SPRITE 7 X/Y

tabla     BYTE $B6,$B6,$B6,$B6,$B3,$B0,$AD,$AA,$A7,$A4,$A1,$9E,$9B,$98,$95,$92,$8F,$8C
          BYTE $89,$86,$83,$80,$7D,$7A,$77,$74,$71,$6E,$6B,$68,$65,$62,$5F,$5C,$59,$56,$53,$50
          BYTE $4D,$4A,$47,$44,$41,$3E,$3B,$38,$35,$32,$2F,$2C,$29,$26,$23,$20,$1D,$1A,$17,$14
          BYTE $11,$0E,$0B,$08,$05,$02,$FF,$FC,$F9,$F6,$FC,$FC,$FC,$FF,$02,$05,$08,$0B,$0E,$11
          BYTE $14,$17,$1A,$1D,$20,$23,$26,$29,$2C,$2F,$32,$35,$38,$3B,$3E,$41,$44,$47,$4A,$4D
          BYTE $50,$53,$56,$59,$5C,$5F,$62,$65,$68,$6B,$6E,$71,$74,$77,$7A,$7D,$80,$83,$86,$89
          BYTE $8C,$8F,$92,$95,$98,$9B,$9E,$A1,$A4,$A7,$AA,$AD,$B0,$B3,$B6,$B6,$B9,$B9,$B9,$B9
          BYTE $B9,$B9,$B6,$B3,$B0,$AD,$AA,$A7,$A4,$A1,$9E,$9B,$98,$95,$92,$8F,$8C,$89,$86,$83
          BYTE $80,$7D,$7A,$77,$74,$71,$6E,$6B,$68,$65,$62,$5F,$5C,$59,$56,$53,$50,$4D,$4A,$47
          BYTE $44,$41,$3E,$3B,$38,$35,$32,$2F,$2C,$29,$26,$23,$20,$1D,$1A,$17,$14,$11,$0E,$0B
          BYTE $08,$05,$02,$FF,$FC,$F9,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6
          BYTE $F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6
          BYTE $F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$F6,$E6,$36,$36
          BYTE $36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36
          BYTE $36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36
          BYTE $36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36,$36
          BYTE $36,$36,$36,$36,$36,$36,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72
          BYTE $72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72
          BYTE $72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72
          BYTE $72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$72,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4
          BYTE $B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$B4,$5A

Excelente explicación, simplemente añadir que la posición x=0 para los sprites está 24 píxeles a la izquierda del 0 de los caracteres, esto es así para poder hacer que un sprite aparezca píxel a píxel por el margen izquierdo, desde detrás del borde. Por ejemplo, si tienes el registro $d010 a 0 y pones $d000 (posición x del primer sprite) a 0 y $d001 (posición y del primer sprite) a 100 , el sprite no se verá porque quedará detrás del borde izquierdo. La última posición en la que puedes poner un sprite por la derecha es la que indicas por lo mismo, para poder esconderlo total o parcialmente en el borde derecho.

2
Ensamblador / Re:Rutinas de ensamblador con Laddh
« en: Abril 29, 2024, 16:30:33 »
Yo tengo entendido que un SID no es solo los datos de la música sino también su propio "player". Pero hasta ahí llegan mis conocimientos.

Es algo así, @Narcisound lo controla bastante, dicen  ;D ;D ;D Cuando haces la música en un tracker como GoatTracker, al pasarla a SID la conviertes en un programa que te permitirá reproducirla desde otro, con su dirección inicial y otras para controlar volúmenes o efectos, pero luego no puedes convertir un fichero SID en un fichero en formato tracker para modificarlo y volver a pasarlo a SID, porque lo que tiene un fichero SID es código en ensamblador, no las propias notas.

3
Ensamblador / Re:Rutinas de ensamblador con Laddh
« en: Abril 20, 2024, 11:28:24 »
Excelente iniciativa, a ver si más gente se anima a programar en ensamblador de C64.

4
General / Re:Revistas Actuales
« en: Febrero 26, 2024, 16:09:20 »
Ya ha sacado otro número.

Gracias por el aviso, Javi.

5
Alex64 / Re:Envíanos la foto de tu ordenador.
« en: Enero 07, 2024, 12:18:05 »
Si no es mucha indiscreción, ¿cuánto te ha costado en total ensamblar este A500++?

6
Alex64 / Re:1942
« en: Enero 06, 2024, 13:45:53 »
Primeras y últimas partidas a un juego que tiene muchas de las cosas que detesto en un shooter... He seguido el consejo de un usuario de Lemon64 y me he puesto a la derecha para durar algo más, pero no es divertido y no siempre funciona.

Enviado desde mi SM-A505FN mediante Tapatalk


7
General / Re:The Secret of Monkey Island
« en: Diciembre 14, 2023, 16:16:10 »
Acabo de probarlo y a ver cómo lo digo suavemente, me recuerda a esos juegos para CPC que en pantalla estática son preciosos pero luego no tienen jugabilidad o son lentísimos. En Csdb dicen que lo han hecho con un maker llamado D42 (https://www.protovision.games/games/d42.php?language=en) diseñado más para aventuras estilo conversacional, pero con menús para elegir acciones, objetos y personas sobre las que ejecutarlas. No tiene SCUMM ni nada que se le parezca, no es un Caren and the Tangled Tentacles ni remotamente se le parece. Y los tiempos de carga son lentos. No sé si llegarás a disfrutarlo, @Bieno  :-\

8
General / Re:El Árbol Pixelado
« en: Diciembre 02, 2023, 11:57:09 »
En casa no ponemos el árbol de navidad hasta que @josepzin no pone el de Commodoremanía  ;D ;D ;D

9
Alex64 / Re:Randoom
« en: Noviembre 20, 2023, 16:46:20 »
Muchas gracias a todos por haberos dejado las retinas en el juego, espero que no os queden secuelas físicas o mentales. Y recordad, Dillinger volverá para vengarse  :-P

Gracias a ti por hacerlo y al maestro @Narcisound por el musicote, me lo he pasado muy bien volviendo a jugarlo. Por cierto, ayer mientras lo jugaba pensaba que de haber salido en los 80 como recreativa, lo habría petado...

10
Alex64 / Re:Randoom
« en: Noviembre 19, 2023, 18:29:50 »
Pues hasta aquí he llegado hoy, espero subir un poco en la tabla...

Enviado desde mi SM-A505FN mediante Tapatalk


11
Alex64 / Re:Randoom
« en: Noviembre 18, 2023, 19:38:15 »
Yep, por aquí mi humilde marcador tras darle un buen rato esta tarde... JUEGASO, HAY QUE DISIRLO MÁS

Enviado desde mi SM-A505FN mediante Tapatalk


12
Alex64 / Re:Rally Cross
« en: Octubre 17, 2023, 17:55:10 »
Felicidades Bieno y a disfrutar tu nuevo Bienomóvil!!!!

13
Juegos / Re:Los Smiths están muertos
« en: Octubre 09, 2023, 17:51:21 »
He añadido en Itch.io el mapa del juego y, para los que se queden atascados, en CASA he colgado las soluciones en los 3 idiomas. Usadlo solo para cuando os quedéis realemente atascados, sino pierde toda la gracia.

http://www.solutionarchive.com/list/author%2C4384/

Aprovecho para comentaros varias curiosidades sobre este lanzamiento:
El hecho de que sea sobre un grupo actual ha disparado todas las espectativas. he recibido muchas mails felicitándonos y sobretodo pidiéndome pistas o ayuda para seguir avanzando. Es fácil de entender ya que muchos de los que lo han jugado tiene poca u ninguna base en este tipo de juegos.
Lo mejor fue un grupo de 3 chicas chinas residentes en Australia y que tiene entradas para el próximo concierto de Morrissey. Lo bueno es que cada una de ellas se lo ha acabado con una puntuación diferente, 90, 95 y 100%
La otra es que Amigastore me ha pedido por 3ª vez mas cartuchos y en nuestro Itch.io hemos doblado las cifras en 1 semana
Gracias a todos los que jugáis nuestras aventuras.

Alguien de vosotros de la ha acabado? Sin pistas, claro.

Enhorabuena por el merecido éxito Bieno, aquí uno que se lo pasó en una tarde sin pistas, haciéndome un mapa en papel, como toca. Ahora quiero ir a por el de Los 3 investigadores y también El prisionero, ahora que tiene dibujitos  ;D ;D ;D

14
Presentaciones / Re:Hola gente!! 😉
« en: Agosto 13, 2023, 12:56:36 »
Hola Raúl,
Bienvenido al foro. No hagas caso a Álex, aunque aquí somos mayoritariamente de C64, tratamos temas relacionados con cualquier sistema Commodore ;) Muy cierto lo del Amiga y el Genlock, siempre a otro nivel. En su día yo también me construí una recreativa desde cero aunque no le puse monedero, lo documenté todo en otro blog que tengo, por si quieres pegarle un vistazo: http://pakorock.blogspot.com/2012/11/

Saludos y nos leemos por aquí.

15
Alex64 / Re:Torneo veraniego de golf
« en: Agosto 12, 2023, 20:47:51 »
Bueno, pues aquí mi puntuación final, bajo de 74 a 47 golpes, no hay nada como leerse el manual antes de jugar XDDDD He intentado lo que decía Wizard de darle con el pie pero nada...

Enviado desde mi SM-A505FN mediante Tapatalk


Páginas: [1] 2 3 ... 25