Categorías
Contacto MSX Basic

Screen 5 y los bitmaps en basic

Archivos: screen5_paisaje.zip screen5_personaje.zip

1 La paleta de colores, el RGB (Red, green, blue) y color=(entero_color, intensidad_R, intensidad_B, intensidad_G)

2 Retocando nuestra foto.

3.Set page entero_pagina_visualizacion_modificable, entero_pagina_activa_con_los_datos

4 COPY (coordenada_inicio_x, coordenada_inicio_y)-(coordenada_final_x. coordenada_final_y), entero_pagina TO (coordenada_x,coordena_y), entero_pagina

5 Copiando el circulo al disco.

6 Copiando el circulo del disco a la página 0 de la VRAM

7 Creando un personaje en la página 2.

La paleta de colores, el RGB (Red, green, blue) y color=(entero_color, intensidad_R, intensidad_B, intensidad_G)

Esta es la paleta de colores que viene por defecto en MSX1 y MSX2:

Estos colores se definen a través de una sintaxis RGB poniendo del 0 al , cuando tengamos que meterlos en la paleta tendremos que poner RB0G:

Cada color se define con 2 bytes (medio del 1 byte (4 bits) del 0 al 7 para la R, los otros 4 bits para la B y el 2 byte medio del segundo byte un 0 y el otro medio del segundo byte para la G ) de la siguiente forma RB0G,.

Vamos a ver la paleta de colores del MSX2 con el depurador de openmsx que está en la dirección &h7680 de la VRAM:

Con el comando color=(entero_color, intensidad_R, intensidad_G, intensidad_B) nosotros podemos cambiar el color de la paleta de colores.

Vamos a cambiar el color verde (la posición 2) en nuestra paleta de colores por otro cualquiera y vamos a pintar un cuadrado:

10 cls:screen 5
20 color=(2,5,2,2)
30 line (20,40)-(90,100),2,bf
40 goto 40


Ahora nuestro verde es marrón:

Retocando nuestra foto

Hay que obtener una foto cambiarle el tamaño a 256px y 212px y cambiarle la combinación de colores a colores indexados:

Me bajo una foto cualquiera de https://opengameart.org o de https://www.google.es/?&bih=888&biw=1920&hl=es pero ten cuidado que las imágenes de Google pueden tener derechos de autor

Abre la imagen con photshop y ve a Imagen ->Modo->Color indexado:

En la ventana que sale Selecciona A medida..(1) y pincha en Cargar para elegir el archivo “mapa de colores msx para Photoshop” que está en la carpeta assets de este proyecto(2) por último cargar (3):

Transforma la foto a 256px por 212px:

Selecciona la anterior y pegala aquí, ve a Edición-> Transformar libre y adáptala a las medidas de esta imagen:

Guardala como paisaje_indexado.jpg

Ve a la web: http://msx.jannone.org/conv/ y sube esta foto:

Descárgate la foto.sc5 y copia el código:

Fíjate lo que hace con la paleta, ahora entiendes porque te he explicado lo de la paleta? 😊

Añade el archivo PAISAJE_.SC5 a tu carpeta assets y ponlo en el archivo make.bat para que lo meta el diskmanager en el main.dsk:

Por último pega el código y ejecuta make.bat

Para poner la imagen en la segunda página (más adelante explicaré que es esto) ponemos la dirección &h8000 en el bload:

10 COLOR 1,15,15: SCREEN 5
20 DATA 0,0,0,1,1,1,1,2,1,2,2,3,2,4,2,3,4,3,3,5,2,4,3,4
30 DATA 4,4,3,5,3,3,3,4,5,6,4,2,5,4,5,3,5,6,5,6,6,6,6,5
40 FOR C=0 TO 15:READ R,G,B:COLOR=(C,R,G,B):NEXT
50 BLOAD"PAISAJE_.SC5",S,&H8000
1' Subrutina Mensaje
60 gosub 100

1' Subrutina cambio de pantalla y captura teclado
70 gosub 200
80 goto 70

1' subrutina mensaje pantalla
100 open "grp:" for output as #1
130 preset (10,10)
140 print #1, "Pulsa o para pantalla 0, p para pantalla 1"
150 return

1'Subrutina cambio de pantalla y captura de pantalla
200 'nada'
220 k$=inkey$
230 if k$="o" then set page 0
240 if k$="p" then set page 1
250 return



Set page entero_pagina_visualizacion_modificable, entero_pagina_activa_con_los_datos

Vamos a explicar como crear un circulo en la página 0 y un cuadrado en la 1

