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:

3 respuestas a «Screen 5 y los bitmaps en basic»

Me ha encantado. Mis más sinceras felicitaciones. Me encantaría tener más información sobre el MSX.

Deja una respuesta

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