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

Páginas: [1] 2 3 ... 20
1
Felicidades a Dozznar y equipo!, y a todos los que han participado, ánimo y a seguir creando estas pequeñas joyas para nuestra querido commodore64.

2
Ah! en cuanto a lo del espacio vacío entre una cosa y otra, no hay problema, se que lo voy a llenar!

3
Buuuffff! Que porrón de información..., tengo que releerme con tranquilidad todo el hilo y ver si lo puedo ir aplicando.
Gracias  @SingletonJohn, de verdad, tengo entretenimiento para rato  ;)

4
Je, te me has adelantado, te estaba escribiendo esto:

Te he aislado el programa solo con la parte que concierne al scroll para clarificar mejor.
Las rutinas importantes son las Bigmap, que escriben la pantalla entera en $4400 o $6400 (trabajo con el banco 1) después del scroll por hardware y a la de color.
Con el JOY 2 te mueves izq y der.
En $a000 esta en mapa de 4 pantallas de chars creado con el charpad y en $b000 el mapa de color, en $7000 los chars.
Código: [Seleccionar]
; 10 SYS (2064)

*=$0801

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

*=$0810

zp=$f9
zs=$fb
screen=$4400
screen2=$6400
maptab=$a000

zpc=$f7
zc=$fd
colortab=$b000
color=$d800

screen_control_register1 = $d011
screen_control_register2 = $d016


        lda 1   ;quita el basic
        and #%11111110
        sta 1

        jsr PANCHAR
        jsr pantalla
        jsr int

init    jsr bigmap1
        jsr bigmap2
        LDA $D018
        AND #15
        ORA #144  ;POSICIÓN PANTALLA DENTRO DEL BANCO1 $6400
        STA $D018

        LDA screen_control_register2
        AND #$F7    ;38 columnas
        STA screen_control_register2

lg      jsr raster_wait ;Loop game
        jsr PlayerControl
        jmp lg

PlayerControl
                  lda #4      ;Read LEFT on joystick port 2
                  bit $dc00
                  bne NotDENLeft
        jsr right ;muevecajai

NotDENLeft                 
                  lda #8      ;Read RIGHT on joystick port 2
                  bit $dc00
                  bne NotDENRight
        jsr left ;muevecajad
NotDENRight   
      rts

bigmap1
        lda #<maptab
        sta zp 
        lda #>maptab
        sta zp+1

        lda #<colortab
        sta zpc 
        lda #>colortab
        sta zpc+1

fixcol  lda cornrx
        clc
        adc zp
        sta zp
        lda #0
        adc zp+1
        sta zp+1
       
        lda cornrx
        clc
        adc zpc
        sta zpc
        lda #0
        adc zpc+1
        sta zpc+1

        lda #<screen
        sta zs
        lda #>screen
        sta zs+1

        lda #<color
        sta zc
        lda #>color
        sta zc+1

        lda lines
        sta countr
storlp  ldy cols
inloop  lda (zp),y
        sta (zs),y

        lda (zpc),y
        sta (zc),y

        dey
        bpl inloop
           
        clc
        lda zp
        adc width
        sta zp
        lda #0
        adc zp+1
        sta zp+1
        clc
        lda zs
        adc #40
        sta zs
       
        clc
        lda zpc
        adc width
        sta zpc
        lda #0
        adc zpc+1
        sta zpc+1
        clc
        lda zc
        adc #40
        sta zc

        bcc fdg
        inc zs+1
        inc zc+1

fdg     dec countr
        bpl storlp

        rts

bigmap2
        lda #<maptab
        sta zp 
        lda #>maptab
        sta zp+1

        lda #<colortab
        sta zpc 
        lda #>colortab
        sta zpc+1

fixcol2  lda cornrx
        clc
        adc zp
        sta zp
        lda #0
        adc zp+1
        sta zp+1
       
        lda cornrx
        clc
        adc zpc
        sta zpc
        lda #0
        adc zpc+1
        sta zpc+1

        lda #<screen2
        sta zs
        lda #>screen2
        sta zs+1

        lda #<color
        sta zc
        lda #>color
        sta zc+1

        lda lines
        sta countr