1' borramos la pantalla y le ponemos el modo screen 5
10 cls:screen 5
1'Así le decimos que la pagina 1 es donde vamos a escribir
20 set page 0,1
1' creamos wn la página 1 un cuadrado de color azul, bf quiere decir un rectangulo relleno de blanco
30 line (10,10)-(40,50),7,bf
1' Creamos en la página 0 un circulo
40 set page 1,0
1' En la coordena x 150 y coordenada y 100, de radio 20 (mediano), y color del borde 1 negro
50 circle (150,100),50,1
1' Rellenamos el circulo con el 2 verde, el 1 el negro
60 paint (150,100),2,1
1'Le dcimos que queremos ver la página 0
70 set page 0
1' Bucle infinito
90 goto 90


Al pinchar dentro del debugger de openMSX (si no sabes lo que es te remite a la entrada del blog http://msx.tipolisto.es/debugeando-o-depurar-ensamblador/) en View->VDP->bitmap VRAM nos saldrá esta ventana:

En la ventana que sale quitamos el aspa (1) para que podamos modificar los valores del VDP y elegimos la página 1 (2):

COPY (coordenada_inicio_x, coordenada_inicio_y)-(coordenada_final_x. coordenada_final_y), entero_pagina TO (coordenada_x,coordena_y), entero_pagina

Vamos a copiar el cuadrado a la página 0, línea 80

1' borramos la pantalla y le ponemos el modo screen 5
10 cls:screen 5
1'
20 set page 0,1
1' creamos wn la página 1 un cuadrado de color azul, bf quiere decir un rectangulo relleno de blanco
30 line (10,10)-(40,50),7,bf
1' Creamos en la página 0 un circulo
40 set page 1,0
1' En la coordena x 150 y coordenada y 100, de radio 20 (mediano), y color del borde 1 negro
50 circle (150,100),50,1
1' Rellenamos el circulo con el 2 verde, el 1 el negro
60 paint (150,100),2,1
1'Copiamos el cuadrado a la página 0
70 copy (10,10)-(40,50),1 to (10,10),0
1'Le dcimos que queremos ver la página 0
80 set page 0
1' Bucle infinito
90 goto 90



Copiando el circulo al disco

1' borramos la pantalla y le ponemos el modo screen 5
10 cls:screen 5
20 open "grp:" for output as #1
30 preset (10,10)
40 print #1,"Copiando pantalla..."
1' Creamos un circulo en las coordenadas x=500, y=100, de radio 50 (bastante grande), borde negro
50 circle (150,100),50,1
1' Rellenamos el circulo del color 2 verde y ponemos el borde negro
60 paint (150,100),2,1
1' copiamos el circulo de la página 0 (la que viene por defecto) al disco y le ponemos un nombre
70 copy (0,0)-(256,192), 0 to "circulo.raw"
80 preset (10,10)
90 print #1,"Circulo copiado!!!      "
100 goto 100



Ahora dentro del emulador presionamos Ctrl+f8 (la tecla stop en el MSX) que hará un break y saldrá al basic, dentro ponemos files:

Copiando el circulo del disco a la página 0 de la VRAM

1' borramos la pantalla y le ponemos el modo screen 5
10 cls:screen 5
20 open "grp:" for output as #1
30 preset (10,10)
40 print #1,"Copiando pantalla del disco..."
50 copy "circulo.raw" to (0,0),0
60 preset (10,10)
70 print #1,"Circulo copiado de disco..."
80 goto 80


Creando un personaje en la página 2

Nos descargamos  un personaje de internet y lo retocamos para que la imagen tenga 256px x212px de ancho, lo guardamos como personaje.jpg:

Lo convertimos a sc5 en la web http://msx.jannone.org/conv

Ahora pon la foto en la carpeta assets y añádela al discmanager en el make.bat:

Pon este código en main.bas:

10 COLOR 15,0,0: SCREEN 5
20 DATA 0,0,0,2,1,1,1,2,1,2,2,2,1,5,2,5,2,2,3,4,4,4,3,4
30 DATA 4,4,4,3,3,6,3,6,3,7,2,2,5,5,5,7,4,4,6,6,6,7,7,7
40 FOR C=0 TO 15:READ R,G,B:COLOR=(C,R,G,B):NEXT
50 BLOAD"PERSONAJ.SC5",S, &h8000
1' ancho y alto de la figura
60 let an=30: al=35
70 for i=0 to 7 
    81 copy (an*i,al)-(30+an*i,35+al),1 to (an,al),0
    1' retardo
    82 for r=0 to 300: next
90 next i
100 GOTO 70




Verás una secuencia de figuras:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *