Autor Tema: Dudas en Ensamblador  (Leído 166356 veces)

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #45 en: Junio 30, 2014, 14:55:51 »
 Se ve olvidad al ultima actualizacion para vice que os adjunto...

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #46 en: Junio 30, 2014, 19:01:51 »
He estado probando el tema de mostrar un char en multicolor y lo he conseguido,..he modificado las lineas que me dijiste Carlos y va bien:

LDA #$1B
STA $D011
LDA #$18
STA $D016

Los colores quedan configurados:

LDA #$00      
STA $D021     ; BACKGROUND COLOR 0  (FONDO DE PANTALLA)
LDA #$07         ; AMARILLO POR EJEMPLO
STA $D022     ; BACKGROUND COLOR 1
LDA #$08      ; NARANJA POR EJEMPLO
STA $D023     ; BACKGROUND COLOR 2

Hasta aqui todo bien, y se muestra en multicolor, pero no se como leches o en que posicion de memoria asigno el color del char, he prograbo todo pero nada

Os adjunto el listado vereis que la rutina que gestiona el modo texto esta entre las lineas 298-312

  Saludos

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #47 en: Junio 30, 2014, 19:03:08 »
El texto compilado quedaria y se mostraria el texto en color como se ve en el archivo que adjunto para vice,...el color del char no lo he configurado por ningun lado pero se me muestra en Azul por defecto,..supongamos que quiero que se vea en Blanco, no se como asignar el color del char.

   Chao

CPULoyal

  • Commodorista
  • ***
  • Mensajes: 56
  • SYS $FFED
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #48 en: Junio 30, 2014, 19:06:50 »
El modo multicolor es un poco menos directo que la asignación de los colores de fondo. Así que para poder tenerlo tienes que tomar en cuenta lo siguiente:

- En modo multicolor pierdes la mitad resolución horizontal, ya que se usan pares de bits para asignar los colores de los registros. Así tienes que los pares y sus asignaciones son de acuerdo a la siguiente tabla:

Par de Bits          Registro               Posición de Memoria
00                       Background 0      $D021
01                       Background 1      $D022
10                       Background 2      $D023
11                       Color de los 4      RAM de color
                           bits más bajos
                           de la memoria
                           de color.

Así como en modo Hires (modo normal de caracteres) tienes dos colores por cada carácter (el color de fondo y el de la memoria de color), en modo multicolor tienes a tu disposición 4 colores por cada carácter.

Sin embargo, tres de estos colores son comunes (de Background 0 al 2) ya que se asignan por los registros de memoria y el único independiente es el que se obtiene por la memoria de color.

Dame un poco de tiempo y más adelante te pondré un ejemplo de cómo queda el modo en ensamblador.

Saludos.
« última modificación: Junio 30, 2014, 19:54:41 por CPULoyal »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #49 en: Junio 30, 2014, 19:08:33 »
ahora que lo pienso, ¿a ver si es que me creo que dispongo de mas colores de los que son?,...¿de cuantos colores dispongo en modo Multicolor para un Char?

Me podriais explicar un poco las caracteristicas del Modo Texto Multicolor, que alomejor estoy dando palos de ciego, si no me equivoco la utilizacion de algunos colores esta limitada?

  Gracias.
« última modificación: Junio 30, 2014, 19:12:25 por R. INTERNATIONAL »

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13616
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #50 en: Junio 30, 2014, 19:35:45 »
El modo multicolor tiene sus paranoias :D

Por cada caracter te permite elegir un color distinto, luego tienes el color del fondo y finalmente tienes dos colores que son comunes a todo el juego de caracteres, algo parecido a los Sprites y sus colores comunes a todos.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #51 en: Junio 30, 2014, 20:06:21 »
 Me falta saber como configuro un color distinto para cada caracter, el color de fondo y los dos comunes ya se configurarlos.

  Saludos!

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13616
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #52 en: Junio 30, 2014, 20:12:05 »
Los colores comunes son dos registros (o uno)  tipo $D0NN, si nadie lo pone, luego me fijo y te digo. De todos modos si te fijas en alguna guía donde aparece qué es cada registro, te vas a dar cuenta fácil.
« última modificación: Junio 30, 2014, 20:15:16 por josepzin »
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

CPULoyal

  • Commodorista
  • ***
  • Mensajes: 56
  • SYS $FFED
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #53 en: Junio 30, 2014, 20:43:18 »
Me falta saber como configuro un color distinto para cada caracter, el color de fondo y los dos comunes ya se configurarlos.

  Saludos!

Ese color se asigna desde la memoria de color que tiene el carácter y se visualiza cuando el par de bits es 11.