storlp2  ldy cols
inloop2  lda (zp),y
        sta (zs),y

        lda (zpc),y
        sta (zc),y

        dey
        bpl inloop2
           
        clc
        lda zp
        adc width
        sta zp
        lda #0
        adc zp+1
        sta zp+1
        clc
        lda zs
        adc #40
        sta zs
       
        clc
        lda zpc
        adc width
        sta zpc
        lda #0
        adc zpc+1
        sta zpc+1
        clc
        lda zc
        adc #40
        sta zc

        bcc fdg2
        inc zs+1
        inc zc+1

fdg2     dec countr
        bpl storlp2

sale2   rts

left   
        ldx cornrx
        cpx maxx
        beq sale2
    LDX screen_offset
    DEX
    STX screen_offset
    CPX #$FF
    BEQ continue
    JMP end
continue
    LDX #$07
    STX screen_offset
        jsr move_rows_left
end     
    LDA screen_control_register2
    AND #$F8
    ORA screen_offset
    STA screen_control_register2
    rts

move_rows_left
        inc cornrx
        jsr swap_bigmap
        jsr swap_video
sale3   rts
screen_offset byte $07

right
        ldx cornrx
        beq sale3
    LDX screen_offset_r
    inx
    STX screen_offset_r
    CPX #8
    Beq continuer
    JMP endr
continuer
    LDX #$00
    STX screen_offset_r
        jsr move_rows_right
endr 
    LDA screen_control_register2
    AND #$F8
    ORA screen_offset_r
    STA screen_control_register2
@sal        rts

move_rows_right
        dec cornrx
        jsr swap_bigmap
        jsr swap_video
        rts
screen_offset_r byte $00

swap_video
        lda cp
        beq pantalla1
        bne pantalla2
        rts
pantalla1
        LDA $D018
        AND #15
        ORA #16  ;POSICIÓN PANTALLA DENTRO DEL BANCO1 $4400
        STA $D018
        lda #1
        sta cp
        rts
pantalla2
        LDA $D018
        AND #15
        ORA #144  ;POSICIÓN PANTALLA DENTRO DEL BANCO1 $6400
        STA $D018
        lda #0
        sta cp
        rts
cp      byte 0

swap_bigmap
        lda bm
        beq bm1
        bne bm2
        rts
bm1
        jsr bigmap1
        lda #1
        sta bm
        rts
bm2
        jsr bigmap2
        lda #0
        sta bm
        rts
bm      byte 0

raster_wait               ;espera línea raster
l         LDA  #$ff
          CMP  $D012
          BNE  l
          BIT  $d011
          BMI  l
          rts

PANCHAR   LDA  56578
          ORA  #3        ;PREPARAMOS PARA SELECCIONAR EL @@@
          STA  56578
          LDA  56576
          AND  #252
          ORA  #2        ; @@@ BANCO DE VIDEO 1 (16384)
          STA  56576
; COMO MEMORIA PANTALLA SE QUEDA EN SU POSICIÓN POR DEFECTO, NO LA CAMBIAMOS
;        LDA $D018
;        AND #15
;        ORA #16  ;POSICIÓN PANTALLA DENTRO DEL BANCO
;        STA $D018
; SI QUISIERAMOS EL CURSOR
;        LDA #68 ;CURSOR PANTALLA EN BANCO 1
;        STA 648

          LDA  $D018
          AND  #240      ;ESTABLECEMOS EL MODO CARACTER
          ORA  #12       ;BUSCA CARACTERES A PARTIR DE 12288 + DIR BANCO 1
          STA  $D018
;        LDA $D016
;        ORA #16  ;MODO CARACTER MULTICOLOR
;        STA $D016
         RTS

pantalla
        lda #11
        sta $d020
        sta $d021
        lda #8
        sta $d022
        lda #10
        sta $d023
        rts

INT     sei
         lda #<n1
        sta $0314
        lda #>n1
        sta $0315
;        lda #$00
;        jsr $1000 ;Initialize music
         lda #$7f
         sta $dc0d
         sta $dd0d
 
         lda #$01  ;IRQ speeder
         sta $d01a
        cli
        RTS

N1      asl $d019 ; IRQ speeder again
        lda $dc0d
        sta $dd0d ; Stabilize CIA

;        jsr $1003;Play the music
        jmp $ea31 ;7e

width   byte 160
height  byte 22 ;25 normal total lineas pantalla vertical
lines   byte 21;22-1
cols    byte 39 ;40-1

cornrx  byte 0
cornry  byte 0
maxx    byte 120 ;160-40 total mapa x menos pantalla (40 carac)
maxy    byte 0   ;25-25 total mapa y menos pantalla (25 carac)
countr  byte 0
countr2  byte 0