Por ejemplo, digamos que tienes la letra A, cuya representación en la memoria de caracteres en binario es la siguiente:

00000000
00011000
00111100
01100110
01111110
01100110
01100110
00000000

En modo multicolor, el VIC ve la matriz así:

00 00 00 00
00 01 10 00
00 11 11 00
01 10 01 10
01 11 11 10
01 10 01 10
01 10 01 10
00 00 00 00

Tomando como referencia la tabla que escribí anteriormente los colores se asignarían así:

0000            0 - Background 0
0ae0            a - Background 1
0oo0            e - Background 2
aeae            1 - Memoria de color
aooe
aeae
aeae
0000


Saludos.
« última modificación: Junio 30, 2014, 21:15:55 por CPULoyal »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #54 en: Junio 30, 2014, 22:36:04 »
  Mientras se está dando un poco de luz acerca de como configurar el color de un char en modo Multicolor, como el diablo mata moscas cuando no sabe que hacer, le he hecho unos "adornos" al programa con las siguientes mejoras:

 - A espera de poder utilizar el color de char, he utilizado los dos que se y he mostrado las fuentes a dos colores,
 - Se ha Creado una mini Pantalla de Presentacion, desde la cual pulsando Fuego se accede al juego
 - En el Juego se muestra un Marcador Provisional
 - Tambien se muestra un fondo de estrellas

    Os lo adjunto en la respuesta, para darle cera en el Vice, los arreglos le dan "colorido".

  Saludos!

CPULoyal

  • Commodorista
  • ***
  • Mensajes: 56
  • SYS $FFED
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #55 en: Julio 04, 2014, 23:36:13 »
Bien, aquí está el ejemplo en ensamblador para configurar el modo multicolor de caracteres. Las definiciones de direcciones son para las condiciones de arranque, con la memoria de pantalla en $0400 (1024), la memoria de caracteres en $3000 (12288) y las definiciones de caracteres a partir de $C0A0 (49312)

Código: [Seleccionar]
c000  AD 0E DC    LDA $DC0E ;Accedemos a la memoria de caracteres
c003  29 FE       AND #$FE ;desconectando temporalmente interrupciones
c005  8D 0E DC    STA $DC0E ;y Kernal
c008  A5 01       LDA $01
c00a  29 FB       AND #$FB
c00c  85 01       STA $01
c00e  A0 00       LDY #$00 ;Hacemos una copia de los primeros 64 (512 bytes)
c010  A2 02       LDX #$02 ;caracteres desde $D000 a $3000
c012  F0 1E       BEQ $C032
c014  A9 00       LDA #$00
c016  85 FB       STA $FB
c018  A9 D0       LDA #$D0
c01a  85 FC       STA $FC
c01c  A9 00       LDA #$00
c01e  85 FD       STA $FD
c020  A9 30       LDA #$30
c022  85 FE       STA $FE
c024  B1 FB       LDA ($FB),Y
c026  91 FD       STA ($FD),Y
c028  C8          INY
c029  D0 F9       BNE $C024
c02b  E6 FC       INC $FC
c02d  E6 FE       INC $FE
c02f  CA          DEX
c030  D0 F2       BNE $C024
c032  A2 00       LDX #$00
c034  F0 08       BEQ $C03E
c036  B1 FB       LDA ($FB),Y
c038  91 FD       STA ($FD),Y
c03a  C8          INY
c03b  CA          DEX
c03c  D0 F8       BNE $C036
c03e  A5 01       LDA $01 ;Restauramos interrupciones y Kernal
c040  09 04       ORA #$04
c042  85 01       STA $01
c044  AD 0E DC    LDA $DC0E
c047  09 01       ORA #$01
c049  8D 0E DC    STA $DC0E
c04c  AD 18 D0    LDA $D018 ;Habilitamos la memoria de caracteres en
c04f  29 F0       AND #$F0 ;la dirección $3000
c051  09 0C       ORA #$0C
c053  8D 18 D0    STA $D018
Código: [Seleccionar]
c056  AD 16 D0    LDA $D016 ;Habilitamos modo multicolor
c059  09 10       ORA #$10
c05b  8D 16 D0    STA $D016
c05e  A9 00       LDA #$00 ;Color Background 0
c060  8D 21 D0    STA $D021
c063  A9 02       LDA #$02 ;Color Background 1
c065  8D 22 D0    STA $D022
c068  A9 07       LDA #$07 ;Color Background 2
c06a  8D 23 D0    STA $D023
c06d  A9 A0       LDA #$A0 ;Redefinimos los primeros 4 caracteres
c06f  85 FB       STA $FB ;del conjunto desde datos almacenados
c071  A9 C0       LDA #$C0 ;en la dirección $C0A0
c073  85 FC       STA $FC
c075  A9 00       LDA #$00
c077  85 FD       STA $FD
c079  A9 30       LDA #$30
c07b  85 FE       STA $FE
c07d  A0 00       LDY #$00
c07f  A2 20       LDX #$20
c081  B1 FB       LDA ($FB),Y
c083  91 FD       STA ($FD),Y
c085  C8          INY
c086  CA          DEX
c087  D0 F8       BNE $C081
c089  A9 00       LDA #$00
c08b  8D 00 04    STA $0400 ;Como ejemplo mostramos los caracteres
c08e  A9 01       LDA #$01 ;redefinidos en la dirección $0400
c090  8D 01 04    STA $0401 ;de la memoria de pantalla
c093  A9 02       LDA #$02
c095  8D 02 04    STA $0402
c098  A9 03       LDA #$03
c09a  8D 03 04    STA $0403
c09d  60          RTS
« última modificación: Julio 24, 2014, 17:41:10 por CPULoyal »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #56 en: Julio 05, 2014, 22:53:44 »
   Buff!!!,..madre mia, se ve super interesante, dame un poco de tiempo para "digerirlo"...seguro que tendre alguna duda que te dire por aquí.

       Mil Gracias CPULoyal!

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #57 en: Julio 06, 2014, 01:04:15 »
Por cierto: Laddh, Carlos, CPULoyal y cualquiera que quiera participar,...necesito que me mandeis a mi correo un Sprite en el que os representéis, diseñarlo con el Sprite Pad y será incluido en Caligula con la mayor brevedad posible en la Pantalla de Creditos como Coder Assistants

 Como ya se vio en los ultimos Proyectos (labyrinth y Xain) nos es licito acompañar a cada participante en la Pantalla de Creditos con el Nombre junto con una minima imagen conformada por un Sprite,..queremos seguir en ésta linea y aumentar el Equipo si cabe...

  Saludos!

  Sprites to: retrogamesystems(arrobo)gmal.com
« última modificación: Julio 06, 2014, 01:08:53 por R. INTERNATIONAL »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #58 en: Julio 06, 2014, 01:11:19 »
 Del tuyo Jose, me encargare Yo personalmente!!!,..ja,j,aj,aa,j

« última modificación: Julio 06, 2014, 01:14:01 por R. INTERNATIONAL »

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #59 en: Julio 06, 2014, 19:34:28 »
Tras el cambio del modo de video, la siguiente píldora y antes de meternos en temas de personalizar el juego de caracteres, es la relativa a como funciona el modo char multicolor. Ya lo han adelantado de uno u otro modo Laddh y CPULoyal, pero vuelvo a repetir la explicación:

En modo char multicolor, disponemos de caracteres de 4 colores pero a costa de perder resolución horizontal respecto al modo char hires, esta pérdida de resolución provoca lo que se conoce como "píxeles ladrillo".

Es el modo más utilizado en el C64, no sabría aventurar un porcentaje pero casi todos los juegos usan el modo char multicolor para construir los escenarios.

Aunque podemos usar 4 colores por char, hay ciertas restricciones:

- Uno de los colores (el screen color o color de fondo 0) es compartido por todos los chars. Se controla con el registro $d021 y también existe en el modo char hires.
- Los colores de fondo 1 y 2, también son compartidos por todos los chars. Se controlan con los registros $d022 y $d023 y sólo se utilizan en éste modo de video (en char hires no existen).
- El 4 color o color del carácter, es especifico de cada char, es decir, cada char puede tener el suyo. Se controla con el valor respectivo en la memoria de color ($d000 en adelante).

Un ejemplo, el Bruce Lee:


Se aprecian claramente los píxeles ladrillo especialmente en las cimas nevadas de las montañas, el hipopótamo o las lámparas.

En cuanto a los valores de los registros $d021, $d022 y $d023 son 12, 2 y 1, es decir, gris, rojo y blanco respectivamente. Estos son los colores compartidos, el resto de colores presentes (gris oscuro, azul oscuro, azul claro y negro) son el color de cada char específico presente en la memoria de color.

Una característica muy interesante de éste modo es que se pueden combinar en la misma pantalla caracteres en modo char multicolor con caracteres en modo char hires.



En esta pantalla del Navy Seals, la placa blanca con la flecha negra está en modo hires (se aprecia claramente que no son píxeles ladrillo) mientras que el resto del escenario es modo char multicolor. Seguro que hay ejemplos mejores, pero he puesto el primero que he recordado.