*=$7000  ;28672 ;CARACTERES EN BANCO 1 (12288 + 16384)
incbin    "chars2.bin"

*=$a000
incbin"map.bin"
*=$b000
incbin"colormap.bin"

5
Hola, pues de lo que pregunté y los tiles aún no he llegado, primero tengo que acabar de pulir el scroll de un bigmap de 4 pantallas en horizontal que ya he conseguido que los chars los muestre bien pixel a pixel pero no se porque el color me falla y produce unos destellos, y eso que hago doble buffer y no apunto a la pantalla hasta que esta hecho, te pongo el .prg para que lo veas, es más fácil de ver que explicar.

6
No hay problema, ya hace tiempo me acostumbre a que el VIC apunte siempre al banco 1, así pongo los chars editados que necesite donde quiera dentro de ese banco

7
Pues muchas gracias, haré mis pinitos en cuanto a los tiles con tus indicaciones, aparte de seguir con lo que estaba, me has dado faena  ;D

8
El tema Tiles está tirado. EL C64 en modo "normal" está preparado para textos, luego puedes definir un juego de caracteres que sean los tiles del juego(256 diferentes simultáneos). La pantalla será entonces una matriz de 25*40 bytes (1000 bytes) y en cada uno de esos bytes te cabe un número entre 0 y 255, que es la posición del tile en el charset: posición 0->@, posición 1->A, etc ,etc...este número es el ScreenCode del Char

Es decir, aunque suene ANTINATURAL, para escribir una Z en la esquina zuperior izquierda de la pantalla tienes que pokear:Poke1024,154. La pantalla estándar está en $400->1024 y la Z es el screen code 154

Huumm, esto que explicas es para el manejo de chars normales, no? Los tiles son grupos de chars (2*2,3*3,etc) que es lo que aun no se aplicar

9
Vaya.., gracias por todas estas anotaciones, me las apunto y a ver si las puedo aplicar.
El tema tiles sigue siendo una de mis asignaturas pendientes, aún no ha caído en mis manos un source que me explique claro (no soy bueno con la teoría, solo aprendo cuando veo un ejemplo práctico que expone y se ve lo que hace)
Voy con la "peleilla"  ;)

10
Ensamblador / Movimiento de sprites dentro de un scroll de chars
« en: Marzo 01, 2026, 19:23:33 »
Una pregunta a los coders del foro, os pongo en situación, tengo un mapa de 4 pantallas en horizontal, hago un scroll izquierda y derecha, y quiero poner sprites enemigos en diversas plataformas y la pregunta es como  sincronizas el movimiento de los sprites para que vaya acorde al movimiento de la pantalla ( se mantengan en su plataforma, desaparezcan cuando esa parte del mapa no este en pantalla, etc ).
Alguna teoría, algoritmo o ejemplos sobre el tema? He buscado y no encuentro nada.

11
Preservación / Re:The TAP PRGject
« en: Febrero 24, 2026, 18:23:27 »
Supongo que ya lo sabréis o lo imagináis, ya que no creo que nadie se imagine al Pedro Ruiz en el que todos pensamos programando un C64
Os dejo aquí el enlace a una entrevista con Pedro Ruiz, el programador: ;)

https://videojuegosretro-upm.blogspot.com/2018/02/entrevista-pedro-ruiz.html


Sí, ya  en este mismo hilo resolvimos el bulo con el mismo enlace ;)




12
Esto no te lo ofrecían los piratas en el mercado de sant antoni... ;D, debe ser eso seguro, mochila y complemento del programa que cargaría de diskette. Si el programador original sabe algo que lo diga!

13
Eventos / Re:Expo Coleccionismo y Maquetismo 2025 [C64 inside]
« en: Octubre 04, 2025, 10:49:30 »
Ufff! arrastrando teles de tubo todavía!!!
Buena feria!

14
General / Re:Commodore Plus
« en: Agosto 31, 2025, 11:10:32 »
Aaaah! gran tipo Alvy, que joyas nos dejó en Commodore World, en mí plantó la semilla de querer programar algún día, lo conseguí 30 años después...

15
Juegos / Re:Randoom Ancient Stones (Randoom 2), de Pícaro Games
« en: Julio 23, 2025, 11:32:10 »
Enhorabuena a todos chicos, jugable, bonito de ver y escuchar, muy buen trabajo!

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